0% encontró este documento útil (0 votos)
271 vistas347 páginas

Programacion Avanzada en Java

Programacion JAVA Avanzada
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
271 vistas347 páginas

Programacion Avanzada en Java

Programacion JAVA Avanzada
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Escribir Aplicaciones Avanzadas para la Plataforma

Java TM

Co m o d e s a rro lla d o r e xp e rim e n t a d o s o b re la p la t a fo rm a Ja va TM, in d u d a b le m e n t e


s a b e s lo rá p id o q u e e vo lu cio n a e s t a p la t a fo rm a . S u s m u ch o s In t e rfa ce s d e
Pro g ra m a ció n d e Ap lica cio n e s ( APIs ) p ro p o rcio n a n u n a g ra n ca n t id a d d e
fu n cio n a lid a d e s p a ra t o d o s lo s a s p e ct o s d e la p ro g ra m a ció n d e a p lica cio n e s y n ive l
d e s is t e m a . Lo s d e s a rro lla d o re s d e l m u n d o re a l n u n ca u s a n u n o o d o s APIs p a ra
re s o lve r u n p ro b le m a , s in o q u e ju n t a n la fu n cio n a lid a d cla ve d e la e xp a n s ió n d e
va rio s APIs . Co n o ce r lo s APIs q u e n e ce s it a s , q u é p a rt e d e e s o s APIs n e ce s it a s , y
co m o lo s APIs fu n cio n a n ju n t o s p a ra cre a r la m e jo r s o lu ció n p u e d e s e r u n a t a re a
in t im id a t o ria .
Pa ra a yu d a rt e a n a ve g a r p o r lo s APIs d e Ja va y a co rt a r e l t ie m p o d e d e s a rro llo d e
t u s p ro ye ct o s , e s t a s e cció n in clu ye la s fa s e s d e d is e ñ o , d e s a rro llo , p ru e b a y
d e s p lie g u e p a ra u n a a p lica ció n d e s u b a s t a s . Du ra n t e e s t a a p lica ció n d e e je m p lo , n o
cu b rire m o s ca d a p o s ib le e s ce n a rio d e p ro g ra m a ció n , e xp lo ra m u ch a s s it u a cio n e s
co m u n e s y la d is cu s ió n t e d e ja rá co n u n a m e t o d o lo g ía s ó lid a p a ra d is e ñ a r y
co n s t ru ir t u s p ro p ia s s o lu cio n e s .
Es t a s e cció n e s p a ra d e s a rro lla d o re s co n u n n ive l u n p o co a lt o d e e n t e n d im ie n t o d e
la e s crit u ra d e p ro g ra m a s Ja va . El e je m p lo e s t á e s crit o co n lo s APIs d e la
p la t a fo rm a Ja va ® 2 y e xp lica e n t é rm in o s d e fu n cio n a lid a d e l có m o y e l p o r q u é ,
p o r e s o , s i n e ce s it a s a yu d a p a ra in s t a la r la p la t a fo rm a Ja va , co n fig u ra r t u e n t o rn o ,
o co n s e g u ir q u e t u p rim e ra a p lica ció n fu n cio n e , p rim e ro d e b e ría s le e r la s s e ccio n e s
a n t e rio re s d e e s t e t u t o r. . .

Índice de Contenidos
● Co n co rd a r lo s Re q u e rim ie n t o s d e l Pro ye ct o co n la Te cn o lo g ía
❍ Re q u e rim ie n t o s d e l Pro ye ct o
❍ Ele g ir e l S o ft wa re
● La Ap lica ció n Ca s a d e S u b a s t a s
❍ Un a Ap lica ció n Mu lt i- Fila co n Ja va Be a n s
❍ Be a n s d e En t id a d y S e s ió n
❍ Exa m in a r u n Be a n d e Ma n e jo d e Co n t e n e d o r
❍ Mé t o d o s d e Bú s q u e d a d e Ma n e jo d e Co n t e n e d o r
● Ma n e jo d e Da t o s y Tra n s a cio n e s
❍ Pe rs is t e n cia d e l Be a n
❍ Ma n e ja r Tra n s a cio n e s
❍ Mé t o d o s d e Bú s q u e d a d e Ma n e jo d e l Be a n
● Cá lcu lo Dis t rib u id o
❍ S e rvicio s d e Bú s q u e d a
❍ RMI
❍ CORBA
❍ Te cn o lo g ía JDBC
❍ S e rve lt s
● Te cn o lo g ía JNI
❍ Eje m p lo s JNI
❍ S t rin g s y Arra ys
❍ Ot ro s Pro b le m a s d e Pro g ra m a ció n
● Pro ye ct o S win g : Co n s t ru ir u n In t e rfa ce d e Us u a rio
❍ Co m p o n e n t e s y Mo d e lo s d e Da t o s
❍ El API d e Im p re s ió n
❍ Im p re s ió n Ava n za d a
● De p u ra ció n d e Ap p le t s , Ap lica cio n e s y S e rvle t s
❍ Re co le cció n d e Evid e n cia s
❍ Eje cu t a r Te s t s y An a liza r
❍ De p u ra r S e rvle t s
❍ De p u ra r Eve n t o s AWT
❍ An a liza r la Pila
❍ Pro b le m a s d e Ve rs io n e s
● Té cn ica s d e Re n d im ie n t o
❍ Au m e n t a r e l Re n d im ie n t o p o r Dis e ñ o
❍ Tru co s d e Co n e xió n
❍ Ca ra ct e rís t ica s d e Re n d im ie n t o y He rra m ie n t a s
❍ An á lis is d e Re n d im ie n t o
❍ En la za r Ap lica cio n e s Clie n t e / S e rvid o r
● De s a rro lla r la Ap lica ció n S u b a s t a
❍ Arch ivo s JAR
❍ Pla t a fo rm a S o la ris
❍ Pla t a fo rm a Win 3 2
● Má s Tó p ico s d e S e g u rid a d
❍ Ap p e lt s Firm a d o s
❍ Es crib ir u n Co n t ro la d o r d e S e g u rid a d
● Ap é n d ice A: S e g u rid a d y Pe rm is o s
● Ap é n d ice B: Cla s e s , Mé t o d o s y Pe rm is o s
● Ap é n d ice C: Mé t o d o s d e S e cu rit yMa n a g e r
● Ep ílo g o

Oz it o
Concordar los Requerimientos del Proyecto con la
Tecnología
El d e s a fío d e e s crib ir u n lib ro s o b re e l d e s a rro llo d e u n a a p lica ció n a va n za d a p a ra la
p la t a fo rm a Ja va TM e s e n co n t ra r u n p ro ye ct o lo s u ficie n t e m e n t e p e q u e ñ o , p e ro a l
m is m o t ie m p o , lo s s u ficie n t e m e n t e co m p le t o p a ra g a ra n t iza r la s t e cn ica s d e
p ro g ra m a ció n a va n za d a s .
El p ro ye ct o p re s e n t a d o e n e s t e lib ro e s u n a ca s a d e s u b a s t a s b a s a d a e n we b . La
a p lica ció n e s t á in icia lm e n t e e s crit a p a ra la p la t a fo rm a En t e rp ris e Ja va Be a n s TM. En
lo s ca p ít u lo s p o s t e rio re s e xp a n d ie re m o s e l co ra zó n d e l e je m p lo d e s crit o a q u í
a ñ a d ie n d o fu n cio n a lid a d e s a va n za d a s , m e jo ra s y s o lu cio n e s a lt e rn a t iva s a a lg u n a s
d e la s co s a s q u e o b t e n d rá s g ra t is cu a n d o u s e la p la t a fo rm a En t e rp ris e Ja va Be a n s .
Pa ra m a n t e n e r la e xp lica ció n s e n cilla , la a p lica ció n d e e je m p lo s ó lo t ie n e u n
co n ju n t o b á s ico d e t ra n s a cio n e s p a ra p o n e r y p u ja r ít e m s a s u b a s t a . S in e m b a rg o ,
la a p lica ció n e s ca la p a ra m a n e ja r m ú lt ip le s u s u a rio s , p ro p o rcio n a u n e n t o rn o d e
t re s fila s b a s a d o e n t ra n s a cio n e s , co n t ro la la s e g u ira d , e in t e g ra s is t e m a s b a s a d o s
e n la le g a lid a d . Es t e ca p ít u lo cu b re có m o d e t e rm in a r lo s re q u e rim ie n t o s d e l
p ro ye ct o y e l m o d e lo d e a p lica ció n - - p a s o s im p o rt a n t e s q u e s ie m p re d e b e ría n
re a liza rs e a n t e s d e e m p e za r a co d ifica r.
● Re q u e rim ie n t o s d e Pro ye ct o y Mo d e la d o

● Ele g ir e l S o ft wa re

¿Tienes Prisa?
Es t a t a b la t e e n la za d ire ct a m e n t e co n lo s t ó p ico s e s p e cífico s .
Tópico Sección
Demostración de Subasta La Subasta de Duke
Requerimientos del Proyecto Entrevista Base
Modelar el Proyecto
Modelado La Casa Identifica Compradores y Vendedores
La Casa Determina la Mayor Puja
La Casa Notifica a Compradores y Vendedores
Alguien Busca un Ítem
Alguien Ve un Ítem en Venta
Alguien Ve los Detalles de un Ítem
El Vendedor Pone un Ítem en Venta
El Compador Puja por Ítems
Diagrama de Actividad
Elegir el Software Los APIs de JavaTM

Oz it o
Requerimientos del Proyecto y Modelado
El p rim e r p a s o p a ra d e t e rm in a r lo s re q u e rim ie n t o s d e l p ro ye ct o e s la e n t re vis t a co n e l u s u a rio b a s e p a ra s a b e r q u e s e e s p e ra d e u n a s u b a s t a o n - lin e . Es t e e s u n p a s o im p o rt a n t e , y
n o p u e d e p a s a rs e p o r a lt o p o rq u e e s u n a b a s e s ó lid a d e in fo rm a ció n q u e n o s a yu d a rá a d e fin ir la s ca p a cid a d e s cla ve d e n u e s t ra a p lica cio n .
El ca p ít u lo 2 p a s e a a t ra vé s d e l có d ig o d e la a p lica ció n , e xp lica co m o t ra b a ja la p la t a fo rm a En t e rp ris e Ja va Be a n s , y n o s cu e n t a có m o e je cu t a r u n a d e m o s t ra ció n e n vivo . S i n u n ca
h a s vis t o o u s a d o u n a s u b a s t a o n - lin e , a q u í h a y u n a m a q u e t a d e la s p á g in a s HTML d e la a p lica ció n d e e je m p lo .
● En t re vis t a a l u s u a rio Ba s e
● Mo d e lo d e Pro ye ct o

Entrevista al usuario Base


Po r la d icu s ió n y p o r m a n t e n e r la s co s a s s e n cilla s , e s t a e xp lica ció n a s u m e q u e e n la s e n t re vis t a s co n lo s u s u a rio s b a s e s e e n co n t ra ro n lo s s ig u ie n t e s re q u e rim ie n t o s p a ra la ca s a d e
suba sta s:
Re q u e rim ie n t o s d e la Ca s a d e S u b a s t a s
● In fo rm a ció n Ne ce s a ria d e l Co m p ra d o r y Ve n d e d o r

● No t a s d e Ve n d e d o re s p a ra p o s t e a r ít e m s

● Gra b a r e In fo rm a r d e la s t ra n s a cio n e s d ia ria s

Re q u e rim ie n t o s d e l u s u a rio
● Pu ja r p o r o Ve n d e r u n ít e m

● Bu s ca r o ve r ít e m s e n ve n t a

● No t ifica r la s ve n t a s a l ve n d e d o r y a l co m p ra d o r

Modelo de Proyecto
De s p u é s d e a n a liza r lo s re q u e rim ie n t o s , p o d e m o s co n s t ru ir u n d ia g ra m a d e flu jo d e la a p lica ció n p a ra o b t e n e r u n m e jo r e n t e n d im ie n t o d e lo s e le m e n t o s n e ce s a rio s e n la a p lica ció n
y có m o in t e ra ct u a .
Un d ia g ra m a d e flu jo m u e s t ra la re la ció n e n t re lo s a ct o re s y p ro ce s o s d e n t ro d e l s is t e m a . Un p ro ce s o e s u n a fu n ció n ú n ica e n u n s is t e m a , y u n a ct o r e s la p e rs o n a o s o ft wa re q u e
re a liza la a cció n o p ro ce s o . Po r e je m p lo , u n co m p ra d o r e s e l a ct o r q u e re a liza la fu n ció n ( p ro ce s o ) d e p u ja r p o r u n ít e m d e la s u b a s t a , y e l ve n d e d o r e s e l a ct o r q u e re a liza e l
p ro ce s o d e p o s t e a r u n ít e m p a ra s u s u b a s t a .
Au n q u e , n o t o d o s lo s a ct o re s s o n p e rs o n a s . Po r e je m p lo , e l s o ft wa re e s e l a ct o r q u e d e t e rm in a cu a n d o u n ít e m s e h a ce rra d o , e n cu e n t ra la p u ja m á s a lt a , y n o t ifica la ve n t a a l
co m p ra d o r y a l ve n d e d o r.
El Un ifie d Mo d e lin g La n g u a g e ( UML) e s la h e rra m ie n t a q u e s e u s a p a ra lo s d ia g ra m a s d e p ro ce s o s . El s ig u ie n t e d ia g ra m a u s a UML p a ra d e s crib ir lo s p ro ce s o s d e l co m p ra d o r y d e l
ve n d e d o r p a ra u n a a p lica ció n d e s u b a s t a o n - lin e .
En UML, lo s s is t e m a s s e a g ru p a n e n cu a d ra d o s , lo s a ct o re s s e re p re s e n t a s p o r fig u ra s h u m a n a s , lo s p ro ce s o s s e d e n o t a n m e d ia n t e ó va lo s , y la s lín e a s m u e s t ra n co m o lo s a ct o re s
u s a n e l s is t e m a .
La s ig u ie n t e d e s crip ció n d e fin e e l p ro ye ct o . Es t a s d e s crip cio n e s n o s o n p a rt e d e l UML, p e ro s o n u n a h e rra m ie n t a ú t il p a ra la d e fin ició n d e p ro ye ct o s .

La Casa Identifica a Compradores y Vendedores

Un a a p lica ció n d e s u b a s t a s e s u s a d a p o r co m p ra d o re s y ve n d e d o re s . Un co m p ra d o r n e ce s it a s a b e r q u íe n e s e l ve n d e d o r a q u ie n t ie n e q u e p a g a rle , y e l ve n d e d o r n e ce s it a co n o ce r a


lo s co m p ra d o re s p a ra re s p o n d e r a s u s p re g u n t a s s o b re e l p ro d u ct o y p a ra fin a liza r la ve n t a . Po r e s o , p a ra p o s t e a r o p u ja r p o r u n ít e m d e la s u b a s t a , lo s co m p ra d o re s y ve n d e d o re s
n e ce s it a n e s t a r re g is t ra d o s . El re g is t ro n e ce s it a o b t e n e r la s ig u ie n t e in fo rm a ció n s o b re lo s co m p ra d o re s y ve n d e d o re s :
● Us e r ID y p a s s wo rd p a ra co m p ra r y ve n d e r.

● Dire cció n d e E- m a il p a ra q u e p u e d a co m u n ica rs e le la p u ja m á s a lt a cu a n d o s e cie rre la s u b a s t a .

● In fo rm a ció n d e la t a rje t a d e cré d it o p a ra q u e la ca s a d e s u b a s t a s p u e d a co b ra r a l ve n d e d o r p o r lis t a r s u s ít e m s .

Un a ve z re g is t ra d o , e l u s u a rio p u e d e p o s t e a r o p u ja r p o r u n ít e m e n ve n t a .

La Casa Determina la Puja más alta

La a p lica ció n d e s u b a s t a s h a ce co n s u lt a s a la b a s e d e d a t o s y g ra b a e in fo rm a d e la s t ra n s a cio n e s d ia ria s . La a p lica ció n b u s ca ít e m s q u e s e h a n ce rra d o y d e t e rm in a la p u ja m á s


a lt a .

La Casa Notitica a los Compradores y Vendedores

La a p lica ció n s u b a s t a u s a e l e - m a il p a ra n o t ifica r a l q u e h a p u ja d o m á s a lt o y a l ve n d e d o r, y co b ra rle a l ve n d e d o r p o r lo s s e rvicio s .

Alguien Busca un Ítem

Lo s co m p ra d o re s y ve n d e d o re s in t ro d u ce n u n s t rin g d e b ú s q u e d a p a ra lo ca liza r t o d o s lo s ít e m s e n s u b a s t a d e la b a s e d e d a t o s .

Alguien Ve los Ítems en Venta

Pa ra p o p u la riza r la s u b a s t a y co n s e g u ir n u e vo s ve n d e d o re s y co m p ra d o re s , la a p lica ció n p e m it e q u e cu a lq u ie ra ve a lo s ít e m s d e la s u b a s t a s in re q u e rir q u e e s t é re g is t ra d o . Pa ra


h a ce r e s t o s e n cillo , la s u b a s t a p e rm it e q u e cu a lq u ie ra ve a u n a lis t a d e lo s ít e m s d e a lg u n a d e e s t a s t re s fo rm a s :
● To d o s lo s ít e m s e n s u b a s t a .

● Nu e vo s ít e m s lis t a d o s h o y.

● Ít e m s q u e s e cie rra n h o y.

Alguien Ve los Detalles de un Ítem

La lis t a s u m a riza d a e n la za co n la s ig u ie n t e in fo rm a ció n d e t a lla d a d e ca d a ít e m . Es t a in fo rm a ció n e s t á d is p o n ib le p a ra cu a lq u ie ra s in n e ce s id a d d e id e n t ifica ció n .


● S u m a rio d e l Ít e m .

● Nú m e ro d e l ít e m e n la s u b a s t a .

● Pre cio Act u a l

● Nú m e ro d e p u ja s

● Fe ch a d e p u e s t a e n s u b a s t a

● Fe ch a d e cie rre d e l ít e m

● ID d e l ve n d e d o r

● Pu ja m á s a lt a

● De s crip ció n d e l ít e m

El Vendedor Postea Ítems para su Venta

Pa ra p o s t e a r u n ít e m p a ra s u ve n t a , u n ve n d e d o r n e ce s it a id e n t ifica rs e a s í m is m o y d e s crib ir e l ít e m , d e e s t a fo rm a :
● Us e r ID y p a s s wo rd p a ra la id e n t ifica ció n d e l ve n d e d o r

● De s crip ció n s u m a ria d e ít e m

● Pre cio d e p u ja in icia l

● De s crip ció n d e t a lla d a d e l ít e m

● Nú m e ro d e d ía s q u e e l ít e m e s t a rá e n la s u b a s t a

El Comprador Puja por Items

Un a p á g in a d e s u m a rio d e t a lla d o p o r ca d a ít e m p e rm it e a lo s u s u a rio s re g is t ra d o s id e n t ifica rs e a s í m is m o s y p u ja r p o r e l ít e m p ro p o rcio n a n d o la s ig u ie n t e in fo rm a ció n :


● Us e r ID
● Pa s s wo rd
● Ca n t id a d d e la Pu ja

Diagrama de Actividad

El d ia g ra m a d e a ct ivid a d m u e s t ra e l flu jo d e t a re a s d e n t ro d e la ca s a d e s u b a s t a s co m o u n a t o t a lid a d . Es t e d ia g ra m a m u e s t ra la a p lica ció n s u b a s t a . El círcu lo n e g ro d e la izq u ie rd a


m u e s t ra e l p rin cip io d e la s a ct ivid a d e s , y e l círcu lo b la n co p u n t e a d o e n e l ce n t ro d e n o t a d o n d e t e rm in a n la s a ct ivid a d e s .
Oz it o
Elegir el Software
Co n la a p lica ció n m o d e la d a y lo s re q u e rim ie n t o s d e l p ro ye ct o d e fin id o s , e s h o ra d e
p e n s a r e n lo s APIs d e Ja va TM q u e va m o s a u s a r. La a p lica ció n e s t á cla ra m e n t e
b a s a d a e n clie n t e y s e rvid o r p o rq u e q u e re m o s a co m o d a r d e s d e 1 h a s t a n
co m p ra d o re s , ve n d e d o re s y m iro n e s a l m is m o t ie m p o . Co m o e l re g is t ro d e lo s
d a t o s d e lo s ít e m s e n s u b a s t a d e b e n a lm a ce n a rs e y re cu p e ra rs e d e a lg u n a
m a n e ja r, n e ce s it a re s e l API p a ra a cce d e r a b a s e s d e d a t o s .

Los APIs de JavaTM


El co ra zó n d e la a p lica ció n s e p u e d e cre a r d e m u ch a s fo rm a s u s a n d o u n o d e lo s
s ig u ie n t e s a PIs :
1 . APIs d e S o cke t s , m u lt it h re a d s y JDBC TM.
2 . APIs d e Re m o t e Me t h o d In vo ca t io n ( RMI) y JDBC.
3 . Pla t a fo rm a En t e rp ris e Ja va Be a n s TM.
En t e rp ris e Ja va Be a n s p ro p o rcio n a u n a fo rm a s e n cilla d e cre a r a p lica cio n e s d e
clie n t e s m u lt i h ilo s p o rq u e m a n e ja t ra n s a cio n e s y co n t ro l d e e s t a d o , m u lt it h re a d s ,
re cu rs o s y o t ro s co m p le jo s d e t a lle s d e b a jo n ive l. La fo rm a m á s s e n cilla p a ra
co d ifica r la a p lica ció n d e s u b a s t a s e s co n la p la t a fo rm a En t e rp ris e Ja va Be a n s .
El ca p ít u lo 2 e xp lica e l có d ig o d e l co ra zó n d e la a p lica ció n y co m o co n fig u ra r y
e je cu t a r e l e je m p lo .

Oz it o
Código de la Aplicación de la Casa de Subastas
La a p lica ció n d e e je m p lo e s u n a ca s a d e s u b a s t a s b a s a d a e n e l We b y e s crit a p a ra la p la t a fo rm a En t e rp ris e Ja va Be a n s TM. El in t e rfa ce d e u s u a rio e s u n co n ju n t o d e p á g in a s HTML
q u e o b t ie n e n la e n t ra d a d e l u s u a rio y le m u e s t ra n la in fo rm a ció n . De t rá s d e la s p á g in a s HTML h a y u n s e rve lt q u e p a s a d a t o s e n t re e l n a ve g a d o r y e l s e rvid o r En t e rp ris e Ja va Be a n s .
Es t e s e rvid o r m a n e ja la le ct u ra y e s crit u ra d e la b a s e d e d a t o s .
Es t e ca p ít u lo d e s crib e e l có d ig o d e la a p lica ció n , có m o fu n cio n a co n e l s e rvid o r En t e rp ris e Ja va Be a n s , y d ó n d e o b t e n e r e s t e s e rvid o r p a ra e jcu t a r e l e je m p lo . O, s i lo p re fie re s , a q u í
h a y u n a m a q u e t a d e la a p lica ció n s u b a s t a .
● Un a Ap lica ció n Mu lt i. Hilo co n En t e rp ris e Be a n s
● Be a n s d e En t id a d y d e S e s ió n
● Exa m in a r u n Be a n d e Co n t e n e d o r Co n t ro la d o r
● Mé t o d o s Bu s ca d o re s d e l Co n t e n d o r Co n t ro la d o r

¿Tienes Prisa?
Es t a t a b la co n t ie n e e n la ce s d ire ct o s a lo s t ó p ico s e s p e cífico s .
Tópico Sección
Una Aplicación Multi-Hilo con Enterprise Beans El Enterprise Beans Definido
Beans de Entidad y de Sesión
La Casa de Subastas Funciona
Desarrollar y Ejecutar Aplicaciones
¿Cómo funcionan las aplicaciones Multi-Hilo?
Beans de Entidad y de Sesión El servelt Auction
Beans Entity
Beans Session
Clases Contenedor
Examinar un Bean de Contenedor Controlador Variables Miembro
Método Create
Métodos de Contexto de Entidad
Método Load
Método Store
Guardar la Conexión
Descriptor de Desarrollo
Métodos del Buscador de Contenedo Controlador [Link]
[Link]
[Link]
AuctionItemBean Deployment Descriptor

Oz it o
Un Aplicación Multi-Fila con Beans de Enterprise
La p ro life ra ció n d e a p lica cio n e s b a s a d a s e n in t e rn e t - e in t ra n e t - h a cre a d o u n a g ra n n e ce s id a d d e a p lica cio n e s t ra n s a cio n a le s d is t rib u id a s q u e a u m e n t e la ve lo cid a d , s e g u rid a d y
re n d im ie n t o d e la t e cn o lo g ía d e l la d o d e l s e rvid o r. Un a fo rm a d e co n s e g u ir e s t a s n e ce s id a d e s e s u s a r u n m o d e lo m u lt i- fila d o n d e u n a p e q u e ñ a a p lica ció n clie n t e in vo ca ló g ica d e
n e g o cio q u e s e e je cu t a e n e l s e rvid o r.
No rm a lm e n t e , la s p e q u e ñ a s a p lica cio n e s clie n t e s m u lt i- h ilo s o n d ificile s d e e s crib ir p o rq u e s e in vo lu cra n m u ch a s lín e a s d e có d ig o in t rin ca d o p a ra m a n e ja r la t ra n s a ció n , e l co n t ro l d e
e s t a d o s , m u lt it h re a d s , s o la p e d e re cu rs o s y o t ro s d e t a lle s co m p le jo s d e b a jo n ive l. Y p a ra re m a t a r e s t a s d ificu lt a d e s , t e n e m o s q u e re t ra b a ja r e s t e có d ig o ca d a ve z q u e e s crib a m o s
u n a a p lica ció n p o rq u e e s t a n d e b a jo n ive l q u e n o e s re u t iliza b le .
S i p u d ie ra m o s u s a r u n có d ig o d e m a n e jo d e t ra n s a cio n e s p re co n s t ru id o p o r a lg u ie n o in clu s o s i p u e d ie ra m o s re u t iliza r a lg o d e n u e s t ro p ro p io có d ig o , a h o rra ria m o s m u ch o t ie m p o y
e n e rg ía q u e p o d ría m o s u t iliza r p a ra re s o lve r o t ro s p ro b le m a s . Bie n , la t e cn o lo g ía En t e rp ris e Ja va Be a n s TM p u e d e d a rn o s la a yu d a n e ce s a ria . Es t a t e cn o lo g ía h a ce s e n cilla s d e e s crib ir
la s a p lica cio n e s t ra n s a cio n a le s d is t rib u id a s p o rq u e s e p a ra lo s d e t a lle s d e b a jo n ive l d e la ló g ica d e l n e g o cio . No s co n ce n t ra m o s e n cre a r la m e jo r s o lu ció n p a ra n u e s t ro n e g o cio y
d e ja m o s e l re s t o a la a rq u it e ct u ra o cu lt a .
Es t e ca p ít u lo d e s crib e có m o cre a r la a p lica ció n d e s u b a s t a s d e l e je m p lo u s a n d o lo s s e rvicio s p ro p o rcio n a d o s p o r la p la t a fo rm a En t e rp ris e Ja va Be a n s . En lo s s ig u ie n t e s ca p ít u lo s
ve re m o s co m o p o d e m o s p e rs o n a liza r e s t o s s e rvicio s e in t e g ra r e s t a s ca ra ct e rís t ica s e n a p lica cio n e s e xis t e n t e s n o EJB.
● En t e rp ris e Be a n s De fin id o s

● Pe q u e ñ o s Pro g ra m a s Clie n t e s
● Arq u it e ct u r Mu lt i- Hilo
● Be a n s d e e n t id a d y d e s e s ió n
● La Ca s a d e S u b a s t a s Fu n cio n a
● De s a rro lla r y Eje cu t a r Ap lica cio n e s
● ¿ Có m o fu n cio n a n la s Ap lica cio n e s m u lt i- h ilo ?

Enterprise Beans Definidos


Un Be a n En t e rp ris e e s u n a cla s e q u e p ro p o rcio n a d o s t ip o s d e m é t o d o s : ló g ica d e n e g o cio y ciclo d e vid a . Un p ro g ra m a clie n t e lla m a a lo s m é t o d o s d e la ló g ica d e n e g o cio p a ra
in t e ra ct u a r co n lo s d a t o s co n t e n id o s e n e l s e rvid o r. El co n t e n e d o r lla m a a lo s m é t o d o s d e ciclo d e vid a p a ra m a n e ja r e l Be a n e n e l s e rvid o r. Ad e m á s d e e s t o s d o s t ip o s d e m é t o d o s ,
u n Be a n En t e rp ris e t ie n e u n fich e ro d e co n fig u ra ció n a s o cia d o , lla m a d o u n d e s crip t o r d e d e s a rro llo , s e u s a p a ra co n fig u ra r e l Be a n e n e l m o m e n t o d e l d e s a rro llo .
As í co m o e s e l re s p o n s a b le d e la cre a cció n y b o rra d o d e Be a n s , e l s e rvid o r d e Ja va Be a n s d e En t e rp ris e t a m b ié n m a n e ja la s t ra n s a cio n e s , la co n cu rre n cia , la s e g u rid a d y la
p e rs is t e n cia d e d a t o s . In clu s o la s co n e xio n e s e n t re e l clie n t e y e l s e rvid o r s e p ro p o rcio n a n u s a n d o lo s APIs d e RMI y JNDI y o p cio n a lm e n t e lo s s e rvid o re s p u e d e n p ro p o rcio n a r
e s ca la b ilid a d a t ra vé s d e l m a n e jo d e t h re a d s .
El e je m p lo d e la ca s a d e s u b a s t a s im p le m e n t a u n a co m p le t a s o lu ció n d e Ja va Be a n s d e En t e rp ris e q u e s ó lo p ro p o rcio n a n la ló g ica d e n e g o cio y u s a lo s s e rvicio s o cu lt o s
p ro p o rcio n a d o s p o r la a rq u it e ct u ra . S in e m b a rg o , p o d ría m o s e n co n t ra r q u e e l s e rvicio d e co n t e n e d o re s co n t ro la d o re s , a u n q u e p ro p o rcio n a n d o u n a m á xim a p o rt a b ilid a d , n o co n s ig u e
t o d o s lo s re q u e rim ie n t o s d e n u e s t ra a p lica ció n . En lo s p ró xim o s ca p ít u lo s ve re m o s có m o p ro p o rcio n a r e s t o s s e rvicio s a n u e s t ro Be a n y t a m b ié n co m o u s a r e s t o s s e rvicio s e n
a p lica cio n e s q u e n o u s e n Be a n s d e En t e rp ris e .

Pequeño Programas Cliente


Un p e q u e ñ o clie n t e e s u n p ro g ra m a clie n t e q u e in vo ca a la ló g ica d e n e g o cio q u e s e e je cu t a e n e l s e rvid o r. S e lla m a "p e q u e ñ o " p o rq u e la m a yo ría d e l p ro ce s o s u ce d e e n e l s e rvid o r.
En la s ig u ie n t e fig u ra , e l s e rvle t e s e l clie n t e . In vo ca a lo s Be a n s En t e rp ris e q u e s e e je cu t a n s o b re u n s e rvid o r d e Ja va Be a n s En t e rp ris e . Ta m b ié n e je cu t a la ló g ica q u e cre a la s
p á g in a s we b q u e a p a re ce n e n e l n a ve g a d o r.
Arquitectura Multi-Fila
La
a rq u it e ct u ra m u lt i- fila o a rq u it e ct u ra d e t re s fila s d e s cie n d e d e l m o d e lo e s t á n d a rd d e d o s fila s d e clie n t e y s e rvid o r s it u a n d o u n a a p lica ció n m u lt i- fila e n t re e l clie n t e y la b a s e d e
da tos.
Lo s p ro g ra m a s clie n t e s s e co m u n ica n co n la b a s e d e d a t o s a t ra vé s d e la a p lica ció n d e l s e rvid o r u s a n d o lla m a d a s d e a lt o n ive l e in d e p e n d ie n t e s d e la p la t a fo rm a . La a p lica ció n
s e rvid o r re s p o n d e a la s p e t icio n e s d e l clie n t e , h a ce la s lla m a d a s n e ce s a ria s a la b a s e d e d a t o s d e n t ro d e la b a s e d e d a t o s o cu lt a , y re s p o n d e a l p ro g ra m a clie n t e d e la fo rm a
a p ro p ia d a .
El e je m p lo d e ca s a d e s u b a s t a s b a s a d o e n we b d e t re s fila s co n s is t e e n e l s e rvle t clie n t e , e l s e rvid o r En t e rp ris e Ja va Be a n s ( la a p lica ció n s e rvid o r) , y e l s e rvid o r d e la b a s e d e d a t o s
co m o s e ve e n la fig u ra .

Beans de Entidad y de Sesión


Exis t e n d o s t ip o s d e Be a n s En t e rp ris e : Be a n s d e e n t id a d y d e s e s ió n . Un Be a n En t e rp ris e q u e im p le m e n t a u n a e n t id a d d e n e g o cio e s u n Be a n d e En t id a d , y u n Be a n En t e rp ris e
q u e im p le m e n t a u n a t a re a d e n e g o cio e s u n Be a n d e S e s ió n .
Típ ica m e n t e , u n Be a n d e e n t id a d re p re s e n t a u n a fila d e d a t o s p e rs is t e n t e s a lm a ce n a d o s e n u n a t a b la d e la b a s e d e d a t o s . En e l e je m p lo d e la ca s a d e s u b a s t a s , Re g is t ra t io n Be a n
e s u n Be a n d e e n t id a d q u e re p re s e n t a lo s d a t o s d e u n u s u a rio re g is t ra d o , y Au c t io n I t e m Be a n e s u n Be a n d e e n t id a d q u e re p re s e n a lo s d a t o s d e u n ít e m d e la s u b a s t a . Lo s Be a n s
d e e n t id a d s o n t ra n s a cio n a le s y d e la rg a vid a . Mie n t ra s q u e lo s d a t o s p e rm a n e zca n , e l Be a n d e e n t id a d p u e d e a cce d e r y a ct u a liza rlo s . Es t o n o s ig n ifica q u e t e n g a m o s u n Be a n
e je cu t á n d o s e p o r ca d a fila d e la t a b la . S i n o q u e lo s Be a n s En t e rp ris e s e ca rg a n y g ra b a n cu a n d o e s n e ce s a rio .
Un Be a n d e s e s ió n p o d ría e je cu t a r u n a le ct u ra o e s crit u ra e n la b a s e d e d a t o s , p e ro n o e s n e ce s a rio . Un Be a n d e s e s ió n p o d ría in vo ca r lla m a d a s a l JDBC p o r s í m is m o o p o d ría u s a r
u n Be a n d e e n t id a d p a ra h a ce r la lla m a d a , e n cu yo ca s o e l Be a n d e s e s ió n e s u n clie n t e d e l Be a n d e e n t id a d . Un ca m p o d e Be a n co n t ie n e e l e s t a d o d e la co n ve rs a ció n y s o n
t e m p o ra le s . S i e l s e rvid o r o e l clie n t e s e b lo q u e a n , e l Be a n d e s e s ió n s e vá . Fre cu e n t e m e n t e s e u s a n lo s Be a n s d e s e s ió n co n u n o o m á s Be a n s d e e n t id a d y p a ra o p e ra cio n e s
co m p le ja s co n d a t o s .
Beans de Sesión Beans de Entidad
Ca m p o s q u e co n t ie n e n e l e s t a d o d e la co n ve rs a ció n Re p re s e n t a n d a t o s d e la b a s e d e d a t o s
Ma n e ja n a cce s o s a la b a s e d e d a t o s p o r p a rt e d e l clie n t e Co m p a rt e n a cce s o s e n t re m ú lt ip le s u s u a rio s
La vid a d e l clie n t e e s la vid a d e l Be a n Pe s is t e m ie n t ra s e xis t a n lo s d a t o s
Pu e d e n p e rd e rs e co n la t ra n s a ció n Tra n s a cio n a l
No s o b re vive a la s ca íd a s d e l s e rvid o r S o b re vive a la s ca íd a s d e l s e rvid o r
No m a n e ja lo s d a t o s d e fo rm a fin a Ma n e jo d e d a t o s d e fo rm a d e lica d a

La Casa de Subastas Funciona


El d ia g ra m a m u e s t ra lo s Be a n s d e En t e rp ris e p a ra la a p lica ció n d e la ca s a d e s u b a s t a s y s u re la ció n co n e l s e rvid o r d e Ja va Be a n s d e En t e rp ris e . El clie n t e in vo ca la ló g ica d e n e g o cio
e n cu a t ro Be a n s d e En t e rp ris e a t ra vé s d e s u s in t e rfa ce s h o m e y re m o t o . El s e rvid o r Ja va Be a n s d e e s t e e je m p lo m a n e ja lo s d e t a lle s d e b a jo n ive l in clu ye n d o la s o p e ra cio n e s d e
le ct u ra y e s crit u ra e n la b a s e d e d a t o s .
Lo s cu a t ro Be a n s d e l e je m p lo s o n :
● Au c t io n I t e m Be a n u n Be a n d e e n t id a d q u e m a n t ie n e in fo rm a ció n s o b re e l ít e m d e la s u b a s t a .

● Re g is t ra t io n Be a n u n Be a n d e e n t id a d q u e a lm a ce n a in fo rm a ció n d e re g is t ro d e lo s u s u a rio s .

● Bid d e rBe a n u n Be a n d e s e s ió n q u e u s a Au c t io n I t e m Be a n p a ra re cu p e ra r u n a lis t ra d e lo s ít e m s d e la s u b a s t a s , s ó lo lo s n u e vo s ít e m s , ít e m s ce rca d e l cie rre , e ít e m s cu yo


s u m a rio co rre s p o n d e co n u n a ca d e n a d e b u s q u e d a e n la b a s e d e d a t o s . Ta m b ié n co m p ru e b a la id e n t id a d d e l u s u a rio y la p a s s wo rd cu a n d o a lg u ie n h a ce u n a p u ja , y a lm a ce n a
la s n u e va s p u ja s e n la b a s e d e d a t o s .
● S e lle rBe a n e s u n Be a n d e s e s ió n q u e u s a Re g is t ra t io n Be a n p a ra co m p ro b a r la id e n t id a d d e l u s u a rio y la p a s s wo rd cu a n d o a lg u ie n p o s t e a u n ít e m p a ra s u s u b a s t a , y
Au c t io n I t e m Be a n p a ra a ñ a d ir n u e vo s ít e m s a la b a s e d e d a t o s d e la s u b a s t a .
Co m o s e ve e n la fig u ra s u p e rio r, u n Be a n d e e n t id a d o d e s e s ió n re a lm e n t e e s u n a co le cció n d e cla s e s e in t e rfa ce s . To d o s lo s Be a n s d e e n t id a d y d e s e s ió n co n s is t e n e n u n in t e rfa e
re m o t o , u n in t e rfa ce h o m e , y la cla s e d e l Be a n . El s e rvid o r b u s ca e l in t e rfa ce h o m e d e l Be a n q u e e s t á e je cu t á n d o s e e n e l s e rvid o r Ja va Be a n s d e En t e rp ris e , lo u s a p a ra cre a r e l
in t e rfa ce re m o t o , e in vo ca a lo s m é t o d o s d e l Be a n a t ra vé s d e l in t e rfa ce re m o t o .
● Un In t e rfa ce re m o t o d e u n Be a n En t e rp ris e d e crib e lo s m é t o d o s d e l Be a n , o q u é h a ce e l Be a n . Un p ro g ra m a clie n t e u o t ro Be a n En t e rp ris e lla m a a lo s m é t o d o s d e fin id o s e n e l
in t e rfa ce re m o t o p a ra in vo ca r la ló g ica d e n e g o cio s im p le m e n t a d a p o r e l Be a n .
● Un in t e rfa ce h o m e d e u n Be a n d e En t e rp ris e d e s crib e có m o u n p ro g ra m a clie n t e u o t ro Be a n En t e rp ris e cre a , e n cu e n t ra ( s ó lo lo s Be a n s d e e n t id a d ) , y e lim in a e s e Be a n d e
En t e rp is e d e s u co n t e n e d o r.
● El co n t e n e d o r, m o s t ra d o e n cya n e n e l g rá fico , p ro p o rcio n a e l in t e rfa ce e n t re e l Be a n In t e rfa ce y la s fu n cio n a lid a d e s d e b a jo n ive l e s p e cífica s d e la p la t a fo rm a q u e s o p o rt a e l
Be a n .

Desarrollar y Ejecutar Aplicaciones


La s h e rra m ie n t a s d e d e s a rro llo y u n s e rvid o r d e Ja va Be a n s En t e rp ris e e s e s e n cia l p a ra e je cu t a r a p lica cio n e s co n Ja va Be a n s En t e rp ris e . La s h e rra m ie n t a s d e d e s a rro llo g e n e ra n
co n t e n e d o re s , q u e s o n cla s e s q u e p ro p o rcio n a n u n in t e rfa ce d e im p le m e n t a cio n e s d e b a jo n ive l e n u n s e rvid o r Ja va Be a n s En t e rp ris e d a d o . El s e rvid o r p ro p o rcio n a d o p u e d e in clu ir
co n t e n e d o re s y h e rra m ie n t a s d e d e s a rro llo p a ra s u s s e rvid o re s y n o rm a lm e n t e p u b lica rá lo s in t e rfa ce s d e b a jo n ive l p a ra q u e o t ro s ve n d e d o re s p u e d e n d e s a rro lla r co n t e n e d o re s y
h e rra m ie n t a s d e d e s a rro llo p a ra s u s s e rvid o re s .
El e je m p lo d e ca s a d e s u b a s t a s u s a e l s e rvid o r Ja va Be a n s y la s h e rra m ie n t a s d e d e s a rro llo cre a d a s p o r BEA We b lo g ic. Vis it a s u s it e p a ra o b t e n e r u n a d e m o d e 3 0 d ía s .

Co m o t o d o e s t á s u je t o a la s e s p e cifica cio n e s , t o d o s lo s Be a n s En t e rp ris e s o n in t e rca m b ia b le s co n co n t e n e d o re s , h e rra m ie n t a s d e d e s a rro llo , y s e rvid o re s cre a d o s p o r o t ro s


ve n d e d o re s . De h e ch o , p o d ria m o s e s crib ir n u e s t ro p ro p io Be a n En t e rp ris e p o rq u e e s p o s ib le , y a lg u n a s ve ce s d e s e a b le , u s a r Be a n s En t e rp ris e e s crit o s p o r u n o o m á s p ro ve e d o re s
q u e e n s a m b la re m o s d e n t ro d e u n a a p lica ció n d e Ja va Be a n s En t e rp ris e .

Cómo Funcionan las Aplicaciones Multi-Fila


El o b je t ivo d e u n a a p lica ció n m u lt i- fila e s q u e e l clie n t e p u e d a t ra b a ja r co n lo s d a t o s d e u n a a p lica ció n s in co n o ce r e n e l m o m e n t o d e la co n s t ru cció n d ó n d e s e e n cu e n t ra n lo s d a t o s .
Pa ra h a ce r p o s ib le e s t e n ive l d e t ra n s p a re n cia , lo s s e rvicio s o cu lt o s e n u n a a rq u it e ct u ra m u lt i- fila u s a n s e rvicio s d e b ú s q u e d a p a ra lo ca liza r lo s o b je t o s d e l s e rvid o r re m o t o ( e l
o b je t o in t e rfa ce d e l Be a n re m o t o ) , y lo s s e rvicio s d e co m u n ica ció n d e d a t o s p a ra m o ve r lo s d a t o s d e s d e e l clie n t e , a t ra vé s d e l o b je t o s e rvid o r re m o t o , h a s t a s u d e s t in o fin a l e n e l
m e d io d e a lm a ce n a je .

Servicio de Búsqueda

Pa ra e n co n t ra r lo s o b je t o s d e l s e rvid o r re m o t o e n e l m o m e n t o d e la e je cu ció n , e l p ro g ra m a clie n t e n e ce s it a u n a fo rm a d e b u s ca rlo s . Un a d e e s t a s fo rm a s e s u s a r e l API Ja va


Na m in g y Dire ct o ry In t e rfa ce TM ( JNDI) . JNDI e s u n in t e rfa ce co m ú n p a ra in t e rfa ce s e xis t e n t e s d e n o m b re s y d ire ct o rio s . Lo s co n t e n e d o re s d e lo s Ja va Be a n s d e En t e rp ris e u s a n JNDI
co m o in t e rfa ce p a ra e l s e rvicio d e n o m b re s d e l Re m o t e Me t h o d In vo ca t io n ( RMI) .
Du ra n t e e l d e s a rro llo , e l s e rvicio JNDI re g is t ra e l in t e rfa ce re m o t o co n u n n o m b re . S ie m p re q u e e l p ro g ra m a clie n t e u s e e l m is m o s e rvicio d e n o m b re s y p re g u n t e p o r e l in t e rfa ce
re m o t o co n s u n o m b re re g is t ra d o , p o d rá e n co n t ra rlo . El p ro g ra m a clie n t e lla m a a l m é t o d o lo o k u p s o b re u n o b je t o ja v a x . n a m in g . Co n t e x t p a ra p re g u n t a r p o r e l in t e rfa ce re m o t o
co n s u n o m b re re g is t ra d o . El o b je t o ja v a x . n a m in g . Co n t e x t e s d o n d e s e a lm a ce n a n la s u n io n e s y e s u n o b je t o d ife re n t e d e l co n t e xt o d e l Ja va Be a n d e En t e rp ris e , q u e s e cu b re
m á s a d e la n t e . .

Comunicación de Datos

Un a ve z q u e e l p ro g ra m a clie n t e o b t ie n e u n a re fe re n cia a l o b je t o s e rvid o r re m o t o , h a ce lla m a d a s a lo s m é t o d o s d e e s t e o b je t o . Co m o e l p ro g ra m a clie n t e t ie n e u n a re fe re n cia a l


o b je t o s e rvid o r re m o t o , s e u s a u n a t é cn ica lla m a d a "e n vo lve r d a t o s " p a ra h a ce r q u e p a re zca q u e e l o b je t o s e rvid o r re m o t o e s lo ca l p a ra e l p ro g ra m a clie n t e .
La "o rd e n a ció n d e d a t o s " e s d o n d e la s lla m a d a s a m é t o d o s d e l o b je t o s e rvid o r re m o t o s e e m p a q u e t a n co n s u s d a t o s y s e e n vía n a l o b je t o s e rvid o r re m o t o . El o b je t o s e rvid o r
re m o t o d e s e m p a q u e t a ( d e s o rd e n a ) lo s m é t o d o s y lo s d a t o s , y lla m a a l Be a n En t e rp ris e . El re s u lt a d o d e la lla m d a a l Be a n e s e m p a q u e t a d o d e n u e vo y p a s a d o d e vu e lt a a l clie n t e a
t ra vé s d e l o b je t o s e rvid o r re m o t o , y s o n d e s e m p a q u e t a d o s .
Lo s co n t e n e d o re s d e Ja va Be a n s En t e rp ris e u s a n s e rvicio s RMI p a ra o rd e n a r lo s d a t o s . Cu a n d o s e co m p ila u n Be a n , s e cre a n u n o s fich e ro s s t u b ( t a ló n ) y s k e le t o n ( e s q u e le t o ) . El
fich e ro t a ló n p ro p o rcio n a la co n fig u ra ció n d e l e m p a q u e t a d o y d e s e m p a q u e t a d o d e d a t o s e n e l clie n t e , y e l e s q u e le t o p ro p o rcio n a la m is m a in fo rm a ció n p a ra e l s e rvid o r.
Lo s d a t o s s e p a s a n e n t re e l p ro g ra m a clie n t e y e l s e rvid o r u s a n d o s e ria liza ció n . La s e ria liza ció n e s u n a fo rm a d e re p re s e n t a r o b je t o s Ja va TM co m o b yt e s q u e p u e d e n s e r e n via d o s a
t ra vé s d e la re d co m o u n s t re a m y p u e d e n s e r re co n s t u id o s e n e l m is m o e s t a d o e n e l q u e fu e ro n e n via d o s o rig in a lm e n t e .

Oz it o
Beans de Entidad y de Sesión
El e je m p lo u s a d o s Be a n s d e e n t id a d y d o s d e s e s ió n . Lo s Be a n s d e e n t id a d , Au c t io n I t e m Be a n y Re g is t ra t io n Be a n , re p re s e n t a n ít e m s p e rs is t e n t e s q u e p o d ría n e s t a r
a lm a ce n a d o s e n u n b a s e d e d a t o s , y lo s Be a n s d e s e s ió n , S e lle rBe a n y Bid d e rBe a n , re p re s e n t a n o p e ra cio n e s d e vid a co rt a co n e l clie n t e y lo s d a t o s .
Lo s Be a n s d e s e s ió n s o n e l in t e rfa ce d e l clie n t e h a cia lo s b e a n s d e e n t id a d . El S e lle rBe a n p ro ce s a p e t icio n e s p a ra a ñ a d ir n u e vo s ít e m s p a ra la s u b a s t a . El Bid d e rBe a n p ro ce s a
p e t icio n e s p a ra re cu p e ra r ít e m s d e la s u b a s t a y s it u a r la s p u ja s p o r e s o s ít e m s . El ca m b io o a d ició n d e d a t o s a la b a s e d e d a t o s e n u n Be a n co n t ro la d o p o r co n t e n e d o r s e le d e ja a
lo s Be a n s d e e n t id a d :
● Au ct io n S e rvle t

● Be a n s d e En t id a d
● Be a n s d e S e s ió n
● Cla s e s Co n t e n e d o r

AuctionServlet
El Au ct io n S e rvle t e s e s e n cia lm e n t e la s e g u n d a fila e n la a p lica ció n y e l p u n t o fo ca l p a ra la s a ct ivid a d e s d e la s u b a s t a . Ace p t a e n t ra d a s fin a le s d e l u s u a rio d e s d e e l n a ve g a d o r
m e d ia n t e e l p ro t o co lo d e t ra n s fe re n cia d e h yp e rt e xt o ( HTTP ) , p a s a la e n t ra d a a l Be a n En t e rp ris e a p ro p ia d o p a ra s u p ro ce s o , y m u e s t ra e l re s u lt a d o d e l p ro ce s o a l u s u a rio fin a l e n
e l n a ve g a d o r.
Aq u í h a y u n d ia g ra m a d e l t ip o Un ifie d Mo d e lin g La n g u a g e ( UML) p a ra la cla s e Au c t io n S e rv le t .
Lo s m é t o d o s d e Au c t io n S e rv le t m o s t ra d o s a rrib a in vo ca n a la ló g ica d e l n e g o cio q u e s e e je cu t a e n e l s e rvid o r b u s ca n d o u n Be a n En t e rp ris e y lla m a n d o a u n o o m á s d e s u s
m é t o d o s . Cu a n d o e l s e rve lt a ñ a d e có d ig o HTML a u n a p á g in a p a ra m o s t ra rs e la a l u s u a rio , la ló g ica s e e je cu t a e n e l clie n t e .
Po r e je m p lo , e l m é t o d o lis t AllI t e m s ( o u t ) e je cu t a có d ig o e n e l clie n t e p a ra g e n e ra r d in á m ica m e n t e u n a p á g in a HTML p a ra q u e la ve a e l clie n t e e n u n n a ve g a d o r. La p á g in a HTML
s e re lle n a co n lo s re s u lt a d o s d e u n a lla m a d a a Bid d e rBe a n q u e e je cu t a la ló g ica e n e l s e rvid o r p a ra g e n e ra r u n a lis t a d e t o d o s lo s ít e m s d e la s u b a s t a .

private void listAllItems(ServletOutputStream out)


throws IOException{

//Put text on HTML page


setTitle(out, "Auction results");
String text = "Click Item number for description
and to place bid.";
try{
addLine("<BR>"+text, out);
//Look up Bidder bean home interface.
BidderHome bhome=(BidderHome) [Link]("bidder");
//Create Bidder bean remote interface.
Bidder bid=[Link]();
//Call Bidder bean method through remote interface.
Enumeration enum=(Enumeration)[Link]();

if(enum != null) {
//Put retrieved items on servlet page.
displayitems(enum, out);
addLine("", out);
}
} catch (Exception e) {
//Pring error on servlet page.
addLine("AuctionServlet List All Items error",out);
[Link]("AuctionServlet <list>:"+e);
}
[Link]();
}
Beans de Entidad
Au c t io n I t e m Be a n y Re g is t ra t io n Be a n s o n Be a n s d e e n t id a d . Au c t io n I t e m Be a n a ñ a d e n u e vo s ít e m s d e s u b a s t a a la b a s e d e d a t o s y a ct u a liza la ca n t id a d p u ja d a p o r lo s
u s u a rio s cu a n d o é s t o s p u ja n p o r e l ít e m . Re g is t ra t io n Be a n a ñ a d e in fo rm a ció n a la b a s e d e d a t o s s o b re u s u a rio s re g is t ra d o s . Am b o s Be a n s co n s is t e n e n la s cla s e s d e s crit a s a q u í.

AuctionItem Entity Bean

Aq u í e s t á n la s cla s e d e Au c t io n I t e m Be a n . Re cu e rd a q u e e s t o s Be a n s d e En t e rp ris e s o n o b je t o s d is t rib u id o s q u e u s a n e l API RMI ( In vo ca ció n Re m o t a d e Mé t o d o s ) , p o r e s o , cu a n d o


o cu rre u n e rro r s e la n za u n a e xce p ció n RMI re m o t a .
● Au ct io n It e m . ja va

● Au ct io n It e m Ho m e . ja va
● Au ct io n It e m Be a n . ja va
● Au ct io n It e m Pk. ja va
Au c t io n I t e m e s u n in t e rfa ce re m o t o . De s crib e q u é h a ce e l Be a n d e cla ra n d o lo s m é t o d o s d e fin id o s p o r e l u s u a rio q u e p ro p o rcio n a n la ló g ica d e n e g o cio p a ra e s t e Be a n . Es t o s
m é t o d o s s o n u s a d o s p o r e l clie n t e p a ra in t e ra ct u a r co n e l Be a n s o b re la co n e xió n re m o t a . S u n o m b re s e m a p e a a la t a b la AUCTI ON I TEMS q u e p u e d e s ve r a b a jo .
Au c t io n I t e m Ho m e e s e l in t e rfa ce h o m e . De s crib e có m o s e cre a e l Be a n , co m o e n co n t ra rlo , y e lim in a rlo d e s u co n t e n e d o r. La s h e rra m ie n t a s d e d e s a rro llo d e l s e rvid o r d e Be a n s d e
En t e rp ris e p ro p o rcio n a rá n la im p le m e n t a ció n p a ra e s t e in t e rfa ce .
Au c t io n I t e m Be a n e s e l Be a n d e En t e rp ris e . Im p le m e n t a En t it y Be a n , p ro p o rcio n a la ló g ica d e n e g o cio p a ra lo s m é t o d o s d e fin id o s p o r e l d e s a rro lla d o r, e im p le m e n t a lo s m é t o d o s
d e En t it y Be a n p a ra cre a r e l Be a n y s e le ccio n a r e l co n t e xt o d e s e s ió n . Es t a e s u n a cla s e q u e n e ce s it a im p le m e n t a r e l d e s a rro lla d o r d e l Be a n . S u s ca m p o s va ria b le s m a p e a n a lo s
ca m p o s d e la t a b la AUCTI ON I TEMS q u e p u e d e s ve r a b a jo .
Au c t io n I t e m P K e s la cla s e cla ve p rim a ria . El s e rvid o r d e Be a n s En t e rp ris e re q u ie re q u e u n Be a n d e En t id a d Ma n e ja d o p o r Co n t e n e d o r t e n g a u n a cla s e cla ve p rim a ria co n u n
ca m p o p ú b lico p rim a rio ( o ca m p o s , s i s e u s a n cla ve s p rim a ria s co m p u e s t a s ) . El d e s a rro lla d o r d e l Be a n im p le m e n t a e s t a cla s e . El ca m p o I D e s la cla ve p rim a ria e n la t a b la
AUCTI ON I TEMS q u e p u e d e s ve r m á s a b a jo , p o r e s o e l ca m p o id e s u n ca m p o p ú b lico d e e s t a cla s e . Al ca m p o id s e le a s ig n a u n va lo r cu a n d o s e co n s t ru ye la cla s e d e la cla ve
p rim a ria .
Po d e m o s p e d irle a l co n t e n e d o r q u e m a n e je la p e rs is t e n cia d e la b a s e d e d a t o s d e u n Be a n En t e rp ris e o e s crib ir e l có d ig o p a ra m a n e ja r la p e rs is t e n cia p o r n o s o t ro s m is m o s . En e s t e
ca p ít u lo , t o d o s lo s b e a n s s o n m a n e ja d o s p o r e l co n t e n e d o r. Co n e s t o n o s o t ro s s ó lo d e cim o s q u é ca m p o s s o n m a n e ja d o s p o r e l co n t e n e d o r y le d e ja m o s a l s e rvid o r d e Ja va Be a n s d e
En t e rp ris e q u e h a g a e l re s t o . Es t o e s fe n o m e n a l p a ra la s a p lica cio n e s s e n cilla s , p e ro s i t u vie ra m o s q u e co d ifica r a lg o m á s co m p le jo , n e ce s it a ría m o s m á s co n t ro l.
Có m o e s crib ir lo s s e rvicio s o cu lt o s d e lo s Ja va Be a n s En t e rp ris e p a ra g a n a r m á s co n t ro l o p ro p o rcio n a r s e rvicio s s im ila re s p a ra la s a p lica cio n e s q u e n o u s e n Ja va Be a n s d e En t e rp ris e
s e cu b re e n e l ca p ít u lo 3 .

Tabla Auction Items

Aq u í e s t á la t a b la AUCTI ON I TEMS .

create table AUCTIONITEMS (SUMMARY VARCHAR(80) ,


ID INT ,
COUNTER INT ,
DESCRIPTION VARCHAR(1000) ,
STARTDATE DATE ,
ENDDATE DATE ,
STARTPRICE DOUBLE PRECISION ,
INCREMENT DOUBLE PRECISION ,
SELLER VARCHAR(30) ,
MAXBID DOUBLE PRECISION,
BIDCOUNT INT,
HIGHBIDDER VARCHAR(30) )

Registration Entity Bean

Re g is t ra t io n Be a n co n s t a d e la s m is m a s cla s e s y t a b la s d e b a s e d e d a t o s q u e e l Be a n Au c t io n I t e m , e xce p t o q u e la ló g ica d e n e g o cio re a l, lo s ca m p o s d e la t a b la d e la b a s e d e


d a t o s , y la cla ve p rim a ria s o n d e a lg u n a fo rm a d ife re n t e s . En ve z d e d e s crib ir la s cla s e s , p o d e m o s n a ve g a r p o r e lla s y lu e g o vo lve r a la d e s crip ció n d e la s cla s e s d e Au c t io n I t e m s i
t e n e m o s a lg u n a p re g u n t a .
● Re g is t ra t io n . ja va

● Re g is t ra t io n Ho m e . ja va
● Re g is t ra t io n Be a n . ja va
● Re g is t ra t io n PK. ja va
Tabla Registration

Aq u í e s t á la t a b la REGI S TRATI ON .

create table REGISTRATION (THEUSER VARCHAR(40) ,


PASSWORD VARCHAR(40) ,
EMAILADDRESS VARCHAR(80) ,
CREDITCARD VARCHAR(40) ,
BALANCE DOUBLE PRECISION )

Beans de Sesión
Bid d e rBe a n y S e lle rBe a n s o n lo s Be a n s d e s e s ió n . Bid d e rBe a n re cu p e ra u n a lis t a d e lo s ít e m s d e la s u b a s t a , b u s ca ít e m s , ch u e q u e a e l ID y la p a s s wo rd d e l u s u a rio cu a n d o
a lg u ie n h a ce u n a p u ja , y a lm a ce n a la s n u e va s p u ja s e n la b a s e d e d a t o s . S e lle rBe a n ch e q u e a e l ID y la p a s s wo rd d e l u s u a rio cu a n d o a lg u ie n p o s t e a u n ít e m p a ra s u s u b a s t a , y
a ñ a d e n u e vo s ít e m s p a ra s u b a s t a a la b a s e d e d a t o s .
Am b o s Be a n s d e s e s ió n e s t á n d e s a rro lla d o s in icia lm e n t e co m o Be a n s s in e s t a d o . Un Be a n s in e s t a d o n o m a n t ie n e u n re g is t ro d e lo q u e h izo e l clie n t e e n u n a lla m a d a a n t e rio r;
m ie n t ra s q u e u n Be a n co n e s t a d o co m p le t o s i lo h a ce . Lo s Be a n s co n e s t a d o co m p le t o s o n m u y ú t ile s s i la o p e ra ció n e s a lg o m á s q u e u n a s im p le b ú s q u e d a y la o p e ra ció n d e l clie n t e
d e p e n d e d e a lg o q u e h a s u ce d id o e n u n a lla m a d a a n t e rio r.

Bean de sesión Bidder

Aq u í e s t á n la s cla s e d e Bid d e rBe a n . Re cu e rd a q u e e s t o s Be a n s d e En t e rp ris e s o n o b je t o s d is t rib u id o s q u e u s a n e l API RMI ( In vo ca ció n Re m o t a d e Mé t o d o s ) , p o r e s o , cu a n d o


o cu rre u n e rro r s e la n za u n a e xce p ció n RMI re m o t a .
No e xit e n cla ve s p rim a ria s p o rq u e e s t o s Be a n s s o n t e m p o ra le s y n o h a y a cce s o s a la b a s e d e d a t o s . Pa ra re cu p e ra r ít e m s d e la b a s e d e d a t o s , Bid d e rBe a n cre a u n e je m p la r d e
Au c t io n I t e m Be a n , y p a ra p ro ce s a r la s p u ja s , cre a u n e je m p la r d e Re g is t ra t io n Be a n .
● Bid d e r. ja va

● Bid d e rHo m e . ja va
● Bid d e rBe a n . ja va
Bid d e r e s u n in t e rfa ce re m o t o . De s crib e lo q u e h a ce e l Be a n d e cla ra n d o lo s m é t o d o s d e fin id o s p o r e l d e s a rro lla d o r q u e p ro p o rcio n a n la ló g ica d e n e g o cio p a ra e s t e Be a n . Es t o s o n
lo s q u e q u e e l clie n t e lla m a d e fo rm a re m o t a .
Bid d e rHo m e e s e l in t e rfa ce h o m e . De s cib e có m o s e cre a r e l Be a n , co m o s e b u s ca y co m o s e e lim in a d e s u co n t e n e d o r.
Bid d e rBe a n e s e l Be a n d e En t e rp ris e . Im p le m e n t a S e s s io n Be a n , p ro p o rcio n a la ló g ica d e n e g o cio p a ra lo s m é t o d o s d e fin id o s p o r e l d e s a rro lla d o r, e im p le m e n t a lo s m é t o d o s d e
S e s s io n Be a n p a ra cre a r e l Be a n y s e le ccio n a r e l co n t e xt o d e s e s ió n .

Bean de sesion Seller

S e lle rBe a n co n s t a d e lo s m is m o s t ip o s d e cla s e q u e u n Bid d e rBe a n , e xce p t o q u e la ló g ica d e n e g o cio e s d ife re n t e . En ve z d e d e s crib ir la s cla s e s , p u e d e s n a ve g a r p o r e lla s y lu e g o
vo lve r a la e xp lica ció n d e Bid d e rBe a n s i t ie n e s a lg u n a d u d a .
● S e lle r. ja va

● S e lle rHo m e . ja va
● S e lle rBe a n . ja va

Clases Contenedor
La s cla s e s q u e n e ce s it a e l co n t e n e d o r p a ra d e s a rro lla r u n Be a n En t e rp ris e d e n t ro d e u n s e rvid o r d e Ja va Be a n s En t e rp ris e p a rt icu la r s e g e n e ra n co n u n a h e rra m ie n t a d e d e s a rro llo .
La s cla s e s in clu ye n _ S t u b . c la s s y _ S k e l. c la s s q u e p ro p o rcio n a n e l RMI e n e l clie n t e y e l s e rvid o r re s p e ct iva m e n t e .
Es t a s cla s e s s e u t iliza n p a ra m o ve r d a t o s e n t re e l p ro g ra m a clie n t e y e l s e rvid o r d e Ja va Be a n s d e En t e rp ris e . Ad e m á s , la im p le m e n t a ció n d e la s cla s e s s e cre a p a ra lo s in t e rfa ce s y
la s re g la s d e d e s a rro llo d e fin id a s p a ra n u e s t ro Be a n .
El o b je t o S t u b s e in s t a la o s e d e s ca rg a e n e l s is t e m a clie n t e y p ro p o rcio n a u n o b je t o p ro xy lo ca l p a ra e l clie n t e . Im p le m e n t a lo s in t e rfa ce s re m o t o s y d e le g a d e fo rm a t ra n s p a re n t e
t o d a s la s lla m a d a s a m é t o d o s a t ra vé s d e la re d a l o b je t o re m o t o .
El o b je t o S k e l s e in s t a la o s e d e s ca rg a e n e l s is t e m a s e rvid o r y p ro p o rcio n a u n o b je t o p ro xy lo ca l p a ra e l s e rvid o r. De s p e m p a q u e t a lo s d a t o s re cib id o s a t ra vé s d e la re d d e s d e e l
o b je t o S t u b p a ra p ro ce s a rlo s e n e l s e rvid o r.

Oz it o
Examinar un Bean Controlado por Contenedor
Es t a s e cció n p a s e a a t ra vé s d e l có d ig o d e Re g is t ra t io n Be a n . ja va p a ra ve r lo fá cil
q u e e s h a ce r q u e e l co n t e n e d o r m a n e je la p e rs is t e n cia d e l a lm a ce n a m ie n t o d e
d a t o s e n u n m e d io o cu lt o co m o u n a b a s e d e d a t o s ( p o r d e fe ct o ) .
● Va ria b le s Mie m b ro

● Mé t o d o Cre a t e
● Mé t o d o s d e Co n t e xt o d e En t id a d
● Mé t o d o Lo a d
● Mé t o d o S t o re
● Co n n e ct io n Po o lin g
● De s crip t o r d e De s a rro llo

Variables Miembro
Un e n t o rn o d e co n t e n e d o r co n t ro la d o r n e ce s it a s a b e r q u é va ria b le s s o n p a ra
a lm a ce n a m ie n t o p e rs is t e n t e y cu a le s n o . En e l le n g u a je Ja va TM, la p a la b ra cla ve
t ra n s ie n t in d ica va ria b le s q u e n o s o n in clu id a s cu a n d o lo s d a t o s d e u n o b je t o s e
s e ria liza n y e s crib e n e n u n a lm a ce n a m ie n t o p e rm a n e n t e . En la cla s e
Re g is t ra t io n Be a n . ja v a , la va ria b le En t it y Co n t e x t e s t á m a rca d a co m o t ra n s ie n t
p a ra in d ica r q u e s u d a t o n o s e rá e s crit o e n n in g ú n m e d io d e a lm a ce n a m ie n t o .
El d a t o d e En t it y Co n t e x t n o s e e s crib e e n e l a lm a ce n a m ie n t o p e rm a n e n t e p o rq u e
s u p ro p ó s it o e s p ro p o rcio n a r in fo rm a ció n s o b re e l co n t e xt o e n e l m o m e n t o d e
e je cu ció n d e l co n t e n e d o r. Po r lo t a n t o , n o co n t ie n e d a t o s s o b re e l u s u a rio
re g is t ra d o y n o d e b e ría g ra b a rs e e n u n m e d io d e a lm a ce n a m ie n t o . La s o t ra s
va ria b le s e s t á n d e cla ra d a s co m o p u b lic , p o r lo q u e e l co n t e n e d o r d e e s t e e je m p lo
p u e d e d e s cu b rirla s u s a n d o e l API Re fle ct io n .

protected transient EntityContext ctx;


public String theuser, password, creditcard,
emailaddress;
public double balance;

Método Create
El m é t o d o e jb Cre a t e d e l Be a n e s lla m a d o p o r e l co n t e n e d o r d e s p u é s d e q u e e l
p ro g ra m a clie n t e lla m e a l m é t o d o c re a t e s o b re e l in t e rfa ce re m o t o y p a s e lo s
d a t o s d e re g is t ro . Es t e m é t o d o a s ig n a lo s va lo re s d e e n t ra d a a la s va ria b le s
m ie m b ro q u e re p re s e n t a n lo s d a t o s d e l u s u a rio . El co n t e n e d o r m a n e ja e l
a lm a ce n a m ie n t o y ca rg a d e lo s d a t o s , y cre a n u e va s e n t ra d a s e n e l m e d io d e
a lm a ce n a m ie n t o o cu lt o .

public RegistrationPK ejbCreate(String theuser,


String password,
String emailaddress,
String creditcard)
throws CreateException, RemoteException {

[Link]=theuser;
[Link]=password;
[Link]=emailaddress;
[Link]=creditcard;
[Link]=0;

Métodos de Contexto de Entidad


Un Be a n d e e n t id a d t ie n e u n e je m p la r d e En t it y Co n t e x t a s o cia d o q u e o fre ce a l
Be a n a cce s o a la in fo rm a ció n d e l co n t e n e d o r co n t ro la d o r e n e l m o m e n t o d e la
e je cu ció n , co m o e l co n t e xt o d e la t ra n s a ció n .

public void setEntityContext(


[Link] ctx)
throws RemoteException {
[Link] = ctx;
}

public void unsetEntityContext()


throws RemoteException{
ctx = null;
}

Método Load
El m é t o d o e jb Lo a d d e l Be a n e s lla m a d o p o r e l co n t e n e d o r p a ra ca rg a r lo s d a t o s
d e s d e e l m e d io d e a lm a ce n a m ie n t o o cu lt o . Es t o s e ría n e ce s a rio cu a n d o
Bid d e rBe a n o S e lle rBe a n n e ce s it e n ch e q u e a r la ID y p a s s wo rd d e l u s u a rio .

N o t a : No t o d o s lo s o b je t o s Be a n s e s t á n vivo s e n u n m o m e n t o d a t o . El
s e rvid o r d e Ja va Be a n s TM d e En t e rp ris e p o d ría t e n e r u n n ú m e ro
co n fig u ra b le d e Be a n s q u e p u e d e m a n t e n e r e n m e m o ria .

Es t e m é t o d o n o e s t á im p le m e n t a d o p o rq u e e l co n t e n e d o r d e lo s Ja va Be a n s d e
En t e rp ris e ca rg a lo s d a t o s p o r n o s o t ro s .

public void ejbLoad() throws RemoteException {}


Método Store
El m é t o d o e jb S t o re d e l Be a n e s lla m a d o p o r e l co n t e n e d o r p a ra g ra b a r lo s d a t o s
d e l u s u a rio . Es t e m é t o d o n o e s t á im p le m e n t a d o p o rq u e e l co n t e n e d o r d e lo s
Ja va Be a n s d e En t e rp ris e g ra b a lo s d a t o s p o r n o s o t ro s .

public void ejbStore() throws RemoteException {}

Connection Pooling
La ca rg a y a lm a ce n a m ie n t o d e d a t o s e n la b a s e d e d a t o s p u e d e t a rd a r m u ch o
t ie m p o y re d u cir e l re n d im ie n t o g e n e ra l d e la a p lica ció n . Pa ra re d u cir e l t ie m p o d e
co n e xió n , e l s e rvid o r d e We b lo g ic BEA u s a u n a co la d e co n e xio n e s JDBC TM p a ra
h a ce r u n ca ch e co n la s co n e xio n e s co n la b a s e d e d a t o s , p o r e s o la s co n e xio n e s
e s t á n s ie m p re d is p o n ib le s cu a n d o la a p lica ció n la s n e ce s it a .
S in e m b a rg o , n o e s t a m o s lim it a d o s a la co la d e co n e xio n e s JDBC. Po d e m o s
s o b re e s crib ir e l co m p o rt a m ie n t o d e la co la d e co n e xio n e s d e l Be a n y s u s t it u irla
n o s o t ro s m is m o s .

Descriptor de Desarrollo
La co n fig u ra ció n re s t a n t e p a ra u n Bra n s p e rs is t e n t e co n t ro la d o p o r co n t e n e d o r
o cu rre e n e l m o m e n t o d e l d e s a rro llo . Lo q u e ve s a b a jo e s u n De s crip t o r d e
De s a rro llo b a s a d o e n t e xt o u s a d o e n u n s e rvid o r d e BEA We b lo g ic En t e rp ris e
Ja va Be a n s .

Texto del Descriptor de Desarrollo

(environmentProperties

(persistentStoreProperties
persistentStoreType jdbc

(jdbc
tableName registration
dbIsShared false
poolName ejbPool
(attributeMap
creditcard creditcard
emailaddress emailaddress
balance balance
password password
theuser theuser
); end attributeMap
); end jdbc
); end persistentStoreProperties
); end environmentProperties

El d e s crip t o r d e d e s a rro llo in d ica q u e e l a lm a ce n a m ie n t o e s u n a b a s e d e d a t o s cu ya


co n e xió n e s t á co n t e n id a e n u n a co la d e co n e xio n e s JDBC TM lla m a d a e jb P o o l. El
a t t rib u t e Ma p co n t ie n e la va ria b le d e l Be a n En t e rp ris e a la izq u ie rd a y s u ca m p o
a s o cia d o d e la b a s e d e d a t o s a la d e re ch a .

Descriptor de Desarrollo XML

En En t e rp ris e Ja va Be a n s 1 . 1 , e l d e s crip t o r d e d e s a rro llo u s a XML. Aq u í e s t á la


co n fig u ra ció n e q u iva le n t e e n XML:

<persistence-type>Container</persistence-type>
<cmp-field><field-name>creditcard
</field-name></cmp-field>
<cmp-field><field-name>emailaddress
</field-name></cmp-field>
<cmp-field><field-name>balance
</field-name></cmp-field>
<cmp-field><field-name>password
</field-name></cmp-field>
<cmp-field><field-name>theuser
</field-name></cmp-field>
<resource-ref>
<res-ref-name>registration</res-ref-name>
<res-type>[Link]</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Lo s ca m p o s d e l co n t e n e d o r co n t ro la d o r s e m a p e a n d ire ct a m e n t e a s u n o m b re
co n t ra p a rt e e n la t a b la d e la b a s e d e d a t o s . El re cu rs o d e a u t o riza ció n d e l
co n t e n e d o r ( re s - a u t h ) s ig n ifica q u e e l co n t e n e d o r m a n e ja e l lo g in a la t a b la
REGI S TRATI ON .

Oz it o
Métodos de Búsqueda del Contenedor Controlador
La fa cilid a d d e b ú s q u e d a d e la ca s a d e s u b a s t a s e s t á im p le m e n t a d a co m o u n m é t o d o fin d e r d e l co n t e n e d o r. Arra n ca cu a n d o e l u s u a rio e s crib e u n a ca d e n a d e b ú s q u e d a y p u ls a e l
b o t ó n S u b m it e n la p á g in a p rin cip a l p a ra lo ca liza r u n ít e m d e la s u b a s t a . Co m o s e m u e s t ra e n e l d ia g ra m a , e l n a ve g a d o r p a s a la ca d e n a d e b ú s q u e d a a l m é t o d o
Au c t io n S e rv le t . s e a rc h I t e m , q u e lu e g o la p a s a a l m é t o d o Bid d e rBe a n . g e t Ma t c h in g I t e m s Lis t .
En e s t e p u n t o , Bid d e rBe a n . g e t Ma t c h in g I t e m s Lis t p a s a la ca d e n a d e b ú s q u e d a a l m é t o d o fin d AllMa t c h in g I t e m s d e cla ra d o e n e l in t e rfa ce Au c t io n I t e m Ho m e . Es t e m é t o d o e s
u n m é t o d o b u s c a d o r, y la im p le m e n t a ció n d e l co n t e n e d o r va ría la fo rm a e n q u e m a n e ja la s lla m a d a s a lo s m é t o d o s fin d e r. Lo s co n t e n e d o re s BEA We b lo g ic b u s ca n e n e l d e s crip t o r
d e d e s a rro llo d e l Be a n la in fo rm a ció n s o b re lo s m é t o d o s fin d e r.
En e l ca s o d e la b u s q u e d a , e l d e s crip t o r d e d e s a rro llo m a p e a la ca d e n a d e b ú s q u e d a p a s a d a a Au c t io n I t e m Ho m e . fin d AllMa t c h in g I t e m s a l ca m p o s u m m a ry e n la t a b la
Au c t io n I t e m s d e la b a s e d e d a t o s . Es t e le d ice a l s e rvid o r En t e rp ris e Ja va Be a n s TM q u e re cu p e re d a t o s d e t o d o s lo s ca m p o s q u e e n e l ca m p o s u m m a ry co n t e n g a n e l t e xt o d e la
ca d e n a d e b ú s q u e d a .
Es t a s e cció n p a s e a a t ra vé s d e la s d ife re n t e s p a rt e s d e l có d ig o d e b ú s q u e d a fin d e r.
● Au ct io n S e rvle t . s e a rch It e m s

● Bid d e rBe a n . g e t Ma t ch in g It e m s Lis t


● Au ct io n It e m Ho m e . fin d AllMa t ch in g It e m s
● De s crip t o r d e De s a rro llo d e Au ct io n It e m Be a n

[Link]
El m é t o d o s e a rc h I t e m s re cu p e ra e l t e xt o d e la ca d e n a d e l n a ve g a d o r, cre a u n a p á g in a HTML p a ra m o s t a r e l re s u lt a d o d e la b ú s q u e d a , y le p a s a la ca d e n a d e b ú s q u e d a a l m é t o d o
Bid d e rBe a n . g e t Ma t c h in g I t e m s Lis t . Bid d e rBe a n e s u n Be a n d e s e s ió n q u e re cu p e ra u n a lis t a d e ít e m s d e la s u b a s t a y ch e q u e a la ID y la p a s s wo rd d e l u s u a rio p a ra lo s u s u a rio s
q u e q u ie re n p u ja r p o r a lg ú n a rt icu lo .
Lo s re s u lt a d o s d e la b ú s q u e d a s e d e vu e lve n a e s t e m é t o d o e n u n a va ria b le En u m e ra t io n .

private void searchItems(ServletOutputStream out,


HttpServletRequest request)
throws IOException {

//Retrieve search string


String searchString=[Link](
"searchString");

//Create HTML page


String text = "Click Item number for description
and to place bid.";
setTitle(out, "Search Results");
try {
addLine("<BR>"+text, out);

//Look up home interface for BidderBean


BidderHome bhome=(BidderHome) [Link](
"bidder");

//Create remote interface for BidderBean


Bidder bid=[Link]();

//Pass search string to BidderBean method


Enumeration enum=(Enumeration)
[Link](searchString);

if(enum != null) {
displayitems(enum, out);
addLine("", out);
}
} catch (Exception e) {
addLine("AuctionServlet Search Items error",
out);
[Link]("AuctionServlet <newlist>:
"+e);
}
[Link]();
}

[Link]
El m é t o d o Bid d e rBe a n . g e t Ma t c h in g I t e m s Lis t lla m a a l m é t o d o Au c t io n I t e m Ho m e . fin d AllMa t c h in g I t e m s y le p a s a la ca d e n a d e b ú s q u e d a . Au c t io n I t e m Be a n e s u n b e a n d e
e n t id a d q u e m a n e ja a ct u a liza cio n e s y re cu p e ra cio n e s d e ít e m s d e la s u b a s t a .
El re s u lt a d o d e la b ú s q u e d a e s d e vu e lt o a e s t e m é t o d o e n u n a va ria b le En u m e ra t io n .

public Enumeration getMatchingItemsList(


String searchString)
throws RemoteException {

Enumeration enum=null;
try{
//Create Home interface for AuctionItemBean
AuctionItemHome home = (AuctionItemHome)
[Link]("auctionitems");

//Pass search string to Home interface method


enum=(Enumeration)[Link](
searchString);
}catch (Exception e) {
[Link]("getMatchingItemList: "+e);
return null;
}
return enum;
}

[Link]
El m é t o d o Au c t io n I t e m Ho m e . fin d AllMa t c h in g I t e m s n o e s t á im p le m e n t a d o p o r Au c t io n I t e m Be a n . La s im p le m e n t a cio n e s d e l m é t o d o Au c t io n I t e m Be a n fin d e r e s t á n
d e fin id a s e n e l d e s crip t o r d e d e s a rro llo d e Au c t io n I t e m Be a n cu a n d o s e u s a n co n t e n e d o re s d e BEA We b lo g ic.

Cu a n d o s e u s a n e s t o s co n t e n e d o re s , in clu s o s i e l Be a n t ie n e im p le m e n t a cio n e s d e l m é t o d o fin d e r, s o n ig n o ra d o s y e n s u lu g a r s e co n s u lt a n la s s e le ccio n e s e n e l d e s crip t o r d e


d e s a rro llo .

//Declare method in Home interface


public Enumeration findAllMatchingItems(
String searchString)
throws FinderException, RemoteException;

Descriptor de Desarrollo de AuctionItemBean


Cu a n d o s e lla m a a u n m é t o d o fin d e r d e u n Be a n , e l co n t e n e d o r co n s u lt a e l d e s crip t o r d e d e s a rro llo p a ra e s e Be a n p a ra e n co n t ra r q u é d a t o s n e ce s it a re cu p e ra r e l m é t o d o fin d e r d e
la t a b la d e la b a s e d e d a t o s . El co n t e n e d o r p a s a e s t a in fo rm a ció n a l s e rvid o r En t e rp ris e Ja va Be a n s , q u e h a ce la re cu p e ra ció n re a l.
El d e s crip t o r d e d e s a rro llo p a ra Au c t io n I t e m Be a n p ro p o rcio n a fin d e rD e s c rip t o rs p a ra t o d o s lo s m é t o d o s fin d e r d e cla ra d o s e n e l in t e rfa ce Au c t io n I t e m Ho m e . El
fin d e rD e s c rip t o r p a ra e l m é t o d o fin d AllMa t c h in g I t e m s m a p e a la ca d e n a d e b ú s q u e d a a l ca m p o s u m m a ry d e la t a b la Au c t io n I t e m s d e la b a s e d e d a t o s . Es t o le d ice a l
s e rvid o r En t e rp ris e Ja va Be a n s q u e re cu p e re lo s d a t o s d e t o d a s la s fila s d e la t a b la e n la s q u e e l co n t e n id o d e l ca m p o s u m m a ry co rre s p o n d a co n e l t e xt o d e la ca d e n a d e b ú s q u e d a .

(finderDescriptors
"findAllItems()" "(= 1 1)"
"findAllNewItems([Link] newtoday)"
"(= startdate $newtoday)"
"findAllClosedItems([Link] closedtoday)"
"(= enddate $closedtoday)"
"findAllMatchingItems(String searchString)"
"(like summary $searchString)"
); end finderDescriptors

Oz it o
Manejo de Datos y Transaciones
Cu a n d o u s a m o s la a rq u it e ct u ra En t e rp ris e Ja va Be a n s TM, lo s d a t o s s e le e n y
e s crib e n e n la b a s e d e d a t o s s in t e n e r q u e e s crib ir n in g ú n có d ig o S QL. Pe ro ¿ q u é
p a s a s i n o q u e re o s a lm a ce n a r lo s d a t o s e n u n a b a s e d e d a t o s , o s i q u e re m o s
e s crib ir n u e s t ro s p ro p io s co m a n d o s S QL, o m a n e ja r t ra n s a cio n e s ?
Po d e m o s s o b re e s crib ir e l co n t e n e d o r co n t ro la d o r in t e rn o d e p e rs is t e n cia e
im p le m e n t a r u n Be a n co n t ro la d o r d e p e rs is t e n cia u s a n d o n u e s t ro p ro p io
a lm a ce n a m ie n t o d e d a t o s y n u e s t ro có d ig o d e m a n e jo d e t ra n s a cio n e s .
La p e rs is t e n cia d e l Be a n co n t ro la d o r s e co n vie rt e e n ú t il cu a n d o q u e re m o s m á s
co n t ro l d e l q u e p ro p o rcio n a e l co n t e n e d o r co n t ro la d o r. Po r e je m p lo p o d ría m o s
s o b re e s crib ir la m a yo ría d e lo s co n t e n e d o re s p a ra q u e m a p e e n u n Be a n e n u n a fila
d e la t a b la , im p le m e n t a r n u e s t ro s p ro p io s m é t o d o s fin d e r, o p e rs o n a liza r e l ca ch é .
Es t e ca p ít u lo p re s e n t a d o s ve rs io n e s d e la cla s e Re g is t ra t io n Be a n d e l ca p ít u lo
a n t e rio r. Un a ve rs ió n le e y e s crib e lo s d a t o s d e l u s u a rio e n u n fich e ro u s a n d o
s t re a m s d e e n t ra d a y s a lid a s e ria liza d o s . La o t ra ve rs ió n p ro p o rcio n a n u e s t ro s
p ro p io s co m a n d o s S QL p a ra le e r y e s crib ir e n la b a s e d e d a t o s . Ta m b ié n e xp lica
có m o p o d e m o s e s crib ir n u e s t ro p ro p io có d ig o d e m a n e jo d e t ra n s a cio n e s .
● Be a n - Co n t ro la d o r d e Pe rs is t e n cia y la p la t a fo rm a JDBC TM

● Ma n e ja r Tra n s a cio n e s
● Mé t o d o s d e Bú s q u e d a d e l Be a n Co n t ro la d o r

¿Tienes Prisa?
Es t a t a b la t e lle va d ire ct a m e n t e a lo s t ó p ico s e s p e cífico s
Tó p ic o S e c c ió n
Be a n - Co n t ro la d o r d e Pe rs is t e n cia y la ● Co n e ct a r co n la b a s e d e d a t o s
Pla t a fo rm n a JDBC ● Mé t o d o Cre a t e
● Mé t o d o Lo a d
● Mé t o d o Re fre s h
● Mé t o d o S t o re
● Mé t o d o Fin d
Ma n e jo d e Tra n s a cio n e s ● ¿ Po r q u é Ma n e ja r Tra n s a cio n e s ?
● S in cro n iza ció n d e S e s ió n
● Tra n s a ct io n Co m m it Mo d e
Mé t o d o s d e Bú s q u e d a d e l Be a n - Co n t ro la d o r ● Au ct io n S e rvle t . s e a rch It e m s
● S e a rch Be a n
Oz it o
Bean-Controlador de Persistencia y la Plataforma
JDBC
Pu e d e q u e h a ya a lg u n a s ve ce s q u e q u e rra m o s s o b re e s crib ir la p e rs is t e n cia d e l
co n t e n e d o r co n t ro la d o r e im p le m e n t a r m é t o d o s d e Be a n s d e e n t id a d o d e s e s ió n
p a ra u s a r n u e s t ro s p ro p io s co m a n d o s S QL. Es t e t ip o d e p e rs is t e n cia co n t ro la d a p o r
e l Be a n p u e d e s e r ú t il s i n e ce s it a m o s a u m e n t a r e l re d im ie n t o o m a p e a r d a t o s d e
m ú lt ip le s Be a n s e n u n a s ó la fila d e la t a b la d e la b a s e d e d a t o s .
Es t a s e cció n n o s m u e s t ra có m o co n ve rt ir la cla s e Re g is t ra t io n Be a n . ja va p a ra
a cce d e r a la b a s e d e d a t o s co n la cla s e P re p a re d S t a t e m e n t d e l JDBC.
● Co n e ct a r co n la Ba s e d e Da t o s

● Mé t o d o Cre a t e
● Mé t o d o Lo a d
● Mé t o d o Re fre s h
● Mé t o d o S t o re
● Mé t o d o Fin d

Conectar con la Base de Datos


Es t a ve rs ió n d e la cla s e Re g is t ra t io n Be a n . ja va e s t a b le ce la co n e xió n co n la b a s e d e
d a t o s e je m p la riza n d o u n a cla s e e s t á t ica D riv e r y p ro p o rcio n a n d o e l m é t o d o
g e t Co n n e c t io n .
El m é t o d o g e t Co n n e c t io n n e ce s it a la cla s e e s t á t ica D riv e rMa n a g e r p a ra u n
m o t o r d e la b a s e d a t o s re g is t ra d a q u e co rre s p o n d a co n la URL. En e s t e ca s o , la
URL e s w e b lo g ic . jd b c . jt s . D riv e r.

//Create static instance of database driver


static {
new [Link]();
}

//Get registered driver from static instance


public Connection getConnection() throws SQLException{
return [Link](
"jdbc:weblogic:jts:ejbPool");
}
Método Create
El m é t o d o e jb Cre a t e a s ig n a va lo re s a la s va ria b le s m ie m b ro , o b t ie n e u n a co n e xió n
co n la b a s e d e d a t o s , y cre a u n e je m p la r d e la cla s e ja v a . s q l. P re p a re d S t a t e m e n t
p a ra e je cu t a r la s e n t e n cia S QL q u e e s crib e lo s d a t o s e n la t a b la re g is t ra t io n d e la
ba se de da tos.
Un o b je t o P re p a re d S t a t e m e n t s e cre a d e s d e u n a s e n t e n ica S QL q u e s e e n vía a la
b a s e d e d a t o s y s e p re co m p ila a n t e s d e e n via r cu a lq u ie r d a t o . Po d e m o s lla m a r a
la s s e n t e n cia s s e t XXX a p ro p ia d a s s o b re e l o b je t o P re p a re d S t a t e m e n t p a ra
e n via r d a t o s . Ma n t e n ie n d o lo s o b je t o s P re p a re d S t a t e m e n t y Co n n e c t io n co m o
va ria b le s d e e je m p la r p riva d a s re d u cim o s la s o b re ca rg a p o rq u e la s s e n t e n cia s S QL
n o t ie n e n q u e co m p ila rs e ca d a ve z q u e s e e n vía n .
Lo ú lt im o q u e h a ce e l m é t o d o e jb Cre a t e e s cre a r u n a cla s e d e cla ve p rim a ria co n
e l ID d e l u s u a rio , y d e vo lve rlo a l co n t e n e d o r.

public RegistrationPK ejbCreate(String theuser,


String password,
String emailaddress,
String creditcard)
throws CreateException, RemoteException {

[Link]=theuser;
[Link]=password;
[Link]=emailaddress;
[Link]=creditcard;
[Link]=0;

try {
con=getConnection();
ps=[Link]("insert into registration (
theuser, password,
emailaddress, creditcard,
balance) values (
?, ?, ?, ?, ?)");
[Link](1, theuser);
[Link](2, password);
[Link](3, emailaddress);
[Link](4, creditcard);
[Link](5, balance);
if ([Link]() != 1) {
throw new CreateException (
"JDBC did not create a row");
}
RegistrationPK primaryKey = new RegistrationPK();
[Link] = theuser;
return primaryKey;
} catch (CreateException ce) {
throw ce;
} catch (SQLException sqe) {
throw new CreateException ([Link]());
} finally {
try {
[Link]();
} catch (Exception ignore) {}
try {
[Link]();
} catch (Exception ignore) {}
}
}

Método Load
Es t e m é t o d o o b t ie n e la cla ve p rim a ria d e s d e e l co n t e xt o d e e n t id a d y lo p a s a a l
m é t o d o re fre s h q u e ca rg a lo s d a t o s .

public void ejbLoad() throws RemoteException {


try {
refresh((RegistrationPK) [Link]());
}
catch (FinderException fe) {
throw new RemoteException ([Link]());
}
}

Método Refresh
El m é t o d o re fre s h e s e l có d ig o s u m in is t ra d o p o r e l p ro g ra m a d o r p a ra ca rg a r lo s
d a t o s d e s d e la b a s e d e d a t o s . Ch e q u e a la cla ve p rim a ria , o b t ie n e la co n e xió n co n la
b a s e d e d a t o s , y cre a u n o b je t o P re p a re d S t a t e m e n t p a ra co n s u lt a r e n la b a s e d e
d a t o s la cla ve p rim a ria e s p e cifica d a .
Lo s d a t o s s e le e n d e s d e la b a s e d e d a t o s e n u n Re s u lt S e t y s e a s ig n a n a la s
va ria b le s m ie m b ro g lo b a le s p a ra q u e Re g is t ra t io n Be a n t e n g a la in fo rm a ció n m á s
a ct u a liza d a d e l u s u a rio .

private void refresh(RegistrationPK pk)


throws FinderException, RemoteException {

if (pk == null) {
throw new RemoteException ("primary key
cannot be null");
}
Connection con = null;
PreparedStatement ps = null;
try {
con=getConnection();
ps=[Link]("select password,
emailaddress, creditcard,
balance from registration
where theuser = ?");
[Link](1, [Link]);
[Link]();
ResultSet rs = [Link]();
if ([Link]()) {
theuser = [Link];
password = [Link](1);
emailaddress = [Link](2);
creditcard = [Link](3);
balance = [Link](4);
}
else {
throw new FinderException (
"Refresh: Registration ("
+ [Link] + ") not found");
}
}
catch (SQLException sqe) {
throw new RemoteException ([Link]());
}
finally {
try {
[Link]();
}
catch (Exception ignore) {}
try {
[Link]();
}
catch (Exception ignore) {}
}
}
Método Store
Es t e m é t o d o o b t ie n e u n a co n e xió n co n la b a s e d e d a t o s y cre a u n
P re p a re d S t a t e m e n t p a ra a ct u a liza rla .

public void ejbStore() throws RemoteException {


Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = [Link]("update registration
set password = ?,
emailaddress = ?,
creditcard = ?,
balance = ?
where theuser = ?");
[Link](1, password);
[Link](2, emailaddress);
[Link](3, creditcard);
[Link](4, balance);
[Link](5, theuser);
int i = [Link]();
if (i == 0) {
throw new RemoteException (
"ejbStore: Registration (
" + theuser + ") not updated");
}
} catch (RemoteException re) {
throw re;
} catch (SQLException sqe) {
throw new RemoteException ([Link]());
} finally {
try {
[Link]();
} catch (Exception ignore) {}
try {
[Link]();
}
catch (Exception ignore) {}
}
}
Método Find
El m é t o d o e jb Fin d By P rim a ry Ke y co rre s p o n d e co n la firm a d e l m é t o d o
Fin d By P rim a ry Ke y d e l in t e rfa ce Re g is t ra t io n Ho m e . Es t e lla m a a l m é t o d o re fre s h
p a ra o b t n e r o re fre s ca r lo s d a t o s d e u s u a rio p a ra e l u s u a rio e s p e cífica d o e n la cla ve
p rim a ria .
La ve rs ió n d e p e rs is t e n cia d e l co n t e n e d o r co n t ro la d o r d e Re g is t ra t io n Be a n n o
im p le m e n t a e s t e m é t o d o p o rq u e e l co n t e n e d o r m a n e ja la o b t e n ció n y re fre s co d e
lo s d a t o s d e u s u a rio .

public RegistrationPK ejbFindByPrimaryKey(


RegistrationPK pk)
throws FinderException,
RemoteException {

if ((pk == null) || ([Link] == null)) {


throw new FinderException ("primary key
cannot be null");
}
refresh(pk);
return pk;
}

Oz it o
Control de Transaciones
¿ No s e ría m a ra villo s o s i ca d a o p e ra ció n q u e in t e n t a ra n u e s t ra a p lica ció n t u vie ra
é xit o ? De s a fo rt u n a d a m e n t e , e n e l m u n d o m u lt i- t h re a d d e la s a p lica cio n e s
d is t rib u id a s y re cu rs o s co m p a rt id o s , e s t o n o e s s ie m p re p o s ib le .
¿ Po r q u é ? Prim e ro d e t o d o , lo s re cu rs o s co m p a rt id o s d e b e n m a n t e n e r u n a vis t a
co n s is t e n t e d e lo s d a t o s d e t o d o s lo s u s u a rio s . Es t o s ig n ifica q u e le e r y e s crib ir
t ie n e q u e s e r co n t ro la d o p a ra q u e lo s u s u a rio s n o s e s o b re e s crib a n lo s d a t o s u n o s
a lo s o t ro s , o lo s e rro re s d e t ra n s a ció n n o co rro m p a n la in t e g rid a d d e lo s d a t o s .
Ta m b ié n , s i t ra b a ja m o s e n u n a re d co n re t a rd o s in t e rm it e n e s o ca íd a s d e
co n e xio n e s , e l p o t e n cia l p a ra q u e la s o p e ra cio n e s fa lle n e n u n a a p lica ció n b a s a d a
e n we b s e in cre m e n t a co n e l n ú m e ro d e u s u a rio s .
Lo s fa llo s d e o p e ra cio n e s s o n in e vit a b le s , lo m e jo r e s re cu p e ra r lu e g o la s e g u rid a d ,
y a q u í e s d o n d e e n t ra e l co n t ro l d e t ra n s a cio n e s . La s b a s e s d e d a t o s m o d e rn a s y
lo s co n t ro la d o re s d e t ra n s a cio n e s n o s p e rm it e n d e s h a ce r y re p e t ir e l e s t a d o d e u n a
s e cu e n cia d e o p e ra cio n e s fa llid a s p a ra a s e g u ra r q u e lo s d a t o s s o n co n s is t e n t e s
p a ra e l a cce s o d e s d e m ú lt ip le s t h re a d s .
Es t a s e cció n a ñ a d e có d ig o a l S e lle rBe a n d e l e je m p lo d e la ca s a d e s u b a s t a s p a ra
q u e p u e d a m a n e ja r la in s e rció n d e it é m s e n la s u b a s t a m á s a llá d e l co n t ro la d o r d e
t ra n s a cio n e s p o r d e fe ct o p ro p o rcio n a d o p o r s u co n t e n e d o r.
● ¿ Po r q u é Co n t ro la r la s Tra n s a cio n e s ?

● S in cro n iza ció n d e S e s ió n


❍ Eje m p lo d e Co n t e n e d o r Co n t ro la d o r
❍ Có d ig o
● Mo d o d e En t re g a d e la Tra n s a ció n
❍ Co n fig u ra d o r d e l S e rvid o r
❍ De s crip cio n e s d e At rib u t o s d e Tra n s a ció n
❍ De s crip cio n e s d e l Nive l d e Ais la m ie n t o
❍ Eje m p lo d e Be a n - Co n t ro la d o r

¿Por qué Controlar las Transaciones?


Cu a n d o a cce d e m o s a u n a b a s e d e d a t o s u s a n d o e l API JDBC, t o d a s la s a p lica cio n e s
s e e je cu t a n co n u n a e n t re g a a u t o m á t ica e xp lícit a p o r d e fe ct o . Es t o s ig n ifica q u e
cu a lq u ie r a p lica ció n q u e e s t é vie n d o lo s d a t o s ve rá lo s d a t o s a ct u a liza d o s d e s p u é s
d e ca d a lla m a d a a JDBC.
Pa ra a p lica cio n e s s e n cilla s , e s t o p o d ría s e r a ce p t a b le , p e ro co n s id e re m o s la
a p lica ció n d e la ca s a d e s u b a s t a s y la s s e cu e n cia s q u e o cu rre n cu a n d o S e lle rBe a n
in s e rt a u n ít e m d e s u b a s t a . Prim e ro s e ca rg a la cu e n t a d e l u s u a rio p a ra lis t a r e l
ít e m , y s e a ñ a d e e l ít e m a la lis t a d e ít e m s d e la s u b a s t a . Es t a s o p e ra cio n e s
ivo lu cra n a Re g is t ra t io n Be a n p a ra co b ra r la cu e n t a y Au c t io n I t e m Be a n p a ra
a ñ a d ir e l ít e m a la lis t a d e s u b a s t a .
En e l m o d o d e e n t re g a a u t o m á t ico , s i fa lla la in s e rció n d e l ít e m d e s u b a s t a , s ó lo s e
s e p u e d e d e s h a ce r e l lis t a d o , y t e n e m o s q u e a ju s t a r m a n u a lm e n t e la cu e n t a d e l
u s u a rio p a ra d e s co n t a rle la lis t a d e ca rg o s . Mie n t ra s t a n t o , o t ro t h re a d p o d ría e s t a r
in t e n t a n d o d e d u cir d e la m is m a cu e n t a d e u s u a rio , s in e n co n t ra r cré d it o , y
a b o rt a n d o cu a n d o q u izá s u n o s m ilis e g u n d o s d e s p u é s s e p o d ría h a b e r co m p le t a d o .
Ha y d o s fo rm a s p a ra s e g u ra rn o s d e q u e e l d é b it o s e h a d e vu e lt o a s u va lo r cu a n d o
fa lla la in s e rció n d e u n ít e m e n la s u b a s t a :
● Añ a d ir có d ig o d e s in cro n iza ció n d e s e s ió n a l Be a n d e s e s ió n d e l co n t e n e d o r
co n t ro la d o r p a ra o b t e n e r e l co n t ro l s o b re la s e n t re g a s d e la t ra n s a ció n y
vo lve r a t rá s .
● Co n fig u ra r JDBC p a ra lo s s e rvicio s d e m o d o d e e n t re g a t ra n s a ció n y a ñ a d ir
có d ig o p a ra a rra n ca r, p a ra r, e n t re g a r y d e s h a ce r la t ra n s a ció n . Es t o e s u n a
t ra n s a ció n co n t ro la d a p o r Be a n y p u e d e s e r u s a d a p o r Be a n s d e e n t id a d y d e
s e s ió n .

Sincronización de Sesisón
Un Be a n d e s e s ió n co n t ro la d o p o r co n t e n e d o r p u e d e o p cio n a lm e n t e in clu ir
s in cro n iza ció n d e s e s ió n p a ra co n t ro la r la e n t re g a a u t o m á t ica p o r d e fe ct o
p ro p o cio n a d a p o r e l co n t e n e d o r. El có d ig o d e s in cro n iza ció n p e rm it e a l co n t e n e d o r
n o t ifica r a l Be a n cu a n d o s e a lca n za n lo s p u n t o s im p o rt a n t e s e n la t ra n s a ció n .
Ad e m á s d e re cib ir la n o t ifica ció n , e l Be a n p u e d e t o m a r cu a lq u ie r a cció n n e ce s a ria
a n t e s d e q u e la t ra n s a ció n p ro ce d a co n e l s ig u ie n t e p u n t o .
N o t a : Un Be a n d e S e s ió n q u e u s a t ra n s a cio n e s co n t ro la d a s p o r Be a n n o
n e ce s it a s in cro n iza ció n d e s e s ió n p o rq u e t ie n e la e n t re g a t o t a lm e n t e
co n t ro la d a .

Ejemplo de Control por Contenedor

S e lle rBe a n e s u n Be a n d e s e s ió n q u e u s a Re g is t ra t io n Be a n p a ra co m p ro b a r la
ID y la p a s s wo rd d e l u s u a rio cu a n d o a lg u ie n p o s t e a u n ít e m p a ra la s u b a s t a y
a p u n t a e n la cu e n t a d e l ve n d e d o r u n lis t a d o , y Au c t io n I t e m Be a n a ñ a d e lo s
n u e vo s ít e m s a la b a s e d e d a t o s .
La t ra n s a ció n e m p ie za e n e l m é t o d o in s e rt I t e m co n e l a p u n t e d e l d é b it o y t e rm in a
cu a n d o s e e n t re g a la t ra n s a ció n co m p le t a o s e d e s h a ce . La t ra n s a ció n co m p le t a
in clu ye d e s h a ce r e l a p u n t e d e 5 0 ce n t a vo s s i e l ít e m d e s u b a s t a e s n u ll ( la
in s e rció n fa lla ) , o s i s e ca p t u ra u n a e xce p ció n . S i e l ít e m d e s u b a s t a n o e s n u ll y la
in s e rció n s e re a liza co n é xit o , s e e n t re g a la t ra n s a ció n co m p le t a , in clu ye n d o e l
co b ro d e lo s 5 0 ce n t a vo s .

Código

Pa ra u s a r s in cro n iza ció n d e s e s ió n , u n Be a n d e s e s ió n im p le m e n t a e l in t e rfa ce


S e s s io n S y n c h ro n z a t io n y s u s t re s m é t o d o s , a ft e rBe g in , b e fo re Co m p le t io n , y
a ft e rCo m p le t io n . Es t e e je m p lo a d a p t a e l có d ig o d e S e lle rBe a n . ja va p a ra u s a r
s in cro n iza ció n d e s e s ió n .

public class SellerBean implements SessionBean,


SessionSynchronization {

private transient SessionContext ctx;


private transient Properties p = new Properties();
private transient boolean success = true;

public void afterBegin() {}

public void beforeCompletion() {


if (!success ) {
[Link]();
}
}

public void afterCompletion(boolean state) {}


a ft e rBe g in : El co n t e n e d o r lla m a a e s t e m é t o d o a n t e s d e l d é b it o p a ra n o t ifica r a l
Be a n d e s e s ió n d e q u e u n a n u e va t ra n s a ció n va a co m e n za r. Po d e m o s im p le m e n t a r
e s t e m é t o d o q u e h a g a cu a lq u ie r t ra b a jo p ré vio e n la b a s e d e d a t o s q u e p u d ie ra s e r
n e ce s a rio p a ra la t ra n s a ció n . En e s t e ca s o n o s o n n e ce s a rio s t ra b a jo s p ré vio s , p o r
e s o e s t e m é t o d o n o e s t á im p le m e n t a d o .
b e fo re Co m p le t io n : El co n t e n e d o r lla m a a e s t e m é t o d o cu a n d o e s t á lis t o p a ra
e s crib ir e l ít e m d e s u b a s t a y e l d é b it o e n la b a s e d e d a t o s , p e ro a n t e s d e h a ce rlo
re a lm e n t e ( e n t re g a rlo ) . Po d e m o s im p le m e n t a r e s t e m é t o d o p a ra e s crib ir cu a lq u ie r
a ct u a liza ció n ca ch é d e la b a s e d e d a t o s o d e s h a ce r la t ra n s a ció n . En e s t e e je m p lo ,
e l m é t o d o lla m a a l m é t o d o s e t Ro llb a c k On ly s o b re e l co n t e xt o d e la s e s ió n e n e l
ca s o d e q u e la va ria b le s u c c e s s s e a fa ls e d u ra n t e la t ra n s a ció n .
a ft e rCo m p le t io n : El co n t e n e d o r lla m a a e s t e m é t o d o cu a n d o la t ra n s a ció n s e
e n t re g a . Un va lo r b o o le a n o d e t ru e s ig n ifica q u e e l d a t o h a s id o e n via d o y fa ls e
s ig n ifica q u e la t ra n s a ció n s e h a d e s h e ch o . El m é t o d o u s a e l va lo r b o o le a n p a ra
d e t e rm in a r s i n e ce s it a re s e t e a r e l e s t a d o d e l Be a n e n e l ca s o d e q u e s e h a ya
d e s h e ch o . En e s t e e je m p lo , n o e s n e ce s a rio re s e t e a r e l e s t a d o e n e l ca s o d e u n
fa llo .
Aq u í e s t á e l m é t o d o in s e rt I t e m co n co m e n t a rio s q u e m u e s t ra n d ó n d e e s t á n lo s
p u n t o s d o n d e s e lla m a a lo s m é t o d o s d e S e s s io n S y n c h ro n iz a t io n .

public int insertItem(String seller,


String password,
String description,
int auctiondays,
double startprice,
String summary)
throws RemoteException {

try{
Context jndiCtx = new InitialContext(p);

RegistrationHome rhome =
(RegistrationHome) [Link]("registration");
RegistrationPK rpk=new RegistrationPK();
[Link]=seller;
Registration newseller=[Link](rpk);

if((newseller == null) ||
(![Link](password))) {
return(Auction.INVALID_USER);
}

//Call to afterBegin
[Link](-0.50);

AuctionItemHome home = (AuctionItemHome)


[Link]("auctionitems");
AuctionItem ai= [Link](seller,
description,
auctiondays,
startprice,
summary);
if(ai == null) {
success=false;
return Auction.INVALID_ITEM;
}
else {
return([Link]());
}

}catch(Exception e){
[Link]("insert problem="+e);
success=false;
return Auction.INVALID_ITEM;
}
//Call to beforeCompletion
//Call to afterCompletion

Modo de Entrega de la Transación


S i co n fig u ra m o s lo s s e rvico s JDBC p a ra m o d o d e e n t re g a d e t ra n s a ció n , p o d e m o s
h a ce r q u e e l Be a n co n t ro le la t ra n s a ció n . Pa ra co n fig u ra r lo s s e rvicio s d e JDBC p a ra
la e n t re g a , lla m a m o s a c o n . s e t Au t o Co m m it ( fa ls e ) s o b re n u e s t ra co n e xió n JDBC.
No t o d o s lo s d rive rs JDBC s o p o rt a n e l m o d o d e e n t re g a , p e ro p a ra h a ce r q u e e l
Be a n co n t ro le y m a n e je la s t ra n s a cio n e s , n e ce s it a m o s u n d rive r q u e lo h a g a .
El m o d o d e e n t re g a d e la t ra n s a ció n n o s p e rm it e a ñ a d ir có d ig o q u e cre a u n a re d d e
s e g u rid a d a lre d e d o r d e u n a s e cu e n cia d e o p e ra cio n e s d e p e n d ie n t e s . El API d e
Tra n s a ct io n d e Ja va , p ro p o rcio n a la s a yu d a s q u e n e ce s it a m o s p a ra cre a r e s a re d
d e s e g u rid a d . Pe ro s i e s t a m o s u s a n d o la a rq u it e ct u ra Ja va Be a n s d e En t e rp ris e ,
p o d e m o s h a ce rlo co n m u ch o m e n o s có d ig o . S ó lo t e n e m o s q u e co n fig u ra r e l
s e rvid o r d e Ja va Be a n s d e En t rp ris e , y e s p e cifica r e n n u e s t ro có d ig o d o n d e e m p ie za
la t ra n s a ció n , d o n d e p a ra , d o n d e s e d e s h a ce y s e e n t re g a .

Configuración del servidor

Co n fig u ra r e l s e rvid o r d e Ja va Be a n s En t e rp ris e im p lica e s p e cifica r la s s ig u ie n t e s


s e le ccio n e s e n u n fich e ro d e co n fig u ra ció n p a ra ca d a Be a n :
● Un n ive l d e a is la m ie n t o p a ra e s p e cifica r có m o d e e xclu s ivo e s e l a cce s o d e
u n a t ra n s a s ció n a lo s d a t o s co m p a rt id o s .
● Un a t rib u t o d e t ra n s a ció n p a ra e s p e cifica r có m o co n t ro la r la s t ra n s a cio n e s
m e d ia n t e e l Be a n o e l co n t e n e d o r q u e co n t in ú a e n o t ro Be a n .
● Un t ip o d e t ra n s a ció n p a ra e s p e cifica r s i la t ra n s a ció n e s m a n e ja d a p o r e l
co n t e n e d o r o p o r e l Be a n .
Po r e je m p lo , p o d ría m o s e s p e cifica r e s t a s s e le ccio n e s p a ra e l s e rvid o r BEA We b lo g ic
e n u n fich e ro D e p lo y m e n t D e s c rip t o r. t x t p a ra ca d a Be a n .
Aq u í e s t á la p a rt e d e D e p lo y m e n t D e s c rip t o r. t x t p a ra S e lle rBe a n q u e e s p e cifica
e l n ive l d e a is la m ie n t o y e l a t rib u t o d e t ra n s a ció n .

(controlDescriptors
(DEFAULT
isolationLevel TRANSACTION_SERIALIZABLE
transactionAttribute REQUIRED
runAsMode CLIENT_IDENTITY
runAsIdentity guest
); end DEFAULT
); end controlDescriptors
Aq u í e s t á e l e q u iva le n t e e n le n g u a je XML.

<container-transaction>
<method>
<ejb-name>SellerBean<ejb-name>
<method-name>*<method-name>
<method>
<transaction-type>Container<transaction-type>
<trans-attribute>Required<trans-attribute>
<container-transaction>
En e s t e e je m p lo , S e lle rBe a n e s t á co n t ro la d o p o r e l Be a n .

<container-transaction>
<method>
<ejb-name>SellerBean<ejb-name>
<method-name>*<method-name>
<method>
<transaction-type>Bean<transaction-type>
<trans-attribute>Required<trans-attribute>
<container-transaction>
D e s c rip c ió n d e At rib u t o d e Tra n s a c ió n : Un Be a n En t e rp ris e u s a u n t ra n s a ct io n
a t t rib u t e p a ra e s p e cifica r s i u n a t ra n s a ció n d e Be a n e s m a n e ja d a p o r e l p ro p io
Be a n o p o r e l co n t e n e d o r, y có m o m a n e ja r la s t ra n s a cio n e s q u e e m p e za ro n e n o t ro
Be a n .
El s e rvid o r d e Ja va Be a n s d e En t e rp ris e s ó lo p u e d e co n t ro la r u n a t ra n s a ció n a la
ve z. Es t e m o d e lo s ig u e e l e je m p lo co n fig u ra d o p o r e l Ob je ct Tra n s a ct io n S e rvice
( OTS ) d e la OMG, y s ig n ifica q u e la e s p e cifica ció n a ct u a l d e lo s Ja va Be a n s
En t e rp irs e n o p ro p o rcio n a n u n a fo rm a p a ra t ra n s a cio n e s a n id a d a s . Un a t ra n s a ció n
a n id a d a e s u n n u e va t ra n s a ció n q u e a rra n ca d e n t ro d e o t ra t ra n s a ció n e xis t e n t e .
Mie n t ra s q u e la s t ra n s a cio n e s a n id a d a s n o e s t á n p e rm it id a s , co n t in u a r u n a
t ra n s a ció n e xis t e n t e e n o t ro Be a n e s co rre ct o .
Cu a n d o s e e n t ra e n u n Be a n , e l s e rvid o r cre a u n co n t e xt o d e t ra n s a ció n p a ra
co n t ro la r la t ra n s a ció n . Cu a n d o la t ra n s a ció n e s m a n e ja d a p o r le Be a n , a cce d e m o s
p a ra co m e n za r, e n t re g a r o d e s h a ce r la t ra n s a ció n cu a n d o s e a n e ce s a rio .
Aq u í e s t á n lo s a t rib u t o s d e t ra n s a ció n co n u n a b re ve d e s crip ció n d e ca d a u n o d e
e llo s . Lo s n o m b re s d e lo s a t rib u t o s ca m b ia ro n e n t re la s e s p e cifica cio n e s 1 . 0 y 1 . 1
d e lo s Ja va Be a n s En t e rp ris e .
Es p e c ific a c ió n 1 . Es p e c ific a c ió n 1 . 0

REQUI RED TX_ REQUI RED


Tra n s a ció n co n t ro la d a p o r e l co n t e n e d o r. El s e rvid o r a rra n ca y m a n e ja u n a n u e va
t ra n s a ció n a p e t ició n d e l u s u a rio o co n t in ú a u s a n d o la t ra n s a ció n q u e s e a rra n có
e n e l có d ig o q u e lla m ó a e s t e Be a n .
REQUI RES N EW TX_ REQUI RED _ N EW
Tra n s a ció n co n t ro la d a p o r co n t e n e d o r. El s e rvid o r a rra n ca y m a n e ja u n a n u e va
t ra n s a ció n . S i u n a t ra n s a ció n e xis t e n t e a rra n ca e s t a t ra n s a ció n , la s u s p e n d e h a s t a
q u e la t ra n s a ció n s e co m p le t e .
Es p e c ific a d o c o m o t ip o
d e t ra n s a c ió n d e Be a n e n
TX_ BEAN _ MAN AGED
e l D e s c rip t o r d e
d e s a rro llo
<Tra n s a ció n co n t ro la d a p o r e l Be a n . Te n e m o s a cce s o a l co n t e xt o d e la t ra n s a ció n
p a ra e m p e za r, e n t re g a r o d e s h a ce r la t ra n s a ció n cu a n d o s e a n e ce s a rio .
S UP P ORTS TX_ S UP P ORTS
S i e l có d ig o q u e lla m a a e s t e Be a n t ie n e u n t ra n s a ció n e n e je cu ció n , in clu ye e s t e
Be a n e n e s a t ra n s a ció n .
N EVER TX_ N OT_ S UP P ORTED
S i e l có d ig o q u e lla m a a u n m é t o d o e n e s t e Be a n t ie n e u n a t ra n s a ció n
e je cu n t á n d o s e , s u s p e n d e e s a t ra n s a ció n h a s t a q u e la lla m a d a a l m é t o d o d e e s t e
Be a n s e co m p le t e . No s e cre a co n t e xt o d e t ra n s a ció n p a ra e s t e Be a n .
MAN D ATORY TX_ MAN D ATORY
El a t rib u t o d e t ra n s a ció n p a ra e s t e Be a n s e co n fig u ra cu a n d o o t ro b e a n lla m a a
u n o d e s u s m é t o d o s . En e s t e ca s o , e s t e b e a n o b t ie n e e l a t rib u t o d e t ra n s a ció n d e l
Be a n lla m a n t e . S i e l Be a n lla m a n t e n o t ie n e a t rib u t o d e t ra n s a ció n , e l m é t o d o
lla m a d o e n e s t e Be a n la n za u n a e xce p cio ó n Tra n s a c t io n Re q u ire d .
D e s c rip c ió n d e l N iv e l d e Ais la m ie n t o : Un Be a n d e En t e rp ris e u s a u n n iv e l d e
a is la m ie n t o p a ra n e g o cia r s u p ro p ia in t e ra cció n co n lo s d a t o s co m p a rt id o s y la
in t e ra cció n d e o t ro s t h re a d s co n lo s m is m o s d a t o s co m p a rt id o s . Co m o e l n o m b re
in d ica , e xis t e n va rio s n ive le s d e a is la m ie n t o co n TRAN S ACTI ON _ S ERI ALI ZABLE
s ie n d o e l n ive l m á s a lt o d e in t e g rid a d d e lo s d a t o s .
N o t a :De b e m o s a s e g u ra rn o s d e q u e n u e s t ra b a s e d e d a t o s p u e d e
s o p o rt a r e l n ive l e le g id o . En la e s p e cifica ció n 1 . 1 d e lo s Ja va Be a n s d e
En t e rp ris e , s ó lo lo s Be a n s d e s e s ió n co n p e rs is t e n cia co n t ro la d a p o r e l
Be a n p u e d e n s e le ccio n a r e l n ive l d e a is la m ie n t o .
S i la b a s e d e d a t o s n o p u e d e co n t ro la r e l n ive l d e a is la m ie n t o , e l s e rvid o r
d e Ja va Be a n s En t e rp ris e d a rá u n fa llo cu a n d o in t e n t e a cce d e r a l m é t o d o
s e t Tra n s a c t io n I s o la t io n d e JDBC.

TRAN S ACTI ON _ S ERI ALI ZABLE: Es t e n ive l p ro p o rcio n a la m á xim a in t e g rid a d d e


lo s d a t o s . El Be a n d e cid e la ca n t id a d d e a cce s o s e xclu s ivo s . Nin g u n a o t ra
t ra n s a ció n p u e d e le e r o e s crib ir e s t o s d a t o s h a s t a q u e la t ra n s a ció n s e ria liza b le s e
co m p le t e .
En e s t e co n t e xt o , s e ria liza b le s ig n ifica p ro ce s o co m o u n a o p e ra ció n s e ria l, y n o
d e b e ría co n fu n d irs e co n la s e ria liza ció n d e o b je t o s p a ra p re s e rva r y re s t a u ra r s u s
e s t a d o s . Eje cu t a r t ra n s a cio n e s co m o u n a s ó la o p e ra ció n s e ria l e s la s e le cció n m á s
le n t a . S i e l re n d im ie n t o e s u n p ro b le m a , d e b e m o s u s a r o t ro n ive l d e a is la m ie n t o
q u e cu m p la co n lo s re q u e rim ie n t o s d e n u e s t ra a p lica ció n , p e ro m e jo re e l
re n d im ie n t o .
TRAN S ACTI ON _ REP EATABLE_ READ : En e s t e n ive l, lo s d a t o s le id o s p o r u n a
t ra n s a ció n p u e d e n s e r le id o s , p e ro n o m o d ifica d o s , p o r o t ra t ra n s a ció n . S e
g a ra n t iza q u e e l d a t o t e n g a e l m is m o va lo r q u e cu a n d o fu e le íd o p o r p rim e ra ve z, a
m e n o s q u e la p rim e ra t ra n s a ció n lo ca m b ie y e s crib a d e n u e vo e l va lo r ca m b ia d o .
TRAN S ACTI ON _ READ _ COMMI TTED : En e s t e n ive l, lo s d a t o s le íd o s p o r u n a
t ra n s a ció n n o p u e d e n s e r le íd o s p o r o t ra t ra n s a ció n h a s t a q u e la p rim e ra
t ra n s a ció n lo s h a ya e n t re g a d o o d e s h e ch o
TRAN S ACTI ON _ READ _ UN COMMI TTED : En e s t e n ive l, lo s d a t o s in vo lu cra d o s e n
u n a t ra n s a ció n p u e d e n s e r le íd o s p o r o t ro s t h re a d s a n t e s d e q u e la p rim e ra
t ra n s a ció n s e h a ya co m p le t a d o o s e h a ya d e s h e ch o . La s o t ra s t ra n s a cio n e s n o
p u e d e n s a b e r s i lo s d a t o s fu e ro n fin a lm e n t e e n t re g a d o s o d e s h e ch o s .

Ejemplo de Bean Controlador

S e lle rBe a n e s u n Be a n d e s e s ió n q u e u s a Re g is t ra t io n Be a n p a ra ch e q u e a r la ID
y la p a s s wo rd d e l u s u a rio cu a n d o a lg u ie n p o s t e a u n ít e m p a ra la s u b a s t a , a p u n t a e l
d é b it o e n la cu e n t a d e l u s u a rio , y Au c t io n I t e m Be a n a ñ a d e u n n u e vo ít e m a la
b a s e d e d a t o s d e la s u b a s t a .
La t ra n s a ció n e m p ie za e n e l m é t o d o in s e rt I t e m co n e l d é b it o d e la cu e n t a y
t e rm in a cu a n d o la t ra n s a ció n co m p le t a s e e n t re g a o s e d e s h a ce . La t ra n s a ció n
co m p le t a in clu ye d e s h a ce r e l a p u n t e d e 5 0 ce n t a vo s s i e l ít e m d e s u b a s t a e s n u ll
( la in s e rció n fa lla ) , o s i s e ca p t u ra u n a e xce p ció n . S i e l ít e m d e s u b a s t a n o e s n u ll
y la in s e rció n s e re a liza co n é xit o , s e e n t re g a la t ra n s a ció n co m p le t a , in clu ye n d o e l
co b ro d e lo s 5 0 ce n t a vo s .
Pa ra e s t e e je m p lo , e l n ive l d e a is la m ie n t o e s TRAN S ACTI ON _ S ERI ALI ZABLE, y
e l a t rib u t o d e t ra n s a ció n e s TX_ BEAN _ MAN AGED . Lo s o t ro s Be a n s e n la
t ra n s a ció n , Re g is t ra t io n Be a n y Au c t io n I t e m Be a n , t ie n e n u n n ive l d e
a is la m ie n t o d e TRAN S ACTI ON _ S ERI ALI ZABLE y u n a t rib u t o d e t ra n s a ció n d e
REQUI RED .
Lo s ca m b io s e n e s t a ve rs ió n d e S e lle rBe a n s o b re la ve rs ió n d e l co n t e n e d o r
co n t ro la d o r s e m a rca n co n co m e n t a rio s :

public int insertItem(String seller,


String password,
String description,
int auctiondays,
double startprice,
String summary)
throws RemoteException {

//Declare transaction context variable using the


//[Link] class
UserTransaction uts= null;

try{
Context ectx = new InitialContext(p);

//Get the transaction context


uts=(UserTransaction)[Link]();

RegistrationHome rhome = (
RegistrationHome)[Link]("registration");
RegistrationPK rpk=new RegistrationPK();
[Link]=seller;
Registration newseller=
[Link](rpk);

if((newseller == null)||
(![Link](password))) {
return(Auction.INVALID_USER);
}

//Start the transaction


[Link]();

//Deduct 50 cents from seller's account


[Link](-0.50);

AuctionItemHome home = (
AuctionItemHome) [Link]("auctionitems");
AuctionItem ai= [Link](seller,
description,
auctiondays,
startprice,
summary);

if(ai == null) {
//Roll transaction back
[Link]();
return Auction.INVALID_ITEM;
}
else {
//Commit transaction
[Link]();
return([Link]());
}

}catch(Exception e){
[Link]("insert problem="+e);
//Roll transaction back if insert fails
[Link]();
return Auction.INVALID_ITEM;
}
}

Oz it o
Métodos de Búsqueda de Bean Controlador
La b ú s q u e d a e n e l co n t e n e d o r co n t ro la d o r d e s crit a e n e l ca p ít u lo 2 e s t á b a s a d a e n e l m é ca n is m o d e l m é t o d o fin d e r d o n d e e l d e s crip t o r d e d e s a rro llo , e n lu g a r d e l Be a n , e s p e cifica e l
co m p o rt a m ie n t o d e l m é t o d o fin d e r. Mie n t ra s e l m e ca n is m o d e l m é t o d o fin d e r fu n cio n a b ie n p a ra co n s u lt a s s e n cilla s , n o p u e d e m a n e ja r o p e ra cio n e s co m p le ja s q u e im p liq u e n m á s d e u n
t ip o d e Be a n o t a b la s d e b a s e s d e d a t o s . Ta m b ié n , la e s p e cifica ció n 1 . 1 d e lo s Ja va Be a n s d e En t e rp ris e a ct u a lm e n t e n o p ro p o rcio n a p a ra p o n e r la s re g la s d e l m é t o d o fin d e r e n e l
d e s crip t o r d e d e s a rro llo .
Po r e s o , p a ra co n s u lt a s y b ú s q u e d a s m á s co m p le ja s , t e n e m o s q u e e s crib ir b ú s q u e d a s y co n s u lt a s co n t ro la d a s p o r e l Be a n . Es t a s e cció n e xp lica có m o e s crib ir u n a ve rs ió n d e la fa cilid a d
d e b ú s q u e d a d e la ca s a d e s u b a s t a s co n t ro la d a p o r e l Be a n . La b ú s q u e d a co n t ro la d a p o r e l Be a n in p lica ca m b io s e n e l m é t o d o Au c t io n S e rv le t . s e a rc h I t e m s y u n n u e vo Be a n d e s e s ió n ,
S e a rc h Be a n .
● Au ct io n S e rvle t . s e a rch It e m s

● S e a rch Be a n

[Link]
La b ú s q u e d a e m p ie za cu a n d o e l u s u a rio fin a l e n vía u n a ca d e n a d e b ú s q u e d a a la fa cilid a d d e b ú s q u e d a d e la p á g in a p rin cip a l d e la ca s a d e s u b a s t a s , y p u ls a e l b o t o n S u b m it . Es t o lla m a
a Au c t io n S e rv le t , q u e re cu p e ra la ca d e n a d e b ú s q u e d a d e s d e la ca b e ce ra HTTP y la p a s a a l m é t o d o s e a rc h I t e m .

N o t a : La ló g ica d e b ú s q u e d a p a ra e s t e e je m p lo e s b a s t a n t e s im p le . El p ro p ó s it o e s m o s t ra r có m o m o ve r la ló g ica d e b ú s q u e d a a o t ro Be a n En t e rp ris e s e p a ra d o p a ra q u e


p o d a m o s m o ve r b ú s q u e d a s m á s co m p le ja s n o s o t ro s s o lo s .

La
o p e ra ció n s e a rc h I t e m s e h a ce e n d o s p a rt e s : 1 ) u s a r la ca d e n a d e b ú s q u e d a p a ra re cu p e ra r la s cla ve s p rim a ria s , y 2 ) u s a r la s cla ve s p rim a ria s p a ra re cu p e ra r lo s ít e m s d e la s u b a s t a
P a rt e 1 : Lo p rim e ro q u e h a ce e l m é t o d o s e a rch It e m s e s p a s a r la ca d e n a d e b ú s q u e d a e n via d a p o r e l u s u a rio fin a l a l Be a n d e s e s ió n S e a rc h Be a n .

S e a rc h Be a n ( d e s crit o e n la s ig u ie n t e s e cció n ) im p le m e n t a u n a b ú s q u e d a co n t ro la d a p o r Be a n q u e re cu p e ra u n a lis t a d e cla ve s p rim a ria s p a ra t o d o s lo s ít e m s d e la s u b a s t a cu yo ca m p o


S u m m a ry co n t e n g a ca ra ct e re s q u e co rre s p o n d a n co n lo s d e la ca d e n a d e b ú s q u e d a . Es t a lis t a e s d e vu e lt a a l m é t o d o s e a rc h I t e m s e n u n a va ria b le En u m e ra t io n .

Enumeration enum=(Enumeration)
[Link](searchString);
Pa r
2 : El m é t o d o s e a rc h I t e m s u s a la lis t a En u m e ra t io n d e vu e lt a e n la p a rt e 1 y u s a Au ct io n It e m Be a n p a ra re cu p e ra r ca d a Be a n p o r t u rn o lla m a n d o a fin d By P rim a ry Ke y s o b re ca d a cla ve
p rim a ria d e la lis t a . Es t a e s u n a b ú s q u e d a co n t ro la d a p o r co n t e n e d o r b a s a d a e n e l m e ca n is m o d e l m é t o d o fin d e r d e s crit o e n e l ca p ít u lo 2 .

//Iterate through search results


while ((enum != null) &&
[Link]())) {
while([Link](in)) {

//Locate auction items


AuctionItem ai=[Link]((
AuctionItemPK)[Link]());
displayLineItem(ai, out);
}
}

SearchBean
La cla s e S e a rch Be a n . ja va d e fin e u n a b ú s q u e d a co n t ro la d a p o r e l Be a n p a ra cla ve s p rim a ria s d e ít e m s d e s u b a s t a co n lo s ca m p o s s u m m a ry q u e co n t ie n e n ca ra ct e re s q u e co rre s p o n d e n
co n la ca d e n a d e b ú s q u e d a . Es t e Be a n e s t a b le ce u n a co n e xió n co n la b a s e d e d a t o s , y p ro p o rcio n a lo s m é t o d o s g e t Ma t c h in g I t e m s Lis t y EJBCre a t e .

Conexión con la Base de Datos

Co m o e s t e Be a n co n t ro la s u p ro p io a cce s o a la b a s e d e d a t o s , t ie n e q u e e s t a b le ce r s u p ro p ia co n e xió n co n e lla . No p u e d e d e le g a r e s t o a l co n t e n e d o r. .


La co n e xió n co n la b a s e d e d a t o s s e e s t a b le ce e je m p la riza n d o u n a cla s e D riv e r e s t á t ica y p ro p o rcio n a n d o e l m é t o d o g e t Co n n e c t io n . Es t e m é t o d o re q u ie re u n a cla s e e s t á t ica
D riv e rMa n a g e r p a ra re g is t ra r u n d rive r co n la b a s e d e d a t o s q u e co rre s p o n d a co n la URL. En e s t e ca s o la URL e s w e b lo g ic . jd b c . jt s . D riv e r.

//Establish database connection


static {
new [Link]();
}

public Connection getConnection()


throws SQLException {
return [Link](
"jdbc:weblogic:jts:ejbPool");
}

Obtener la Lista de Ítems Encontrados

El m é t o d o g e t Ma t c h in g I t e m s Lis t b u s ca Au c t io n I t e m s Be a n y cre a u n o b je t o P re p a re d S t a t e m e n t p a ra h a ce r u n a co n s u lt a a la b a s e d e d a t o s p o r lo s ca m p o s s u m m a ry q u e
co n t e n g a n la ca d e n a d e b ú s q u e d a . Lo s d a t o s s e le e n d e s d e la b a s e d e d a t o s d e n t ro d e u n Re s u lt S e t , a lm a ce n a d o e n u n Ve c t o r, y d e vu e lt o a Au c t io n S e rv le t .

public Enumeration getMatchingItemsList(


String searchString)
throws RemoteException {

ResultSet rs = null;
PreparedStatement ps = null;
Vector v = new Vector();
Connection con = null;

try{
//Get database connection
con=getConnection();
//Create a prepared statement for database query
ps=[Link]("select id from
auctionitems where summary like ?");
[Link](1, "%"+searchString+"%");
//Execute database query
[Link]();
//Get results set
rs = [Link]();
//Get information from results set
AuctionItemPK pk;
while ([Link]()) {
pk = new AuctionItemPK();
[Link] = (int)[Link](1);
//Store retrieved data in vector
[Link](pk);
}
[Link]();
return [Link]();

}catch (Exception e) {
[Link]("getMatchingItemsList:
"+e);
return null;
}finally {
try {
if(rs != null) {
[Link]();
}
if(ps != null) {
[Link]();
}
if(con != null) {
[Link]();
}
} catch (Exception ignore) {}
}
}

Método Create

El m é t o d o e jb Cre a t e cre a u n o b je t o ja v a x . n a m in g . I n it ia lCo n t e x t . Es t a e s u n a cla s e JNDI ( Ja va Na n im g a n d Dire ct o ry) q u e p e rm it e a S e a rc h Be a n a cce d e r a la b a s e d e d a t o s s in


re la cio n a rs e co n e l co n t e n e d o r:

public void ejbCreate() throws CreateException,


RemoteException {
Properties p = new Properties();
[Link](Context.INITIAL_CONTEXT_FACTORY,
"[Link]");
try{
ctx = new InitialContext(p);
}catch(Exception e) {
[Link]("create exception: "+e);
}
}

Oz it o
Cálculo Distribuido
Ta n re cie n t e m e n t e co m o h a ce d ie z a ñ o s , e l cá lcu lo d is t rib u id o g e n e ra lm e n t e
s ig n ifica b a q u e t e n ia m o s clie n t e s PCs e n u n a h a b it a ció n co n u n s e rvid o r e n o t ra . El
p ro b le m a co n e s t a a rq u it e ct u ra e s q u e s i s e p ie rd e la co n e xió n co n e l s e rvid o r, lo s
clie n t e s n o p u e d e n a ct u a liza r la s b a s e s d e d a t o s d e la co m p a ñ ía .
Pa ra e vit a r e s t a p é rd id a d e t ie m p o , s e cre a ro n lo s d ife re n t e s m o d e lo s d e re d . Un
e je m p lo e s e l m o d e lo d e s e rvid o r m a e s t ro y e s cla vo d o n d e s i e l m a e s t ro fa lla , e l
e s cla vo t o m a e l re le vo . El p ro b le m a co n lo s d is t in t o s m o d e lo s d e re d e s q u e t o d o s
re q u ie re n a lg u n a fo rm a d e in t e rve n ció n m a n u a l y s e u n ie ro n co n u n s is t e m a
o p e ra t ivo o u n le n g u a je . Y a u n q u e e s t a s a p ro xim a cio n e s co n s ig u ie ro n re d u cir e l
t ie m p o d e p a ra d a , n o cu m p le n co n lo s s is t e m a s d e d is t rib u ció n h e t e ro g é n e a q u e
co n s is t e e n u n a m e zcla d e p ro t o co lo s d e re d y m á q u in a s .
La p la t a fo rm a Ja va TM co m b in a d a co n o t ro s a va n ce s co m o Co m m o n Ob je ct Re q u e s t
Bro ke r Arch it e ct u re ( CORBA) , s e rvid o re s m u lt i- fila , y re d e s s in ca b le s h a n lle va d o
u n p a s o m a s a llá la re a liza ció n d e la co m p u t a ció n t o t a lm e n t e d is t rib u id a , d e la
t ra d icio n a l a p ro xim a ció n clie n t e y s e rvid o r.
Ah o ra p o d e m o s co n s t ru ir a p lica cio n e s q u e in clu ya n s e rvicio s d e re d u n d a n cia p o r
d e fe ct o . S i u n a co n e xió n d e s e rvid o r fa lla , p o d e m o s u s a r u n s e rvicio d e o t ro
s e rvid o r. CORBA y lo s p u e n t e s "Dis t rib u t e d Co m p o n e n t Ob je ct Mo d e l" ( DCOM)
s ig n ifica n q u e lo s o b je t o s p u e d e n s e r t ra n s fe rid o s e n t re ca s i t o d a s la s m á q u in a s y
le n g u a je s . Y co n e l n u e vo s is t e m a d e s o ft wa re Jin iTM, e l e n t o rn o d e cá lcu lo
d is t rib u id o p u d e e s t a r p ro n t o e n t o d o s lo s h o g a re s , o ficin a s o e s cu e la s .
● S e rvicio s d e Bú s q u e d a

● Re m o t e Me t h o d In vo ca t io n ( RMI)
● Co m m o n Ob je ct Re q u e s t Bro ke r Arch it e ct u re ( CORBA)
● Te cn o lo g ía JDBC TM
● S e rvle t s

¿Tienes Prisa?
Es t a t a b la t e lle va rá d ire ct a m e n t e a lo s t ó p ico s e s p e cifica d o s .
Tó p ic o S e c c ió n
S e rvicio s d e Bú s q u e d a ● Ja va Na m in g a n d Dire ct o ry In t e rfa ce ( JNDI)
● Co m m o n Ob je ct Re q u e s t Bro ke r Arch it e ct u re
( CORBA) Na m in g S e rvice
● In t e ro p e ra b le Ob je ct Re fe re n ce s ( IOR)
● Re m o t e Me t h o d In vo ca t io n ( RMI)
● RMI Ove r In t e rn e t In t e r- ORB Pro t o co l ( IIOP)
● JINI Lo o ku p S e rvice s
● Au m e n t a r e l Re n d im ie n t o d e la Bú s q u e d a
Re m o t e Me t h o d ● S o b re RMI
In vo ca t io n ( RMI) ● RMI e n la a p lica ció n S u b a s t a
❍ In t ro d u cció n a la Cla s e
❍ S u m a rio d e Fich e ro s
❍ Co m p ila r e l Eje m p lo
❍ Arra n ca r e l Re g is t ro RMI
❍ Arra n ca r e l S e rvid o r Re m o t o
● Es t a b le ce r Co m u n ica cio n e s Re m o t a s
● La cla s e Re g is t ra t io n S e rve r
❍ Exp o rt a r u n Ob je t o Re m o t o
❍ Pa s a r p o r Va lo r y p o r Re fe re n cia
❍ Re co le cció n d e Ba s u ra Dis t rib u id a
● In t e rfa ce Re g is t ra t io n
● In t e rfa ce Re t u rn Re s u lt s
● La Cla s e S e lle rBe a n
Co m m o n Ob je ct ● Es q u e m a d e Ma p e o IDL
Re q u e s t Bro ke r ❍ Re fe re n cia Rá p id a
Arch it e ct u re ( CORBA)
❍ Co n fig u ra r e l Ma p e o IDL
❍ Ot ro s Tip o s IDL
● CORBA e n la Ap lica ció n d e S u b a s t a
❍ CORBA Re g is t ra t io n S e rve r
❍ Fich e ro d e Ma p e o s IDL
❍ Co m p ila r e l Fich e ro d e Ma p e o s IDL
❍ Fich e ro s S t u b y S ke le t o n
● Ob je ct Re q u e s t Bro ke r ( ORB)
❍ Ha ce r Acce s ib le e l S e rvid o r CORBA
❍ Añ a d ir u n n u e vo ORB
❍ Acce s o s a l S e rvicio d e No m b re s p o r clie n t e s
CORBA
● Cla s e s He lp e r y Ho ld e r
● Re co le cció n d e Ba s u ra
● Re t ro lla m a d a s CORBA
● Us o d e Cu a lq u ie r Tip o
● Co n clu s ió n
Te cn o lo g ía JDBC ● Drive rs JDBC
● Co n e xio n e s a Ba s e s d e Da t o s
● S e n t e n cia s
❍ S e n t e n cia s Ca lla b le
❍ S e n t e n cia s
❍ S e n t e n cia s Pre p a ra d a s
● Gu a rd a r lo s Re s u lt a d o s d e la Ba s e d e Da t o s
● Ho ja s d e Re s u lt a d o s
● Ho ja s d e Re s u lt a d o s S cro lla b le s
● Co n t ro la r Tra n s a cio n e s
● Ca ra ct e re s d e Es ca p e
● Ma p e o d e Tip o s d e Ba s e s d e Da t o s
● Ma p e o d e Tip o s d e Da t o s

Oz it o
Servicios de Búsqueda
Lo s s e rvicio s d e b ú s q u e d a p e rm it e n la s co m u n ica cio n e s a t ra vé s d e la re d . Un p ro g ra m a clie n t e p u e d e u s a r u n p ro t o co lo d e b ú s q u e d a p a ra o b t e n e r in fo rm a ció n s o b re p ro g ra m a s
re m o t o s o m á q u in a s q u e u s e n e s a in fo rm a ció n p a ra e s t a b le ce r u n a co m u n ica ció n .
● Un s e rvicio d e b ú s q u e d a co m ú n co n e l q u e p o d ría m o s e s t a r fa m ilia riza d o s e s e l Dire ct o ry Na m e S e rvice ( DNS ) . Ma p e a d ire ccio n e s d e In t e rn e t Pro t o co l ( IP) a n o m b re s d e
m á q u in a s . Lo s p ro g ra m a s u s a n e l m a p e o DNS p a ra b u s ca r d ire ccio n e s IP a s o cia d a s co n u n n o m b re d e m á q u in a y u s a r la d ire cció n IP p a ra e s t a b le ce r u n a co m u n ica ció n .
● De la m is m a fo rm a , e l Au ct io n S e rvle t p re s e n t a d o e n Ch a p t e r 2 u s a e l s e rvicio d e n o m b re s in t e rn o d e la a rq u it e ct u ra d e Ja va Be a n s En t e rp ris e p a ra b u s ca r u n a s re fe re n cia s a Be a n s
En t e rp ris e re g is t ra d o s co n e l s e rvid o r d e Ja va Be a n s En t e rp ris e .
Ad e m á s d e lo s s e rvicio s d e n o m b re s , a lg u n o s p ro t o co lo s d e b ú s q u e d a p ro p o rcio n a n s e rvicio s d e d ire ct o rio . Es t e s e rvicio s co m o e l Lig h t we ig h t Dire ct o ry Acce s s Pro t o co l ( LDAP) y e l
NIS + d e S u n p ro p o rcio n a n o t ra in fo rm a ció n y s e rvicio s m á s a llá d e lo s d is p o n ib le s co n e l s e rvicio d e n o m b re s . Po r e je m p lo , NIS + a s o cia u n a t rib u t o w o rk g ro u p co n u n a cu e n t a d e
u s u a rio . Es t e a t rib u t o p u e d e u s a rs e p a ra re s t rin g ir e l a cce s o a u n a m á q u ín a , p o r lo q u e s ó lo lo s u s u a rio s e s p e cifica d o s e n e l w o rk g ro u p t ie n e n a cce s o .
Es t e ca p ít u lo d e s crib e co m o s e u s a e l "Na m in g a n d Dire ct o ry In t e rfa ce ( JNDI) " d e Ja va e n la a p lica ció n d e s u b a s t a s p a ra b u s ca r lo s Be a n s d e En t e rp ris e . Ta m b ié n e xp lica co m o u s a r
a lg u n o s d e lo s o t ro s m u ch o s s e rvicio s d e b ú s q u e d a q u e t e n e m o s d is p o n ib le s . El có d ig o p a ra u s a r e s t o s s e rvicio s n o e s t a n s e n cillo co m o e l có d ig o d e la b ú s q u e d a e n la a p lica ció n d e la
s u b a s t a d e l ca p ít u lo 2 , p e ro la s ve n t a ja s q u e o fre ce n e s t o s o t ro s s e rvicio s h a ce n q u e a lg u n a s ve ce s m e re zca la p e n a e s e có d ig o m á s co m p le jo .
● Ja va Na m in g a n d Dire ct o ry In t e rfa ce ( JNDI)

● S e rvicio d e No m b re s d e la Arq u it e ct u ra Co m m o n Ob je ct Re q u e s t Bro ke r ( CORBA)


● In t e ro p e ra b le Ob je ct Re fe re n ce s ( IOR)
● Re m o t e Me t h o d In vo ca t io n ( RMI)
● RMI Ove r In t e rn e t In t e r- ORB Pro t o co l ( IIOP)
● S e rvicio s d e Bú s q u e d a JINI
● Au m e n t a r e l Re n d im ie n t o d e la Bú s q u e d a

Java Naming and Directory Interface (JNDI)


El API d e JNDI h a ce s e n cillo co n e ct a r s e rvicio s d e b ú s q u e d a d e va rio s p ro ve e d o re s e n u n p ro g ra m a e s crit o e n le n g u a je Ja va . S ie m p re q u e e l clie n t e y e l s e rvid o r u s e n e l m is m o s e rvicio
d e b ú s q u e d a , e l clie n t e p u e d e fá cilm e n t e b u s ca r in fo rm a ció n re g is t ra d a e n e l s e rvid o r y e s t a b le ce r u n a co m u n ica ció n .
Lo s Be a n s d e s e s ió n d e la a p lica ció n d e s u b a s t a u s a n JNDI y u n a fá b rica d e n o m b re s JNDI e s p e cia l d e BEA We b lo g ic p a ra b u s ca r Be a n s d e e n t id a d . Lo s s e rvicio s JNDI n o rm a lm e n t e
in icia liza n la fá b rica d e n o m b re s co m o u n a p ro p ie d a d d e la lín e a d e co m a n d o s o co m o u n va lo r d e in icia liza ció n .
Prim e ro , la fá b rica d e n o m b re s w e b lo g ic . jn d i. Te n g a h I n it ia lCo n t e x t Fa c t o ry s e p o n e d e n t ro d e u n o b je t o ja v a . u t il. P ro p e rt y , lu e g o e s t e o b je t o s e p a s a co m o p a rá m e t ro a l
co n s t ru ct o r d e I n it ia lCo n t e x T. Aq u í t e n e m o s u n e je m p lo d e l m é t o d o e jb Cre a t e : .

Context ctx; //JNDI context

public void ejbCreate()


throws CreateException, RemoteException {
Hashtable env = new Hashtable();
[Link](Context.INITIAL_CONTEXT_FACTORY,
"[Link]");
try{
ctx = new InitialContext(env);
}catch(Exception e) {
[Link]("create exception: "+e);
}
}
Un a ve z cre a d o , e l co n t e xt o JNDI s e u s a p a ra b u s ca r lo s in t e rfa ce s p rin cip a le s d e lo s Be a n s En t e rp ris e . En e s t e e je m p lo , s e re cu p e ra u n a re fe re n cia a u n Be a n En t e rp ris e u in d a a l
n o m b re re g is t ra t io n y s e u s a p a ra o p e ra cio n e s p o s t e rio re s :

RegistrationHome rhome =
(RegistrationHome) [Link]("registration");
RegistrationPK rpk=new RegistrationPK();
[Link]=buyer;
Registration newbidder =
[Link](rpk);
En e l la d o d e l s e rvid o r, e l d e s crip t o r d e d e s a rro llo p a ra e l Re g is t ra t io n Be a n t ie n e s u va lo r b e a n h o m e n a m e co m o re g is t ra t io n . La s h e rra m ie n t a s d e Ja va Be a n s d e En t e rp ris e
g e n e ra n e l re s t o d e l có d ig o d e n o m b re s p a ra e l s e rvid o r.
El s e rvid o r lla m a a c t x . b in d p a ra u n ir e l n o m b re re g is t ra t io n a l co n t e xt o JNDI. El p a rá m e t ro t h is re fe re n cia a la cla s e _ s t u b q u e re p re s e n t a e l Re g is t ra t io n Be a n .
[Link]("registration", this);
JNDI n o e s la ú n ica fo rm a d e lo ca liza r o b je t o s re m o t o s . Lo s s e rvicio s d e b ú s q u e d a t a m b ié n e s t á n d is p o n ib le s e n la s p la t a fo rm a s RMI, JNI y CORBA. Po d e m o s u s a r d ire ct a m e n t e lo s
s e rvicio s d e b ú s q u e d a d e e s t a s p la t a fo rm a s d ire ct a m e n t e d e s d e e l API d e l JNDI. JNDI p e rm it e a la s a p lica cio n e s ca m b ia r e l s e rvicio d e n o m b re s co n p o co e s fu e rzo . Po r e je m p lo , a q u í
e s t á e l có d ig o q u e h a ce q u e e l m é t o d o Bid d e rBe a n . e jb Cre a t e u s e e l s e rvicio d e b ú s q u e d a d e o rg . o m b . CORBA e n ve z d e l s e rvicio d e b ú s q u e d a p o r d e fe ct o d e BEA We b lo g ic.

Hashtable env = new Hashtable();


[Link]("[Link]",
"[Link]");
Context ic = new InitialContext(env);

Servico de Nombres CORBA


El "Co m m o n Ob je ct Re q u e s t Bro ke r Arch it e ct u re " ( CORBA) d e fin e u n a e s p e cifica ció n p a ra q u e lo s o b je t o s d e u n s is t e m a d is t rib u id o s e co m u n iq u e n u n o s co n o t ro s . Lo s o b je t o s q u e u s a n
la e s p e cifica ció n CORBA p a ra co m u n ica rs e s e lla m a n o b je t o s CORBA, y co n s is t e n e n o b je t o s clie n t e y s e rvid o r.
Lo s o b je t o s CORBA p u e d e e s t a r e s crit o s e n cu a lq u ie r le n g u a je co n e l m a p e o "In t e rfa ce De fin it io n La n g u a g e " ( IDL) . Es t o s le n g u a je s in clu ye n le n g u a je s d e p ro g ra m a ció n co m o Ja va ,
C+ + , y m u ch o s o t ro s le n g u a je s t ra d icio n a le s n o o rie n t a d o s a o b je t o s .
El s e rvicio d e b ú s q u e d a d e n o m b re s , a l ig u a l q u e o t ra s e s p e cifica cio n e s CORBA, e s t á d e fin id o e n t é rm in o s d e IDL. El m ó d u lo IDL p a ra e l s e rvicio d e b ú s q u e d a CORBA s e lla m a
Co s N a m in g . Cu a lq u ie r p la t a fo rm a co n u n m a p e o IDL, co m o la h e rra m ie n t a id lt o ja v a , p u e d e u s a r e s t e s e rvicio p a ra d e s cu b rir o b je t o s CORBA. El m ó d u lo IDL p a ra e s t e s e rvicio d e
b ú s q u e d a CORBA e s t á d is p o n ib le e n la p la t a fo rm a Ja va 2 e n e l p a q u e t e o rg . o m g . Co s N a m in g .
El in t e rfa ce cla ve e n e l m ó d u lo Co s N a m in g e s N a m in g Co n t e x t . Es t e in t e rfa ce d e fin e m é t o d o s p a ra u n ir o b je t o s a u n n o m b re , lis t a r e s t a s u n io n e s , y re cu p e ra r re fe re n cia s a d ich o s
o b je t o s .
Ad e m á s d e e s t o s in t e rfa ce s p ú b lico s h a y cla s e s d e a yu d a . La cla s e N a m e Co m p o n e n t s e u s a e n p ro g ra m a s clie n t e y s e rvid o r CORBA p a ra co n s t ru ir e l n o m b re co m p le t o p a ra e l n o m b re
d e l o b je t o re fe re n cia . El n o m b re co m p le t o e s u n a rra y d e u n o o m á s N a m e Co m p o n e n t s q u e in d ica d o n d e e n co n t ra r lo s o b je t o s . El e s q u e m a d e n o m b ra d o p u e d e s e r e s p e cífico d e la
a p lica ció n .
Po r e jm p lo e n la a p lica ció n d e s u b a s t a s , e l n o m b re co m p le t o p u e d e s e r d e fin id o p a ra u s a r a u c t io n co m o la ra íz d e l co n t e xt o d e n o m b re s y Re g is t ra t io n Be a n y Au c t io n I t e m Be a n
co m o h ijo s d e l co n t e xt o ra íz. Es t o e n e fe ct o u t iliza u n e s q u e m a d e n o m b re s s im ila r a l u s a d o a lo s p a q u e t e s d e cla s e s .
En e s t e e je m p lo , la a p lica ció n d e s u b a s t a s a a d a p t a d o S e lle rBe a n a u n s e rvicio d e n o m b re s CORBA p a ra b u s ca r e l Re g is t ra t io n Be a n CORBA. El s ig u ie n t e có d ig o s e h a e xt ra íd o d e
S e lle rBe a n , y a ct ú a co m o u n clie n t e CORBA, y e l s e rvid o r CORBA Re g is t ra t io n S e rv e r.

CORBA RegistrationServer

Es t e có d ig o d e l p ro g ra m a Re g is t ra t io n S e rve r cre a u n o b je t o N a m e Co m p o n e n t q u e in d ica d ó n d e e s t á lo ca liza d o e l Re g is t ra t io n Be a n u s a n d o a u c t io n y Re g is t ra t io n Be a n co m o e l


n o m b re co m p le t o :

NameComponent[] fullname = new NameComponent[2];


fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");
El s ig u ie n t e có d id o u n e e l fu lln a m e co m o u n n u e vo co n t e xt o . Lo s p rim e ro s e le m e n t o s e n e l n o m b re co m p le t o ( a u c t io n e n e s t e e je m p lo ) s o n h u e co s p a ra co n s t ru ir e l á rb o l d e l co n t e xt o
d e n o m b ra d o . El ú lt im o e le m e n t o d e l n o m b re co m p le t o ( Re g is t ra t io n Be a n e n e s t e e je m p lo ) e s e l n o m b re e n via d o p a ra u n irlo a l o b je t o :

String[] orbargs = { "-ORBInitialPort 1050"};


ORB orb = [Link](orbargs, null) ;

RegistrationServer rs= new RegistrationServer();


[Link](rs);

try{
[Link] nameServiceObj =
orb.resolve_initial_references("NameService");
NamingContext nctx =
[Link](nameServiceObj);
NameComponent[] fullname = new NameComponent[2];
fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");

NameComponent[] tempComponent =
new NameComponent[1];
for(int i=0; i < [Link]-1; i++ ) {
tempComponent[0]= fullname[i];
try{
nctx=nctx.bind_new_context(tempComponent);
}catch (Exception e){}
}
tempComponent[0]=fullname[[Link]-1];

// finally bind the object to the full context path


[Link](tempComponent, rs);
Un a ve z q u e s e h a u n id o e l o b je t o Re g is t ra t io n S e rv e r, p u e d e s e r lo ca liza d o co n u n a b ú s q u e d a JNDI u s a n d o e l p ro ve e d o r d e s e rvicio Co s N a m in g co m o s e d e s crib e a l fin a l d e la
s e cció n JNDI, o u s a n d o e l s e rvicio d e b ú s q u e d a s d e n o m b re s CORBA. De cu a lq u ie r fo rm a , e l s e rvid o r d e n o m b re s CORBA d e b e a rra n ca rs e a n t e s d e q u e p u e d a s u ce d e r cu a lq u ie r
b ú s q u e d a . En la p la t a fo rm a Ja va 2 , e l n a m e s e rv e r CORBA s e a rra n ca co n e s t e co m a n d o :

tnameserv
Es t o a rra n ca e l Re g is t ra t io n S e rv e r CORBA e n e l p u e rt o TCP p o r d e fe ct o 9 0 0 . S i n e ce s it a m o s u s a r o t ro p u e rt o d ife re n t e , p o d e m o s a rra n ca r e l s e rvid o r d e e s t a fo rm a . En s is t e m a s Un ix,
s ó lo e l a d m in is t ra d o r p u e d e a cce d e r a lo s n ú m e ro s d e p u e rt o in fe rio re s a 1 0 2 5 ,

tnameserv -ORBInitialPort 1091

CORBA SellerBean

En e l la d o d e l clie n t e , la b ú s q u e d a CORBA u s a e l o b je t o N a m e Co m p o n e n t p a ra co n s t ru ir e l n o m b re . Arra n ca m o s e l s e rvid o r d e o b je t o s d e e s t a fo rm a :

java [Link]
La d ife re n cia e n e l clie n t e e s q u e e s t e n o m b re s e p a s a a l m é t o d o re s o lv e q u e d e vu e lve e l o b je t o CORBA. El s ig u ie n t e có d ig o d e l o b je t o S e lle rBe a n ilu s t ra e s t e p u n t o :

String[] args = { "-ORBInitialPort 1050"};


orb = [Link](args, null) ;
[Link] nameServiceObj =
orb.resolve_initial_references("NameService") ;
nctx= [Link](nameServiceObj);

NameComponent[] fullname = new NameComponent[2];


fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");

[Link] cobject= [Link](fullname);


El m é t o d o n a rro w , d e s d e e l m é t o d o He lp e r, e s g e n e ra d o p o r e l co m p ila d o r IDL, q u e p ro p o rcio n a u n a m a p e o d e t a lla d o p a ra t ra d u cir ca d a ca m p o CORBA e n s u re s p e ct ivo ca m p o d e l
le n g u a je Ja va . Po r e je m p lo , e l m é t o d o S e lle rBe a n . in s e rt I t e m b u s ca u n o b je t o CORBA re g is t ra d o u s a n d o e l n o m b re Re g is t ra t io n Be a n , y d e vu e lve u n o b je t o Re g is t ra t io n Ho m e .
Co n e l o b je t o Re g is t ra t io n Ho m e p o d e m o s d e vo lve r u n re g is t ro Re g is t ra t io n lla m a n d o a s u m é t o d o fin d By P rim a ry Ke y .

[Link] cobject= [Link](fullname);


RegistrationHome regHome=
[Link](cobject);
RegistrationHome regRef =
[Link](
[Link](fullname));
RegistrationPKImpl rpk= new RegistrationPKImpl();
[Link](seller);
Registration newseller =
[Link](
[Link](rpk));
if((newseller == null)||
(![Link](password))) {
return(Auction.INVALID_USER);
}
Interoperable Object References (IOR)
Us a r u n s e rvicio d e n o m b re s CORBA fu n cio n a p a ra la m a yo ría d e la s a p lica cio n e s CORBA, e s p e cia lm e n t e cu a n d o e l ( ORB) e s t á s u m in is t ra d o p o r u n ve n d e d o r. S in e m b a rg o , p o d ría m o s
e n co n t ra r q u e e l s e rvicio d e n o m b re s n o e s t o t a lm e n t e co m p a t ib le co n t o d o s lo s ORBs , y p o d ría m o s o b t e n e r e l fru s t a n t e m e n s a je COMM_ FAI LURE cu a n d o e l clie n t e CORBA in t e n t e
co n e ct a rs e co n e l s e rvid o r CORBA.
La s o lu ció n e s u s a r u n "In t e ro p e ra b le Ob je ct Re fe re n ce " ( IOR) e n s u lu g a r. Es t e e s t á d is p o n ib le e n lo s ORBs q u e s o p o rt a n e l p ro t o co lo "In t e rn e t In t e r- ORB Pro t o co l" ( IIOP) . Co n t e in e la
in fo rm a ció n q u e e l s e rvicio d e n o m b re s p o d ría m a n t e n e r p a ra ca d a o b je t o co m o e l h o s t y e l p u e rt o d o n d e re s id e e l o b je t o , u n a ú n ica cla ve d e b ú s q u e d a p a ra e l o b je t o e n e s e h o s t , y
q u é ve rs io n d e IIOP s o p o rt a .

Servidor IOR

Pa ra cre a r u n IOR t o d o lo q u e t e n e m o s q u e h a ce r e s lla m a r a l m é t o d o o b je c t _ t o _ s t rin g d e s d e la cla s e ORB y p a s a rle u n e je m p la r d e l o b je t o . Po r e je m p lo , p a ra co n ve rt ir e l o b je t o


Re g is t ra t io n S e rv e r e n u n IOR, n e ce s it a m o s a ñ a d ir la lín e a S t rin g re f = o rb . o b je c t _ t o _ s t rin g ( rs ) ; d e l s ig u ie n t e có d ig o e n e l p ro g ra m a p rin cip a l:

String[] orbargs= {"-ORBInitialPort 1050"};


ORB orb = [Link](orbargs, null);
RegistrationServer rs = new RegistrationServer();
//Add this line
String ref = orb.object_to_string(rs);
Po r e s o , e n lu g a r d e re cu p e ra r la in fo rm a ció n d e e s t e o b je t o d e s d e u n s e rvicio d e n o m b re s , h a y o t ra fo rm a p a ra q u e e l s e rvid o r e n víe e s t a in fo rm a ció n a u n clie n t e . Po d e m o s re g is t ra r e l
s t rin g d e vu e lt o co n u n n o m b re s u s t it u t ivo d e l s e rvid o r, q u e p u e d e s e r u n s e n cillo s e rvid o r we b HTTP p o rq u e e l o b je t o ya e s t á e n u n fo rm a t o t ra n s m it ib le .

Cliente IOR

Es t e e je m p lo u s a u n a co n e xió n HTTP p a ra co n ve rt ir e l s t rin g IOR d e n u e vo e n u n o b je t o . Po d e m o s lla m a r a l m é t o d o s t rin g _ t o _ o b je c t d e s d e la cla s e ORB. Es t e m é t o d o lla m a a l IOR
d e s d e e l Re g is t ra t io n S e rv e r y d e vu e lve e l s t rin g ORB. Es t e s t rin g s e p a s a a l ORB u s a n d o e l m é t o d o ORB. s t rin g _ t o _ o b je c t , y e l ORB d e vu e lve la re fe re n cia a l o b je t o re m o t o :

URL iorserver = new URL(


"[Link]
URLConnection con = [Link]();
BufferedReader br = new BufferReader(
new InputStreamReader([Link]));
String ref = [Link]();
[Link] cobj = orb.string_to_object(ref);
RegistrationHome regHome =
[Link](cobj);
El n o m b re s u s t it u t o d e l s e rvid o r p u e d e m a n t e n e r re g is t ro s p e rs is t e n t e s IOR q u e p u e d e n s o b re vivir a p a ra d a s s i e s n e ce s a rio .

Remote Method Invocation (RMI)


El API "Re m o t e Me t h o d In vo ca t io n " ( RMI) o rig in a lm e n t e u s a b a s u p ro p io p ro t o co lo d e co m u n ica ció n lla m a d o "Ja va Re m o t e Me t h o d Pro t o co l" ( JRMP) , q u e re s u lt a b a e n t e n e r s u p ro p io
s e rvicio d e b ú s q u e d a . La s n u e va s ve rs io n e s d e RMI p u e d e n u s a r e l p ro t o co lo IIOP, a d e m á s d e JRMP, RMI- IIOP s e cu b re e n la s ig u ie n t e s e cció n .
El s e rvicio d e n o m b ra d o d e l JRMP RMI e s s im ila r a o t ro s s e rvicio s d e b ú s q u e d a y n o m b ra d o . La b ú s q u e d a re a l s e co n s ig u e lla m a n d o a N a m in g . lo o k u p y p a s á n d o le u n p a rá m e t ro URL a
e s t e m é t o d o . La URL e s p e cifica e l n o m b re d e la m á q u in a , y o p cio n a lm e n t e e l p u e rt o d o n d e e s t á e l s e rvid o r d e n o m b re s , rm ire g is t ry , q u e s a b e q u e o b je t o s e e s t á e je cu t a n d o , y e l
o b je t o re m o t o q u e q u e re m o s re fe re n cia r p a ra lla m a r a s u s m é t o d o s .
Po r e je m p lo :

SellerHome shome =
(SellerHome)[Link](
"rmi://appserver:1090/seller");
Es t e có d ig o d e vu e lve la re fe re n cia re m o t a d e S e lle rHo m e d e s d e e l o b je t o u n id o a l n o m b re s e lle r e n la m á q u in a lla m a d a a p p s e rv e r. La p a rt e rm i d e la URL e s o p cio n a l y p o d ría m o s
h a b e r vis t o URLs RMI s in e lla , p e ro s i e s t á m o s u s a n d o JNDI o RMI- IIOP, in clu ir rm i e n la URL n o s a h o rra co n fu s io n e s p o s t e rio re s . Un a ve z q u e t e n e m o s la re fe re n cia a S e lle rHo m e ,
p o d e m o s lla m a r a s u s m é t o d o s .
En co n t ra s t e co n la b ú s q u e d a JNDI re a liza d a p o r Au c t io n S e rv le t . ja v a , q u e re q u ie re u n a b ú s q u e d a d e d o s e s t a d o s p a ra cre a r u n co n t e xt o y lu e g o la b ú s q u e d a re a l, RMI in icia liza la
co n e xió n co n s e rvid o r d e n o m b re s RMI, rm ire g is t ry , y t a m b ié n o b t ie n e la re fe re n cia re m o t a co n u n a lla m a d a .
Es t a re fe re n cia re m o t a s e rá e l clie n t e in q u ilin o d e rm ire g is t ry . In q u ilin o s ig n ifica q u e a m e n o s q u e e l clie n t e in fo rm e a l s e rvid o r d e q u e t o d a vía n e ce s it a u n a re fe re n cia a l o b je t o , e l
a lq u ile r e xp ira y la m e m o ria e s lib e ra d a . Es t a o p e ra ció n d e a lq u ile r e s t ra n s p a re n t e p a ra e l u s u a rio , p e ro p u e d e s e r a ju s t a d a s e le ccio n a n d o e l va lo r d e la p ro p ie d a d
ja v a . rm i. d g c . le a s e Va lu e e n e l s e rvid o r, e n m ilis e g u n d o s cu a n d o s e a rra n ca e l s e rvid o r d e e s t a fo rm a :

java -[Link]=120000 myAppServer


RMI sobre Internet Inter-ORB Protocol (IIOP)
La ve n t a ja d e RMI s o b re "In t e rn e t In t e r- ORB Pro t o co l " ( IIOP) , s ig n ifica q u e e l có d ig o RMI e xis t e n t e p u e d e re fe re n cia r y b u s ca r u n o b je t o co n e l s e rvicio Co s N a m in g d e CORBA. Es t o
n o s o fre ce u n a g ra n in t e ro p e ra t ivid a d e n t re a rq u it e ct u ra s co n u n p e q u e ñ o ca m b io e n n u e s t ro có d ig o RMI e xis t e n t e .

N o t a : El co m p ila d o r rm ic p ro p o rcio n a la o p ció n - iio p p a ra g e n e ra r e l s t u b y la s cla s e s t ie n e ce s a ria s p a ra RMI- IIOP.

Servidor IIOP

El p ro t o co lo RMI- IIOP s e im p le m e n t a co m o u n p lu g - in JNDI, p o r lo q u e co m o a n t e s , n e ce s it a m o s cre a r u n I n it ia lCo n t e x t :

Hashtable env = new Hashtable();


[Link]("[Link]",
"[Link]");
[Link]("[Link]",
"iiop://localhost:1091");
Context ic = new InitialContext(env);
La fa ct o ría d e n o m b re s d e b e ría p a re ce r fa m ilia r co m o e l m is m o s e rvicio d e n o m b re s u s a d o e n la s e cció n CORBA. La p rin cip a l d ife re n cia e s la a d icció n d e u n va lo r URL e s p e cifica n d o e l
s e rvicio d e n o m b re s a l q u e co n e ct a rs e . El s e rvicio d e n o m b re s u s a d o a q u í e s e l p ro g ra m a t n a m e s e rv a rra n ca d o e n e l p u e rt o 1 0 9 1 :

tnameserv -ORBInitialPort 1091


El o t ro ca m b io p rin cip a l e n e l la d o d e l s e rvid o r e s re e m p la za r la s lla m a d a s a N a m in g . re b in d p a ra u s a r e l m é t o d o re b in d d e JNDI e n e l e je m p la r I n it ia lCo n t e x t . Po r e je m p lo :
Vie jo có d ig o RMI:
S e lle rHo m e s h o m e = ( S e lle rHo m e ) Na m in g . lo o ku p ( "rm i: / / a p p s e rve r: 1 0 9 0 / s e lle r") ;
Nu e vo có d ig o RMI:
Ha s h t a b le e n v = n e w Ha s h t a b le ( ) ; e n v. p u t ( "ja va . n a m in g . fa ct o ry. in it ia l", "co m . s u n . jn d i. co s n a m in g . CNCt xFa ct o ry") ; e n v. p u t ( "ja va . n a m in g . p ro vid e r. u rl",
"iio p : / / lo ca lh o s t : 1 0 9 1 ") ; Co n t e xt ic = n e w In it ia lCo n t e xt ( e n v) ; S e lle rHo m e s h o m e = ( S e lle rHo m e ) Po rt a b le Re m o t e Ob je ct . n a rro w( ic. lo o ku p ( "s e lle r") , S e lle rHo m e )

Ciente IIOP

En e l la d o d e l clie n t e , la b ú s q u e d a RMI s e ca m b ia p a ra u s a r u n e je m p la r d e l I n it ia lCo n t e x t e n lu g a r d e l N a m in g . lo o k u p d e RMI. El o b je t o d e vu e lt o e s m a p e a d o a l o b je t o re q u e rid o


u s a n d o e l m é t o d o n a rro w d e la cla s e ja v a x . rm i. P o rt a b le Re m o t e Ob je c t . P o rt a b le Re m o t e Ob je c t re e m p la za Un ic a s t Re m o t e Ob je c t q u e e s t a b a d is p o n ib le a n t e rio rm e n t e e n có d ig o
d e s e rvid o r RMI.
Vie jo có d ig o d e b ú s q u e d a RMI:

SellerHome shome= new SellerHome("seller");


[Link]("seller", shome);
Nu e vo có d ig o RMI:

Hashtable env = new Hashtable();


[Link]("[Link]",
"[Link]");
[Link]("[Link]",
"iiop://localhost:1091");
Context ic = new InitialContext(env);

SellerHome shome= new SellerHome("seller");


[Link]("seller", shome);
El P o rt a b le Re m o t e Ob je c t re e m p la za a l Un ic a s t Re m o t e Ob je c t d is p o n ib le a n t e rio rm e n t e e n e l có d ig o d e l s e rvid o r RMI. El có d ig o RMI d e b e ría e xt e n d e r Un ic a s t Re m o t e Ob je c t o
lla m a r a l m é t o d o e x p o rt Ob je c t d e la cla s e Un ic a s t Re m o t e Ob je c t . P o rt a b le Re m o t e Ob je c t Ta m b ié n co n t ie n e u n m é t o d o e x p o rt Ob je c t e q u iva le n t e . En la im p le m e n t a ció n a ct u a l, e s
m e jo r e lim in a r e xp lícit a m e n t e lo s o b je t o s n o u t iliza d o s m e d ia n t e lla m a d a s a P o rt a b le Re m o t e Ob je c t . u n e x p o rt Ob je c t ( ) .

Servicios de Búsqueda JINI


( Pa ra h a ce rlo m á s t a rd e )
Aumentar el Rendimiento de la Búsqueda
Cu a n d o e je cu t e m o s n u e s t ra a p lica ció n , s i e n co n t ra m o s q u e lle va r e l o b je t o a o t ro o rd e n a d o r a t ra vé s d e u n d is ke t t e s e rá m á s rá p id o , e s q u e t e n e m o s u n p ro b le m a d e co n fig u ra ció n d e
la re d . La fu e n t e d e l p ro b le m a e s có m o s e re s u e lve n lo s n o m b re s d e h o s t y la s d ire ccio n e s IP, y a q u í t e n e m o s u n a t a jo .
RMI y o t ro s s e rvicio s d e n o m b re s u s a n la cla s e I n e t Ad d re s s p a ra re s o lve r lo s n o m b re s d e h o s t y d ire ccio n e s IP. I n e t Ad d re s s a lm a ce n a lo s re s u lt a d o s p a ra m e jo ra r la s lla m a d a s
s u b s e cu e n t e s , p e ro cu a n d o s e le p a s a u n a n u e va d ire cció n IP o u n n o m b re d e s e rvid o r, re a liza u n a re fe re n cia cru za d a e n t re la d ire cció n IP y e l n o m b re d e l h o s t . S i s u m in is t ra m o s e l
n o m b re d e l h o s t co m o u n a d ire cció n IP, I n e t Ad d re s s t o d a vía in t e n t a rá ve rifica r e l n o m b re d e l h o s t .
Pa ra e vit a r e s t e p ro b le m a , in clu im o s e l n o m b re d e l h o s t y la d ire cció n IP e n u n fich e ro h o s t e n e l clie n t e .
S is t e m a s Un ix : En Un ix, e l fich e ro h o s t n o rm a lm e n t e e s / e t c / h o s t s .
W in d o w s : En win d o ws 9 5 ó 9 8 , e l fich e ro h o s t e s c :\ w in d o w s \ h o s t s , ( e l fich e ro h o s t s . s a m e s u n fich e ro d e e je m p lo ) . En win d o ws NT, e l fich e ro h o s t e s
c :\ w in n t \ s y s t e m 3 2 \ d riv e rs \ e t c \ h o s t s .
To d o lo q u e n e ce s it a m o s h a ce r e s p o n e r e s t a s lín e a s e n n u e s t ro fich e o h o s t . La s e n t ra d a s m y s e rv e r1 y m y s e rv e r2 s o n lo s h o s t d o n d e s e e je cu t a n e l s e rvid o r re m o t o y rm ire g is t ry

[Link] localhost
[Link] myserver1
[Link] myserver2

Oz it o
Invocación Remota de Métodos
El API d e In vo ca ció n Re m o t a d e Mé t o d o s ( RMI) p e rm it e la s co m u n ica cio n e s e n t re clie n t e y s e rvid o r a t ra vé s d e la re d e n t re p ro g ra m a s e s crit o s e n Ja va . El s e rvid o r d e Ja va Be a n s
En t e rp ris e im p le m e n t a d e fo rm a t ra n s p a re n t e e l có d ig o RMI n e ce s a rio p a ra q u e e l p ro g ra m a clie n t e p u e d a re fe re n cia r a lo s Be a n s En t e rp ris e q u e s e e je cu t a n e n e l s e rvid o r y a cce d e r a
e llo s co m o s i s e e s t u vie ra n e je cu t a n d o lo ca lm e n t e e n e l p ro g ra m a clie n t e .
El t e n e r e l RMi in clu id o in t e rn a m e n t e e l s e rvid o r Ja va Be a n s d e En t e rp ris e e s m u y co n ve n ie n t e y n o s a h o rra t ie m p o d e co d ifica ció n , p e ro s i n e ce s it a m o s u s a r ca ra ct e rís t ica s a va n za d a s
d e RMI o in t e g ra r RMI co n u n a a p lica ció n e xis t e n t e , n e ce s it a m o s s o b re e s crib ir la im p le m e n t a ció n p o r d e fe ct o RMI y e s crib ir n u e s t ro p ro p io có d ig o RMI.
El ca p ít u lo re e m p la za e l Re g is t ra t io n Be a n m a n e ja d o p o r co n t e n e d o r d e l Ca p ít u lo 2 : Be a n s d e En t id a d y d e S e s ió n co n u n s e rvid o r d e re g is t ro b a s a d o e n RMI. El Be a n S e lle rBe a n d e l
ca p ít u lo 2 , t a m b ié n s e m o d ifica p a ra lla m a r a l n u e vo s e rvid o r d e re g is t ro RMI u s a n d o u n a lla m a d a a lo o k u p d e Ja va 2 RMI.
● S o b re RMI

● RMI e n la a p lica ció n S u b a s t a


❍ In t ro d u cció n a la s CLa s e s
❍ S u m a rio d e Fich e ro s
❍ Co m p ila r e l Eje m p lo
❍ Arra n ca r e l Re g is t ro RMI
❍ Arra n ca r e l S e rvid o r Re m o t o
● Es t a b le ce r Co m u n ica cio n e s Re m o t a s
● La cla s e Re g is t ra t io n S e rve r
❍ Exp o rt a r u n Ob je t o Re m o t o
❍ Pa s a r p o r Va lo r y p o r Re fe re n cia
❍ Re co le cció n d e Ba s u ra Dis t rib u id a
● In t e rfa ce Re g is t ra t io n
● In t e rfa ce Re t u rn Re s u lt s
● Cla s e S e lle rBe a n

Sobre RMI
El API RMI n o s p e rm it e a cce d e a u n s e rvid o r d e o b je t o s re m o t o d e s d e u n p ro g ra m a clie n t e h a cie n d o s e n cilla s lla m a d a s a m é t o d o s d e l s e rvid o r d e o b je t o s . Mie n t ra s q u e o t ra s
a rq u it e ct u ra s d is t rib u id a s p a ra a cce d e r a s e rvid o re s d e o b je t o s re m o t o s co m o "Dis t rib u t e d Co m p o n e n t Ob je ct Mo d e l" ( DCOM) y "Co m m o n Ob je ct Re q u e s t Bro ke r Arch it e ct u re " ( CORBA)
d e vu e lve n re fe re n cia s a l o b je t o re m o t o , e l API RMI n o s ó lo d e vu e lve re fe re n cia s , s i n o q u e p ro p o rcio n a b e n e ficio s a d icio n a le s .
● El API RMI m a n e ja re fe re n cia s a o b je t o s re m o t o s ( lla m a d a s p o r re fe re n cia ) y t a m b ié n d e vu e lve u n a co p ia d e l o b je t o ( lla m a d a p o r va lo r) .

● S i e l p ro g ra m a clie n t e n o t ie n e a cce s o lo ca l a la cla s e p a ra la q u e s e e je m p la rizó u n o b je t o re m o t o , lo s s e rvicio s RMI p u e d e n d e s ca rg a r e l fich e ro cla s s .

Serialización y colocación de Datos

Pa ra t ra n s fe rir o jb je t o s , e l API RMI u s a e l API S e ria liza t io n p a ra e m p a q u e t a r ( co lo ca r) y d e s e m p a q u e t a r ( d e s co lo ca r) lo s o b je t o s . Pa ra co lo ca r u n o b je t o , e l API S e ria liza t io n co n vie rt e e l
o b je t o a u n S t re a m d e b yt e s , y p a ra d e s co lo ca r e l o b je t o , e l API S e ria liza t io n co n vie rt e u n s t re a m d e b yt e s e n u n o b je t o .

RMI sobre IIOP

Un a d e la s d e s ve n t a ja s in icia le s d e l RMI e ra q u e la ú n ica re la ció n co n la p la t a fo rm a Ja va p a ra e s crib ir in t e rfa ce s h a ce n d íficil la in t re g ra ció n co n s is t e m a s le g a le s e xis t e n t e s . S in


e m b a rg o , RMI s o b re "In t e rn e t In t e r- ORB Pro t o co l" ( IIOP) e xp lica d o e n e l Ca p ít u lo 4 : S e rvicio s d e Bú s q u e d a p e rm it e a RMI co m u n ica rs e co n cu a lq u ie r s is t e m a o le n g u a je q u e s o p o rt e
CORBA.
S i co m b in a m o s la in t e g ra ció n m e jo ra d a co n la h a b ilid a d d e RMI p a ra t ra b a ja r a t ra vé s d e fire wa lls u s a n d o p ro xie s HTTP, p o d ría m o s e n co n t ra r d is t rib u cio n e s p a ra la ló g ica d e n u e s t ro
n e g o cio u s a n d o RMI m á s fá cile s q u e u n a s o lu ció n b a s a d a e n s o cke t s .

N o t a : La t ra n s fe re n cia d e có d ig o y d a t o s s o n p a rt e s cla ve d e la e s p e cifica ció n JINI. De h e ch o , s i a ñ a d ie ra m o s u n s e rvicio d e u n io n e s a lo s s e rvicio s RMI cre a ría m o s a lg o m u y
s im ila r a lo s q u e o b t e n e m o s co n la a rq u it e ct u ra JINI.

RMI en la aplicación de Subastas


El Re g is t ra t io n S e rve r b a s a d o e n RMI t ie n e lo s s ig u ie n t e s m é t o d o s n u e vo s :
● Un n u e vo m é t o d o c re a t e p a ra cre a r u n n u e vo u s u a rio .
● Un n u e vo m é t o d o fin d p a ra b u s ca r u n u s u a rio .
● Un n u e vo m é t o d o s e a rc h p a ra la b ú s q u e d a p e rs o n a liza d a d e u s u a rio s e n la b a s e d e d a t o s .

La n u e va b ú s q u e d a p e rs o n a liza d a s e vu e lve lo s re s u lt a d o s a l clie n t e lla m a n t e m e d ia n t e u n a lla m a d a a u n Ca llb a k RMI. Es t á b ú s q u e d a e s s im ila r a lo s m é t o d o s fin d e r u s a d o s e n lo s


Be a n s d e e je m p lo s u s a d o s e n lo s ca p ít u lo s 2 y 3 , e xce p t o e n q u e la ve rs ió n RMI, p u e d e t a rd a r m á s t ie m p o e n g e n e ra r lo s re s u lt a d o s p o rq u e e l s e vid o r d e re g is t ro s re m o t o lla m a a l
m é t o d o re m o t o e xp o rt a d o p o r e l clie n t e S e lle rBe a n b a s a d o e n RMI.
S i e l clie n t e lla m a n t e e s t á e s crit o e n Ja va , y n o e s , p o r e je m p lo , u n a p á g in a we b , e l s e rvid o r p u e d e a ct u a liza r e l clie n t e t a n p ro n t o co m o lo s re s u lt a d o s e s t u vie ra n lis t o s . Pe ro , e l
p ro t o co lo HTTP u s a d o e n la m a yo ría d e lo s n a ve g a d o re s n o p e rm it e q u e lo s re s u lt a d o s s e a n e n via d o s s in q u e h a ya u n a p e t ició n . Es t o s ig n ifica q u e e l re s u lt a d o d e u n a p á g in a we b n o s e
cre a h a s t a q u e lo s re s u lt a d o s e s t é n lis t o s , lo q u e a ñ a d e u n p e q u e ñ o re t ra s o .

Introducción a las Clases

La s d o s cla s e s p rin cip a le s e n la im p le m e n t a ció n d e la s u b a s t a b a s a d a e n RMI s o n S e lle rBe a n y e l re m o t o Re g is t ra t io n S e rve r. S e lle rBe a n e s lla m a d o d e s d e Au ct io n S e rvle t p a ra in s e rt a r
u n ít e m p a ra la s u b a s t a e n la b a s e d e d a t o s , y ch e q u e a r b a la n ce s n e g a t ivo s e n la s cu e n t a s .
Lo s m o d e lo s d e e je m p lo d e la a rq u it e ct u ra Ja va Be a n s En t e rp ris e e n lo s q u e lo s d e t a lle s d e re g is t ro d e l u s u a rio s e h a n s e p a ra d o d e l có d ig o p a ra cre a r y e n co n t ra r d e t a lle s d e re g is t ro . Es
d e cir, lo s d e t a lle s d e re g is t ro d e u s u a rio p ro p o rcio n a d o s p o r la cla s e Re g is t ra t io n . ja va s e s e p a ra n d e l có d ig o p a ra cre a r y e n co n t ra r u n o b je t o Re g is t ra t io n , q u e e s t á e n la cla s e
Re g is t ra t io n Ho m e . ja va .
La im p le m e n t a ció n d e l in t e rfa ce re m o t o d e Re g is t ra t io n Ho m e . ja va e s t á u n id a a l rm ire g is t ry . Cu a n d o u n p ro g ra m a clie n t e q u ie re m a n ip u la r d e t a lle s d e l re g is t ro d e l u s u a rio , p rim e ro
t ie n e q u e b u s ca r la re fe re n cia a l o b je t o Re g is t ra t io n Ho m e . ja va e n e l rm ire g is t ry .

Sumario de Ficheros

To d o lo s fcih e ro s d e có d ig o fu e n t e p a ra e l e je m p lo b a s a d o e n RMI s e d e s crib e n e n la s ig u ie n t e lis t a .


● S e lle rBe a n . ja va : Pro g ra m a clie n t e q u e lla m a a lo s m é t o d o s re m o t o s Re g is t ra t io n S e rv e r. v e rify p a s s w d y Re g is t ra t io n S e rv e r. fin d Lo w Cre d it Ac c o u n t s . S e lle rBe a n t a m b ié n
e xp o rt a s u m é t o d o u p d a t e Re s u lt s q u e lla m a a Re g is t ra t io n S e rv e r cu a n d o co m p le t a s u b ú s q u e d a Re g is t ra t io n S e rv e r. fin d Lo w Cre d it Ac c o u n t s .
● Re g is t ra t io n S e rve r. ja va : S e rvid o r d e o b je t o s re m o t o s q u e im p le m e n t a lo s in t e rfa ce s re m o t o s Re g is t ra t io n Ho m e y Re g is t ra t io n .

● Re g is t ra t io n . ja va : In t e rfa ce re m o t o q u e d e cla ra lo s m é t o d o s re m o t o s g e t Us e r, v e rify p a s s w d , y o t ro s m é t o d o s p a ra e l m a n e jo d e lo s d e t a lle s d e re g is t ro d e l u s u a rio .


● Re g is t ra t io n Ho m e . ja va : In t e rfa ce re m o t o q u e d e cla ra lo s m é t o d o s re m o t o s c re a t e , fin d By P rim a ry Ke y , y fin d Lo w Cre d it Ac c o u n t s q u e cre a n o d e vu e lve n e je m p la re s d e d e t a lle s
d e re g is t ro .
● Re g is t ra t io n Im p l. ja va : El fich e ro fu e n t e Re g is t ra t io n S e rv e r. ja v a in clu ye la im p le m e n t a ció n p a ra e l in t e rfa ce re m o t o Re g is t ra t io n co m o la cla s e Re g is t ra t io n I m p l.
● Re g is t ra t io n PK. ja va : Cla s e q u e re p re s e n t a lo s d e t a lle s d e re g is t ro d e u s u a rio u s a n d o s ó lo la cla ve p rim a ria d e l re g is t ro d e la b a s e d e d a t o s .
● Re t u rn Re s u lt s . ja va : In t e rfa ce re m o t o q u e d e cla ra e l m é t o d o u p d a t e Re s u lt s la cla s e S e lle rBe a n lo im p le m e n t a co m o ca llb a ck.
● Au ct io n S e rvle t . ja va : Ve rs ió n m o d ifica d a d e la cla s e o rig in a l Au c t io n S e rv le t co n d e la s cu e n t a s d e re g is t ro s e cre a n m e d ia n t e lla m a d a s d ire ct a s a l Re g is t ra t io n S e rv e r d e RMI. El
s e rve lt d e s u b a s t a t a m b ié n lla m a a l m é t o d o S e lle rBe a n . a u d it Ac c o u n t s , q u e d e vu e lve u n a lis t a d e lo s u s u a rio s co n u n b a jo b a la n ce e n la cu e n t a .
El m é t o d o a u d it Ac c o u n t s e s lla m a d o co n la s ig u ie n t e URL, d o n d e h a ce u n s im p le ch e q u e o p a ra ve rifica r q u e la p e t ició n vie n e d e l h o s t lo ca l.

[Link]
AuctionServlet?action=auditAccounts
Ta m b ié n n e ce s it a re m o s u n fich e ro d e p o licía ja va . p o licy p a ra co n ce d e r lo s p e rm is o s n e ce s a rio s p a ra e je cu t a r e l e je m p lo e n p la t a fo rm a s Ja va 2 .
La m a yo ría d e la s a p lica cio n e s RMI n e ce s it a n d o s p e rm is o s s o cke t , p a ra a cce s o s a lo s s o cke t y a HTTP p a ra e s p e cifica r lo s p u e rt o s . Lo s d o s p e rm is o s d e t h re a d s fu e ro n lis t a d o s e n u n a
p ila cu a n d o s e a n e ce s a rio p o r la cla s e Re g is t ra t io n I m p l p a ra cre a r u n t h re a d in t e rn o .
En la p la t a fo rm a Ja va 2 , cu a n d o u n p ro g ra m a n o t ie n e t o d o s lo s p e rm is o s q u e n e ce s it a , la "Má q u in a Virt u a l Ja va " g e n e ra u n a p ila d e s e g u im ie n t o q u e lis t a lo s p e rm is o s q u e n e ce s it a n
s e r a ñ a d id o s a l fich e ro d e p o licía d e s e g u rid a d .

grant {
permission [Link]
"*:1024-65535", "connect,accept,resolve";
permission [Link] "*:80",
"connect";
permission [Link]
"modifyThreadGroup";
permission [Link]
"modifyThread";
};

Compilar el Ejemplo

An t e s d e d e s crib ir e l có d ig o b a s a d o e n RMI d e la s cla s e s a n t e rio re s , a q u í e s t á la s e cu e n cia d e co m a n d o s p a ra co m p ila r e l e je m p lo e n la s p la t a fo rm a s Un ix y Win 3 2 :


Unix:
javac registration/[Link]
javac registration/[Link]
javac registration/[Link]
javac registration/[Link]
javac seller/[Link]
rmic -d . [Link]
rmic -d . [Link]
rmic -d . [Link]

Win32:
javac registration\[Link]
javac registration\[Link]
javac registration\[Link]
javac registration\[Link]
javac seller\[Link]
rmic -d . [Link]
rmic -d . [Link]
rmic -d . [Link]

Arrancar el Registro RMI

Co m o e s t a m o s u s a n d o n u e s t ro p ro p io có d ig o RMI, t e n e m o s q u e a rra n ca r e xp lícit a m e n t e e l RMI Re g is t ry p a ra q u e e l o b je t o S e lle rBe a n p u e d a e n co n t ra r lo s Be a n s re m o t o s d e


En t e rp ris e . El Re g is t ra t io n S e rv e r u s a e l re g is t ro RMI p a ra re g is t ra r o u n ir lo s Be a n s e n t e rp ris e q u e p u e d e n s e r lla m a d o s d e fo rm a re m o t a . El clie n t e S e lle rBe a n co n t a ct a co n e l
re g is t ro p a ra b u s ca r y o b t e n e r la s re fe re n cia s a lo s Be a n s Au c t io n I t e m y Re g is t ra t io n .
Co m o RMI p e rm it e q u e e l có d ig o y lo s d a t o s s e a n t ra n s fe rid o s , d e b e m o s a s e g u ra rn o s q u e e l s is t e m a c la s s lo a d e r n o ca rg a cla s e s e xt ra s q u e p u e d a n s e r e n via d a s e rró n e a m e n t e a l
clie n t e . En e s t e e je m p lo , la s cla s e s e xt ra s p o d ría n s e r la s cla s e s S t u b y S ke l, y la s cla s e s Re g is t ra t io n S e v e r y Re g is t ra t io n I m p l, y p a ra e vit a r q u e lo s e a n cu a n d o a rra n ca m o s e l
re g is t ro RMI. Co m o e l p a t h a ct u a l p o d ría s e r in clu id o a u t o m á t ica m e n t e , n e ce s it a m o s a rra n ca r e l RMI Re g is t ry d e s d e fu e ra d e l e s p a cio d e t ra b a jo .
Lo s s ig u e in t e s co m a n d o s e vit a n e l e n vío d e cla s e s e xt ra s , d e s co n fig u ra n d o la va ria b le CLAS S P ATH a n t e s d e a rra n ca r e l Re g is t ro RMI e n e l p u e rt o 1 0 9 9 . Po d e m o s e s p e cifica r u n p u e rt o
d ife re n t e a ñ a d ie n d o e l n ú m e ro d e p u e rt o d e e s t a fo rm a : rm ire g is t ry 4 3 2 1 &. S i ca m b ia m o s e l n ú m e ro d e p u e rt o d e b e m o s p o n e r e l m is m o n ú m e ro e n la s lla m a d a s a l clie n t e < lo o k u p
y a l s e rvid o r re b in d .

Unix:
export CLASSPATH=""
rmiregistry &

Win32:
unset CLASSPATH
start rmiregistry

Arrancar el Servidor Remoto

Un a ve z q u e rm ire g is t ry s e e s t á e je cu t a n d o , p o d e m o s a rra n ca r e l s e rvid o r re m o t o , Re g is t ra t io n S e rv e r. El p ro g ra m a Re g is t ra t io n S e rv e r re g is t ra e l n o m b re re g is t ra t io n 2 co n e l


s e rvid o r d e n o m b re s rm ire g is t ry , y cu a lq u ie r clie n t e p u e d e u s a r e s t e n o m b re p a ra re cu p e ra r u n a re fe re n cia a l o b je t o re m o t o , Re g is t ra t io n Ho m e .
Pa ra e je cu t a r e l e je m p lo , co p ia m o s la s cla s e s Re g is t ra t io n S e rv e r y Re g is t ra t io n I m p l y la s cla s e s s t u b a s o cia d a s a u n á re a a cce s ib le d e fo rm a re m o t a y a rra n ca m o s e l p ro g ra m a
s e rvid o r.

Unix:
cp *_Stub.class
/home/zelda/public_html/registration
cp [Link]
/home/zelda/public_html/registration
cd /home/zelda/public_html/registration
java -[Link]=
[Link] RegistrationServer

Windows:
copy *_Stub.class
\home\zelda\public_html\registration
copy [Link]
\home\zelda\public_html\registration
cd \home\zelda\public_html\registration
java -[Link]=
[Link] RegistrationServer
La s s ig u ie n t e s p ro p ie d a d e s s e u s a n p a ra co n fig u ra r lo s clie n t e s y s e rvid o re s RMI. Es t a s p ro p ie d a d e s p u e d e n s e le ccio n a rs e d e n t ro d e l p ro g ra m a o s u m in is t ra rla s co m o p ro p ie d a d e s e n la
lín e a d e co m a n d o s p a ra la JVM.
● La p ro p ie d a d ja v a . rm i. s e rv e r. c o d e b a s e e s p e cifica d ó n d e s e lo ca liza n la s cla s e s a cce s ib le s p ú b lica m e n t e . En e l s e rvid o r e s t o p u e d e s e r u n s im p le fich e ro URL p a ra a p u n t a r a l
d ire ct o rio o fich e ro JAR q u e co n t ie n e la s cla s e s . S i e l URL a p u n t a a u n d ire ct o rio , d e b e t e rm in a r co n u n ca rá ct e r s e p a ra d o r d e fich e ro s , "/ ".
S i n o u s a m o s u n fich e ro URL, t a m p o co n e ce s it a re m o s u n s e rvid o r HTTP p a ra d e s ca rg a r la s cla s e s re m o t a s o t e n e r q u e e n via r m a n u a lm e n t e e l s t u b d e l clie n t e y la s cla s e s d e
in t e rfa ce s re m o t o s , p o r e je m p lo , u n fich e ro JAR.
● La p ro p ie d a d ja v a . rm i. s e rv e r. h o s t n a m e e s e l n o m b re co m p le t o d e l h o s t d e l s e rvid o r d o n d e re s id e n la s cla s e s co n a cce s o p ú b lico . Es t o e s s ó lo n e ce s a rio s i e l s e rvid o r t ie n e
p ro b le m a s p a ra g e n e ra r p o r s í m is m o u n n o m b re t o t a lm e n t e cu a lifica d o .
● La p ro p ie d a d ja v a . rm i. s e c u rit y . p o lic y e s p e cifica e l p o licy file co n lo s p e rm is o s n e ce s a rio s p a ra e je cu t a r e l o b je t o s e rvid o r re m o t o y p a ra a cce d e r a la d e s ca rg a d e la s cla s e s d e l
s e rvid o r re m o t o .

Establecer Comunicaciones Remotas


Lo s p ro g ra m a s clie n t e s s e co m u n ica n u n o s co n o t ro s a t ra vé s d e l s e rvid o r. El p ro g ra m a s e rvid o r co n s is t e e n t re s fich e ro s . Lo s fich e ro s d e in t e rfa ce s re m o t o s Re g is t ra t io n . ja v a y
Re g is t ra t io n Ho m e . ja v a d e fin e n lo s m é t o d o s q u e p u e d e n s e r lla m a d o s d e fo rm a re m o t a , y e l fich e ro Re g is t ra t io n S e rv e r. ja v a d e cla s e d e fin e la s cla s e s Re g is t ra t io n S e rv e r y
Re g is t ra t io n I m p l q u e im p le m e n t a n lo s m é t o d o s .
Pa ra e s t a b le ce r co m u n ica cio n e s re m o t a s , t a n t o e l p ro g ra m a clie n t e co m o e l s e rvid o r n e ce s it a n a cce d e r a la s cla s e s d e l in t e rfa ce re m o t o . El s e rvid o r n e ce s it a la s cla s e s d e l in t e rfa ce p a ra
g e n e ra r la im p le m e n t a ció n d e l in t e rfa ce , y e l clie n t e u s a e l in t e rfa ce re m o t o p a ra lla m a r a la s im p le m e n t a cio n e s d e lo s m é t o d o s d e l s e rvid o r re m o t o .
Po r e je m p lo , S e lle rBe a n cre a u n a re fe re n cia a e l in t e rfa ce Re g is t ra t io n Ho m e , y n o Re g is t ra t io n S e rv e r, la im p le m e n t a ció n , cu a n d o n e ce s it a cre a r u n re g is ro d e u s u a rio .
Ju n t o co n lo s in t e rfa ce s d e l s e rvid o r y la s cla s e s , n e ce s it a m o s la s cla s e s S t u b y S ke l p a ra e s t a b le ce r co m u n ica cio n e s re m o t a s . Es t a s cla s e s s e g e n e ra n cu a n d o e je cu t a m o s e l co m a n d o
d e l co m p ila d o r rm ic s o b re la s cla s e s Re g is t ra t io n S e rv e r y S e lle rBe a n .
La s cla s e s S e lle rBe a n , S e lle rBe a n _ S t u b . c la s s y S e lle rBe a n _ S k e l. c la s s g e n e ra d a s s o n n e ce s a ria s p a ra la lla m a d a d e s d e e l s e rvid o r h a s t a e l clie n t e S e lle rBe a n . Es e l fich e ro
_ S t u b . c la s s e n e l clie n t e q u e co lo ca y d e s co lo ca lo s d a t o s d e s d e e l s e rvid o r, m ie n t ra s q u e la cla s e _ S k e l. c la s s h a ce lo s m is m o e n e l s e rvid o r.

N o t a : En la p la t a fo rm a Ja va 2 , e l fich e ro d e l la d o d e ls e rvid o r, _ S k e l. c la s s ya n o e s n e ce s a rio p o rq u e s u s fu n cio n e s h a n s id o re e m p la za d a s p o r la s cla s e s d e la "Ja va Virt u a l


Ma ch in e ".

Colocar Datos

Co lo ca r y d e s co lo ca r lo s d a t o s s ig n ifica q u e cu a n d o lla m a m o s a l m é t o d o Re g is t ra t io n Ho m e . c re a t e d e s d e S e lle rBe a n , e s t a lla m a d a e s re e n via d a a l m é t o d o


Re g is t ra t io n S e rv e r_ S t u b . c re a t e . El m é t o d o Re g is t ra t io n S e rv e r_ S t u b . c re a t e e n vu e lve lo s a rg u m e n t o s d e l m é t o d o y lo s e n vía a u n s t re a m s e ria liza d o d e b yt e s p a ra e l m é t o d o
Re g is t ra t io n S e rv e r_ S k e l. c re a t e .
El
m é t o d o Re g is t ra t io n S e rv e r_ S k e l. c re a t e d e s e n vu e lve e l s t re a m d e b yt e s s e ria liza d o , re - cre a lo s a rg u m e n t o s d e la lla m a d a o rig in a l a Re g is t ra t io n Ho m e . c re a t e , y d e vu e lve e l
re s u lt a d o d e la lla m a d a re a l Re g is t ra io n S e rv e r. c re a t e d e vu e lt a , ju n t o co n la m is m a ru t a , p e ro e s t a ve z, s e e m p a q u e t a n lo s d a t o s e n e l la d o d e l s e rvid o r.
Co lo ca r y d e s co lo ca r lo s d a t o s t ie n e s u s co m p lica cio n e s . El p rim e r p ro b le m a s o n lo s o b je t o s s e ria liza d o s q u e p o d ría n s e r in co m p a t ile s e n t re ve rs io n e s d e l JDK. Un o b je t o s e ria liza d o
t ie n e u n id e n t ifica d o r a lm a ce n a d o co n e l o b je t o q u e e n la za e l o b je t o s e ria liza d o co n s u ve rs ió n . S i e l clie n t e RMI y e l s e rvid o r s o n in co m p a t ivle s co n s u ID d e s e rie , p o d ría m o s n e ce s it a r
g e n e ra r S t u b s y S ke ls co m p a t ib le s u s a n d o la o p ció n - v c o m p a t d e l co m p ila d o r rm ic .
Ot ro p ro b le m a e s q u e n o t o d o s lo s o b je t o s s o n s e ria liza b le s p o r d e fe ct o . El o b je t o in icia l Re g is t ra t io n Be a n e s t á b a s a d o e n la d e vo lu ció n d e u n o b je t o En u m e ra t io n q u e co n t ie n e
e le m e n t o s Re g is t ra t io n e n u n Ve c t o r. De vo lve r la lis t a d e s d e e l m é t o d o re m o t o , fu n cio n a b ie n , p e ro cu a n d o in t e n t a m o s e n vía r u n ve ct o r co m o u n p a rá m e t ro a u n o b je t o re m o t o ,
o b t e n d re m o s u n a e xce p ció n e n t ie m p o d e e je cu ció n e n la p la t a fo rm a Ja va 2 .
Afo rt u n a d a m e n t e , e n e l API Co lle ct io n s , la p la t a fo rm a Ja va o fre ce a lt e rn a t iva s a la d e s co lo ca ció n d e o b je t o s a n t e rio r. En e s t e e je m p lo , u n Arra y Lis t d e l API Co lle ct io n s re e m p la za e l
Ve c t o r. S i e l API Co lle ct io n s n o e s u n a o p ció n , p o d e m o s cre a r u n a cla s e e n vo lt u ra q u e e xt ie n d a S e ria liz a b le y p ro p o rcio n e im p le m e n t a cio n e s p a ra lo s m é t o d o s re a d Ob je c t y
w rit e Ob je c t p a ra co n ve rt ir e l o b je t o e n u n s t re a m d e b yt e s .

La clase RegistrationServer
La cla s e Re g is t ra t io n S e rve r e xt ie n d e ja v a . rm i. s e rv e r. Un ic a s t Re m o t e Ob je c t e im p le m e n t a lo s m é t o d o s c re a t e , fin d By P rim a ry Ke y y fin d Lo w Cre d it Ac c o u n t s d e cla ra d o s e n e l
in t e rfa ce Re g is t ra t io n Ho m e . El fich e ro fu e n t e Re g is t ra t io n S e rve r. ja va t a m b ié n in clu ye la im p le m e n t a ció n d e l in t e rfa ce re m o t o Re g is t ra t io n co m o la cla s e Re g is t ra t io n I m p l.
Re g is t ra t io n I m p l t a m b ié n e xt ie n d e Un ic a s t Re m o t e Ob je c t .

Exportar un Objeto Remoto

Cu a lq u ie r o b je t o q u e q u e rra m o s q u e s e a cce s ib le re m o t a m e n t e n e ce s it a e xt e n d e r e l in t e rfa ce ja v a . rm i. s e rv e r. Un ic a s t Re m o t e Ob je c t o u s a r e l m é t o d o e x p o rt Ob je c t d e la cla s e


Un ic a s t Re m o t e Ob je c t . S i e xt e n d e m o s Un ic a s t Re m o t e Ob je c t , t a m b ié n o b t e n d re m o s lo s m é t o d o s e q u a ls , t o S t rin g y h a s h Co d e p a ra e l o b je t o e xp o rt a d o .

Pasar por Valor y por Referencia

Au n q u e la cla s e Re g is t ra t io n I m p l n o e s t á u n id a a l re g is t ro , t o d a vía e s t á re fe re n cia d a re m o t a m e n t e p o rq u e e s t á a s o cia d a co n lo s re s u lt a d o s d e vu e lt o s p o r Re g is t ra t io n Ho m e .


Re g is t ra t io n I m p l e xt ie n d e Un ic a s t Re m o t e Ob je c t , s u s re s u lt a d o s s o n p a s a d o s p o r re fe re n cia , y s ó lo u n a co p ia d e l Be a n d e re g is t ro d e l u s u a rio e xis t e n t e e n la Ja va VM a la ve z.
En e l ca s o d e re p o rt a r re s u lt a d o s co m o e n e l m é t o d o Re g is t ra t io n S e rv e r. fin d Lo w Cre d it Ac c o u n t s , la cla s e Re g is t ra t io n I m p l s e p u e d e u s a r u n a co p ia d e l o b je t o re m o t o . S i n o
e xt e n d e m o s la cla s e Un ic a s t Re m o t e Ob je c t e n la d e fin ició n d e la cla s e Re g is t ra t io n I m p l, s e d e vo lve rá u n n u e vo o b je t o Re g is t ra t io n e n ca d a p e t ició n . En e fe ct o lo s va lo re s s o n
p a s a d o s p e ro n o la re fe re n cia a l o b je t o e n e l s e rvid o r.

Recolección de Basura Distribuida

Al u s a r re fe re n cia s re m o t a s a o b je t o s e n e l s e rvid o r d e s d e fu e ra d e l clie n t e e l re co le ct o r d e b a s u ra d e l s e rvid o r in t ro d u ce a lg u n o s p ro b le m a s p o t e n cia le s co n la m e m o ria . ¿ Có m o co n o ce


e l s e rvid o r cu a n d o s e m a n t ie n e u n a re fe re n cia a u n o b je t o Re g is t ra t io n q u e n o e s t á s ie n d o u s a d o p o r n in g ú n clie n t e p o rq u e a b o rt ó o s e ca yó la co n e xió n d e re d ?
Pa ra e vit a r b lo q u e o s d e m e m o ria e n e l s e rvid o r d e s d e lo s clie n t e s , RMI u s a u n m e ca n is m o d e a lq u ile r cu a n d o o fre ce n la s re fe re n cia s a lo s o b je t o s e xp o rt a d o s . Cu a n d o s e e xp o rt a u n
o b je t o , la JVM in cre m e n t a la cu e n t a d e l n ú m e ro d e re fe re n cia s a e s t e o b je t o y co n fig u ra e l t ie m p o d e e xp ira ció n , o t ie m p o d e p ré s t a m o , p o r e l n ú m e ro d e re fe re n cia s d e l o b je t o .
Cu a n d o e l a lq u ile r e xp ira , la cu e n t a d e re fe re n cia s d e e s t e o b je t o s e d e cre m e n t a y s i a lca n za 0 , e l o b je t o e s s e le ccio n a d o p a ra la re co le cció n d e b a s u ra p o r la JVM. Ha y q u e co n fig u ra r e l
clie n t e q u e m a n t ie n e u n p ico d e re fe re n cia a l o b je t o re m o t o a q u e re n u e ve e l a lq u ile r s i n e ce s it a e l o b je t o m á s a lla d e l t ie m p o d e a lq u ile r. Es t e p ico d e re fe re n cia e s u n a fo rm a d e
re fe rirs e a u n o b je t o e n la m e m o ria s in m a n t e n e rlo le jo s d e l re co le ct o r d e b a s u ra .
Es t e t ie m p o d e a lq u ile r e s u n a p ro p ie d a d co n fig u ra b le m e d id a e n s e g u n d o s . S i t e n e m o s u n a re d rá p id a , p o d ría m o s a co rt a r e l va lo r p o r d e fe ct o , y cre a r u n g ra n n ú m e ro d e re fe re n cia s a
o b je t o s t ra n s it o ria s .
El s ig u ie n t e có d ig o s e le ccio n a e l t ie m p o d e a lq u ile r a 2 m in u t o s .

Property prop = [Link]();


[Link]("[Link]", 120000);
Lo s m é t o d o s c re a t e y fin d By P rim a ry Ke y s o n p rá ct ica m e n t e id é n t ico s a la s o t ra s ve rs io n e s d e l s e rvid o r Re g is t ra t io n . La p rin cip a l d ife re cia e s q u e e n e l la d o d e l s e rvid o r, e l re g is t ro
re g is t ra t io n e s re fe re n cia d o co m o Re g is t ra t io n I m p l, q u e e s la im p le m e n t a ció n d e Re g is t ra t io n . En e l la d o d e l clie n t e , s e u s a Re g is t ra t io n e n s u lu g a r.
El m é t o d o fin d Lo w Cre d it Ac c o u n t s co s n t ru ye u n Arra y Lis t d e o b je t o s Re g is t ra t io n I m p l s e ria liza b le s y lla m a a l m é t o d o re m o t o e n la cla s e S e lle rBe a n p a ra p a s a r e l re s u lt a d o d e
vu e lt a . Lo s re s u lt a d o s o n g e n e ra d o p o r u n a cla s e Th re a d in t e rn a p o rq u e e l m é t o d o re t o rn a a n t e s d e q u e e l re s u lt a d o e s t é co m p le t o . El o b je t o S e lle rBe a n e s p e ra a q u e s e a lla m a d o e l
m é t o d o u p d a t e Ac c o u n t s a n t e s d e m o s t ra r la p á g in a HTML. En u n clie n t e e s crit o e n Ja va , n o s e ría n e ce s a rio e s p e ra r, p o d ría m o s m o s t ra r la a ct u a liza ció n e n t ie m p o re a l.

public class RegistrationServer


extends UnicastRemoteObject
implements RegistrationHome {

public [Link]
create(String theuser,
String password,
String emailaddress,
String creditcard)
throws [Link]{
// code to insert database record
}

public [Link]
findByPrimaryKey([Link] pk)
throws [Link] {
if ((pk == null) || ([Link]() == null)) {
throw new FinderException ();
}
return(refresh(pk));
}

private Registration refresh(RegistrationPK pk)


throws FinderException {

if(pk == null) {
throw new FinderException ();
}

Connection con = null;


PreparedStatement ps = null;
try{
con=getConnection();
ps=[Link]("select password,
emailaddress,
creditcard,
balance from registration where theuser = ?");
[Link](1, [Link]());
[Link]();
ResultSet rs = [Link]();
if([Link]()) {
RegistrationImpl reg=null;
try{
reg= new RegistrationImpl();
}catch (RemoteException e) {}
[Link] = [Link]();
[Link] = [Link](1);
[Link] = [Link](2);
[Link] = [Link](3);
[Link] = [Link](4);
return reg;
}else{
throw new FinderException ();
}
}catch (SQLException sqe) {
throw new FinderException();
}finally {
try{
[Link]();
[Link]();
}catch (Exception ignore) {}
}
}

public void findLowCreditAccounts(


final ReturnResults client)
throws FinderException {
Runnable bgthread = new Runnable() {
public void run() {
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
ArrayList ar = new ArrayList();

try{
con=getConnection();
ps=[Link]("select theuser,
balance from registration
where balance < ?");
[Link](1, 3.00);
[Link]();
rs = [Link]();
RegistrationImpl reg=null;
while ([Link]()) {
try{
reg= new RegistrationImpl();
}catch (RemoteException e) {}
[Link] = [Link](1);
[Link] = [Link](2);
[Link](reg);
}
[Link]();
[Link](ar);
}catch (Exception e) {
[Link]("findLowCreditAccounts: "+e);
return;
}
finally {
try{
if(rs != null) {
[Link]();
}
if(ps != null) {
[Link]();
}
if(con != null) {
[Link]();
}
}catch (Exception ignore) {}
}
} //run
};
Thread t = new Thread(bgthread);
[Link]();
}
}
El m é t o d o m a in ca rg a e l d rive r JDBC. Es t a ve rs ió n u s a la b a s e d e d a t o s Po s t g re s , in s t a la e l RMI S e c u rit y Ma n a g e r, y co n t a ct a co n e l re g is t ro RMI p a ra u n ir e l o b je t o re m o t o
Re g is t ra t io n Ho m e a l n o m b re re g is t ra t io n 2 . No n e ce s it a u n ir e l in t e rfa ce re m o t o , Re g is t ra t io n p o rq u e la cla s e e s ca rg a d a cu a n d o e s re fe re n cia d a p o r Re g is t ra t io n Ho m e .
Po r d e fe ct o , e l s e rvid o r d e n o m b re s u s a e l p u e rt o 1 0 9 9 . S i q u e re m o s u s a r u n n ú m e ro d e p u e rt o d ife re n t e , p o d e m o s a ñ a d irlo co n d o s p u n t o s d e e s t a fo rm a : k q 6 p y :4 3 2 1 . S i ca m b ia m o s
a q u í e l n ú m e ro d e p u e rt o , d e b e m o s a rra n ca r e l RMI Re g is t ry co n e l m is m o n ú m e ro d e p u e rt o .
El m é t o d o m a in t a m b ié n in s t a la u n RMI Fa ilu re Ha n d le r. S i e l s e rvid o r fa lla a l cre a r e l s o cke t s e rvid o r, e l m a n e ja d o r d e fa llo s d e vu e lve t ru e q u e in s t ru ye a l s e rvid o r RMI p a ra q u e
re in t e n t e la o p e ra ció n .

public static void main(String[] args){


try {
new [Link](
"[Link]",
"jdbc:postgresql:ejbdemo",
"postgres", "pass");
} catch (Exception e){
[Link](
"error in loading JDBC driver");
[Link](1);
}
try {
Properties env=[Link]();
[Link]("[Link]",
"[Link]
RegistrationServer rs=
new RegistrationServer();
if ([Link]() == null ) {
[Link](
new RMISecurityManager());
}
[Link](
new RMIFailureHandlerImpl());

[Link]("
//[Link]/registration2",rs);
}catch (Exception e) {
[Link]("Exception thrown "+e);
}
}
}

class RMIFailureHandlerImpl
implements RMIFailureHandler {
public boolean failure(Exception ex ){
[Link]("exception "+ex+" caught");
return true;
}
}

Interface Registration
El in t e rfa ce Re g is t ra t io n d e cla ra lo s m é t o d o s im p le m e n t a d o s p o r Re g is t ra t io n I m p l e n e l fich e ro fu e n t e Re g is t ra t io n S e rv e r. ja v a .

package registration;

import [Link].*;
import [Link].*;

public interface Registration extends Remote {


boolean verifyPassword(String password)
throws RemoteException;
String getEmailAddress() throws RemoteException;
String getUser() throws RemoteException;
int adjustAccount(double amount)
throws RemoteException;
double getBalance() throws RemoteException;
}

Interface RegistrationHome
El in t e rfa ce Re g is t ra t io n Ho m e d e cla ra lo s m é t o d o s im p le m e n t a d o s p o r la cla s e Re g is t ra t io n S e rv e r. Es t o s m é t o d o s re fle ja n e l in t e rfa ce Ho m e d e fin id o e n e l e je m p lo Ja va Be a n s d e
En t e rp ris e . El m é t o d o fin d Lo w Cre d it Ac c o u n t s t o m a u n in t e rfa ce re m o t o co m o s u ú n ico p a rá m e t ro .

package registration;

import [Link].*;
import [Link].*;

public interface RegistrationHome extends Remote {


RegistrationPK create(String theuser,
String password,
String emailaddress,
String creditcard)
throws CreateException,
RemoteException;

Registration findByPrimaryKey(RegistrationPK theuser)


throws FinderException, RemoteException;

public void findLowCreditAccounts(ReturnResults rr)


throws FinderException, RemoteException;
}

Interface ReturnResults
El in t e rfa ce Re t u rn Re s u lt s d e cla ra e l m é t o d o im p le m e n t a d o p o r la cla s e S e lle rBe a n . El m é t o d o u p d a t e Re s u lt s e s lla m a d o d e s d e Re g is t ra t io n S e rv e r.

package registration;

import [Link].*;
import [Link].*;

public interface ReturnResults extends Remote {


public void updateResults(ArrayList results)
throws FinderException, RemoteException;
}

La Clase SellerBean
La cla s e S e lle rBe a n in clu ye la im p le m e n t a ció n d e l m é t o d o ca llb a ck y lla m a a l o b je t o Re g is t ra t io n S e rv e r u s a n d o RMI. El m é t o d o u p d a t e Ac c o u n t s s e h a ce a cce s ib le m e d ia n t e u n a
lla m a d a a Un ic a s t Re m o t e Ob je c t . e x p o rt Ob je c t ( t h is ) ;. El m é t o d o a u d it Ac c o u n t s e s p e ra u n o b je t o m e t h o d Bo o le a n .
El m é t o d o u p d a t e Ac c o u n t s e n vía u n a n o t ifica ció n a t o d o s lo s m é t o d o s q u e e s p e ra n e l o b je t o Bo o le a n cu a n d o h a s id o lla m a d o d e s d e e l s e rvid o r y re cib e lo s re s u lt a d o s .

package seller;

import [Link];
import [Link].*;
import [Link].*;
import [Link].*;
import [Link];
import [Link];
import [Link].*;
import auction.*;
import registration.*;
import [Link];
import [Link];

public class SellerBean


implements SessionBean, ReturnResults {

protected SessionContext ctx;


[Link] ectx;
Hashtable env = new Hashtable();
AuctionServlet callee=null;
Boolean ready=new Boolean("false");
ArrayList returned;

public int insertItem(String seller,


String password,
String description,
int auctiondays,
double startprice,
String summary)
throws RemoteException {

try{
RegistrationHome regRef = (
RegistrationHome)[Link](
"//[Link]/registration2");
RegistrationPK rpk= new RegistrationPK();
[Link](seller);
Registration newseller = (
Registration)[Link](rpk);
if((newseller == null) ||
(![Link](password))) {
return(Auction.INVALID_USER);
}

AuctionItemHome home = (
AuctionItemHome) [Link](
"auctionitems");
AuctionItem ai= [Link](seller,
description,
auctiondays,
startprice,
summary);
if(ai == null) {
return Auction.INVALID_ITEM;
}else{
return([Link]());
}
}catch(Exception e){
[Link]("insert problem="+e);
return Auction.INVALID_ITEM;
}
}

public void updateResults([Link] ar)


throws RemoteException {
returned=ar;
synchronized(ready) {
[Link]();
}
}

public ArrayList auditAccounts() {


[Link]=callee;
try {
RegistrationHome regRef = (
RegistrationHome)[Link](
"//[Link]/registration2");
[Link](this);
synchronized(ready) {
try {
[Link]();
} catch (InterruptedException e){}
}
return (returned);
}catch (Exception e) {
[Link]("error in creditAudit "+e);
}
return null;
}

public void ejbCreate()


throws [Link],
RemoteException {
[Link](
[Link].INITIAL_CONTEXT_FACTORY,
"[Link]");
try{
ectx = new InitialContext(env);
} catch (NamingException e) {
[Link](
"problem contacting EJB server");
throw new [Link]();
}
Properties env=[Link]();
[Link]("[Link]",
"[Link]
[Link]("[Link]","[Link]");
[Link](this);
}

public void setSessionContext(SessionContext ctx)


throws RemoteException {
[Link] = ctx;
}

public void unsetSessionContext()


throws RemoteException {
ctx = null;
}

public void ejbRemove() {}


public void ejbActivate() throws RemoteException {
[Link]("activating seller bean");
}
public void ejbPassivate() throws RemoteException {
[Link]("passivating seller bean");
}
}
_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM" s ig n ifica n u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .

Oz it o
Common Object Request Broker Architecture (CORBA)
La s im p le m e n t a cio n e s d e RMI y d e Ja va Be a n s En t e rp ris e d e la a p lica ció n d e s u b a s t a u s a n e l le n g u a je Ja va p a ra im p le m e n t a r lo s d is t in t o s s e rvicio s d e la s u b a s t a . S in e m b a rg o ,
p o d ría m o s n e ce s it a r in t e rg ra rlo co n a p lica cio n e s e s crit a s e n C, C+ + u o t ro s le n g u a je s y e je cu t a rlo e n u n m illa r d e s is t e m a s o p e ra t ivo s y m á q u in a s d is t in t a s .
Un a fo rm a d e in t e g ra ció n co n o t ra s a p liccio n e s e s t ra n s m it ir d a t o s e n u n fo rm a t o co m ú n co m o ca ra ct e re s d e 8 b it s s o b re s o cke t s TCP/ IP. La d e s ve n t a ja e s t e n e r q u e g a s t a r m u ch o
t ie m p o e n d e riva r u n m e n s a je d e p ro t o co lo y m a p e a d o d e va ria s e s t ru ct u ra s d e d a t o s h a cia y d e s d e e l fo rm a t o d e t ra n s m is ió n co m ú n p a ra q u e lo s d a t o s p u e d a n s e r e n via d o s y
re cib id o s s o b re la co n e xió n TCP/ IP.
Aq u í e s d o n d e p u e d e n a yu d a r e l "Co m m o n Ob je ct Re q u e s t Bro ke r Arch it e ct u re " ( CORBA) y s u "In t e rfa ce De fin it io n La n g u a g e " ( IDL) . IDL p ro p o rcio n a u n fo rm a t o co m ú n p a ra
re p re s e n t a r u n o b je t o q u e p u e d e s e r d is t rib u id o a o t ra s a p lica cio n e s . La s o t ra s a p lica cio n e s p o d ría n in clu s o n o e n t e n d e r d e o b je t o s , p e ro m ie n t ra s p u e d a n p ro p o rcio n a r u n m a p e a d o
e n t re e l fo rm a t o co m ú n IDL y s u s p ro p ia re p re s e n t a ció n d e d a t o s , la a p lica ció n p o d rá co m p a rt ir lo s d a t o s .
Es t e ca p ít u lo d e s crib e e l e s q u e m a d e m a p e o d e IDL a le n g u a je Ja va , y có m o re e m p la za r e l o rig in a l Re g is t ra t io n Be a n b a s a d o e n co n t e n e d o r co n t ro la d o r p o r s u e q u iva le n t e s e rvid o r
CORBA. Lo s p ro g ra m a s S e lle rBe a n . ja v a y Au c t io n S e rv le t . ja v a t a m b ié n s e m o d ifica n p a ra in t e ro p e ra r co n e l p ro g ra m a CORBA Re g is t ra t io n S e rv e r.
● Es q u e m a d e Ma p e o IDL

❍ Re fe re n cia Rá p id a
❍ Co n fig u ra r Ma p e o s IDL
❍ Ot ro s Tip o s IDL
● CORBA e n la Ap lica ció n S u b a s t a
❍ CORBA Re g is t ra t io n S e rve r
❍ Fich e ro d e Ma p e o s IDL
❍ Co m p ila r e l Fich e ro d e Ma p e o s IDL
❍ Fich e ro s S t u b y S ke le t o n
● Ob je ct Re q u e s t Bro ke r ( ORB)
❍ Po n e r Dis p o n ib le e l S e rvid o r CORBA
❍ Co n e ct a r u n Nu e vo ORB
❍ Acce s o a l S e rvicio d e No m b re s p o r Clie n t e s CORBA
● Cla s e s He lp e r y Ho ld e r
● Re co le cció n d e Ba s u ra
● CORBA Ca llb a cks
● Us a r e l Tip o An y
● Co n clu s ió n

Esquema de Mapeo IDL


Mu ch o s le n g u a je s d e p ro g ra m a ció n p ro p o rcio n a n u n m a p e o e n t re s u s t ip o s d e d a t o s y e l fo rm a t o co m ú n d e n o m in a d o IDL, y e l le n g u a je Ja va n o e s u n a e xce p ció n . El le n g u a je Ja va
p u e d e e n via r o b je t o s d e fin id o s p o r IDL a o t ra s a p lica cio n e s d is t rib u id a s CORBA y re cib ir o b je t o s d e fin id o s m e d ia n t e IDL d e s d e o t ra s a p lica cio n e s d is t rib u id a s CORBA.
Es t a s e cció n d e s crb ie e l e s q u e m a d e m a p e d o d e Ja va a IDL y, cu a n d o s e a n e ce s a rio , p re s e n t a p ro b le m a s q u e d e b e m o s t e n e r e n co n s id e ra ció n .

Referencia Rápida

Aq u í t e n e m o s u n a t a b la d e re fe re n cia rá p id a d e lo s t ip o s d e d a t o s d e l le n g u a je Ja va y lo s d e IDL CORBA, y la s e xce p cio n e s d e t ie m p o d e e je cu ció n q u e s e p u e d e n la n za r cu a n d o la


co n ve rs ió n fa lla . Lo s t ip o s d e d a t o s d e e s t a t a b la q u e n e ce s it a n e xp lica ció n s e cu b re n m á s a b a jo .
Tip o d e D a t o Ja v a Fo rm a t o I D L Ex c e p t io n
b yt e o ct e t
b o o le a n b o o le a n
ch a r ch a r DATA_ CONVERS ION
ch a r wch a r
d o u b le d o u b le
flo a t flo a t
in t lo n g
in t u n s ig n e d lo n g
lo n g lo n g lo n g
lo n g u n s ig n e d lo n g lo n g
s h o rt s h o rt
s h o rt u n s ig n e d s h o rt
ja va . la n g . S t rin g s t rin g DATA_ CONVERS ION
ja va . la n g . S t rin g ws t rin g MARS HAL

Va lo re s s in S ig n o : Lo s t ip o s d e d a t o s Ja va : b y t e , s h o rt , in t , y lo n g e s t á n re p re s e n t a d o s p o r e n t e re ro s d e co m p le m e n t o a d o s d e 8 , 1 6 , 3 2 y 6 4 b it s . Es t o s ig n ifica q u e u n va lo r s h o rt
Ja va re p re s e n t a u n ra n g o d e s d e - 2 1 5 h a s t a 2 1 5 - 1 ó d e s d e - 3 2 7 6 8 h a s t a 3 2 7 6 7 in clu s ive s . El t ip o co n s ig n o e q u iva le n t e IDL p a ra u n s h o rt , s h o rt , e s ig u a l e n e l ra n g o , p e ro e l t ip o
s h o rt IDL s in s ig n o u s a e l ra n g o d e s d e 0 h a t a 2 1 5 ó d e s d e 0 h a s t a 6 5 5 3 5 .
Es t o s ig n ifica q u e e n e l ca s o d e s h o rt , s i u n va lo r s h o rt s in s ig n o m a yo r d e 3 2 7 6 7 e s p a s a d o a u n p ro g ra m a e s crit o e n Ja va , e l va lo r s h o rt s e rá re p re s e n t a d o co m o u n n ú m e ro
n e g a t ivo . Es t o p u e d e ca u s a r co n fu s ió n e n lo s lím it e s d e t e s t p a ra va lo re s m a yo re s q u e 3 2 7 6 7 o m e n o re s q u e 0 .
Tip o s c h a r I D L: El le n g u a je Ja va u s a u n u n ico d e d e 1 6 Bit s , p e ro lo s t ip o s c h a r y s t rin g d e IDL s o n ca rca t e re s d e 8 b it s . Po d e m o s m a p e a r u n c h a r Ja va a u n c h a r IDL d e 8 b it s p a ra
t ra n s m it ir ca ra ct e re s m u lt i- b yt e s i u s a m o s u n a rra y p a ra h a ce rlo . S in e m b a rg o , e l t ip o d e ca ra ct e r a n ch o d e IDL w c h a r e s t á e s p e cia lm e n t e d is e ñ a d o p a ra le n g u a je s co n ca ra ct e re s
m u lt i- b yt e s y a lo ja e l n ú m e ro fijo d e b yt e s q u e s e a n e ce s a rio p a ra co n t e n e r e l co n ju n t o d e l le n g u a je p a ra ca d a u n a d e la s le t ra s .
Cu a n d o s e m a p e a d e s d e e l t ip o c h a r d e Ja va a l t ip o c h a r d e IDL, s e p u e d e la n za r la e xce p ció n D ATA_ CON VERS I ON s i e l ca ra ct e r n o e n t ra e n lo s 8 b it s .
Tip o s s t rin g I D L: El t ip o s t rin g IDL p u e d e s e r la n za d o co m o u n a s e cu e n cia d e t ip o s c h a r IDL, t a m b ié n la n za la e xce p ció n D ATA_ CON VERS I ON . El t ip o w s t rin g IDL e s e q u iva le n t e a
u n a s e cu e n cu a d e w c h a rs t e rm in a d a p o r u n w c h a r N ULL.
Un t ip o s t rin g y u n t ip o w s t rin g d e IDL p u e d e n t e n e r u n t a m a ñ o fijo o s in m á xim o d e fin id o . S i in t e n t a m o s m a p e a r u n ja v a . la n g . S t rin g a u n s t rin g IDL d e t a m a ñ o fijo y e l
ja v a . la n g . S t rin g e s d e m a s id a d o la rg o , s e la n za rá u n a e xce p ció n MARS HAL.

Configurar el Mapeo IDL

El m a p e o d e l le n g u a je Ja va a IDL s e s it ú a e n u n fich e ro co n e xt e n s ió n . id l. El fich e ro e s co m p ila d o p a ra q u e p u e d a s e r a cce d id o p o r lo s p ro g ra m a s CORBA q u e n e ce s it a n e n via r y re cib ir


d a t o s . Es t a s e cció n e xp lica có m o co n s t ru ir lo s m a p e o s p a ra la s s e n t e n cia s d e p a q u e t e y lo s t ip o s d e d a t o s Ja va . La s ig u ie n t e s e cció n e n Im p le m e n t a ció n CORBA d e Re g is t ra t io n S e rve r
d e s crib e có m o u s a r e s t a in fo rm a ció n p a ra co n fig u ra r e l fich e ro d e m a p e o IDL p a ra e l s e rvid o r Re g is t ra t io n CORBA.
P a q u e t e s e I n t e rfa c e s Ja v a : La s s e n t e n cia s d e p a q u e t e Ja va s o n e q u iva le n t e s a l t ip o m o d u le d e IDL. Es t e t ip o p u e d e s e r a n id a d o , lo q u e re s u lt a e n q u e la s cla s e s Ja va g e n e ra d a s s e
cre a n e n s u b d ire ct o rio s a n id a d o s .
Po r e je m p lo , s i u n p ro g ra m a CORBA co n t ie n e e s t a s e n t e n cia d e p a q u e t e :

package registration;
e l fich e ro d e m a p e o d e b e ría t e n e r e s t e m a p e o a m ó d u lo IDL p a ra e lla :

module registration {
};
S i u n p ro g ra m a CORBA co n t ie n e u n a h e re n cia d e p a q u e t e co m o e s t a :

package [Link];
s u m a p e o IDL d e m ó d u lo s e rá e s t e :

module registration {
module corba {
};
};
La s cla s e s d is t rib u id a s e s t á n d e fin id a s co m o in t e rfa ce s Ja va y s e m a p e a n a l t ip o in t e rfa ce d e IDL. IDL n o d e fin e a cce s o s co m o p u b lic o p riv a t e q u e p o d ría m o s e n co n t ra r e n e l le n g u a je
Ja va , p e ro p e rm it e d e s ce n d e r d e s d e o t ro s in t e rfa ce s .
Es t e e je m p lo a ñ a d e e l in t e rfa ce Ja va Re g is t ra t io n a u n re g is t ra t io n m o d u le IDL.

module registration {
interface Registration {
};
}
Es t e e je m p lo a ñ a d e e l in t e rfa ce Ja va Re g is t ra t io n a u n re g is t ra t io n m o d u le IDL, e in d ica q u e e l in t e rfa ce Re g is t ra t io n d e s cie n d e d e l in t e rfa ce Us e r.

module registration {
interface Registration: User {
};
}
Mé t o d o s Ja v a : Lo s m é t o d o s Ja va s e m a p e a n a o p e ra cio n e s IDL. La s o p e ra cio n e s IDL s o n s im ila re s a lo s m é t o d o s Ja va e xce p t o e n q u e n o h a y e l co n ce p t o d e co n t ro l d e a cce s o .
Ta m b ié n t e n e m o s q u e a yu d a r a l co m p ila d o r IDL e s p e cifica n d o q u é p a rá m e t ro s s o n d e e n t ra d a in , d e e n t ra d a / s a lid a in o u t o d e s a lid a o u t , d e fin id o s d e e s t a fo rm a :
● in - El p a rá m e t ro s e p a s a d e n t ro d e l m é t o d o p e ro n o s e m o d ifica .

● in o u t - El p a rá m e t ro s e p a s a a l m é t o d o y s e p o d ría d e vo lve r m o d ifica d o .

● o u t - El p a rá m e t ro s e p o d ría d e vo lve r m o d ifica d o .

Es t e m a p e o IDL in clu ye lo s m é t o d o s d e lo s in t e rfa ce s Re g is t ra t io n y Re g is t ra t io n Ho m e a o p e ra cio n e s IDL u s a n d o u n t ip o m ó d u lo IDL.

module registration {

interface Registration {
boolean verifyPassword(in string password);
string getEmailAddress();
string getUser();
long adjustAccount(in double amount);
double getBalance();
};

interface RegistrationHome {
Registration findByPrimaryKey(
in RegistrationPK theuser)
raises (FinderException);
}
}
Arra y s Ja v a : Lo s Arra ys Ja va s o n m a p e a d o s a lo s t ip o s a rra y o s e q u e n c e IDL u s a n d o u n a d e fin ició n d e t ip o .
Es t e e je m p lo m a p e a e l a rra y Ja va d o u b le b a la n c e s [ 1 0 ] a u n t ip o a rra y IDL d e l m is m o t a m a ñ o .

typedef double balances[10];


Es t o s e je m p lo m a p e a n e l a rra y Ja va d o u b le b a la n c e s [ 1 0 ] a u n t ip o s e q u e n c e IDL. El p rim e r t y p e d e f s e q u e n c e e s u n e je m p lo d e s e cu e n cia s in lím it e , y e l s e g u n d o t ie n e e l m is m o
t a m a ñ o q u e e l a rra y.

typedef sequence<double> balances;


typedef sequence<double,10> balances;
Ex c e p c io n e s Ja v a : La s e xce p cio n e s Ja va s o n m a p e a d a s a e xce p cio n e s IDL. La s o p e ra cio n e s u s a n e x c e p t io n s IDL e s p e cificá n d o la s co m o d e l t ip o ra is e s .
Es t e e je m p lo m a p e a la Cre a t e Ex c e p t io n d e s d e la a p lica ció n s u b a s t a s a l t ip o e x c e p t io n IDL, y le a ñ a d e e l t ip o ra is e s a la o p e ra ció n . La s e xce p cio n e s IDL s ig u e n la s s in t a xis C+ + , p o r
e s o e n lu g a r d e la n za r u n a e xce p ció n ( co m o s e h a ría e n le n g u a je Ja va ) , la o p e ra ció n a lca n za ( ra is e ) u n a e xce p ció n .

exception CreateException {
};

interface RegistrationHome {
RegistrationPK create(
in string theuser,
in string password,
in string emailaddress,
in string creditcard)
raises (CreateException);
}

Otros Tipos IDL

Es t o s o t ro s t ip o s b á s ico s IDL n o t ie n e n u n e q u iva le n t e e xa ct o e n e l le n g u a je Ja va . Mu ch o s d e e s t o s d e b e ría n s e rn o s fa m ilia re s s i h e m o s u s a d o C ó C+ + . El le n g u a je Ja va p ro p o rcio n a


m a p e o p a ra e s t o s t ip o s p o rq u e lo s p ro g ra m a s e s crit o s e n Ja va p u e d e n re cib ir d a t o s d e s d e p ro g ra m a s e s crit o s e n C ó C+ + .
● a t t rib u t e IDL

● e n u m IDL

● s t ru c t IDL

● u n io n IDL

● An y IDL

● P rin c ip a l IDL

● Ob je c t IDL
a t rib u t o I D L: El t ip o a t t rib u t e IDL e s s im ilia r a lo s m é t o d o s g e t y s e t u s a d o s p a ra a cce d e r a lo s ca m p o s e n e l s o ft wa re d e Ja va Be a n s .
En e l ca s o d e u n va lo r d e cla ra d o co m o u n a t rib u t o IDL, e l co m p ila d o r IDL g e n e ra d o s m é t o d o s co n e l m is m o n o m b re q u e e l a t rib u t o IDL. Un m é t o d o d e vu e lve e l ca m p o y o t ro lo
s e le ccio n a . Po r e je m p lo , e s t e t ip o a t t rib u t e :

interface RegistrationPK {
attribute string theuser;
};
d e fin e e s t o s m é t o d o s :

//return user
String theuser();
//set user
void theuser(String arg);
e n u m I D L: El le n g u a je Ja va t ie n e u n a cla s e En u m e ra t io n p a ra re p re s e n t a r u n a co le cció n d e d a t o s . El t ip o e n u m IDL e s d ife re n t e p o rq u e e s d e cla ra d o co m o u n t ip o d e d a t o y n o u n a
co le cció n d e d a t o s .
El t ip o e n u m IDL e s u n a lis t a d e va lo re s q u e p u e d e n s e re fe re n cia d o s p o r u n n o m b re e n ve z d e p o r s u p o s ició n e n la lis t a . En e l e je m p lo , p o d e m o s ve r q u e re fe rirn o s a l có d ig o d e
e s t a d o d e u n e n u m IDL p o r u n n o m b re e s m u ch o m á s le g ib le q u e h a ce rlo p o r s u n ú m e ro . Es t a lín e a m a p e a lo s va lo re s s t a t ic fin a l in t d e la cla s e fin a l Lo g in Erro r. Po d e m o s
re fe rirn o s a e s t o s va lo re s co m o lo h a ría m o s co n u n ca m p o e s t á t ico : Lo g in Erro r. I N VALI D _ US ER.

enum LoginError {
INVALID_USER, WRONG_PASSWORD, TIMEOUT};
Aq u í h a y u n a ve rs ió n d e l t ip o e n u m q u e in clu ye u n s u b ra ya d o a n t e rio r p a ra q u e p u e d a s e r u s a d o e n s e n t e n cia s s w it c h :

switch (problem) {
case LoginError._INVALID_USER:
[Link]("please login again");
break;
}
s t ru c t I D L: Un t ip o s t ru c t IDL p u e d e s e r co m p a ra d o co n u n a cla s e Ja va q u e s ó lo t ie n e ca m p o s , q u e e s có m o lo m a p e a e l co m p ila d o r IDL.
Es t e e je m p lo d e cla ra u n a s t ru c t IDL. Ob s e rva m o s q u e lo s t ip o s IDL p u e d e n re fe re n cia r o t ro s t ip o s IDL. En e s t e e je m p lo Lo g in Erro r vie n e d e l t ip o e n u m d e cla ra d o a rrib a .

struct ErrorHandler {
LoginError errortype;
short retries;
};
u n io n I D L: Un a u n io n IDL p u e d e re p re s e n t a r u n t ip o d e u n a lis t a d e t ip o s d e fin id o s p a ra e s a u n ió n . La u n io n m a p e a a u n a cla s e Ja va d e l m is m o n o m b re co n u n m é t o d o
d is c rim in a t o r u s a d o p a ra d e t e rm in a r e l t ip o d e e s a u n ió n .
Es t e e je m p lo m a p e a la u n ió n Glo b a lErro rs a u n a cla s e Ja va co n e l n o m b re Glo b a lErro rs . S e p o d ría a ñ a d ir u n ca s e p o r d e fe ct o c a s e : D EFAULT p a ra m a n e ja r cu a lq u ie r e le m e n t o q u e
p o d ría e s t a r e n e l t ip o Lo g in Erro rs e n u m , y n o e s t á e s p e cifica d o co n u n a s e n t e n cia c a s e a q u í.

union GlobalErrors switch (LoginErrors) {


case: INVALID_USER: string message;
case: WRONG_PASSWORD: long attempts;
case: TIMEOUT: long timeout;
};
En u n p ro g ra m a e s crit o e n le n g u a je Ja va , la cla s e u n ió n Glo b a lErro rs s e cre a d e e s t a fo rm a :

GlobalErrors ge = new GlobalErrors();


[Link]("please login again");
El va lo r I N VALI D _ US ER s e re cu p e ra d e e s t a fo rm a :

switch ([Link]().value()) {
case: LoginError._INVALID_USER:
[Link]([Link]);
break;
}
Tip o An y : s i n o s a b e m o s q u e t ip o e s t á s ie n t o p a s a d o o d e vu e lt o d e s d e u n a o p e ra ció n , p o d e m o s u s a r e l t ip o An y , q u e re p re s e n t a cu a lq u ie r t ip o IDL. La s ig u ie n t e o p e ra ció n re t o rn a y
p a s a u n t ip o d e s co n o cid o :
interface RegistrationHome {
Any customSearch(Any searchField, out count);
};
Pa ra cre a r u n t ip o An y , s e p id e e l t ip o a l "Ob je ct Re q u e s t Bro ke r" ( ORB) . Pa ra s e le ccio n a r u n va lo r d e u n t ip o An y , u s a m o s u n m é t o d o in s e rt _ < t y p e > . Pa ra re cu p e ra r u n va lo r,
u s a m o s e l m é t o d o e x t ra c t _ < t y p e > .
Es t e e je m p lo p id e u n o b je t o d e l t ip o An y , y u s a e l m é t o d o in s e rt _ t y p e p a ra s e le ccio n a r u n va lo r.

Any sfield = orb.create_any();


sfield.insert_long(34);
El t ip o An y t ie n e u n va lo r Ty p e Co d e a s ig n a d o q u e p u e d e co n s u lt a rs e u s a n d o t y p e ( ) . k in d ( ) . v a lu e ( ) s o b re e l o b je t o . El s ig u ie n t e e je m p lo m u e s t ra u n a p ru e b a d e l Ty p e Co d e d o u b le .
Es t e e je m p lo in clu ye u n a re fe re n cia a l Ty p e Co d e IDL e n co n t ra d o q u e co n t ie n e e l o b je t o An y . El Ty p e Co d e s e u s a p a ra t o d o s lo s o b je t o s . Po d e m o s a n a liza r e l t ip o d e u n o b je t o CORBA
u s a n d o lo s m é t o d o s _ t y p e ( ) o t y p e ( ) .

public Any customSearch(Any searchField, IntHolder count){


if([Link]().kind().value() == TCKind._tk_double){
// return number of balances greater than supplied amount
double findBalance=searchField.extract_double();
P rin c ip a l: El t ip o P rin c ip a l id e n t ifica a l p ro p ie t a rio d e u n o b je t o CORBA, p o r e je m p lo , u n n o m b re d e u s u a rio . El va lo r p u e d e co n s u lt a rs e d e s d e e l ca m p o re q u e s t _ p rin c ip a l d e la cla s e
Re q u e s t He a d e r p a ra h a ce r la id e n t ifica ció n . Ob je c t : El t ip o Ob je c t e s u n o b je t o CORBA. S i n e ce s it a m o s e n via r o b je t o s Ja va , t e n e m o s q u e t ra d u cirlo s a u n t ip o IDL o u s a r u n
m e ca n is m o p a ra s e ria liza rlo s cu a n d o s e a n t ra n s fe rid o s .

CORBA en la Aplicación de Subasta


El Re g is t ra t io n Be a n co n t ro la d o p o r co n t e n e d o r d e la a p lica ció n s u b a s t a e s t o t a lm e n t e re e m p la za d o co n u n Re g is t ra t io n S e rve r s o lit a rio CORBA q u e im p le m e n t a e l s e rvicio d e re g is t ro . El
Re g is t ra t io n S e rv e r CORBA e s t á co n s t ru id o cre a n d o y co m p ila n d o fich e ro s d e m a p e o IDL p a ra q u e lo s p ro g ra m a s clie n t e s s e p u e d a n co m u n ica r co n e l s e rvid o r d e re g is t ro s .
Lo s fich e ro s S e lle rBe a n . ja v a y Au c t io n S e rv le t . ja v a s e h a n a ct u a liza d o p a ra q u e b u s q u e n e l s e rvid o r d e re g is t ro CORBA.

Implementación del RegistrationServer CORBA

Es t a s e cció n d e s crib e e l fich e ro Re g is t ra t io n . id l, q u e m a p e a lo s in t e rfa ce s re m o t o s Re g is t ra t io n Ho m e y Re g is t ra t io n d e s d e la a p lica ció n d e s u b a s t a s d e Ja va Be a n s d e En t e rp ris e a s u s


e q u iva le n t e s IDL y m u e s t ra co m o co m p ila r e l fich e ro Re g is t ra t io n . id l e n la s cla s e s d e l s e rvid o r d e re g is t o s CORBA.
El s e rvid o r d e re g is t ro s CORBA im p le m e n t a lo s m é t o d o s c re a t e y fin d By P rim a ry Ke y d e s d e l e l fich e ro Re g is t ra t io n Be a n . ja v a o rig in a l, y lo a m p lía co n lo s d o s m é t o d o s s ig u ie n t e s
p a ra ilu s t ra r la s re t ro lla m a d a s CORBA, y co m o u s a r e l t ip o An y .
● fin d Lo w Cre d it Ac c o u n t s ( in Re t u rn Re s u lt s rr) , q u e u s a u n a ca llb a ck p a ra d e vo lve r u n a lis t a d e cu e n t a s co n b a jo s a ld o .

● a n y c u s t o m S e a rc h ( in a n y s e a rc h fie ld , o u t lo n g c o u n t ) , q u e d e vu e lve u n re s u lt a d o d e b ú s q u e d a d ife re n t e d e p e n d ie n d o d e l t ip o d e ca m p o e n via d o .

Fichero de Mapeos IDL

Aq u í e s t á e l fich e ro Re g is t ra t io n . id l q u e m a p e a lo s t ip o s d e d a t o s y m é t o d o s u s a d o s e n lo s p ro g ra m a s Re g is t ra t io n Ho m e y Re g is t ra t io n a s u s e q u iva le n t e s IDL.

module registration {

interface Registration {
boolean verifyPassword(in string password);
string getEmailAddress();
string getUser();
long adjustAccount(in double amount);
double getBalance();
};

interface RegistrationPK {
attribute string theuser;
};

enum LoginError {INVALIDUSER, WRONGPASSWORD, TIMEOUT};

exception CreateException {
};
exception FinderException {
};

typedef sequence<Registration> IDLArrayList;

interface ReturnResults {
void updateResults(in IDLArrayList results)
raises (FinderException);
};

interface RegistrationHome {
RegistrationPK create(in string theuser,
in string password,
in string emailaddress,
in string creditcard)
raises (CreateException);

Registration findByPrimaryKey(
in RegistrationPK theuser)
raises (FinderException);
void findLowCreditAccounts(in ReturnResults rr)
raises (FinderException);
any customSearch(in any searchfield, out long count);
};
};

Compilar el Fichero de Mapeos IDL

El fich e ro IDL t ie n e q u e s e r co n ve rt id o e n cla s e s Ja va q u e p u e d a n s e r u s a d a s e n u n a re d d is t rib u id a CORBA. La p la t a fo rm a Ja va 2 co m p ila lo s fich e ro s . id l u s a n d o e l p ro g ra m a


id lt o ja v a . Es t e p ro g ra m a s e rá re e m p la za d o e ve n t u a lm e n t e co n e l co m a n d o id lj.
Lo s a rg u m e n t o s - fn o - c p p in d ica n q u e n o h a y co m p ila d o r C+ + in s t a la d o .

idltojava -fno-cpp [Link]


Ot ro s co m p ila d o re s Ja va IDL t a m b ié n d e b e ría n fu n cio n a r, p o r e je m p lo , jid l d e ORBa cu s p u e d e g e n e ra r cla s e s q u e p u e d e n s e r u s a d a s p o r e l ORB d e Ja va 2 .

Stubs y Skeletons

Co rb a y RMI s o n s im ila re s e n q u e la co m p ila ció n g e n e ra u n fich e ro s t u b p a ra e l clie n t e y u n fich e ro s ke le t o n p a ra e l s e rvid o r. El s t u b ( o p ro xy) , y e l s ke le t o n ( o s irvie n t e ) s e u s a n p a ra
e n vo lve r o d e s e n vo lve r d a t o s e n t re e l clie n t e y e l s e rvid o r. El s ke le t o n ( o s irvie n t e ) e s t á im p le m e n t a d o m e d ia n t e e l s e rvid o r. En e s t e e je m p lo , e l in t e rfa ce Re g is t ra t io n Ho m e g e n e ra
u n a cla s e _ Re g is t ra t io n Ho m e I m p lBa s e ( la cla s e s ke le t o n o s irvie n t e ) q u e e xt ie n d e la cla s e Re g is t ra t io n S e rv e r g e n e ra d a .
Cu a n d o s e s o licit a u n o b je t o CORBA re m o t o o s e lla m a a u n m é t o d o re m o t o , la lla m a d a d e l clie n t e p a s a a t ra vé s d e la cla s e s t u b a n t e s d e a lca n za r e l s e rvid o r. Es t e cla s e p ro xy in vo ca la
p e t ició n CORBA p a ra e l p ro g ra m a clie n t e . El s ig u ie n t e e je m p lo e s e l có d ig o g e n e ra d o a u t o m á t ica m e n t e p o r la cla s e Re g is t ra t io n Ho m e S t u b . ja v a .

[Link] r = _request("create");
r.set_return_type(
[Link]());
[Link] _theuser = r.add_in_arg();

Object Request Broker


El ce n t ro d e u n a re d d is t rib u id a CORBA e s e l "Ob je ct Re q u e s t Bro ke r" o ORB. El ORB s e e n ca rg a d e e m p a q u e t a r y d e s e m p a q u e t a r lo s o b je t o s e n t re e l clie n t e y e l s e rvid o r. Ot ro s
s e rvicio s co m o S e rvicio s d e No m b re s y S e rvicio s d e Eve n t o s fu n cio n a n co n e l ORB.
La p la t a fo rm a Ja va 2 in clu ye u n ORB e n la d is t rib u ció n lla m a d o e l IDL ORB. Es t e ORB e s d ife re n t e d e o t ro s m u ch o s ORBs p o rq u e n o in clu ye u n d is t in t ivo d e "Ba s ic Ob je ct Ad a p t e r"
( BOA) o "Po rt a b le Ob je ct Ad a p t e r" ( POA) .
Un a a d a p t a d o r d e o b je t o s m a n e ja la cre a cció n y ciclo d e vid a d e lo s o b je t o s e n u n e s p a cio d is t rib u id o CORBA. Es t o p u e d e s e r co m p a ra d o co n e l co n t e n e d o r d e l s e rvid o r d e Ja va Be a n s
En t e rp ris e q u e m a n e ja e l ciclo d e vid a d e lo s b e a n s d e e n t id a d y d e s e s ió n .
Lo s p ro g ra m a s Au ct io n S e rvle t y S e lle rBe a n cre a n e in icia liza n u n ORB d e Ja va 2 d e e s t a fo rm a :

ORB orb = [Link](args, null);


En e l p ro g ra m a Re g is t ra t io n S e rve r, e l o b je t o s e rvid o r p u e d e s e r d is t rib u id o e n u n ió n co n e l ORB u s a n d o e l m é t o d o c o n n e c t :

RegistrationServer rs = new RegistrationServer();


[Link](rs);
Un o b je t o co n e ct a d o a u n ORB p u e d e s e r e le m in a d o co n e l m é t o d o d is c o n n e c t :

[Link](rs);
Un a ve z co n e ct a d o a u n o b je t o s e rvid o r CORBA, e l ORB Ja va 2 m a n t ie n e vivo e l s e rvid o r y e s p e ra p e t icio n e s d e l clie n t e p a ra e l s e rvid o r CORBA.

[Link] sync = new [Link]();


synchronized(sync) {
[Link]();
}

Poner Disponible el Servidor CORBA

Au n q u e e s t e o b je t o e s t á a h o ra s ie n d o m a p e a d o p o r e l ORB, lo s clie n t e s t o d a vía n o t ie n e n e l m e ca n is m o p a ra e n co n t ra r e l o b je t o re m o t o . Es t o p u e d e re s o lve rs e u n ie n d o e l o b je t o


s e rvid o r CORBA a u n s e rvicio d e n o m b re s .
El s e rvicio d e n o m b re s Ja va 2 lla m a d o t n a m e s e rv , p o r d e fe ct o u s a e l p u e rt o 9 0 0 ; s in e m b a rg o , e s t e va lo r p u e d e m o d ifica rs e s e le ccio n a d o e l a rg u m e n t o - ORBI n it ia lP o rt p o rt n u m b e r
cu a n d o s e a rra n ca t n a m e s e rv o s e le ccio n a n d o la p ro p ie d a d o rg . o m g . CORBA. ORBI n it ia lP o rt cu a n d o a rra n ca m o s lo s p ro ce s o s clie n t e y s e rvid o r.
La s s ig u ie n t e s s e ccio n e s d e s crib e n e l m é t o d o m a in d e la cla s e Re g is t ra t io n S e rv e r.

[Link] props=[Link]();
[Link]("[Link]", "1050");
[Link](props);
ORB orb = [Link](args, props);
La s s ig u ie n t e s lín e a s m u e s t ra n q u e la re fe re n cia in icia l d e n o m b re s e s in icia liza d a p o r la p e t ició n d e l s e rvicio lla m a d o N a m e S e rv ic e . El N a m in g Co n t e x t e s re cu p e ra d o y e l n o m b re
co n s t ru id o y u n id o a l s e rvicio d e n o m b re s co m o e le m e n t o s N a m e Co m p o n e n t . El n o m b re d e e s t e e je m p lo t ie n e u n a ra íz lla m a d a a u c t io n q u e e s e s t e o b je t o q u e s e e s t á u n ie n d o co m o
Re g is t ra t io n Be a n d e s d e la ra íz a u c t io n . El n o m b re p o d ría s e r co m p a ra d o p o r u n a cla s e m e d ia n t e e l n o m b re d e a u c t io n . Re g is t ra t io n Be a n .

[Link] nameServiceObj =
orb.resolve_initial_references("NameService") ;
NamingContext nctx =
[Link](nameServiceObj);
NameComponent[] fullname = new NameComponent[2];
fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");

NameComponent[] tempComponent = new NameComponent[1];


for(int i=0; i < [Link]-1; i++ ) {
tempComponent[0]= fullname[i];
try{
nctx=nctx.bind_new_context(tempComponent);
}catch (Exception e){
[Link]("bind new"+e);}
}
tempComponent[0]=fullname[[Link]-1];
try{
[Link](tempComponent, rs);
}catch (Exception e){
[Link]("rebind"+e);
}

Conectar un nuevo ORB

El ORB IDL d e Ja va 2 re a lm e n t e n o in clu ye n in g u n o d e lo s s e rvicio s d is p o n ib le s e n m u ch o s o t ro s ORBs co m e rcia le s co m o lo s s e rvicio s d e s e g u rid a d o e ve n t o s ( n o t ifica ció n ) . Po d e m o s
u s a r o t ro ORB e n e l ru n t im e d e Ja va 2 co n fig u ra n d o d o s p ro p ie d a d e s e in clu ye n d o cu a lq u ie r co d ig o d e o b je t o a d a p t a d o r q u e s e a n e ce s a rio .
Us a r u n n u e vo ORB e n e l s e rvid o r d e re g is t ro s re q u ie re q u e la s p ro p ie d a d e s o rg . o m g . CORBA. ORBCla s s y o rg . o m g . CORBA. ORBS in g le t o n Cla s s a p u n t e n a la s cla s e s ORB
a p ro p ia d a s . En e s t e e je m p lo s e u s a e l ORB ORBa cu s e n lu g a r d e l ORB IDL d e Ja va 2 . Pa ra u s a r o t ro ORB, e l có d ig o d e a b a jo d e b e ría co n e ct a rs e d e n t ro d e l m é t o d o
Re g is t ra t io n S e rv e r. m a in .
En e l có d ig o d e e je m p lo , s e u s a u n ORB S in g le t o n Cla s s . Es t e ORB n o e s u n ORB co m p le t o , y s u u s o p rim a rio e s co m o fa ct o ría p a ra Ty p e Co d e s . La lla m a d a a ORB. in it ( ) e n la ú lt im a
lín e a cre a e l ORB S in g le t o n .

Properties props= [Link]();


[Link]("[Link]",
"[Link]");
[Link]("[Link]",
"[Link]");
[Link](props);
ORB orb = [Link](args, props) ;
En e l IDL d e Ja va 2 , n o h a y u n o b je t o a d a p t a d o r d is t in t o . Co m o s e m u e s t ra e n e l s e g m e n t o d e có d ig o in fe rio r, u s a r e l "Ba s ic Ob je ct Ad a p t e r" d e s d e ORBa cu s re q u ie re u n co n ve rs ió n
e xp lícit a a l ORB ORBa cu s , El "Bro ke r Ob je ct Arch it e ct u re " ( BOA) e s n o t ifica d o d e q u e e l o b je t o ya e s t á d is t rib u id o lla m a n d o a l m é t o d o im p l_ is _ re a d y ( n u ll) .

BOA boa = (([Link])orb).BOA_init(


args, props);
...
boa.impl_is_ready(null);
Au n q u e lo s d o s ORBs ORBS in g le t o n Cla s s y ORBCla s s co n s t ru ye n e l n o m b re d e l o b je t o u s a n d o N a m e Co m p o n e n t , t e n e m o s q u e u s a r u n d ife re n t e s e rvicio d e n o m b re s ORBa cu s . El
s e rvicio Co s N a m in g . S e rv e r s e a rra n ca d e la s ig u ie n t e fo rm a , d o n d e e l p a rá m e t ro - OAh o s t e s o p cio n a l:

java [Link] -OAhost localhost -OAport 1060


Un a ve z a rra n ca d o e l s e rvicio d e n o m b re s , lo s p ro g ra m a s clie n t e y s e rvid o r p u e d e n e n co n t ra r e l s e rvicio d e n o m b re s u s a n d o e l p ro t o co lo IIOP h a cia e l h o s t y e l p u e rt o n o m b ra d o s
cu a n d o s e a rra n có e l s e rvicio d e n o m b ra d o :

java [Link]
-ORBservice NameService
iiop://localhost:1060/DefaultNamingContext

Acceso al Servicio de Nombres por los Clientes CORBA

Lo s clie n t e CORBA a cce d e n a l s e rvicio d e n o m b re s d e u n a fo rm a s im ila r a co m o lo h a ce e l s e rvid o r, e xce p t o q u e e n lu g a r d e u n ir u n n o m b re , e l clie n t e re s u e lve e l n o m b re co n s t ru id o


d e s d e e l N a m e Co m p o n e n t s .
La s cla s e s Au c t io n S e rv le t y S e lle rBe a n u s a n e l s ig u ie n t e có d ig o p a ra b u s ca r e l s e rvid o r CORBA:

NameComponent[] fullname = new NameComponent[2];


fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");

RegistrationHome regRef =
[Link](
[Link](fullname));
En e l ca s o d e l ORB ORBa cu s , lo s clie n t e s t a m b ié n n e ce s it a n u n "Ba s ic Ob je ct Ad a p t e r" s i s e u s a n re t ro lla m a d a s e n e l m é t o d o S e lle rBe a n . a u d it Ac c o u n t s . El co n t e xt o d e n o m b ra d o
t a m b ié n s e co n fig u ra d e fo rm a d ife re n t e p a ra e l s e rvid o r ORBa cu s a rra n ca d o a n t e rio rm e n t e :

Object obj =
(([Link])orb).get_inet_object (
"localhost",
1060,
"DefaultNamingContext");
NamingContext nctx = [Link](obj);

Clases Helper y Holder


La s re fe re n cia s a o b je t o s re m o t o s e n CORBA u s a n u n a cla s e He lp e r p a ra re cu p e ra r u n va lo r d e s d e e s e o b je t o . Un m é t o d o u s a d o co m u n m e n t e e s e l m é t o d o He lp e r, q u e a s e g u ra q u e e l
o b je t o e s t á e n ca s t a d o co rre ct a m e n t e .
La s cla s e s Ho ld e r co n t ie n e n va lo re s d e vu e lt o s cu a n d o s e u s a n p a rá m e t ro s in o u t o o u t e n u n m é t o d o . El lla m a d o r p rim e ro e je m p la riza la cla s e Ho ld e r a p ro p ia d a p a ra e s e t ip o y
re cu p e ra e l va lo r d e s d e la cla s e cu a n d o la lla m a d a re t o rn a . En e l s ig u ie n t e e je m p lo , e l va lo r d e l co n t a d o r c u s t o m S e a rc h s e co n fig u ra y re cu p e ra d e s p u é s d e q u e s e h a ya lla m a d o a
c u s t o m S e a rc h . En e l la d o d e l s e rvid o r e l va lo r d e l co n t a d o r s e s e le ccio n a lla m a n d o a c o u n t . v a lu e = n e w v a lu e .

IntHolder count= new IntHolder();


sfield=[Link](sfield,count);
[Link]("count now set to "+[Link]);

Recolección de Basura
Al co n t ra rio q u e RMI, CORBA n o t ie n e u n m e ca n is m o d e re co le cció n d e b a s u ra d is t rib u id o . La s re fe re n cia s a u n o b je t o s o n lo ca le s a l p ro xy d e l clie n t e y a l s irvie n t e d e l s e rvid o r. Es t o
s ig n ifica q u e ca d a Má q u in a Virt u a l Ja va 1 ( JVM) e s lib re d e re cla m a r u n o b je t o y re co g e r la b a s u ra s i n o t ie n e m á s re fe re n cia s s o b re é l. S i u n o b je t o n o e s n e ce s a rio e n e l s e rvid o r,
n e ce s it a m o s lla m a r a o rb . d is c o n n e c t ( o b je c t ) p a ra p e rm it ir q u e e l o b je t o s e a re co le ct a d o .

Retrollamadas (Callbacks) CORBA


El n u e vo m é t o d o fin d Lo w Cre d it Ac c o u n t s e s lla m a d o d e s d e e l Au c t io n S e rv le t u s a n d o la URL h t t p :/ / lo c a lh o s t :7 0 0 1 / Au c t io n S e rv le t ? a c t io n = a u d it Ac c o u n t s .
El m é t o d o Au c t io n S e rv le t . a u d it Ac c o u n t s lla m a a l m é t o d o S e lle rBe a n . a u d it Ac c o u n t s , q u e d e vu e lve u n Arra y Lis t d e re g is t ro s d e Re g is t ra t io n .

//[Link]
private void auditAccounts(ServletOutputStream out,
HttpServletRequest request) throws IOException{

// ...

SellerHome home = (SellerHome) [Link]("seller");


Seller si= [Link]();

if(si != null) {
ArrayList ar=[Link]();
for(Iterator i=[Link](); [Link]();) {
Registration user=(Registration)([Link]());
addLine("<TD>"+[Link]() +
"<TD><TD>"+[Link]()+
"<TD><TR>", out);
}
addLine("<TABLE>", out);
}
El o b je t o S e lle rBe a n lla m a a l m é t o d o CORBA Re g is t ra t io n Ho m e . fin d Lo w Cre d it Ac c o u n t s im p le m e n t a d o e n e l fich e ro Re g is t ra t io n S e rv e r. ja v a , y s e p a s a u n a re fe re n cia a s í
m is m o . La re fe re n cia e s p a s a d a s ie m p re q u e la cla s e S e lle rBe a n im p le m e n t e e l in t e rfa ce Re t u rn Re s u lt s d e cla ra d o e n e l Re g is t ra t io n . id l.

//[Link]
public ArrayList auditAccounts() {
try{
NameComponent[] fullname = new NameComponent[2];
fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");

RegistrationHome regRef =
[Link](
[Link](fullname));
[Link](this);
synchronized(ready) {
try{
[Link]();
}catch (InterruptedException e){}
}
return (returned);
}catch (Exception e) {
[Link]("error in auditAccounts "+e);
}
return null;
}
El m é t o d o Re g is t ra t io n S e rv e r. fin d Lo w Cre d it Ac c o u n t s re cu p e ra lo s re g is t ro s d e u s u a rio d e s d e la t a b la Re g is t ra t io n d e la b a s e d e d a t o s q u e t e n g a n u n va lo r d e cré d it o m e n o r d e
t re s . En t o n ce s d e vu e lve la lis t a d e re g is t ro s Re g is t ra t io n e n u n Arra y Lis t lla m a n d o a l m é t o d o S e lle rBe a n . u p d a t e Re s u lt s q u e t ie n e u n a re fe re n cia a e lla .

//[Link]
public void findLowCreditAccounts(
final ReturnResults client)
throws Finder Exception {
Runnable bgthread = new Runnable() {
public void run() {
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
ArrayList ar = new ArrayList();

try{
con=getConnection();
ps=[Link](
"select theuser,
balance from registration
where balance < ?");
[Link](1, 3.00);
[Link]();
rs = [Link]();
RegistrationImpl reg=null;
while ([Link]()) {
try{
reg= new RegistrationImpl();
}catch (Exception e) {
[Link]("creating reg"+e);
}
[Link] = [Link](1);
[Link] = [Link](2);
[Link](reg);
}
[Link]();

RegistrationImpl[] regarray =
(RegistrationImpl [])[Link](
new RegistrationImpl[0]);
[Link](regarray);
}catch (Exception e) {
[Link](
"findLowCreditAccounts: "+e);
return;
}
finally {
try{
if(rs != null) {
[Link]();
}
if(ps != null) {
[Link]();
}
if(con != null) {
[Link]();
}
}catch (Exception ignore) {}
}
}//run
};
Thread t = new Thread(bgthread);
[Link]();
}
El m é t o d o S e lle rBe a n . u p d a t e Re s u lt s a ct u a liza e l Arra y Lis t g lo b a l d e re g is t ro s d e Re g is t ra t io n d e vu e lt o p o r e l o b je t o Re g is t ra t io n S e rv e r y n o t ifica a l m é t o d o
S e lle rBe a n / a u d it Ac c o u n t s q u e p u e d e d e vo lve r e s t e Arra y Lis t d e re g is t ro s Re g is t ra t io n a l Au c t io n S e rv le t .

public void updateResults(Registration[] ar)


throws [Link] {
if(ar == null) {
throw new [Link]();
}
try{
for(int i=0; i< [Link]; i++) {
[Link](ar[i]);
}
}catch (Exception e) {
[Link]("updateResults="+e);
throw new [Link]();
}
synchronized(ready) {
[Link]();
}
}

Usar el Tipo Any


El m é t o d o Re g is t ra t io n S e rv e r. c u s t o m S e a rc h u s a e l t ip o An y d e IDL p a ra p a s a r y d e vo lve r re s u lt a d o s . El c u s t o m S e a rc h e s lla m a d o p o r e l Au c t io n S e rv le t d e e s t a fo rm a :

[Link]
AuctionServlet?action=customSearch&searchfield=2
El p a rá m e t ro s e a rc h fie ld p u e d e s e r s e le ccio n a d o co m o u n n ú m e ro o u n s t rin g . El m é t o d o Au c t io n S e rv le t . c u s t o m Fin d p a s a e l ca m p o d e b ú s q u e d a d ire ct a m e n t e a l m é t o d o
S e lle rBe a n . c u s t o m Fin d q u e re cu p e ra u n S t rin g q u e lu e g o e s m o s t ra d o a l u s u a rio :

private void customSearch(ServletOutputStream out,


HttpServletRequest request)
throws IOException{

String text = "Custom Search";


String searchField=[Link](
"searchfield");

setTitle(out, "Custom Search");


if(searchField == null ) {
addLine("Error: SearchField was empty", out);
[Link]();
return;
}
try{
addLine("<BR>"+text, out);
SellerHome home = (SellerHome)
[Link]("seller");
Seller si= [Link]();
if(si != null) {
String displayMessage=[Link](
searchField);
if(displayMessage != null ) {
addLine(displayMessage+"<BR>", out);
}
}
}catch (Exception e) {
addLine("AuctionServlet customFind error",out);
[Link]("AuctionServlet " +
"<customFind>:"+e);
}
[Link]();
}
El m é t o d o S e lle rBe a n . c u s t o m Fin d lla m a a l o b je t o Re g is t ra t io n Ho m e im p le m e n t a d o e n la cla s e Re g is t ra t io n S e rv e r. ja v a , y d e p e n d ie n d o d e s i e l s e a rc h Fie ld p u e d e s e r co n ve rt id o
a u n d o u b le o a u n s t rin g , in s e rt a e s t e va lo r d e n t ro d e u n o b je t o d e l t ip o An y . El o b je t o An y s e cre a m e d ia n t e u n a lla m a d a a l ORB, o rb . c re a t e _ a n y ( ) ;
El m é t o d o c u s t o m Fin d t a m b ié n u s a u n p a rá m e t ro o u t , c o u n t , d e l t ip o in t q u e d e vu e lve e l n ú m e ro d e re g is t ro s e n co n t ra d o s . El va lo r d e c o u n t s e re cu p e ra u s a n d o c o u n t . v a lu e
cu a n d o la lla m a d a re t o rn a :

//[Link]
public String customFind(String searchField)
throws [Link],
RemoteException{

int total=-1;
IntHolder count= new IntHolder();

try{
NameComponent[] fullname = new NameComponent[2];
fullname[0] = new NameComponent("auction", "");
fullname[1] = new NameComponent(
"RegistrationBean", "");

RegistrationHome regRef =
[Link](
[Link](fullname));
if(regRef == null ) {
[Link](
"cannot contact RegistrationHome");
throw new [Link]();
}
Any sfield=orb.create_any();
Double balance;
try{
balance=[Link](searchField);
try {
sfield.insert_double([Link]());
}catch (Exception e) {
return("Problem with search value"+balance);
}
sfield=[Link](sfield,count);
if(sfield != null ) {
total=sfield.extract_long();
}
return(total+"
accounts are below optimal level from" +
[Link]+" records");
}catch (NumberFormatException e) {
sfield.insert_string(searchField);
Registration reg;
if((reg=[Link](
[Link](
sfield,count)))
!= null ) {
return("Found user "+[Link]() +"
who has email address "+
[Link]());
}else {
return("No users found who have email address " +
searchField);
}
}
}catch(Exception e){
[Link]("customFind problem="+e);
throw new [Link]();
}
}
El va lo r d e vu e lt o d e s d e la lla m a d a a c u s t o m Fin d s e e xt ra e d e n t ro d e u n o b je t o d e l t ip o An y y s e co n s t ru ye u n S t rin g co n la s a lid a m o s t ra d a a l u s u a rio . Pa ra lo s t ip o s s e n cillo s s e
p u e d e u s a r e l m é t o d o e x t ra c t _ < t y p e > d e An y . S in e m b a rg o , p a ra e l t ip o Re g is t ra t io n , s e u s a la cla s e Re g is t ra t io n He lp e r.

Registration reg =
[Link](
[Link](sfield,count))
El m é t o d o Re g is t ra t io n S e rv e r. c u s t o m S e a rc h d e t e rm in a e l t ip o d e l o b je t o q u e e s t á s ie n d o p a s a d o e n e l p a rá m e t ro s e a rc h Fie ld ch e q u e a n d o e l . t y p e ( ) . k in d ( ) . v a lu e ( ) d e l o b je t o
An y .

if([Link]().kind().value() ==
TCKind._tk_double)
Fin a lm e n t e , co m o e l m é t o d o c u s t o m S e a rc h d e vu e lve u n o b je t o d e l t ip o An y , s e re q u ie re u n a lla m a d a a o rb . c re a t e _ a n y ( ) . Pa ra t ip o s s e n cillo s co m o d o u b le , s e u s a e l m é t o d o
in s e rt _ < t y p e > . Pa ra e l t ip o Re g is t ra t io n , s e u s a la cla s e Re g is t ra t io n He lp e r: Re g is t ra t io n He lp e r. in s e rt ( re t u rn Re s u lt s , re g a rra y [ 0 ] ) .

//[Link]
public Any customSearch(Any searchField,
IntHolder count){
Any returnResults= orb.create_any();

int tmpcount=[Link];
if([Link]().kind().value() ==
TCKind._tk_double){
// return number of balances greater
// than supplied amount
double findBalance=searchField.extract_double();
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
try{
con=getConnection();
ps=[Link]("select count(*) from
registration where balance < ?");
[Link](1, findBalance);
[Link]();
rs = [Link]();
if([Link]()) {
tmpcount = [Link](1);
}
[Link]=tmpcount;
[Link]();
}catch (Exception e) {
[Link]("custom search: "+e);
returnResults.insert_long(-1);
return(returnResults);
}
finally {
try{
if(rs != null) { [Link](); }
if(ps != null) { [Link](); }
if(con != null) { [Link](); }
} catch (Exception ignore) {}
}
returnResults.insert_long(tmpcount);
return(returnResults);
}else if([Link]().kind().value() ==
TCKind._tk_string) {
// return email addresses that match supplied address
String findEmail=searchField.extract_string();
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
ArrayList ar = new ArrayList();
RegistrationImpl reg=null;
try{
con=getConnection();
ps=[Link]("select theuser,
emailaddress from registration
where emailaddress like ?");
[Link](1, findEmail);
[Link]();
rs = [Link]();
while ([Link]()) {
reg= new RegistrationImpl();
[Link] = [Link](1);
[Link] = [Link](2);
[Link](reg);
}
[Link]();

RegistrationImpl[] regarray =
(RegistrationImpl [])[Link](
new RegistrationImpl[0]);
[Link](
returnResults,
regarray[0]);
return(returnResults);
}catch (Exception e) {
[Link]("custom search: "+e);
return(returnResults);
}
finally {
try{
if(rs != null) { [Link](); }
if(ps != null) { [Link](); }
if(con != null) { [Link](); }
} catch (Exception ignore) {}
}
}
return(returnResults);
}

Conclusión
Co m o h e m o s p o d id o ve r, co n ve rt ir u n a a p lica ció n p a ra q u e u s e RMI o CORBA re q u ie re m u y p o co s ca m b io s e n e l co ra zó n d e l p ro g ra m a . La p rin cip a l d ife re n cia h a s id o la in icia liza ció n y
e l s e rvicio d e n o m b re s . Me d ia n t e la a b s t ra cció n d e e s t a s d o s á re a s e n n u e s t ra a p lica ció n fu e ra d e la ló g ica d e l n e g o cio p o d e m o s m ig ra r fá cilm e n t e e n t re d ife re n t e s a rq u it e ct u ra s d e
o b je t o s d is t rib u id o s .
_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM" s ig n ifica u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .
Oz it o
JDBC
La a p lica ció n d e s u b a s t a co n Ja va Be a n s En t e rp is e y co n s u s d o s va ria n t e s d e
"Re m o t e Me t h o d In vo ca t io n " ( RMI) y "Co m m o n Ob je ct Re q u e s t Bro ke r" ( CORBA)
h a n u s a d o lla m a d a s s e n cilla s d e JDBC JDBC TM p a ra a ct u a liza r y co n s u lt a r
in fo rm a ció n d e s d e u n a b a s e d e d a t p s u s a n d o u n a co n e xió n JDBC. Po r d e fe ct o , e l
a cce s o a b a s e s d e d a t o s JDBC im p lica a b rir u n a co n e xió n co n la b a s e d e d a t o s ,
e je cu t a r co m a n d o s S QL e n u n s e n t e n cia , p ro ce s a r lo s d a t o s d e vu e lt o s y ce rra r la
co n e xió n co n la b a s e d e d a t o s .
En co n ju n t o , la a p ro xim a ció n p o r d e fe ct o fu n cio n a b ie n p a ra b a jo s vo lú m e n e s d e
a cce s o a la b a s e d e d a t o s , p e ro ¿ có m o p o d e m o s m a n e ja r u n g ra n n ú m e ro d e
p e t icio n e s q u e a ct u a liza n m u ch a s t a b la s re la cio n a d a s a la ve z y a ú n a s í a s e g u ra r la
in t e g rid a d d e lo s d a t o s ? Es t a s e cció n e xp lica có m o h a ce rlo co n lo s s ig u ie n t e s
t ó p ico s :
● Drive rs JDBC

● Co n e xio n e s a Ba s e s d e Da t o s
● S e n t e n cia s
❍ S e n t e n cia s Ca lla b le
❍ S e n t e n cia s
❍ S e n t e n cia s Pre p a re d
● Ca ch e a r lo s Re s u lt a d o s d e la Ba s e d e Da t o s
● Ho ja d e Re s u lt a d o s
● Ho ja d e Re s u lt a d o s Es cro lla b le
● Co n t ro la r Tra n s a cio n e s
● Ca ra ct e re s d e Es ca p e
● Tip o s d e Ma p e o d e Ba s e s d e Da t o s
● Ma p e a r Tip o s d e Da t o s

Drivers JDBC
La co n e xió n co n la b a s e d e d a t o s e s t á m a n e ja d a p o r la cla s e Drive r JDBC. El S DK
d e Ja va co n t ie n e s ó lo u n d rive r JDBC, u n p u e n t e jd b c - o d b c q u e co m u n ica co n u n
d rive r "Op e n Da t a Ba s e Co n e ct ivit y" ( ODBC) e xis t e n t e . Ot ra s b a s e s d e d a t o s
n e ce s it a n u n d rive r JDBC e s p é cifico p a ra e s a b a s e d e d a t o s .
Pa ra o b t e n e r u n id e a g e n e ra l d e lo q u e h a ce r u n d rive r JDBC, p o d e m o s e xa m in a r e l
fich e ro JD CCo n n e c t io n D riv e r. ja v a . La cla s e JDCCo n n e ct io n Drive r im p le m t a la
cla s e ja v a . s q l. D riv e r y a ct ú a co m o u n d rive r "p a s s - t h ro u g h " re - e n via n d o
p e t icio n e s JDBC a l d rive r JDBC re a l d e la b a s e d e d a t o s . La cla s e d rive r JDBC s e
ca rg a co n u n lla m a d a a Cla s s . fo rN a m e ( d riv e rn a m e ) .
Es t a s lín e a s d e có d ig o m u e s t ra n có m o ca rg a r t re s cla s e s d ife re n t e s d e d rive rs
JDBC:

[Link]("[Link]");
[Link]("[Link]");
[Link]("[Link]");
Ca d a d rive r JDBC e s t á co n fig u ra d o p a ra e n t e n d e r u n a URL e s p e cífica , p o r e s o s e
p u e d e n ca rg a r va rio s d rive rs JDBC a la ve z. Cu a n d o e s p e cifica m o s u n a URL e n e l
m o m e n t o d e la co n e xió n , s e s e le ccio n a e l p rim e r d rive r JDBC q u e co rre s p o n d a .
El p u e n t e jd b c- o d b c a ce p t a URLS q u e e m p ie ce n co n jd b c :o d b c : y u s a e l s ig u ie n t e
ca m p o d e e s a URL p a ra e s p e cifica r e l n o m b re d e la fu e n t e d e lo s d a t o s . Es t e
n o m b re id e n t ifica e l e s q u e m a d e la b a s e d e d a t o s p a rt icu la r a la q u e q u e re m o s
a cce d e r. La URL t a m b ié n p u e d e in clu ir m á s d e t a lle s s o b re có m o co n t a ct ya r co n la
b a s e d e d a t o s e in t ro d u cir la cu e n t a .

//access the ejbdemo tables


String url = "jdbc:odbc:ejbdemo";
El s ig u ie n t e e je m p lo co n t ie n e la in fo rm a ció n d e Ora cle S QL* n e t s o b re u n a b a s e d e
d a t o s p a rt icu la r lla m a d a e jb d e m o e n la m á q u in a d b m a ch in e :

String url = "jdbc:oracle:thin:user/password@(


description=(address_list=(
address=(protocol=tcp)
(host=dbmachine)(port=1521)))(source_route=yes)
(connect_data=(sid=ejbdemo)))";
Es t e s ig u ie n t e e je m p lo u s a m y s q l p a ra co n e ct a r co n la b a s e d e d a t o s e jb d e m o e n
la m á q u in a lo ca l. Ta m b ié n s e in clu ye n lo s d e t a lle s d e l n o m b re d e u s u a rio y la
p a s s wo rd p a ra e l lo g in .

String url =
"jdbc:mysql://localhost/ejbdemo?user=user;
password=pass";
Lo s d rive rs JDBC s e d ivid e n e n cu a t ro t ip o s . Ta m b ié n s e p u e d e n ca t e g o riza r co m o
p u ro ja va o d rive rs p e q u e ñ o s p a ra in d ica r s i s o n u s a d o s p o r a p lica cio n e s clie n t e s
( d rive rs p u ro ja va ) o p o r a p p le t s ( d rive rs p e q u e ñ o s ) .

Drivers del Tipo 1

Lo s d rive rs JDBC d e l t ip o 1 s o n d rive rs p u e n t e co m o e l p u e n t e jd b c. o d b c. Es t o s


d rive rs u t iliza n u n in t e rm e d ia rio co m o e l ODBC p a ra t ra n s fe rir la s lla m a d a s S QL a
la b a s e d e d a t o s . Lo s d rive rs p u e n t e cu e n t a n co n có d ig o n a t ivo , a u n q u e la lib re ría
d e có d ig o n a t ivo d e l p u e n t e jd b c- o d b c fo rm a p a rt e d e la Má q u in a Virt u a l Ja va 2 1 .

Drivers del Tipo 2

Lo s d rive rs d e l t ip o 2 u s a n e l API e xis t e n t e d e la b a s e d e d a t o s p a ra co m u n ica rla


co n e l clie n t e . Au n q u e lo s d rive rs d e l t ip o 2 s o n m á s rá p id o s q u e lo s d e l t ip o 1 , lo s
d e l t ip o 2 u s a n có d ig o n a t ivo y re q u ie re n p e rm is o s a d icio n a le s p a ra fu n cio n a r e n u n
a p p le t .
Un d rive r d e l t ip o 2 p o d ría n e ce s it a r có d ig o d e b a s e d e d a t o s e n e l la d o d e l clie n t e
p a ra co n e ct a r a t ra vé s d e la re d .

Drivers del Tipo 3

Lo s Drive rs d e l t ip o 3 lla m a n a l API d e la b a s e d e d a t o s e n e l s e rvid o r. La s


p e t icio n e s JDBC d e s d e e l clie n t e s o n p rim e ro co m p ro b a d a s p o r e l Drive r JDBC e n e l
s e rvid o r p a ra e je cu t a rs e . Lo s d rive rs d e l t ip o 3 y 4 p u e d e n u s a rs e e n clie n t e s
a p p le t s ya q u e n o n e ce s it a n có d ig o n a t ivo .

Driveres del Tipo 4

El n ive l m á s a lt o d e d rive rs re im p le m e n t a e l API d e re d p a ra b a s e d e d a t o s e n e l


le n g u a je Ja va . Lo s Drive rs d e l t ip o 4 t a m b ié n p u e d e n u s a rs e e n clie n t e s a p p le t s
p o rq u e n o n e ce s it a n có d ig o n a t ivo .

Conexiones a Bases de Datos


Un a co n e xió n co n u n a b a s e d e d a t s o p u e d e e s t a b le ce re s e co n u n lla m a d a a l
m é t o d o D riv e rMa n a g e r. g e t Co n n e c t io n . La lla m a d a t o m a u n a URL q u e id e n t ifica
la b a s e d e d a t o s , y o p cio n a lm e n t e e l n o m b re d e u s u a rio y la p a s s wo rd p a ra la b a s e
de da tos.

Connection con = [Link](url);


Connection con = [Link](url,
"user", "password");
De s p u é s d e e s t a b le ce r la co n e xió n , s e p u e d e e je cu t a r u n a s e n t e n cia co n t ra la b a s e
d e d a t o s . Lo s re s u lt a d o s d e la s e n t e n cia s p u e d e n re cu p e ra rs e y ce rra rs e la
co n e xió n .
Un a ca ra ct e rís t ica s ú t il d e la cla s e D riv e rMa n a g e r e s e l m é t o d o s e t Lo g S t re a m .
Po d e m o s u s a r e s t e m é t o d o p a ra g e n e ra r in fo rm a ció n d e s e g u im ie n t o p a ra
a yu d a rn o s a d ig n o s t ica r p ro b le m a s d e co n e xió n q u e n o rm a lm e n t e n o s e ría n
vis ib le s . Pa ra g e n e ra r la in fo rm a ció n d e s e g u im ie n t o , s ó lo t e n e m o s q u e lla m a r a l
m é t o d o d e e s t a fo rm a :

[Link]([Link]);
La s e cció n Co n n e ct io n Po o lin g e n e l ca p ít u lo 8 m u e s t ra có m o p o d e m o s m e jo ra r la s
co n e xió n JDBC s in ce rrra r la co n e xió n u n a ve z co m p le t a d a la s e n t e n cia . Ca d a
co n e xió n JDBC a u n a b a s e d e d a t o s p ro vo ca u n a s o b re ca rg a a l a b rir u n n u e vo
s o cke t y u s a r e l n o m b re d e u s u a rio y la p a s s wo rd p a ra lo g in e n la b a s e d e d a t o s .
La re u t iliza ció n d e la s co n e xio n e s re d u ce la s o b re ca rg a . La s co la s d e Co n e xio n e s
m a n t ie n e n u n a lis t a d e co n e xio n e s a b ie rt a s y lim p ia cu a lq u ie r co n e xió n q u e n o
p u e d a s e r re u t iliza d a .

Sentencias
Ha y t re s t ip o s b á s ico s d e s e n t e n cia s S QL u s a d a s e n e l API JDBC:
Ca lla b e lS t a t e m e n t , S t a t e m e n t , y P re p a re d S t a t e m e n t . Cu a n d o s e e n vía u n a
s e n t e n cia s S t a t e m e n t o P re p a re d S t a t e m e n t a la b a s e d e d a t o s , e l d rive r la
t ra d u ce a u n fo rm a t o q u e la b a s e d e d a t o s p u e d a re co n o ce r.

Sentencias Callable

Un a ve z q u e h e m o s e s t a b le cid o u n a co n e xió n co n u n a b a s e d e d a t o s , p o d e m o s
u s a r e l m é t o d o Co n n e c t io n . p re p a re Ca ll p a ra cre a r u n a s e n t e n cia ca lla b le . Es t a s
s e n t e n cia s n o s p e rm it e e je cu t a r p ro d e cim ie n t o s a lm a ce n a d o s S QL.
El s ig u ie n t e e je m p lo cre a u n o b je t o Ca lla b le S t a t e m e n t co n t re s p a rá m e t ro s p a ra
a lm a ce n a r in fo rm a ció n d e la cu e n t a d e lo g in :

CallableStatement cs =
[Link]("{call accountlogin(?,?,?)}");
[Link](1,theuser);
[Link](2,password);
[Link](3,[Link]);

[Link]();
Date lastLogin = [Link](3);

Statements

El in t e rfa ce S t a t e m e n t n o s p e rm it e e je cu t a r u n a s im p le s e n t e n cia s S QL s in
p a rá m e t ro s . La s in s t ru ccio n e s S QL s o n in s e rt a d a s d e n t ro d e l o b je t o S t a t e m e n t
cu a n d o s e lla m a a l m é t o d o S t a t e m e n t . e x e c u t e XXX m e t h o d .
S e n t e n c ia s Qu e ry : Es t e s e g m e n t o d e có d ig o cre a u n o b je t o S t a t e m e n t y lla m a
a l m é t o d o S t a t e m e n t . e x e c u t e Qu e ry p a ra s e le ccio n a r t e xt o d e s d e la b a s e d e
d a t o s d b a . El re s u lt a d o d e la co n s u lt a s e d e vu e lve e n u n o b je t o Re s u lt S e t . Có m o
re cu p e ra r lo s re s u lt a d o s d e s d e e s t e o b je t o Re s u lt S e t s e e xp lica m á s a b a jo e n
Ho ja d e Re s u lt a d o s .

Statement stmt = [Link]();


ResultSet results = [Link](
"SELECT TEXT FROM dba ");
S e n t e n c ia s Up d a t e : Es t e s e g m e n t o d e có d ig o cre a u n o b je t o S t a t e m e n t y lla m a
a l m é t o d o S t a t e m e n t . e x e c u t e Up d a t e p a ra a ñ a d ir u n a d ire cció n d e e m a il a u n a
t a b la d e la b a s e d e d a t o s d b a :

String updateString =
"INSERT INTO dba VALUES (some text)";
int count = [Link](updateString);

Setencias Prepared

El in t e rfa ce P re p a re d S t a t e m e n t d e s cie n d e d e l in t e rfa ce S t a t e m e n t y u s a u n a


p la n t illa p a ra cre a r p e t icio n e s S QL. S e u s a u n a P re p a re d S t a t e m e n t p a ra e n via r
s e n t e n cia s S QL p re co m p ila d a s co n u n o o m á s p a rá m e t ro s .
Qu e ry P re p a re d S t a t e m e n t : Cre a m o s u n o b je t o P re p a re d S t a t e m e n t
e s p e cifica n d o la d e fin ició n d e p la n t illa y la s it u a ció n d e lo s p a rá m e t ro s . Lo s d a t o s
d e lo s p a rá m e t ro s s e in s e rt a n d e n t ro d e l o b je t o P re p a re d S t a t e m e n t lla m a n d o a
s u s m é t o d o s s e t XXX y e s p e cifica n d o e l p a rá m e t ro y s u d a t o . La s in s t ru ccio n e s S QL
y lo s p a rá m e t ro s s o n e n via d o s a la b a s e d e d a t o s cu a n d o s e lla m a a l m é t o d o
e x e c u t e XXX.
Es t e s e g m e n t o d e có d ig o cre a u n o b je t o P re p a re d S t a t e m e n t p a ra s e le ccio n a r
d a t o s d e u s u a rio s b a s a d o s e n la d ire cció n e m a il d e l u s u a rio . El in t e rro g a n t e ( "? ")
in d ica q u e e s t e s e n t e n cia t ie n e u n p a rá m e t ro :

PreparedStatement pstmt = [Link]("


select theuser from
registration where
emailaddress like ?");
//Initialize first parameter with email address
[Link](1, emailAddress);
ResultSet results = [Link]();
Un a ve z q u e s e h a in icia liza d o la p la n t illa P re p a re d S t a t e m e n t s ó lo s e in s e rt a n lo s
va lo re s m o d ifica d o s p a ra ca d a lla m a d a s :

[Link](1, anotherEmailAddress);

N o t a : No t o d o s lo s d rive rs d e b a s e s d e d a t o s co m p ila n s e n t e n cia s


p re p a ra d a s .

Up d a t e P re p a re d S t a t e m e n t : Es t e s e g m e n t o d e có d ig o cre a u n o b je t o
P re p a re d S t a t e m e n t p a ra a ct u a liza r e l re g is t ro d e u n ve n d e d o r. La p la n t illa t ie n e
cin co p a rá m e t ro s , q u e s e s e le ccio n a n co n cin co lla m a d a s a lo s m é t o d o s
P re p a re d S t a t e m e n t . s e t XXX a p ro p ia d o s .

PreparedStatement ps = [Link](
"insert into registration(theuser, password,
emailaddress, creditcard,
balance) values (
?, ?, ?, ?, ?)");
[Link](1, theuser);
[Link](2, password);
[Link](3, emailaddress);
[Link](4, creditcard);
[Link](5, balance);
[Link]();

Cachear los Resultados de la Base de Datos


El co n ce p t o P re p a re d S t a t e m e n t d e re u t iliza r p e t icio n e s p u e d e e xt e n d e rs e a l
ca ch e o d e re s u lt a d o s d e u n a lla m a d a JDBC. Po r e je m p lo , u n a d e s crip ció n d e u n
ít e m d e la s u b a s t a s p e rm a n e ce ig u a l h a s t a q u e e l ve n d e d o r lo ca m b ia . S i e l ít e m
re cib e cie n t o s d e p e t icio n e s , e l re s u lt a d o d e la s e n t e n cia : q u e ry "s e le c t
d e s c rip t io n fro m a u c t io n it e m s w h e re it e m _ id = '4 0 0 0 3 4 3 '" p o d ría s e r
a lm a ce n a d o d e fo rm a m á s e ficie n t e e n u n t a b la h a s h .
Alm a ce n a r re s u lt a d o s e n u n a t b a l h a s h re q u ie re q u e la lla m a d a JDBC s e a
in t e rce p t a d a a n t e s d e cre a r u n a s e n t e n cia re a l q u e d e vu e lva lo s re s u lt a d o s
ca ch e a d o s , y la e n t ra d a d e l ca ch é d e b e lim p ia rs e s i h a y u n a a ct u a liza ció n
co rre s p o n d ie n t e co n e s e it e m _ id .

Hoja de Resultados
El in t e rfa ce Re s u lt S e t m a n e ja a cce s o s a d a t o s d e vu e lt o s p o r u n a co n s u lt a . Lo s
d a t o s d e vu e lt o s s o n ig u a l a u n a lín e a d e la b a s e d e la t a b la d e la b a s e d e d a t o s .
Alg u n a s co n s u lt a s d e vu e lve n u n a lín e a , m ie n t ra s q u e m u ch a s co n s u lt a s d e vu e lve n
m ú lt ip le s lín e a s d e d a t o s .
S e u t iliza n lo s m é t o d o s g e t Ty p e p a ra re cu p e ra r d a t o s d e s d e co lu m n a s e s p e cífica s
p a ra ca d a fila d e vu e lt a e n la co n s u lt a . Es t e e je m p lo re cu p e ra la co lu m n a TEXT d e
t o d a s la s t a b la s co n u n a co lu m n a TEXT e n la b a s e d e d a t o s d b a . El m é t o d o
re s u lt s . n e x t m u e ve h a s t a la s ig u ie n t e fila re cu p e ra d a h a s t a q u e s e h a ya n
p ro ce s a d o t o d a s la s fila s d e vu e lt a s :

Statement stmt = [Link]();


ResultSet results = [Link](
"SELECT TEXT FROM dba ");
while([Link]()){
String s = [Link]("TEXT");
[Link](s + "\n");
}
[Link]();

Hoja de Resultados Scrollable


An t e s d e l JDBC 2 . 0 , lo s d irve rs JDBC d e vo lvía n h o ja s d e re s u lt a d o d e s ó lo le ct u ra
co n cu rs o re s q u e s ó lo s e m o vía n e n u n a d ire cció n , h a cia a d e la n t e . Ca d a e le m e n t o
e ra re cu p e ra d o m e d ia n t e u n a lla m a d a a l m é t o d o n e x t d e la h o ja d e re s u lt a d o s .
JDBC 2 . 0 in t ro d u ce la s h o ja s d e re s u lt a d o s s cro lla b le s cu yo s va lo re s p u e d e n s e r
le íd o s y a ct u a liza d o s s i a s í lo p e rm it e la b a s e d e d a t o s o rig in a l. Co n la s h o ja s d e
re s u lt a d o s s cro lla b le s , cu a lq u ie r fila p u e d e s e r s e le ccio n a d a d e fo rm a a le a t o rio , y
n o s p o d e m o s m o ve r p o r la h o ja d e re s u lt a d o s h a cia a d e la n t e y h a cia a t rá s .
Un a ve n t a ja d e la n u e va h o ja d e re s u lt a d o s e s q u e p o d e m o s a ct u a liza r u n co n ju n t o
d e fila s co rre s p o n d ie n t e s s o n t e n e r q u e e n via r u n a lla m a d a a d icio n a l a
e x e c u t e Up d a t e . La s a ct u a liza cio n e s s e h a ce n lla m a n d o a JDBC y n o s e n e ce s it a n
co m a n d o s S QL p e rs o n a lin za d o s . Es t o a u m e n t a la p o rt a b ilid a d d e l có d ig o d e la b a s e
d e d a t o s q u e cre e m o s .
Ta n t o S t a t e m e n t s co m o P re p a re d S t a t e m e n t s t ie n e n u n co n s t ru ct o r a d icio n a l
q u e a ce p t a u n p a rá m e t ro t ip o s cro ll y o t ro t ip o u p d a t e . El va lo r d e l t ip o s cro ll
p u e d e s e r u n o d e lo s s ig u ie n t e s va lo re s :
● Re s u lt S e t . TYP E_ FORW ARD _ ON LY
Co m p o rt a m ie n t o p o r d e fe ct o e n JDBC 1 . 0 , la a p lica ció n s ó lo p u e d e lla m a r a
n e x t ( ) s o b re la h o ja d e re s u lt a d o s .
● Re s u lt S e t . S CROLL_ S EN S I TI VE
La h o ja d e re s u lt a d o s e s t o t a lm e n t e n a ve g a b le y la s a ct u a liza cio n e s s o n
re fle ja d a s e n la h o ja d e re s u lt a d o s cu a n d o o cu rre n .
● Re s u lt S e t . S CROLL_ I N S EN S I TI VE
La h o ja d e re s u lt a d o s e s t o t a lm e n t e n a ve g a b le p e ro la s a ct u a liza cio n e s s o n
s ó lo vis ib le s cu a n d o s e cie rra la h o ja d e re s u lt a d o s . Ne ce s it a m o s cre a r u n a
n u e va h o ja d e re s u lt a d o s p a ra ve rlo s .
El p a rá m e t ro d e l t ip o u p d a t e p u e d e s e r u n o d e e s t o s d o s va lo re s :
● Re s u lt S e t . CON CUR_ READ _ ON LY
La h o ja d e re s u lt a d o s e s d e s ó lo le ct u ra .
● Re s u lt S e t . CON CUR_ UP D ATABLE
La h o ja d e re s u lt a d o s p u e d e s e r a ct u a liza d a .
Po d e m o s ve rifica r q u e n u e s t ra b a s e d e d a t o s s o p o rt a e s t o s t ip o s lla m a n d o a l
m é t o d o c o n . g e t Me t a D a t a ( ) . s u p p o rt s Re s u lt S e t Co n c u rre n c y ( ) co m o s e ve
a q u í:

Connection con = getConnection();


if([Link]().supportsResultSetConcurrency(
ResultSet.SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE)) {

PreparedStatement pstmt = [Link](


"select password, emailaddress,
creditcard, balance from
registration where theuser = ?",
ResultSet.SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}

Navegar por la Hoja de Resultados

La h o ja d e re s u lt a d o s t o t a lm e n t e s cro lla b le d e vu e lve u n cu rs o r q u e p u e d e m o ve rs e


u s a n d o co m a n d o s s e n cillo s . Po r d e fe ct o e l cu rs o r d e la h o ja d e re s u lt a d o s a p u n t a a
la fila a n t e s d e la p rim e ra fila e n la h o ja d e re s u lt a d o s . Un a lla m a d a a n e x t ( )
re cu p e ra la p rim e ra fila d e la h o ja d e re s u lt a d o s . e l cu rs o r p u e d e t a m b ie n m o ve rs e
lla m a n d o a u n o d e lo s s ig u ie n t e s m é t o d o s d e Re s u lt S e t :
● b e fo re Firs t ( ) : Po s ició n p o r d e fe ct o . Po n e e l cu rs o r a n t e s d e la p rim e ra fila d e
la h o ja d e re s u lt a d o s .
● firs t ( ) : Po n e e l cu rs o r e n la p rim e ra fila d e la h o ja d e re s u lt a d o s .

● la s t ( ) : Po n e e l cu rs o r a n t e s d e la ú lt im a fila d e la h o ja d e re s u lt a d o s .

● a ft e rLa s t ( ) Po n e e l cu rs o r m á s a llá d e la ú lt im a fila d e la h o ja d e re s u lt a d o s .


S e lla m a a p re v io u s p a ra m o ve rn o s h a cia a t rá s e n la h o ja d e re s u lt a d o s .
● a b s o lu t e ( p o s ) : Po n e e l cu rs o r e n e l n ú m e ro d e fila in d ica d o d o n d e
a b s o lu t e ( 1 ) e s la p rim e ra fila y a b s o lu t e ( - 1 ) e s la ú lt im a fila .
● re la t iv e ( p o s ) : Po n e e l cu rs o r e n u n a lín e a re la t iva a la p o s ició n a ct u a l d o n d e
re la t ive ( 1 ) m u e ve e l cu rs o r u n a fila h a cia a d e la n t e .

Actualizar la Hoja de Resultados

Po d e m o s a ct u a liza r u n va lo r e n la h o ja d e re s u lt a d o s lla m a n d o a l m é t o d o
Re s u lt S e t . u p d a t e < t y p e > s o b re la fu la d o n d e e s t á p o s icio n a d o e l cu rs o r. El va lo r
d e l t ip o a q u í e s e l m id m o u s a n d o cu a n d o s e re cu p e ra u n va lo r d e u n a h o ja d e
re s u lt a d o s , p o r e je m p lo , u p d a t e S t rin g a ct u a liza u n va lo r S t rin g e n la h o ja d e
re s u lt a d o s .
El s ig u ie n t e có d ig o a ct u a liza e l b a la n ce d e u n u s u a rio d e s d e la h o ja d e re s u lt a d o s
cre a d a a n t e rio rm e n t e . La a ct u a liza ció n s ó lo s e a p lica a la h o ja d e re s u lt a d o s h a s t a
q u e s e lla m a a rs . u p d a t e Ro w ( ) , q u e a ct u a liza la b a s e d e d a t o s o rig in a l. Ce rra n d o
la h o ja d e re s u lt a d o s a n t e s d e lla m a r a u p d a t e Ro w s e p e rd e rá cu a lq u ie r e d ició n
a p lica d a e n la h o ja d e re s u lt a d o s .

[Link]();
updateDouble("balance",
[Link]("balance") - 5.00);
In s e rt a r u n a n u e va fila u s a lo s m is m o s m é t o d o s u p d a t e < t y p e > . La ú n ica
d ife re n cia e s q u e s e lla m a a l m é t o d o rs . m o v e To I n s e rt Ro w d e q u e lo s d a t o s
h a ya n s id o in icia liza d o s y d e s p u é s s e lla m a a rs . in s e rt Ro w ( ) . Po d e m o s b o rra r la
fila a ct u a l co n u n a lla m a d a a rs . d e le t e Ro w ( ) .

Trabajos Batch

Po r d e fe ct o , ca d a s e n t e n cia JDBC s e e n vía in d ivid u a lm e n t e a la b a s e d e d a t o s .


Ap a rt e d e la s p e t icio n e s d e re d a d icio n a le s , e s t e p ro ce s o p ro vo ca re t ra s o s
a d icio n a le s s i la t ra n s a ció n e xp a n d e va ria s s e n t e n cia s . JDBC 2 . 0 n o s p e rm it e e n vía r
va ria s s e n t e n cia s a la ve z co n e l m é t o d o a d d Ba t c h .
El s ig u ie n t e m é t o d o m u e s t ra có m o u s a r la s e n t e n cia a d d Ba t c h . La s lla m a d a s a
s t m t . a d d Ba t c h a ñ a d e n s e n t e n cia s a la S t a t e m e n t o rig in a l, y la lla m a d a a
e x e c u t e Ba t c h e n vía la s e n t e n cia co m p le t a co n t o d o s lo s a p é n d ice s a la b a s e d e
da tos.

Statement stmt = [Link]();


[Link](
"update registration set balance=balance-5.00
where theuser="+theuser);
[Link](
"insert into auctionitems(
description, startprice)
values("+description+","+startprice+")");

int[] results = [Link]();


La h o ja d e re s u lt a d o s d e l m é t o d o a d d Ba t c h e s u n a rra y d e cu e n t a s d e fila s
a fe ct a d a s p o r ca d a s e n t e n cia e je cu t a d a e n e l t ra b a jo b a t ch . S i o cu rre u n p ro b le m a
s e la n za rá u n a ja v a . s q l. Ba t c h Up d a t e Ex c e p t io n . S e p u e d e o b t e e n e r u n a rra y
in co m p le t o d e co n t a d o r d e fila d e Ba t c h Up d a t e Ex c e p t io n lla m a n d o a s u m é t o d o
g e t Up d a t e Co u n t s .

Almacenar Clases, Imágenes y otros Objetos Grandes

Mu ch a s b a s e s d e d a t o s p u e d e n a lm a ce n a r d a t o s b in a rio s co m o p a rt e d e u n a fila s i
e l ca m p o e s a s ig n a d o co m o lo n g ra w , lo n g v a rb in a ry , u o t ro t ip o s im ila r. Es t o
ca m p o s p u e d e n o cu p a r h a s t a 2 Gig a b yt e s d e d a t o s . Es t o s ig n ifica q u e p o d e m o s
co n ve rt ir lo s d a t o s e n u n s t ra m b in a rio o u n a rra y d e b yt e s , p u e d e s e r a lm a ce n a d o
o re cu p e ra d o d e s d e u n a b a s e d e d a t o s co m o lo s e ría u n s t rin g o u n d o u b le .
Es t a t é cn ica p e u d e u s a rs e p a ra a lm a ce n a r y re cu p e ra r im á g e n e s y o b je t o s Ja va .
Alm a c e n a r y re c u p e ra r u n a im a g e n : Es m u y fá cil a lm a ce n a r u n o b je t o q u e
p u e d e s e r s e ria liza d o o co n ve rt id o e n u n a rra y d e b yt e s . De s a fo rt u n a d a m e n t e
ja v a . a w t . I m a g e n o e s S e ria liz a b le . S in e m b a rg o , co m o s e ve e n e l s ig u ie n t e
e je m p lo d e có d ig o , p o d e m o s a lm a ce n a r lo s d a t o s d e la im a g e n e n u n fich e ro y
a lm a ce n a r la in fo rm a ció n d e l fich e ro co m o b yt e s e n u n ca m p o b in a rio d e la b a s e d e
da tos.

int itemnumber=400456;

File file = new File(itemnumber+".jpg");


FileInputStream fis = new FileInputStream(file);
PreparedStatement pstmt = [Link](
"update auctionitems
set theimage=? where id= ?");
[Link](1, fis, (int)[Link]()):
[Link](2, itemnumber);
[Link]();
[Link]();
[Link]();
Pa ra re cu p e ra r e s t a im a g e n y cre a r u n a rra y d e b yt e s q u e p u e d a s e r p a s a d o a
c re a t e I m a g e , h a ce m o s lo s s ig u ie n t e :

int itemnumber=400456;
byte[] imageBytes;

PreparedStatement pstmt = [Link](


"select theimage from auctionitems where id= ?");
[Link](1, itemnumber);
ResultSet rs=[Link]();
if([Link]()) {
imageBytes = [Link](1);
}
[Link]();
[Link]();

Image auctionimage =
[Link]().createImage(
imageBytes);
Alm a c e n a r y Re c u p e ra r u n Ob je t o : Un a cla s e p u e d e s e r s e ria liza d a a u n ca m p o
b in a rio d e la b a s e d e d a t o s d e la m is m a fo rm a q u e s e h izo co n la im a g e n e n e l
e je m p lo a n t e rio r. En e s t e e je m p lo , la cla s e Re g is t ra t io n I m p l s e h a m o d ifica d o
p a ra s o p o rt a r la s e ria liza ció n p o r d e fe ct o a ñ a d ie n d o le im p le m e n t s S e ria liz a b le a
la d e cla ra ció n d e la cla s e .
Lu e g o , s e cre a u n a rra y By t e Arra y I n p u t S t re a m p a ra p a s a rlo co m o u n S t re a m
Bin a rio a JDBC. Pa ra cre a r e l By t e Arra y I n p u t S t re a m , Re g is t ra t io n I m p l p rim e ro
p a s a a t ra vé s d e u n Ob je c t Ou t p u t S t re a m h a cia e l By t e Arra y I n p u t S t re a m co n
u n a lla m a d a a Re g is t ra t io n I m p l. w rit e Ob je c t . Lu e g o e l By t e Arra y I n p u t S t re a m
e s co n ve rt id o a u n a rra y d e b yt e s , q u e p u e d e s e r u t iliza d o p a ra cre a r e l
By t e Arra y I n p u t S t re a m . El m é t o d o c re a t e e n Re g is t ra t io n S e rv e r. ja v a s e h a
m o d ifica d o d e e s t a fo rm a :

public [Link] create(


String theuser,
String password,
String emailaddress,
String creditcard)
throws [Link]{

double balance=0;
Connection con = null;
PreparedStatement ps = null;;

try {
con=getConnection();
RegistrationImpl reg= new RegistrationImpl();
[Link] = theuser;
[Link] = password;
[Link] = emailaddress;
[Link] = creditcard;
[Link] = balance;

ByteArrayOutputStream regStore =
new ByteArrayOutputStream();
ObjectOutputStream regObjectStream =
new ObjectOutputStream(regStore);
[Link](reg);

byte[] regBytes=[Link]();
[Link]();
[Link]();
ByteArrayInputStream regArrayStream =
new ByteArrayInputStream(regBytes);
ps=[Link](
"insert into registration (
theuser, theclass) values (?, ?)");
[Link](1, theuser);
[Link](2, regArrayStream,
[Link]);

if ([Link]() != 1) {
throw new CreateException ();
}
RegistrationPK primaryKey =
new RegistrationPKImpl();
[Link](theuser);
return primaryKey;
} catch (IOException ioe) {
throw new CreateException ();
} catch (CreateException ce) {
throw ce;
} catch (SQLException sqe) {
[Link]("sqe="+sqe);
throw new CreateException ();
} finally {
try {
[Link]();
[Link]();
} catch (Exception ignore) {
}
}
}
El o b je t o e s re cu p e ra d o y re s co n s t ru id o e xt ra ye n d o lo s b yt e s d e s d e la b a s e d e
d a t o s , cre a n d o u n By t e Arra y I n p u t S t re a m d e s d e a q u e llo s b yt e s le íd o s d e s d e u n
Ob je c t I n p u t S t re a m , y lla m a n d o a re a d Ob je c t p a ra cre a r d e n u e vo e l e je m p la r.
El s ig u ie n t e e je m p lo m u e s t ra lo s ca m b io s n e ce s a rio s e n e l m é t o d o
Re g is t ra t io n S e rv e r. re fre s h p a ra re cu p e ra r e l e je m p la r Re g is t ra t io n d e s d e la
ba se de da tos.

private Registration refresh(RegistrationPK pk)


throws FinderException {

if (pk == null) {
throw new FinderException ();
}
Connection con = null;
PreparedStatement ps = null;
try {
con=getConnection();
ps=[Link]("
select theclass from
registration where theuser = ?");
[Link](1, [Link]());
[Link]();
ResultSet rs = [Link]();
if([Link]()){
byte[] regBytes = [Link](1);
ByteArrayInputStream regArrayStream =
new ByteArrayInputStream(regBytes);
ObjectInputStream regObjectStream =
new ObjectInputStream(
regArrayStream);
RegistrationImpl reg=
(RegistrationImpl)
[Link]();
return reg;
}
else {
throw new FinderException ();
}
} catch (Exception sqe) {
[Link]("exception "+sqe);
throw new FinderException ();
}
finally {
try {
[Link]();
[Link]();
[Link]();
}
catch (Exception ignore) {}
}
}
BLOBs y CLOBs : Alm a ce n a r g ra n d e s ca m p o s e n u n t a b la co n o t ro s d a t o s n o e s
n e ce s a ria m e n t e e l lu g a r ó p t im o e s p e cia lm e n t e s i lo s d a t o s t ie n e n u n t a m a ñ o
va ria b le . u n a fo rm a d e m a n e ja r o b je t o s d e t a m a ñ o g ra n d e y va ria b le e s co n e l t ip o
"La rg e Ob je ct s " ( LOBs ) . Es t e t ip o u s a u n lo ca liza d o r, e s e n cia lm e n t e u n p u n t e ro , e n
e l re g is t ro d e la b a s e d e d a t o s q u e a p u n t a a l ca m p o re a l e n la b a s e d e d a t o s .
Ha y d o s t ip o s d e LOBs : "Bin a ry La rg e Ob je ct s " ( BLOBs ) y "Ch a ra ct e r La rg e
Ob je ct s " ( CLOBs ) . Cu a n d o a cce d e m o s a BLOB o CLOB, lo s d a t o s n o s e co p ia n e n e l
clie n t e . Pa ra re cu p e ra r lo s d a t o s re a le s d e s d e u n a h o ja d e re s u lt a d o s , t e n e m o s q u e
re cu p e ra r e l p u n t e ro co n u n a lla m a d a a BLOB b lo b = g e t Blo b ( 1 ) o CLOB
c lo b = g e t Clo b ( 1 ) , y lu e g o re cu p e ra r lo s d a t o s co n u n a lla m a d a a
b lo b . g e t Bin a ry S t re a m ( ) o c lo b . g e t Bin a ry S t re a m ( ) .

Controlar Transaciones
Po r d e fe ct o , la s s e n t e n cia s JDBC s o n p ro ce s a d a s e n e l m o d o fu ll a u t o - co m m it . Es t e
m o d o fu n cio n a b ie n p a ra u n a s o la co n s u lt a a la b a s e d e d a t o s , p e ro s i la o p e ra ció n
d e p e n d e d e va ria s s e n t e n cia s d e la b a s e d e d a t o s q u e t o d a s d e b e n co m p le t a rs e
co n é xit o o t o d a la o p e ra ció n s e rá ca n ce la d a , s e n e ce s it a u n a t ra n s a ció n m á s
a d e cu a d a .
Un a d e s crip ció n d e lo s n ive le s d e a is la m ie n t o e n la t ra n s a ció n s e cu b re co n m á s
d e t a lle s e n e l Ca p ít u lo 3 : Ma n e ja ¡o d e Da t o s y Tra n s a cio n e s . Pa ra u s a r co n t ro l d e
t ra n s a cio n e s e n la p la t a fo rm a JDBC, p rim e ro n e ce s it a m o s d e s a ct iva r e l m o co "fu ll
a u t o - co m m it " lla m a n d o a :

Connection con= getConnection();


[Link](false);
En e s t e p u n t o , p o d e m o s e n v ia r cu a lq u ie r s ig u ie n t e s e n t e n cia JDBC o d e s h a ce r
cu a lq u ie r a ct u a liza ció n lla m a n d o a l m é t o d o Co n n e c t io n . ro llb a c k . La lla m a d a
ro llb a c k s e s it ú a n o rm a lm e n t e e n e l m a n e ja d o r d e e xce p cio n e s , a u n q u e p u e d e
s it u a rs e e n cu a lq u ie r lu g a r e n le flu jo d e la t ra n s a ció n .
El s ig u ie n t e e je m p lo in s e rt a u n ít e m e n la s u b a s t a y d e cre m e n t a e l b a la n ce d e l
u s u a rio . S i e l b a la n ce e s m e n o r d e ce ro , s e d e s h a ce la t ra n s a ció n co m p le ra y e l
ít e m d e s u s b a s t a e s e lim in a d o .

public int insertItem(String seller,


String password,
String description,
int auctiondays,
double startprice,
String summary) {
Connection con = null;
int count=0;
double balance=0;
[Link] enddate, startdate;
Statement stmt=null;

PreparedStatement ps = null;
try {
con=getConnection();
[Link](false);
stmt= [Link]();
[Link](
"select counter from auctionitems");
ResultSet rs = [Link]();
if([Link]()) {
count=[Link](1);
}
Calendar currenttime=[Link]();
[Link] currentdate=[Link]();
startdate=new [Link](
[Link]());
[Link]([Link], auctiondays);
enddate=new [Link]((
[Link]()).getTime());

ps=[Link](
"insert into auctionitems(
id, description, startdate, enddate,
startprice, summary)
values (?,?,?,?,?,?)");
[Link](1, count);
[Link](2, description);
[Link](3, startdate);
[Link](4, enddate);
[Link](5, startprice);
[Link](6, summary);
[Link]();
[Link]();

ps=[Link](
"update registration
set balance=balance -0.50
where theuser= ?");
[Link](1, seller);
[Link]();
stmt= [Link]();
[Link](
"select balance from registration
where theuser='"+seller+"'");
rs = [Link]();
if([Link]()) {
balance=[Link](1);
}
[Link]();
if(balance <0) {
[Link]();
[Link]();
return (-1);
}

stmt= [Link]();
[Link](
"update auctionitems set
counter=counter+1");
[Link]();
[Link]();
[Link]();
return(0);
} catch(SQLException e) {
try {
[Link]();
[Link]();
[Link]();
[Link]();
}catch (Exception ignore){}
}
return (0);
}

Caracteres de Escape
El API JDBC p ro p o rcio n a la p a la b r cla ve e s c a p e p a ra q u e p o d a m o s e s p e cifica r e l
ca ra ct e r q u e q u e rra m o s u s a r co m o ca ra ct e r d e e s ca p e . Po r e je m p lo , s i q u e re m o s
u s a r e l s ig n o d e t a n t o p o r cie n t o ( % ) co m o e l s ím b o lo d e t a n t o p o r cie n t o q u e q u e
n o s e in t e rp re t e co m o u n co m o d ín S QL u s a n d o e n co n s u lt a s S QL LI KE, t e n e m o s
q u e e s ca p a rlo co n e l ca ra ct e r d e e s ca p e q u e e s p e cifiq u e m o s co n la p a la b ra cla ve
e s cape .
La s ig u ie n t e s e n t e n cia m u e s t ra có m o p o d e m o s u s a r la p a la b ra cla ve e s c a p e p a ra
b u s ca r p o r e l va lo r 1 0 % :

[Link](
"select tax from sales where tax like
'10\%' {escape '\'}");
S i n u e s t ro p ro g ra m a a lm a ce n a n o m b re s y d ire ccio n e s e n la b a s e d e d a t o s
in t ro d u cid o s d e s d e la lín e a d e co m a n d o s o d e s d e u n in t e rfa ce d e u s u a rio , e l
s ím b o lo d e co m illa s im p le ( ') p o d ría a p a re ce r e n lo s d a t o s . Pa s a r u n a co m illa
s im p le d ire ct a m e n t e a u n s t rin g S QL ca u s a p ro b le m a s cu a n d o la s e n t e n cia e s
a n a liza d a p o rq u e S QL le d a a e s t e s ím b o lo o t ro s ig n ifica d o a m e n o s q u e s e le
e s ca p e .
Pa ra re s o lve r e s t e p ro b le m , e l s ig u ie n t e m é t o d o e s ca p a cu a lq u ie r s ím b o lo '
e n co n t ra d o e n la lín e a d e e n t ra d a . Es t e m é t o d o p u e d e s e r e xt e n d id o p a ra e s ca p a r
cu a lq u ie r o t ro ca ra ct e r co m o la s co m a s , q u e la b a s e d e d a t o s o s u d rive r p o d ría n
in t e rp re t a r d e o t ra fo rm a :

static public String escapeLine(String s) {


String retvalue = s;
if ([Link] ("'") != -1 ) {
StringBuffer hold = new StringBuffer();
char c;
for(int i=0; i < [Link](); i++ ) {
if ((c=[Link](i)) == '\'' ) {
[Link] ("''");
}else {
[Link](c);
}
}
retvalue = [Link]();
}
return retvalue;
}
S in e m b a rg o , s i u s a m o s u n P re p a re d S t a t e m e n t e n lu g a r d e u n a s im p le
S t a t e m e n t , m u ch o s d e e s t o s p ro b le m a s d e e s ca p e d e s a p a re ce n . Po r e je m p lo , e n
lu g a r d e e s t a lín e a co n la s e cu e n cia d e e s ca p e :

[Link](
"select tax from sales where tax like
'10\%' {escape '\'}");
Po d ría m o s u s a r e s t a lín e a :

preparedstmt = [Link](
"update tax set tax = ?");

Mapear Tipos de Base de Datos


Ap a rt e d e u n o s p o co s t ip o s co m o I N TEGER q u e s o n re p re s e n t a d o s co m o
I N TEGER e n la s b a s e s d e d a t o s m á s p o p u la re s , p o d ría m o s e n co n t ra r q u e e l t ip o
JDBC d e u n a co lu m n a d e la t a b la n o co rre s p o n d e co n e l t ip o re p re s e n t a d o e n la
b a s e d e d a t o s . Es t o s ig n ifica q u e llla m a r a Re s u lt S e t . g e t Ob je c t ,
P re p a re d S t a t e m e n t . s e t Ob je c t y Ca lla b le S t a t e m e n t . g e t Ob je c t ( ) fa lla rá
b a s t a n t e s ve ce s .
Nu e s t ro p ro g ra m a p u e d e d e t e rm in a r lo s t ip o s d e la s co lu m n a s d e la b a s e d e d a t o s
d e s d e lo s d a t o s m e t a d e la b a s e d e d a t o s y u s a r e s t a in fo rm a ció n p a ra ch e q u e a r e l
va lo r a n t e s d e re cu p e ra rlo . Es t e có d ig o ch e q u e a q u e e l va lo r e s d e l t ip o I N TEGER
a n t e s d e re cu p e ra rlo .

int count=0;
Connection con=getConnection();
Statement stmt= [Link]();
[Link](
"select counter from auctionitems");
ResultSet rs = [Link]();
if([Link]()) {
if([Link]().getColumnType(1) ==
[Link]) {
Integer i=(Integer)[Link](1);
count=[Link]();
}
}
[Link]();

Mapeo de Tipos Date


El t ip o D ATE e s d o n d e o cu rre n m á s e rro re s . Es p o rq u e la cla s e ja v a . u t il. D a t e
re p re s e n t a t a n t o la Fe ch a co m o la Ho ra , p e ro S QL t ie n e e s t o s t re s t ip o s p a ra
re p re s e n t a r in fo rm a ció n d e fe ch a y h o ra :
● Un t ip o D ATE q u e re p re s e n t a s ó lo fe ch a s ( 0 3 / 2 3 / 9 9 ) .

● Un t ip o TI ME q u e e s p e cífica s ó lo la h o ra ( 1 2 : 0 3 : 5 9 ) .

● Un t ip o TI MES TAMP q u e re p re s e n t a e l va lo r d e la h o ra e n n a n o s e g u n d o s .

Es t o s t re s t ip o s a d icio n e s lo s p ro p o rcio n a e l p a q u e t e ja v a . s q l co m o
ja v a . s q l. D a t e , ja v a . s q l. Tim e y ja v a . s q l. Tim e s t a m p y s o n t o d o s s u cla s e s d e
ja v a . u t il. D a t e . Es t o s ig n ifica q u e p o d e m o s u s a r va lo re s ja v a . u t il. D a t e
co n ve rt id o s a l t ip o n e ce s a rio p a ra q u e s e a n co m p a t ib le s co n e l t ip o d e la b a s e d e
da tos.

N o t a : la cla s e Tim e s t a m p p ie rd e p re cis ió n cu a n d o s e co n vie rt e a


ja v a . u t il. D a t e p o rq u e ja v a . u t il. D a t e n o co n t ie n e u n ca m p o d e
n a n o s e g u n d o s , e s m e jro n o co n ve rt ir u n e je m p la r Tim e s t a m p s i e l va lo r
va a s e r e s crit o d e vu e lt a e n la b a s e d e d a t o s .

Es t e e je m p lo u s a la cla s e ja v a . s q l. D a t e p a ra co n ve rt ir e l va lo r ja v a . u t il. D a t e
d e vu e lt o p o r la lla m a d a a Ca le n d a r. g e t Tim e h a cia ja v a . s q l. D a t e .

Calendar currenttime=[Link]();
[Link] startdate=
new [Link]((
[Link]()).getTime());
Ta m b ié n p o d e m o u s a r la cla s e ja v a . t e x t . S im p le D a t e Fo rm a t p a ra h a ce r la
co n ve rs ió n . Es t e e je m p lo u s a la cla s e ja v a . t e x t . S im p le D a t e Fo rm a t p a ra
co n ve rt ir u n o b je t o ja v a . u t il. D a t e a u n o b je t o ja v a . s q l. D a t e :

SimpleDateFormat template =
new SimpleDateFormat("yyyy-MM-dd");
[Link] enddate =
new [Link]("10/31/99");
[Link] sqlDate =
[Link](
[Link](enddate));
S i e n co n t ra m o s q u e u n a re p re s e n t a ció n d e fe ch a d e u n a b a s e d e d a t o s n o p u e d e
s e r m a p e a d a a u n t ip o Ja va co n u n a lla m a d a a g e t Ob je c t o g e t D a t e ,
re cu p e ra m o s e l va lo r co n u n a lla m a d a a g e t S t rin g y fo rm a t e a m o s e l s t rin g co m o
u n va lo r D a t e u s a n d o la cla s e S im p le D a t e Fo rm a t m o s t ra d a a rrib a .
_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM"
s ig n ifica u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .

Oz it o
Servlets
Un s e rve lt e s u n p ro g ra m a d e l la d o d e l s e rvid o r e s crit o e n le n g u a je Ja va q u e
in t e ra ct ú a co n clie n t e s y q u e n o rm a lm e n t e e s t á u n id o a u n s e rvid o r d e "Hyp e rTe xt
Tra n s fe r Pro t o co l" ( HTTP) . Un o u s o co m ú n p a ra u n s e rvle t e s a m p lia r u n s e rvid o r
we b p ro p o rcio n a n d o co n t e n id o s we b d in á m ico s .
Lo s s e rve lt s t ie n e n la ve n t a ja s o b re o t ra s t e cn o lo g ía s q u e d e e s t á n co m p ila d o s ,
t ie n e n ca p a cid a d d e t h re a d s in t e rn a , y p ro p o rcio n a n u n e n t o rn o d e p ro g ra m a ció n
s e g u ro . In clu s o la s s it e s we b q u e a n t e s n o p ro p o rcio n a b a n s o p o rt e p a ra s e rvle t s ,
p u e d e n h a ce rlo a h o ra u s a n d o p ro g ra m a s co m o JRu n o e l m ó d u lo Ja va p a ra e l
s e rvid o r We b Ap a ch e .
La a p lica ció n s u b a s t a s b a s a d a e n we b u s a u n s e rve lt p a ra a ce p t a r y p ro ce s a r
e n t ra d a s d e l co m p ra d o r y ve n d e d o r a t ra vé s d e l n a ve g a d o r y d e vu e lve
d in á m ica m e n t e in fo rm a ció n s o b re e l ít e m d e la s u b a s t a h a cia e l n a ve g a d o r. El
p ro g ra m a Au c t io n S e rv le t s e cre o e xt e n d ie n d o la cla s e Ht t p S e rv le t . Es t a cla s e
p ro p o rcio n a u n m a rco d e t ra b a jo p a ra m a n e ja r p e t icio n e s y re s p u e s t a s HTTP.
Es t a s e cció n e xa m in a e l Au c t io n S e rv le t e in clu ye in fo rm a ció n s o b re có m o u s a r
o b je t o s Co o k ie y S e s s io n e n u n s e rvle t .
● Ht t p S e rvle t

● El m é t o d o in it
● El m é t o d o d e s t ro y
● El m é t o d o s e rvice
● Pe t icio n e s HTTP
● Us a r Co o kie s e n S e rvle t s
❍ Co n fig u ra r u n a Co o kie
❍ Re cu p e ra r u n a Co o kie
❍ Ge n e ra r S e s io n e s
❍ Evit a r e l Ca ch é Re d ire ccio n a m ie n t o
● Có d ig o s d e Erro r HTTP
● Le e r va lo re s GET y POS T
● Th re a d s
● HTTPS
HttpServlet
La cla s e Au ct io n S e rvle t e xt ie n d e la cla s e Ht t p S e rv le t , q u e e s u n a cla s e
a b a s t ra ct a .

public class AuctionServlet extends HttpServlet {


Un s e rvle t p u e d e ca rg a rs e cu a n d o s e a rra n ca e l s e rvid o r we b o cu a n d o s e s o licit a
u n a p e t ició n HTTP a u n a URL q u e e s p e cifica e l s e rvle t . El s e rvle t n o rm a lm e n t e e s
ca rg a d o m e d ia n t e u n ca rg a d o r d e cla s e s s e p a ra d o e n e l s e vid o r we b p o rq u e e s t o
p e rm it e q u e e l s e rvle t s e a re ca rg a d o d e s ca rg a n d o e l ca rg a d o r d e cla s e s q u e ca rg o
la cla s e s e rvle t . S in e m b a rg o , s i e l s e rvle t d e p e n d e d e o t ra s cla s e s y u n a d e e s t a s
cla s e s ca m b ia , n e ce s it a re m o s a ct u a liza e l s e llo d e la fe ch a d e l s e rvle t p a ra
re ca rg a rlo .
De s p u é s d e ca rg a r u n s e rvle t , e l p rim e r e s t a d o e n s u ciclo d e vid a e s la lla m a d a a
s u m é t o d o in it p o r p a rt e d e l s e rvid o r we b . Un a ve z ca rg a d o e in icia liza d o , e l
s ig u ie n t e e s t a d o e n e l ciclo d e vid a d e l s e rvle t e s p a ra s e rvir p e t icio n e s . El s e rvle t
s irve p e t icio n e s a t ra vé s d e la s im p le m e n t a cio n e s d e s u m é t o d o s s e rv ic e , d o Ge t ,
o do Po s t.
El s e rvle t p u e d e o p cio n a lm e n t e im p le m e n t a r u n m é t o d o d e s t ro y p a ra re a liza r
o p e ra cio n e s d e lim p ie za a n t e s d e q u e e l s e rvid o r we b d e s ca rg e e l s e rvle t .

El método init
El m é t o d o in it s ó lo s e lla m a u n a ve z p o r e l s e rvid o r we b cu a n d o s e a rra n ca e l
s e rvle t p o r p rim e ra ve z. A e s t e m é t o d o s e le p a s a u n o b je t o S e rv le t Co n fig q u e
co n t ie n e la in fo rm a ció n d e in icia liza ció n p e rt e n ie n t e a l s e rvid o r we b d o n d e s e e s t á
e je cu t a n d o la a p lica ció n .
El o b je t o S e rv le t Co n fig e s u s a d o p a ra a cce d e r a la in fo rm a ció n m a n t e n id a p o r e l
s e rvid o r we b in clu ye n d o va lo re s d e l p a rá m e t ro in it Arg s e n e l fich e ro d e
p ro p ie d a d e s d e l s e rvle t . El có d ig o d e l m é t o d o in it u s a e l o b je t o S e rv le t Co n fig
p a ra re cu p e ra r lo s va lo re s d e in it Arg s lla m a n d o a l m é t o d o
c o n fig . g e t I n it P a ra m e t e r( "p a ra m e t e r") .
El m é t o d o Au c t io n S e rv le t . in it t a m b ié n co n t a ct a co n e l s e rvid o r d e Ja va Be a n s
En t e rp ris e p a ra cre a r u n o b je t o co n t e xt o ( c t x ) . Es t e o b je t o e s u s a d o e n e l m é t o d o
s e rv ic e p a ra e s t a b le ce r u n a co n e xió n co n e l s e rvid o r d e Ja va Be a n s En t e rp ris e .

Context ctx=null;
private String detailsTemplate;

public void init(ServletConfig config)


throws ServletException{
[Link](config);
try {
ctx = getInitialContext();
}catch (Exception e){
[Link](
"failed to contact EJB server"+e);
}
try {
detailsTemplate=readFile(
[Link]("detailstemplate"));
} catch(IOException e) {
[Link](
"Error in AuctionServlet <init>"+e);
}
}

El método destroy
El m é t o d o d e s t ro y e s u n m é t o d o d e ciclo d e vid a im p le m e n t a d o p o r s e rvle t s q u e
n e ce s it a n g ra b a r s u e s t a d o e n t re ca rg a s y d e s ca rg a s d e l s e rvle t . Po r e je m p lo , e l
m é t o d o d e s t ro y p o d ría g a b a r e l e s t a d o a ct u a l d e l s e rvle t , y la s ig u ie n t e ve z q u e e l
s e rvle t s e a ca rg a d o , e l e s t a d o g ra b a d o p o d ría s e r re cu p e ra d o p o r e l m é t o d o in it .
De b e ría m o s t e n e r cu id a d o co n q u e n o s e p o d ría h a b e r lla m a d o a l m é t o d o d e s t ro y
s i la m á q u in a s e rvid o r s e b lo q u e a .

public void destroy() {


saveServletState();
}

El método service
El Au c t io n S e rv le t e s u n s e rvle t HTTP q u e m a n e ja p e t icio n e s d e clie n t e s y g e n e ra
re s p u e s t a s a t ra vé s d e s u m é t o d o s e rv ic e . Ace p t a co m o p a rá m e t ro s lo s o b je t o s d e
p e t ició n y re s p u e s t a Ht t p S e rv le t Re q u e s t y Ht t p S e rv le t Re s p o n s e .
● Ht t p S e rv le t Re q u e s t co n t e in e la s ca b e ce ra s y lo s s t re a m s d e e n t ra d a d e s d e
e l clie n t e h a cia e l s e rvid o r.
● Ht t p S e rv le t Re s p o n s e e s e l s t re a m d e s a lid a q u e s e u t iliza p a ra e n via r
in fo rm a ció n d e vu e lt a d e s d e e l s e rvid o r h a cia e l clie n t e .
El m é t o d o s e rv ic e m a n e ja p e t icio n e s HTTP e s t á n d a rs d e l clie n t e re cib id a s
m e d ia n t e s u p a rá m e t ro Ht t p S e rv le t Re q u e s t y d e le n g a n d o la p e t ició n a u n o d e lo s
s ig u ie n t e s m é t o d o s d e s ig n a d o s p a ra m a n e ja r p e t icio n e s . Lo s d ife re n t e s t ip o s d e
p e t icio n e s s e d e s crib e n e n la s e cció n Pe t icio n e s HTTP.
● d o Ge t p a ra GET, GET co n d icio n a l, y p e t icio n e s HEAD.
● d o Po s t p a ra p e t icio n e s POS T.
● d o Pu t p a ra p e t icio n e s PUT.
● d o De le t e p a ra p e t icio n e s DELETE.
● d o Op t io n s p a ra p e t icio n e s OPTIONS .

● d o Tra ce p a ra p e t icio n e s TRACE.

e l p ro g ra m a Au c t io n S e rv le t p ro p o rcio n a s u p ro p ia im p le m e n t a ció n d e l m é t o d o
s e rv ic e q u e lla m a a u n o d e lo s s ig u ie n t e m é t o d o s b a s á n d o s e e n e l va lo r d e vu e lt o
p o r la lla m a d a a c m d = re q u e s t . g e t P a ra m e t e r( "a c t io n ") . Es t a s
im p le m e n t a cio n e s d e m é t o d o s co rre s p o n d e n a la s im p le m e n t a cio n e p o r d e fe ct o
p ro p o rcio n a d a s p o r lo s m é t o d o s d o Ge t y d o P o s t lla m a d a s p o r e l m é t o d o s e rv ic e ,
p e ro a ñ a d e a lg u n a s fu n cio n a lid a d e s e s p e cífica s d e la a p lica ció n s u b a s t a p a ra
b u s ca r Be a n s En t e rp ris e .
● lis t AllIt e m s ( o u t )

● lis t AllNe wIt e m s ( o u t )

● lis t Clo s in g It e m s ( o u t )

● in s e rt It e m ( o u t , re q u e s t )

● it e m De t a ils ( o u t , re q u e s t )

● it e m Bid ( o u t , re q u e s t )

● re g is t e rUs e r( o u t , re q u e s t )

public void service(HttpServletRequest request,


HttpServletResponse response)
throws IOException {

String cmd;
[Link]("text/html");
ServletOutputStream out = [Link]();
if (ctx == null ) {
try {
ctx = getInitialContext();
}catch (Exception e){
[Link](
"failed to contact EJB server"+e);
}
}

cmd=[Link]("action");
if(cmd !=null) {
if([Link]("list")) {
listAllItems(out);
}else
if([Link]("newlist")) {
listAllNewItems(out);
}else if([Link]("search")) {
searchItems(out, request);
}else if([Link]("close")) {
listClosingItems(out);
}else if([Link]("insert")) {
insertItem(out, request);
}else if ([Link]("details")) {
itemDetails(out, request );
}else if ([Link]("bid")) {
itemBid(out, request) ;
}else if ([Link]("register")) {
registerUser(out, request);
}
}else{
// no command set
setTitle(out, "error");
}
setFooter(out);
[Link]();
}

Peticiones HTTP
Un a p e t ició n e s u n m e n s a je e n via d o d e s d e u n p ro g ra m a clie n t e co m o u n
n a ve g a d o r a u n p ro g ra m a s e rvid o r. La p rim e ra lín e a d e l m e n s a je d e p e t ició n
co n t ie n e u n m é t o d o q u e in d ica la a cció n a re a liza r s o b re la URL q u e vie n e d e s p u é s .
Lo s d o s m e ca n is m o s m á s co m u n e s p a ra e n via r in fo rm a ció n a l s e rvid o r s o n P OS T y
GET.
● La s p e t icio n e s GET p o d ría n p a s a r p a rá m e t ro s a u n a URL a ñ a d ié n d o la s a la
URL. Es t a s p e t icio n e s p u e d e n s e r g u a rd a d a s e n e l b o o km a rk o e n via d a s p o r
co rre ro e in clu ye n la in fo rm a ció n d e la URL d e re s p u e s t a .
● La s p e t icio n e s POS T p o d ría n p a s a r d a t o s a d icio n a le s a la URL e n viá n d o la s
d ire ct a m e n t e a l s e rvid o r d e fo rm a s e p a ra d a a la URL. Es t a s p e t icio n e s n o
p u e d e n s e r a lm a ce n a d a s e n e l b o o km a rk n i e n via d a s p o r e m a il y n o ca m b ia r
la URL d e la re s p u e s t a .
La s p e t icio n e s PUT s o n la in ve rs a d e la p e t icio n e s GET. En lu g a r d e le e r la p á g in a ,
la s p e t icio n e s PUT e s crib e n ( o a lm a ce n a n ) la p á g in a .
La s p e t icio n e s DELETE s o n p a ra e lim in a r p á g in a s We b .
La s p e t icio n e s OPTIONS s o n p a ra o b t e n e r in fo rm a ció n s o b re la s o p cio n e s d e
co m u n ica ció n d is p o n ib le s e n la ca d e n a p e t ició n / re s p u e s t a .
La s p e t icio n e s TRACE s o n p a ra re a liza r p ru e b a s d e d ia g n ó s t ico p o rq u e p e rm it e q u e
e l clie n t e ve a lo q u e s e e s t á re cib ie n d o a l o rt o fin a l d e la ca d e n a d e p e t ició n .
Usar Cookies en servlets
LAs co o kie s HTTP s o n e xe n cia lm e n t e ca b e ce ra s HTTP p e rs o n a liza d a s q u e s o n
p a s a d a s e n t re e l clie n t e y e l s e rvid o r. Au n q u e la s co o kie s n o s o n m u y p o p u la re s ,
p e rm it e n q u e e l e s t a d o s e a co m p a rt id o e n t re d o s m á q u in a s . Po r e je m p lo , cu a n d o
u n u s u a rio h a ce lo g in e n u n a s it e , u n a co o kie p u e d e m a n t e n e r u n a re fe re n cia
ve rifica n d o q u e e l u s u a rio h a p a s a d o e l ch e q u e o d e p a s s wo rd y p u e d e u s a r e s t a
re fe re n cia p a ra id e n t ifica r a l m is m o u s u a rio e n fu t u ra s vis it a s .
La s co o kie s n o rm a lm e n t e e s t á n a s o cia d a s co n u n s e rvid o r. S i co n fig u ra m o s e l
d o m in io a . ja v a . s u n . c o m , e n t o n ce s la co o kie s e s t á a s o cia d a co n e s e d o m in io . S i
n o s e co n fig u ra n ig n ú n d o m in io , la co o kie s ó lo e s t á a s o cia d a co n e l s e rvid o r q u e
cre ó la co o kie .

Configurar una Cookie

El API S e rvle t d e Ja va in clu ye u n a cla s e Co o k ie q u e p o d e m o s u s a r p a ra co n fig u ra r


o re cu p e ra r la co o kie d e s d e la ca b e ce ra HTTP. La s co o kie s HTTP in clu ye n u n
n o m b re y u n a p a re ja d e va lo re s .
El m é t o d o s t a rt S e s s io n m o s t ra d o a q u í e s t á e n e l p ro g ra m a Lo g in S e rvle t . En e s t e
m é t o d o , e l n o m b re e n la p a re ja n o m b re va lo r u s a d o p a ra cre a e l Co o k ie e s
JD CAUCTI ON , y u n id e n t ifica d o r ú n ico g e n e ra d o p o r e l s e rvid o r e s e l va lo r.

protected Session startSession(String theuser,


String password,
HttpServletResponse response) {
Session session = null;
if ( verifyPassword(theuser, password) ) {
// Create a session
session = new Session (theuser);
[Link] (sessionTimeout + i
[Link]());
[Link] (session);

// Create a client cookie


Cookie c = new Cookie("JDCAUCTION",
[Link]([Link]()));
[Link] ("/");
[Link] (-1);
[Link] (domain);
[Link] (c);
}
return session;
}
Ve rs io n e s p o s t e rio re s d e l API S e rvle t in clu ye u n API S e s s io n , p a ra cre a r u n a s e s ió n
u s a n d o e l API S e rve lt e n e l e je m p lo a n t e rio r p o d e m o s u s a r e l m é t o d o g e t S e s s io n .

HttpSession session = new Session (true);


El m é t o d o s t a rt S e s s io n e s lla m a d o m e d ia n t e p e t icio n e s d e a cció n lo g in d e s d e u n
P OS T a l Lo g in S e rv le t d e e s t a fo rm a :

<FORM ACTION="/LoginServlet" METHOD="POST">


<TABLE>
<INPUT TYPE="HIDDEN" NAME="action" VALUE="login">
<TR>
<TD>Enter your user id:</TD>
<TD><INPUT TYPE="TEXT" SIZE=20
NAME="theuser"></TD>
</TR>
<TR>
<TD>Enter your password:<TD>
<TD><INPUT TYPE="PASSWORD" SIZE=20
NAME="password"></TD>
</TR>
</TABLE>
<INPUT TYPE="SUBMIT" VALUE="Login" NAME="Enter">
</FORM>
La co o kie e s cre a d a co n u n e d a d m á xim a d e - 1 , lo q u e s ig n ifica q u e e l co o kie e s
a lm a ce n a d o p e ro p e rm a n e ce vivo m ie s n t ra s e l n a ve g a d o r s e e s t é e je cu t a n d o . El
va lo r s e s e le ccio n a e n s e g u n o d , a u n q u e cu a n d o s e u s a n va lo re s m e n o re s q u e u n o s
p o co s s e g u n d o s n e ce s it a m o s t e n e r cu id a d o co n q u e lo s t ie m p o s d e la s m á q u in a s
p u d ie ra n e s t a r lig e ra m e n t e d e s in cro n iza d o s .
El va lo r d e p a t h p u e d e s e r u s a d o p a ra e s p e cifica r q u e e l co o kie s ó lo s e a p lica a
d ire ct o rio s y fich e ro s b a jo e l p a t h s e le ccio n a d o e n e s a m á q u in a . En e s t e e je m p lo ,
e l p a t h ra íz / s ig n ifica q u e e l co o kie e s a p lica b le a t o d o s lo s d ire ct o rio s .
El va lo r d e l d o m in io e n e s t e e je m p lo e s le íd o d e s d e lo s p a rá m e t ro s d e in icia liza ció n
d e l s e rvle t . S i e l d o m in io e s n u ll, e l co o kie e s s ó lo a p lica d o a e s a m á q u in a d e
d o m in o .

Recuperar un Cookie

El co o kie e s re cu p e ra d o d e s d e la s ca b e ce ra s HTTP co n u n a lla m a d a a l m é t o d o


g e t Co o k ie s p a ra s o licit a rlo :

Cookie c[] = [Link]();


Po s t e rio rm e n t e p o d e m o s re cu p e ra r la p a re ja d e s e le ccio n e s n o m b re y va lo r
lla m a n d o a l m é t o d o Co o k ie . g e t N a m e p a ra re cu p e ra r e l n o m b re y a l m é t o d o
Co o k ie . g e t Va lu e p a ra re cu p e ra r e l va lo r.
Lo g in S e rv le t t ie n e u n m é t o d o v a lid a t e S e s s io n q u e ch e q u e a la s co o kie s d e l
u s u a rio p a ra e n co n t ra r u n co o kie JD CAUCTI ON q u e fu é e n via d a e n e s t e d o m in io :

private Session validateSession


(HttpServletRequest request,
HttpServletResponse response) {
Cookie c[] = [Link]();
Session session = null;
if( c != null ) {
Hashtable sessionTable = new Hashtable();
for (int i=0; i < [Link] &&
session == null; i++ ) {
if(c[i].getName().equals("JDCAUCTION")) {
String key = [Link] (c[i].getValue());
session=[Link](key);
}
}
}
return session;
}
S i u s a m o s e l API S e rvle t p o d e m o s u s a r e l s ig u ie n t e m é t o d o , o b s e rva m o s q u e e l
p a rá m e t ro e s fa ls e p a ra e s p e cifica r q u e e l va lo r d e s e s ió n e s d e vu e lt o y q u e n o s e
cre e u n a n u e va s e s ió n :

HttpSession session = [Link](false);

Generar Sesiones

El m é t o d o Lo g in S e rv le t . v a lid a t e S e s s io n d e vu e lve u n o b je t o S e s s io n
re p re s e n t a d o p o r la cla s e S e s s io n . Es t a cla s e u s a u n g e n e ra d o d e s d e u n a s e cu e n cia
n u m é rica . Es t a id e n t ifica d o r d e s e s ió n n u m e ra d a e s la p a rt e d e l va lo r d e la p a re ja
d e n o m b e y va lo r a lm a ce n a d a s e n e l co o kie .
La ú n ica fo rm a d e re fe re n cia r e l n o m b re d e l u s u a rio e n e l s e rvid o r e s co n e s t e
id e n t ifica d o r d e s e s ió n , q u e e s t á a lm a ce n a d o e n u n s e n cillo ca ch é d e m e m o ria co n
lo s o t ro s id e n t ifica d o re s d e s e s ió n . Cu a n d o u n u s u a rio t e rm in a u n a s e s ió n , s e lla m a
a la a cció n Lo g in S e rv le t d e e s t a fo rm a :

[Link]
El ca ch é d e s e s ió n im p le m e n t a d o e n e l p ro g ra m a S e s s io n Ca ch e . ja va in clu ye u n
t h re a d p a ra e lim in a r s e s io n e s m á s vie ja s q u e e l t ie m p o p re s e le ccio n a d o . Es t e
t ie m p o p o d ría m e d is e e n h o ra s o d ía s , d e p e n d ie n d o d e l t rá fico d e la we b s it e .

Evitar el Caché de Páginas


El m é t o d o Lo g in S e rv le t . s e t N o Ca c h e s e le ccio n a lo s va lo re s Ca c h e - Co n t ro l o
P ra g m a ( d e p e n d ie n d o d e la ve rs ió n d e l p ro t o co lo HTTP q u e e s t e m o s u s a n d o ) e n la
ca b e ce ra d e re s p u e s t a a n o - c a c h e . La ca b e ce ra d e e xp ira ció n Ex p ire s t a m b ié n s e
s e le ccio n a a 0 , a lt e rn a t iva m e n t e p o d e m o s s e le ccio n a r la h o ra p a ra q u e s e la h o ra
a ct u a l d e l s is t e m a . In clu s o s i e l clie n t e n o ca ch e a la p á g in a , fre cu e n t e m e n t e h a y
s e rvid o re s p ro xys e n u n a re d co rp o ra t iva q u e s i lo h a ría n . S ó lo la s p á g in a s q u e
u s a n S e cu re S o cke t La ye r ( S S L) n o s o n ca ch e a d a s p o r d e fe ct o .

private void setNoCache (HttpServletRequest request,


HttpServletResponse response) {
if([Link]().compareTo ("HTTP/1.0") == 0) {
[Link] ("Pragma", "no-cache");
} else if ([Link]().compareTo
("HTTP/1.1") == 0) {
[Link] ("Cache-Control", "no-cache");
}
[Link] ("Expires", 0);
}

Restringir Accesos y Redireccionamientos

S i in s t a la m o s e l Lo g in S e rv le t co m o e l s e rvle t p o r d e fe ct o o e l s e rvle r a e je cu t a r
cu a n d o s e s irva cu a lq u ie r p á g in a b a jo e l d o cu m e n t o ra iz, o d e m o s u s a r co o kie s p a ra
re s t rin g ir lo s u s u a rio s a cie rt a s s e ccio n e s d e la s it e . Po r e je m p lo , p o d e m o s p e rm it ir
q u e lo s u s u a rio s q u e t e n g a n co o kie s co n e l e s t a d o d e q u e h a n in t ro d u cid o s u
p a s s we o rd a cce d e r a s e ccio n e s d e la s it e q u e re q u ie re n u n lo g in y m a n t e n e r a lo s
o t ro s fu e ra .
El p ro g ra m a Lo g in S e rvle t ch e q u e a u n d ire ct o rio re s t rin g id o e n e s t e m é t o d o in it . El
m é t o d o in it m o s t ra d o a b a jo co n fig u ra la va ria b le p ro t e c t e d D ir a t ru e s i la
va ria b le c o n fig p a s a d a a é l e s p e cifica u n d ire ct o rio p ro t e g id o . El fich e ro d e
co n fig u ra ció n d e l s e rvid o r We b p ro p o rcio n a la s co n fig u ra cio n e s p a s a d a s a u n
s e rvle t e n la va ria b le c o n fig .

public void init(ServletConfig config)


throws ServletException {
[Link](config);
domain = [Link]("domain");
restricted = [Link]("restricted");
if(restricted != null) {
protectedDir=true;
}
Má s t a rd e e n lo s m é t o d o s v a lid a t e S e s s io n y s e rv ic e , la va ria b le p ro t e c t e d D ir e s
co m p ro b a d a y s e lla m a a l m é t o d o Ht t p Re s p o n s e . s e n d Re d ire c t p a ra via r a l
u s u a rio a la p á g in a co rre ct a b a s á n d o s e e n s u s e s t a d o s d e lo g in y s e s ió n
if(protectedDir) {
[Link] (restricted+"/[Link]");
}else{
[Link] (defaultPage);
}
El m é t o d o in it t a m b ié n re cu p e ra e l co n t e xt o d e l s e rvle t p a ra e l s e rvle t File S e rv le t
p a ra q u e lo s m é t o d o s p u e d a n s e r lla m a d o s s o b re File S e rv le t e n e l m é t o d o
v a lid a t e S e s s io n . La ve n t a ja d e lla m a r a lo s m é t o d o s s o b re e l s e rvle t File S e rv le t
p a ra s e rvir lo s fich e ro s d e s d e d e n t ro d e l s e rvle t Lo g in S e rv le t , e s q u e o b t e n e m o s
t o d a s la s ve n t a ja s d e la fu n cio n a lid a d e s a ñ a d id a s d e n t ro d e l s e rvle t File S e rv le t
co m o e l m e p e o d e m e m o ria o e l ch a ch é d e fich e ro s . La p a rt e n e g a t iva e s q u e e l
có d ig o p o d ría n o s e r p o rt a b le a o t ro s s e rvid o re s q u e n o t e n g a n u n s e rvle t
File S e rv le t . Es t e có d ig o re cu p e ra e l co n t e xt o File S e rv le t :

FileServlet fileServlet=(FileServlet)
[Link]().getServlet("file");
El m é t o d o v a lid a t e S e s s io n e vit a q u e lo s u s u a rio s s in lo g in d e s e s ió n a cce d a n a
lo s d ire ct o rio s re s t rin g id o s .

Códigos de Error HTTP


Po d e m o s d e vo lve r u n có d ig o d e e rro r HTTP u s a n d o e l m é t o d o s e n d Erro r. Po r
e je m p lo , e l có d ig o d e e rro r HTTP 5 0 0 in d ica u n e rro r in t e rn o e n e l s e rid o r, y e l
có d ig o d e e rro r 4 0 4 in d ica p á g in a n o e n co n t ra d a . Es t e s e g m e n t o d e có d ig o
d e vu e lve e l có d ig o d e e rro r HTTP 5 0 0 :

protected void service (HttpServletRequest request,


HttpServletResponse response)
throws ServletException {
[Link] (500);
}

Leer Valores GET y POST


El API S e rvle t t ie n e u n m é t o d o g e t P a ra m e t e r e n la cla s e Ht t p S e rv le t Re q u e s t
q u e d e vu e lve e l va lo r GET o P OS T p a ra e l n o m b re s u m in is t ra d o .
● La p e t ició n HTTP GET m a n e ja p a re ja s d e n o m b re / va lo r co m o p a rt e d e la URL.
El m é t o d o g e t P a ra m e t e r a n a liza la URL p a s a d a , re cu p e ra la s p a re ja s
n a m e = v a lu e d e t e rm in a d a s p o r e l ca ra ct e r ( &) , y d e vu e lve e l va lo r.
● La p e t ició n HTTP P OS T lle e l n o m b re d e la s p a re ja s n o m b re / va lo r d e s d e e l
s t re a m d e e n t ra d a d e s d e e l clie n t e . El m é t o d o g e t P a ra m e t e r a n a liza e n e l
s t re a m d e e n t ra d a la s p a re ja s d e n o m b re / va lo r.
El m é t o d o g e t P a ra m e t e r fu n cio n a vie n p a ra s e rvle t s e n cillo s , p e ro s i n e ce s it a m o s
re cu p e ra r lo s p a rá m e t ro s P OS T e n e l o rd e n e n q u e fu e ro n s it u a d o s e n la p á g in a
we v o m a n e ja r p o s t s m u lt i- p a rt e , p o d e m o s e s crib ir n u e s t ro p ro p io p a ra a n a liza r e l
s t ra m d e e n t ra d a .
El s ig u ie n t e e je m p lo d e vu e lve lo s p a rá m e t ro s POS T e n e l o rd e n e n q u e fu e ro n
re cib id o s d e s d e la p á g in a We b . No rm a lm e n t o , lo s p a rá m e t ro s s o n a lm a ce n a d o s e n
u n Ha s h t a b le q u e n o m a n t ie n e e l o rd e n d e s e cu e n cia d e lo s e le m e n t o s
a lm a ce n a d o s . El e je m p lo m a n t ie n e u n a re fe re n cia a ca d a p a re ja n o m b re / va lo re n
u n ve ct o r q u e p u e d e s e r s e r a n a liza d o p a ra d e vo lve r va lo re s e n e l o rd e n e n q u e
fu e ro n re cib id o s p o r e l s e rvid o r.

package auction;

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

public class PostServlet extends HttpServlet {


private Vector paramOrder;
private Hashtable parameters;

public void init(ServletConfig config)


throws ServletException {
[Link](config);
}

public void service(HttpServletRequest request,


HttpServletResponse response)
throws IOException {

[Link]("text/html");
PrintWriter out = [Link]();
if([Link]().equals("POST")
&& [Link]().equals(
"application/x-www-form-urlencoded")) {

parameters=parsePostData(
[Link](),
[Link]());
}

for(int i=0;i<[Link]();i++) {
String name=(String)[Link](i);
String value=getParameter((
String)[Link](i));
[Link]("name="+name+" value="+value);
}
[Link]("</body></html>");
[Link]();
}

private Hashtable parsePostData(int length,


ServletInputStream instream) {
String valArray[] = null;
int inputLen, offset;
byte[] postedBytes = null;
boolean dataRemaining=true;
String postedBody;
Hashtable ht = new Hashtable();
paramOrder= new Vector(10);
StringBuffer sb = new StringBuffer();

if (length <=0) {
return null;
}
postedBytes = new byte[length];
try {
offset = 0;
while(dataRemaining) {
inputLen = [Link] (postedBytes,
offset,
length - offset);
if (inputLen <= 0) {
throw new IOException ("read error");
}
offset += inputLen;
if((length-offset) ==0) {
dataRemaining=false;
}
}
} catch (IOException e) {
[Link]("Exception ="+e);
return null;
}

postedBody = new String (postedBytes);


StringTokenizer st =
new StringTokenizer(postedBody, "&");
String key=null;
String val=null;

while ([Link]()) {
String pair = (String)[Link]();
int pos = [Link]('=');
if (pos == -1) {
throw new IllegalArgumentException();
}
try {
key = [Link](
[Link](0, pos));
val = [Link](
[Link](pos+1,
[Link]()));
} catch (Exception e) {
throw new IllegalArgumentException();
}
if ([Link](key)) {
String oldVals[] = (String []) [Link](key);
valArray = new String[[Link] + 1];
for (int i = 0; i < [Link]; i++) {
valArray[i] = oldVals[i];
}
valArray[[Link]] = val;
} else {
valArray = new String[1];
valArray[0] = val;
}
[Link](key, valArray);
[Link](key);
}
return ht;
}

public String getParameter(String name) {


String vals[] = (String []) [Link](name);
if (vals == null) {
return null;
}
String vallist = vals[0];
for (int i = 1; i < [Link]; i++) {
vallist = vallist + "," + vals[i];
}
return vallist;
}
}
Pa ra s a b e r s i u n a p e t ició n e s POS T o GET, lla m a d o s a l m é t o d o g e t Me t h o d d e la
cla s e Ht t p S e rv le t Re q u e s t . Pa ra d e t e rm in a r e l fo rm a t o d e lo s d a t o s q u e e s t á n
s ie n d o p o s t e a d o s , lla m a m o s a l m é t o d o g e t Co n t e n t Ty p e d e la cla s e
Ht t p S e rv le t Re q u e s t . Pa ra s e n cilla s p á g in a s HTML, e l t ip o d e vu e lt o p o r e s t á
lla m a d a s e rá a p p lic a t io n / x - w w w - fo rm - u rle n c o d e d .
S i n e ce s it a m o s cre a r u n p o s t co n m á s d e u n a p a rt e co m o e l cre a d o p o r e l s ig u ie n t e
fo rm u la rio HTML, e l s e rvle r n e ce s it a rá lle r e l s t re a m d e e n t ra d a d e s d e e l p o s t p a ra
a lca n za r la s s e ccio n e s in d ivid u a le s . Ca d a s e cció n s e d s t in g u e p o r u n lím it e d e fin id o
e n la ca b e ce ra p o s t .

<FORM ACTION="/PostMultiServlet"
METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="TEXT" NAME="desc" value="">
<INPUT TYPE="FILE" NAME="filecontents" value="">
<INPUT TYPE="SUBMIT" VALUE="Submit" NAME="Submit">
</FORM>
El s ig u ie n t e e je m p lo e xt ra e u n a d e s crip ció n y u n fich e ro d e s d e lo s n a ve g a d o re s d e l
clie n t e . Le e e l s t re a m d e e n t ra d a b u s ca n d o u n a lín e a q u e co rre s p o n d a co n u n
s t rin g d e lím it e , le e e l co n t e n id o d e la lín e a y lu e o le e lo s d a t o s a s o cia d o s co n e s a
p a rt e . El fich e ro s u vid o s e m u e s t ra s im p le m e n t e , p e ro t a m b ié n p u e d e s e r e s crit o
e n d is co :

package auction;

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

public class PostMultiServlet extends HttpServlet {

public void init(ServletConfig config)


throws ServletException {
[Link](config);
}

public void service(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException {

[Link]("text/html");
PrintWriter out = [Link]();
if ([Link]().equals("POST")
&& [Link]().startsWith(
"multipart/form-data")) {

int index = [Link]().indexOf(


"boundary=");
if (index < 0) {
[Link]("can't find boundary type");
return;
}

String boundary =
[Link]().substring(
index+9);
ServletInputStream instream =
[Link]();
byte[] tmpbuffer = new byte[8192];
int length=0;
String inputLine=null;
boolean moreData=true;

//Skip until form data is reached


length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);

while([Link](boundary)
>0 && moreData) {
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);
if(inputLine !=null)
[Link]("input="+inputLine);
if(length<0) {
moreData=false;
}
}

if(moreData) {
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);

if([Link]("desc") >=0) {
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);
[Link]("desc="+inputLine);
}
}

while([Link](boundary)
>0 && moreData) {
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);
}
if(moreData) {
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);

if([Link]("filename") >=0) {
int startindex=[Link](
"filename");
[Link]("file name="+
[Link](
startindex+10,
[Link]("\"",
startindex+10)));
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0,
length);
}
}
byte fileBytes[]=new byte[50000];
int offset=0;
if (moreData) {
while([Link](boundary)
>0 && moreData) {
length = [Link](
tmpbuffer,
0,
[Link]);
inputLine = new String (tmpbuffer, 0, 0, length);
if(length>0 && (
[Link](boundary) <0)) {
[Link](
tmpbuffer,
0,
fileBytes,
offset,
length);
offset+=length;
} else {
moreData=false;
}
}
}
// trim last two newline/return characters
// before using data
for(int i=0;i<offset-2;i++) {
[Link]((char)fileBytes[i]);
}
}
[Link]("</body></html>");
[Link]();
}
}
Threads
Un s e rvle t d e b e s e r ca p a z d e m a n e ja r m ú lt ip e ls p e t icio n e s co n cu rre n t e s . Cu a lq u ie r
n ú m e ro d e u s u a rio s p u e d e e n u n m o m e n t o d a d o in vo ca r a l s e rvle t , y m ie n t ra s q u e
e l m é t o d o in it e je cu t a s ie m p re u n ú n ico t re h a d , e l m é t o d o s e rv ic e e s m u lt i- t h re a d
p a ra m a n e ja r m ú lt ip le s p e t icio n e s .
Es t o s ig n ifica q u e cu a lq u ie r ca m p o e s t á t ico o p ú b lico a cce d id o p o r e l m é t o d o
s e rv ic e d e b e ría n e s t á r re s t rin g id o s a a cce s o s d e u n t h re a d . e l e je m p lo d e a b a jo
u s a la p a la b ra cla ve s y n c h ro n iz e d p a ra re s t rin g ir e l a cce s o a u n co n t a d o r p a ra
q u e s ó lo p u e d a s e r a ct u a liza d o p o r u n t h re a d a la ve z:

int counter
Boolean lock = new Boolean(true);

synchronized(lock){
counter++;
}

HTTPS
Mu ch o s s e rvid o re s , n a ve g a d o re s , y e l ja va Plu g - In t ie n e la p o s ib ilid a d d e s o p o rt a r
e l p ro t o co lo HTTP s e g u ro lla m a d o HTTPS . Es t e s im ila r a l HTTP e xce p t o e n q u e lo s
d a t o s o n t ra m it id o s a t ra vé s d e u n a ca p a d e s o cke t s e g u ro ( S S L) e n lu g a r d e u n a
co n e xió n d e s o cke t n o rm a l. Lo s n a ve g a d o re s we b e s cu ch a n p e t icio n e s HTTP e n u n
p u e rt o m ie n t ra s e s cu ch a n la s p e t icio n e s HTTPS e n o t ro p u e rt o .
Lo s d a t o s e n crip t a d o s q u e s o n e n via d o s a t ra vé s d e la re d in clu ye n ch e q u e o s p a ra
ve rifica r s i lo s d a t o s e h a n m o d ifica d o e n e l t rá n s it o . S S L t a m b ié n a u t e n t ifica e l
s e rvid o r we b a s u s clie n t e s p ro p o rcio n a n d o u n ce rt ifica d o d e cla ve p ú b lica . e n e l
S S L 3 . 0 e l clie n t e t a m b ié n p u e d e a u t e n t ifica rs e a s í m is m o co n e l s e rvid o r,
u s xa n d o d e n u e vo u n ce rt ifica d o d e cla ve p ú b lica .
La cla ve p ú b lica crip t o g rá fica ( t a m b ié n lla m a d a cla ve d e e n crip t a ció n a s im é t re rica )
u s a u n a p a re ja d e cla ve s p ú b lica y p riva d a . Cu a lq u ie r m e n s a je e n crip t a d o ( h e ch o
in in t e lig ib le ) co n la cla ve p riva d a d e la p a re ja s ó lo p u e d e s e r d e s e n crip t a d o co n la
co rre s p o n d ie n t e cla ve p ú b lica . Lo s ce rt ifica d o s s o n s e n t e n cia s firm a d a s
d ig it a lm e n t e g e n e ra d a s p o r u n t e rce ra p a rt e co n o cid a d co m o "Au t o rid a d d e
Ce rt ifica ció n " Ce rt ifica t e Au t h o rit y. Es t a Au t o riza r n e ce s it a a s e g u ra rs e d e q u e
n o s o t ro s s o m o s q u ie n d e cim o s s e r p o rq u e lo s clie n t e s s e cre e ra n e l ce rt ifica d o q u e
re cib a n . S i e s a s í, e s t e ce rt ifica d o p u e d e co n t e n e r la cla ve p ú b lica d e la p a re ja d e
cla ve p ú b lica / p riva d a . El ce rt ifica d o e s t á firm a d o p o r la cla ve p riva d a d e la
Au t o rid a d d e Ce rt ifica ció n , y m u ch o s n a ve g a d o re s co n o ce n la s cla ve s p ú b lica s la
m a yo ría d e la s Au t o rid a d e s d e Ce rt ifica ció n .
Mie n t ra s q u e la e n crip t a ció n d e cla ve p ú b lica e s b u e n a p a ra p ro p ó s it o s d e
a u t e n t ifica ció n , n o e s t a n rá p id a co m o la e n crip t a ció n a s im é t rica y p o r e s o e l
p ro t o co lo S S L u s a a m b o s t ip o s d e cla ve s e n e l ciclo d e vid a d e u n a co n e xió n S S L.
El clie n t e y e l s e rvid o r e m p ie za n u n a t ra n s a ció n HTTPS co n u n a in icia liza ció n d e
co n e xió n o fa s e d e e s t re ch a m ie n t o d e m a n o s .
Es e n e s e m o m e n t o e n e l q u e e l s e rvid o r e s a u t e n t ifica d o u s a n d o e l ce rt ifica d o q u e
e l clie n t e h a re cib id o . El clie n t e u s a la cla ve p ú b lica d e l s e rvid o r p a ra e n crip t a r lo s
m e n s a je s e n via d o s a l s e rvid o r. De s p u é s d e q u e e l clie n t e h a ya s id o a u t e n t ifica d o y
e l a lg o rit m o d e e n crip t a ció n s e h a p u e s t o d e a cu e rd o e n t re la s d o s p a rt e s , s e u s a n
u n a s n u e va s cla ve s d e s e s ió n s im é t rica p a ra e n crip t a r y d e s e n crip t a r la s
co m u n ica cio n e s p o s t e rio re s .
El a lg o rit m o d e e n crip t a ció n p u e d e s e r u n o d e lo s m á s p o p u la re s a lg o rit m o s co m o
"Rive s t S h a m ir a n d Ad le m a n " ( RS A) o "Da t a En cryp t io n S t a n d a rd " ( DES ) . Cu a n d o
m a yo r s e a e l n ú m e ro d e b it s u s a d o s p a ra cre a r la cla ve , m a yo re s d ificu lt a d e s p a ra
p o d e r ro m p e r la s cla ve s m e d ia n t e la fu e rza b ru t a .
HTTPS u s a n d o crip t o g ra fía d e cla ve p ú b lica y ce rt ifica d o s n o s p e rm it e p ro p o rcio n a r
u n a g ra n p riva cid a d a la s a p lica cio e n s q u e n e ce s it a n t ra n s a cio n e s s e g u ra s . Lo s
s e rvid o re s , n a ve g a d o re s y Ja va Plu g - In t ie n e n s u s p ro p ia s co n fig u ra cio n e s p a ra
p e rm it ir u s a r Co m u n ica cio n e s S S L. En g e n e ra l, e s t o s p a s o s re q u ie re n :
● Ob t e n e r u n a cla ve p riva d a y u n ce rt ifica d o firm a d o d ig it a lm e n t e co n la cla ve
p ú b lica co rre s p o n d e n t e .
● In s t a la r e l ce rt ifica d o e n u n a lo ca liza ció n e s p e cifica d a p o r e l s o ft wa re q u e
e s t a m o s u s a n d o ( s e rvid o r, n a ve g a d o r o Ja va Plu g - In ) .
● Act iva r la s ca ra ct e rís t ica s S S L y e s p e cifica r n u e s t ro s fich e ro s d e ce rt ifica d o y
d e cla ve p riva d a co m o s e e xp lica e n n u e s t ra d o cu m e n t a ció n .
S ie m p re q u e a ct ive m o s la s ca ra ct e rís t ica s S S L d e a cu e rd o co n lo s re q u e rim ie n t o s
d e la a p lica ció n d e p e n d ie n d o d e l n ive l d e s e g u rid a d d e n e ce s it e m o s . Po r e je m p lo
n o n e ce s it a m o s ve rifica r la a u t e n t icid a d d e lo s clie n t e s p a ra n a ve g a r p o r lo s ít e m s
d e la s u b a s t a , p e ro s í q u e rre m o s e crip t a r la in fo rm a ció n d e la t a rje t a d e cré d id o y
o t ra s in fo rm a cio n e s s u m in is t ra d a s cu a n d o lo s co m p ra d o re s y ve n d e d o re s s e
re g is t ra n p a ra p a rt icip a r.
HTTPS p u e d e s e r u s a d o p a ra cu a lq u ie r d a t o , n o s ó lo a ra p á g in a s we b HTTP. Lo s
p ro g ra m a s e s crit o s e n le n g u a je Ja va p u e d e n s e r d e s ca ra d o a a t rra vé s d e
co n e xio n e s HTTPS , y p o d e m o s a b rir u n a co n e xió n co n u n s e rvid o r HTTPS e n e l
Ja va Plu g - In . Pa ra e s crib ir u n p ro g ra m a e n Ja va q u e u s e S S L, e s t e n e ce s it a u n a
lib re ría S S L y u n co n e cim ie n t o d e t a lla d o d e l p ro ce s o d e n e g o cia ció n HTTPS .
Nu e s t ra lib re ría S S L p o d ría cu b ir lo s p a s o s n e ce s a rio s ya q u e e s t á in fo rm a ció n e s
re s t rin g id a p o r e l co n t ro l d e e xp o rt a ció n d e s e g u rid a d .

Oz it o
Tecnología JNI
La p la t a fo rm a Ja va e s re la t iva m e n t e n u e va , lo q u e s ig n ifica q ie a lg u n a s ve ce s
p o d ría m o s n e ce s it a r in t e g ra r p ro g ra m a s e s crit o s e n Ja va co n s e rvicio s , p ro g ra m a s
o APIs e xis t e n t e s e s crit o s e n le n g u a je s d is t in t o s e n Ja va . La p la t a fo rm a Ja va
p ro p o rcio n a e l In t e rfa Na t ivo Ja va ( JNI) p a ra a yu d a rn o s co n e s t e t ip o d e
in t e g ra ció n .
El JNI d e fin e u n a co n ve n ció n d e n o m b re s y lla m a d a s p a ra q u e la Má q u in a Virt u a l
Ja va 1 p u e d a lo ca liza r e in vo ca r a lo s m é t o d o s n a t ivo s . De h e ch o , JNI e s t á
co n s t ru id o d e n t ro d e la m á q u in a virt u a l Ja va , p o r lo q u e é s t a p u e d e lla m a r a
s is t e m a s lo ca le s p a ra re a liza r e n t ra d a / s a lid a , g ´ ra fico s , t ra b a jo s d e re d y
o p e ra cio n e s d e t h re a d s s o b re e l h o s t d e l s is t e m a o p e ra t ivo .
Es t e ca p ít u lo e xp lica co m o u s a r JNI e n p ro g ra m a s e s crit o s e n Ja va p a ra lla m a r a
cu a lq u ie r lib re ría d e la m á q u in a lo ca l, lla m a r a m é t o d o s d e l le n g u a je Ja va d e s d e
d e n t ro d e l có d ig o n a t ivo , y có m o cre a r y e je cu t a r u n e je m p la r d e la JVM. Pa ra
m o s t ra r có m o p o d e m o s h a ce r fu n cio n a r e l JNI, lo s e je m p lo s d e e s t e ca p ít u lo
in clu ye n in t e g ra ció n d e JNI co n e l API d e b a s e s d e d a t o s Xb a s e d e C+ + . y có m o
p o d e m o s lla m a r a u n a fu n ció n m a t e m á t ica . Xb a s e t ie n e fu e n t e s q u e p o d e m o s
d e s ca rg a r.
● Eje m p lo JNI

● S t rin g s y Arra ys
● Ot ro s Pro b le m a s d e Pro g ra m a ció n

¿Tienes Prisa?
Es t a t a b la co t ie n e e n la ce s a lo s t ó p ico s e s p e cífico s .
Tó p ic o S e c c ió n
Eje m p lo JNI ● S o b re e l Eje m p lo
● Ge n e ra r e l Fich e ro d e Ca b e ce ra
● Firm a d e l Mé t o d o
● Im p le m e n t a r e l Mé t o d o Na t ivo
● Co m p ila r la s Lib re ría s Din á m ica s o d e Ob je t o s
Co m p a rt id o s
● Eje cu t a r e l Eje m p lo
S t rin g s , Arra ys , y Fie ld s ● Pa s a r S t rin g s
● Pa s a r Arra ys
● Pin n in g Arra y
● Arra ys d e Ob je t o s
● Arra ys Mu lt i- Dim e n s io n a le s
● Acce d e r a Ca m p o s
Ot ro s Pro b le m a s d e ● Pro b le m a s d e Le n g u a je
Pro g ra m a ció n ● Mé t o d o s Lla m a n t e s
● Acce d e r a Ca m p o s
● Th re a d s y S in cro n iza ció n
● Pro b le m a s d e Me m o ria
● In vo ca ció n
● Ad ju n t a r Th re a d s

_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM"
s ig n ifica u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .

Oz it o
Ejemplos JNI
Es t a s e cció n p re s e n t a e l p ro g ra m a d e e je m p lo Re a d File . Es t e e je m p lo m u e s t ra
có m o p o d e m o s u s a r JNI p a ra in vo ca r u n m é t o d o n a t ivo q u e h a ce lla m a d a s a
fu n cio n e s C p a ra m a p e a r e n fich e ro e n la m e m o ria .
● S o b re e l Eje m p lo

❍ De cla ra ció n d e l Mé t o d o Na t ivo


❍ Ca rg a r la Lib re ría
❍ Co m p ila r e l Pro g ra m a
● Ge n e ra r e l Fich e ro d e Ca b e ce ra
● Firm a d e l Mé t o d o
● Im p le m e n t a r e l Mé t o d o Na t ivo
● Co m p ila r la Lib re ría d in á m in a o d e Ob je t o s co m p a rt id o s
● Eje cu t a r e l e je m p lo

Sobre el Ejemplo
Po d e m o s lla m a r a có d ig o e s crit o e n cu a lq u ie r le n g u a je d e p ro g ra m a ció n d e s d e u n
p o g ra m a e s crit o e n le g u a je Ja va d e cla ra n d o u n m é t o d o n a t ivo Ja va , ca rg a n d o la
lib re ría q u e co n t ie n e e l có d ig o n a t ivo , y lu e g o lla m a n d o a l m é t o d o n a t ivo . El có d ig o
fu e n t e d e Re a d File q u e h a y m á s a b a jo h a ce e xa ct a m e n t e e s t o .
S in e m b a rg o , e l e xít o e n la e je cu ció n d e l p ro g ra m a re q u ie re u n o p o co s p a s o s
a d icio n a le s m á s a llá d e la co m p ila ció n d e l fich e ro fu e n t e Ja va . De s p u é s d e
co m p ila r, p e ro a n t e s d e e je cu t a r e l e je m p lo , t e n e m o s q u e g e n e ra r u n fich e ro d e
ca b e ce ra . El có d ig o n a t ivo im p le m e n t a la s d e fin icio n e s d e fu n cio n e s co n t e n id a s e n
e l fich e ro d e ca b e ce ra g e n e ra d o y t a m b ié n im p le m e n t a la ló g ica d e n e g o cio . La s
s ig u ie n t e s s e cció n p a s a n a t ra vé s d e e s t o s p a s o s :

import [Link].*;

class ReadFile {
//Native method declaration
native byte[] loadFile(String name);
//Load the library
static {
[Link]("nativelib");
}

public static void main(String args[]) {


byte buf[];
//Create class instance
ReadFile mappedFile=new ReadFile();
//Call native method to load [Link]
buf=[Link]("[Link]");
//Print contents of [Link]
for(int i=0;i<[Link];i++) {
[Link]((char)buf[i]);
}
}
}

Declaración del método nativo

La d e cla ra ció n n a t iv e p ro p o rcio n a e l p u e n t e p a ra e je cu t a r la fu n ció n n a t iva e n u n a


JVM1 . En e s t e e je m p lo , la fu n ció n lo a d File s e m a p e a a u n fu n ció n C lla m a d a
Ja v a _ Re a d File _ lo a d File . La im p le m e n t a ció n d e la fu n ció n im p le m e n t a u n S t rin g
q u e re p re s e n t a u n n o m b re d e fich e ro y d e vu e lve e l co n t e n id o d e e s e fich e ro e n u n
a rra y d e b yt e s .

native byte[] loadFile(String name);

Cargar la Librería

La lib re ría q u e co n t ie n e la im p le m e n t a ció n d e l có d ig o n a t ivo s e ca rg a co n u n a


lla m a d a a S y s t e m . lo a d Lib ra ry ( ) . S it u a n d o e s t a lla m a d a e n u n in icia liza d o r
e s t á t ico n o s a s e g u ra m o s d e q u e la lib re ría s ó lo s e ca rg a rá u n a ve z p o r ca d a cla s e .
La lib re ría p u e d e ca rg a rs e d e s d e fu e ra d e l b lo q u e e s t á t ico s i la a p lica ció n a s í lo
re q u ie re . Po d ría m o s n e ce s it a r co n fig u ra r n u e s t ro e n t o rn o p a ra q u e e l m é t o d o
lo a d Lib ra ry p u e d a e n co n t ra r n u e s t a lib re ría d e có d ig o n a t ivo :

static {
[Link]("nativelib");
}

Compilar el Programa

Pa ra co m p ila r e l p ro g ra m , s ó lo e je cu t a m o s e l co m a n d o d e l co m p ila d o r ja v a c co m o
lo h a ría m o s n o rm a lm e n t e :

javac [Link]
Lu e g o , n e ce s it a m o s g e n e ra r u n fich e ro d e ca b e ce ra co n la d e cla ra ció n d e l m é t o d o
n a t ivo y la im p le m e n t a ció n d e l m é t o d o n a t ivo p a ra lla m a r a fu n cio n e s p a ra la ca rg a
y le ct u ra d e u n fich e ro .
Generar el Fichero de Cabecera
Pa ra g e n e ra r u n fich e ro d e ca b e ce ra , e je cu t a m o s e l co m a n d o ja v a h s o b re la cla s e
Re a d File . En e s t e e je m p lo , e l fich e ro d e ca b e ce ra g e n e ra d p s e lla m a Re a d File . h .
Pro p o rcio n a u n a firm a d e m é t o d o q u e d e b e m o s u t iliza r cu a n d o im p le m e n t e m o s la
fu n ció n n a t iva lo a d file .

javah -jni ReadFile

Firma del Método


El fich e ro d e ca b e ce ra Re a d File . h d e fin e e l in t e rfa ce p a ra m a p e a r e l m é t o d o e n
le n g u a je Ja va a la fu n ció n n a t iva C. Ut iliza u n a firm a d e m é t o d o p a ra m a p e a r lo s
a rg u m e n t o s y va lo r d e re t o rn o d e l m é t o d o m a p p e d file . lo a d File ja va a l m é t o d o
n a t ivo lo a d File d e la lib re ría n a t iv e lib . Aq u í e s t á la firm a d e l m é t o d o n a t ivo
lo a d File :

/*
* Class: ReadFile
* Method: loadFile
* Signature: (Ljava/lang/String;)[B
*/
JNIEXPORT jbyteArray JNICALL Java_ReadFile_loadFile
(JNIEnv *, jobject, jstring);
Lo s p a rá m e t ro s d e la firm a d e la fu n ció n s o n lo s s ig u ie n t e s :
● JN I En v * : Un p u n t e ro a l e n t o rn o JNI. Es t e p u n t e ro e s u n m a n e ja d o r d e l
t h re a d a ct u a l e n la m á q u in a virt u a l Ja va y co n t ie n e m a p e o s y o t ra in fo rm a ció n
ú t il.
● jo b je c t : Un a re fe re n cia a u n m é t o d o q u e lla m a a e s t e có d ig o n a t ivo . S i e l
m é t o d o lla m a n t e e s e s t á t ico , e s t a p a rá m e t ro p o d ría s e r d e l t ip o jc la s s e n
lu g a r d e jo b je c t .
● js t rin g : El p a rá m e t ro s u m in is t ra d o a l m é t o d o n a t ivo . En e s t e e je m p lo , e s e l
n o m b re d e l fich e ro a le e r.

Implementar el Método Nativo


En e s t e fich e ro fu e n t e n a t ivo C, la d e fin ició n d e lo a d File e s u n a co p ia d e la
d e cla ra ció n C co n t e n id a e n e l fich e ro Re a d File . h . La d e fin ició n e s s e g u id a p o r la
im p le m e n t a ció n d e l m é t o d o n a t ivo . JNI p ro p o rcio n a m a p e o p o r d e fe ct o t a n t o p a ra
C co m o p a ra C+ + .

JNIEXPORT jbyteArray JNICALL Java_ReadFile_loadFile


(JNIEnv * env, jobject jobj, jstring name) {
caddr_t m;
jbyteArray jb;
jboolean iscopy;
struct stat finfo;
const char *mfile = (*env)->GetStringUTFChars(
env, name, &iscopy);
int fd = open(mfile, O_RDONLY);

if (fd == -1) {
printf("Could not open %s\n", mfile);
}
lstat(mfile, &finfo);
m = mmap((caddr_t) 0, finfo.st_size,
PROT_READ, MAP_PRIVATE, fd, 0);
if (m == (caddr_t)-1) {
printf("Could not mmap %s\n", mfile);
return(0);
}
jb=(*env)->NewByteArray(env, finfo.st_size);
(*env)->SetByteArrayRegion(env, jb, 0,
finfo.st_size, (jbyte *)m);
close(fd);
(*env)->ReleaseStringUTFChars(env, name, mfile);
return (jb);
}
Po d e m o s a p ro xim a rn o s a lla m a r a u n fu n ció n C e xis t e n t e e n lu g a r d e im p le m e n t a r
u n a , d e a lg u n a d e e s t a s fo rm a s :
1 . Ma p e a r e l n o m b re g e n e ra d o p o r JNI a u n n o m b re d e fu n ció n C ya e xis t e n t e .
La s e cció n Pro b le m a s d e Le n g u a je m u e s t ra co m o m a p e a r e n t re fu n cio n e s d e
b a s e d e d a t o s Xb a s e y có d ig o Ja va .
2 . Us a r e l có d ig o S t u b co m p a rt id o d is p o n ib le d e s d e la p á g in a JNI e n la s it e d e
ja va . s u n . co m .

Compilar la Librería Dinámica o de Objetos Compartidos


La lib re ría n e ce s it a s e r co m p ila d a co m o u n a lib re ría d in á m ica o d e o b je t o s
co m p a rt id o s p a ra q u e p u e d a s e r ca rg a d a d u ra n t e la e je cu ció n . La s lib re ría s o
a rch ivo s e s t á t ico s s o n co m p ila d a s d e n t ro d e u n e je cu t a b le y n o p u e d e n s e r
ca rg a d a s e n t ie m p o d e e je cu ció n . La lib re ría d in á m ica p a ra e l e je m p lo lo a d File s e
co m p ila d e e s t a fo rm a :

Gnu C/Linux:

gcc -o [Link] -shared -Wl,-soname,[Link]


-I/export/home/jdk1.2/
include -I/export/home/jdk1.2/include/linux nativelib.c
-static -lc

Gnu C++/Linux with Xbase

g++ -o [Link] -shared -Wl,-soname,[Link]


-I/export/home/jdk1.2/include
-I/export/home/jdk1.2/include/linux
[Link] -static -lc -lxbase

Win32/WinNT/Win2000

cl -Ic:/jdk1.2/include
-Ic:/jdk1.2/include/win32
-LD nativelib.c -[Link]

Ejecutar el Ejemplo
Pa ra e je cu t a r e l e je m p lo , la m á q u in a virt u a l Ja va n e ce s it a p o d e r e n co n t ra r la
lib re ría n a t iva . Pa ra h a ce r e s t o , co n fig u ra rm o s e l p a t h d e lib re ría s a l p a t h a ct u a l d e
e s t a fo rm a :

Unix or Linux:
LD_LIBRARY_PATH=`pwd`
export LD_LIBRARY_PATH

Windows NT/2000/95:
set PATH=%path%;.
Co n e l p a t h d e lib re ría s e s p e cifica d o d e fo rm a a p ro p ia d a a n u e s t ra p la t a fo rm a ,
lla m a m o s a l p ro g ra m a co m o lo h a ría m o s n o rm a lm e n t e co n e l in t é rp re t e d e
co m a n d o s :

java ReadFile
_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM"
s ig n ifica u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .

Oz it o
Strings y Arrays
Es t a s e cció n e xp lica có m o p a s a r d a t o s s t rin g y a rra y e n t re u n p ro g ra m a e s crit o e n
Ja va y o t ro s le n g u a je s .
● Pa s a r S t rin g s

● Pa s a r Arra ys
● Pin n in g Arra y
● Arra ys d e Ob je t o s
● Arra ys Mu lt i- Dim e n s io n a le s

Pasar Strings
El o b je t o S t rin g e n e l le n g u a je Ja va , q u e e s t á re p re s e n t a d o co m o js t rin g e n JNI,
e s s t rin g u n ico d e d e 1 6 b it s . En C u n s t rin g p o r d e fe ct o e s t á co n s t ru id o co n
ca ra ct e re s d e 8 b it s . Po r e s o , p a ra a cce d e r a o b je t o s S t rin g Ja va p a s a d o s a u n
fu n ció n C ó C+ + o d e vo lve r o b je t o s u n s t rin g C ó C+ + a u n m é t o d o Ja va ,
n e ce s it a m o s u t iliza r la s fu n cio n e s d e co n ve rs ió n JNI e n n u e s t ra im p le m e n t a ció n d e l
m é t o d o n a t ivo .
La fu n ció n Ge t S t rin g UTFCh a r re cu p e ra ca ra ct e re s d e b it s d e s d e u n js t rin g d e 1 6
b it s u s a n d o e l Fo rm a t o d e Tra n s fo rm a ció n Un ico d e ( UTF) . UTF re p re s e n t a lo s
ca ra ct e re s Un ico d e co m o u n s t rin g d e 8 ó 1 6 b it s s in p e rd e r n in g u n a in fo rm a ció n .
El t e rp ce r p a rá m e t ro Ge t S t rin g UTFCh a r e s e l re s u lt a d o JN I _ TRUE s i s e h a ce u n a
co p ia o lca r d e js t rin g o JN I _ FALS E s i n o s e h a ce .

C Version:
(*env)->GetStringUTFChars(env, name, iscopy)

C++ Version:
env->GetStringUTFChars(name, iscopy)
La s ig u ie n t e fu n ció n C d e JNI co n vie rt e u n a rra y d e ca ra ct e re s C e n u n js t rin g :

(*env)->NewStringUTF(env, lastfile)
El s ig u ie n t e e je m p lo co n vie rt e e l a rra y d e ca ra ct e re s C la s t file [ 8 0 ] e n u n js t rin g ,
q u e e s d e vu e lt o a l m é t o d o Ja va q u e lo lla m ó :

static char lastfile[80];

JNIEXPORT jstring JNICALL Java_ReadFile_lastFile


(JNIEnv *env, jobject jobj) {
return((*env)->NewStringUTF(env, lastfile));
}
Pa ra p e rm it ir q u e la JVM1 co n o zca co m o h e m o s t e rm in a d o la re p re s e n t a ció n UTF,
lla m a m o s a la fu n ció n d e co n ve rs ió n Re le a s e S t rin g UTFCh a rs co m o s e m u e s t ra
a b a jo . El s e g u n d o a rg u m e n t o e s e l va lo r d e l js t rin g o rig in a l u s a d o p a ra co n s t ru ir
la re p re s e n t a ció n UTF, y e l t e rce r a rg u m e n t o e s la re fe re n cia a la re p re s e n t a ció n
lo ca l d e e s e S t rin g .

(*env)->ReleaseStringUTFChars(env, name, mfile);


S i n u e s t ro có d ig o n a t ivo p u e d e fu n cio n a r co n Un ico d e , s in n e ce s id a r d e
re p re s e n t a cio n e s UTF in t e rm e d ia s , lla m a m o s a l fu n ció n Ge t S t rin g Ch a rs p a ra
re cu p e ra r e l s t rin g Un ico d e , y lib e ra r la re fe re n cia co n u n a lla m a d a a
Re le a s e S t rin g Ch a rs :

JNIEXPORT jbyteArray JNICALL Java_ReadFile_loadFile


(JNIEnv * env, jobject jobj, jstring name) {
caddr_t m;
jbyteArray jb;
struct stat finfo;
jboolean iscopy;
const jchar *mfile = (*env)->GetStringChars(env,
name, &iscopy);
//...
(*env)->ReleaseStringChars(env, name, mfile);

Pasar Arrays
En e l e je m p lo p re s e n t a d o e n la ú lt im a s e cció n , e l m é t o d o n a t ivo lo a d File d e vu e lve
e l co n t e n id o d e u n fich e ro e n u n a rra y d e b yt e s , q u e e s u n t ip o p rim it ivo d e l
le n g u a je Ja va . Po d e m o s re cu p e ra r y cre a r t ip o s p rim it ivo s ja va lla m a n d o a la
fu n ció n Ty p e Arra y a p ro p ia d a .
Po r e je m p lo , p a ra cre a r u n n u e vo a rra y d e flo a t s , lla m a m o s a N e w Flo a t Arra y , o
p a ra cre a r u n n u e vo a rra y d e b yt e s , lla m a m o s a N e w By t e Arra y . Es t e e s q u e m a d e
n o m b re s s e e xt ie n d e p a ra la re cu p e ra ció n d e e le m e n t o s , p a ra a ñ a d ir e le m e n t o s , y
p a ra m o d ifica r e le m e n t o s d e l a rra y. Pa ra o b t e n e r u n n u e vo a rra y d e b yt e s ,
lla m a m o s a Ge t By t e Arra y Ele m e n t s . Pa ra a ñ a d ir o m o d ifica r e le m e n t o s e n e l
a rra y, lla m a m o s a S e t < t y p e > Arra y Ele m e n t s .
La fu n ció n Ge t By t e Arra y Ele m e n t s a fe ct a a t o d o e l a rra y. Pa ra t ra b a ja r co n u n
p ro ció n d e l a rra y, lla m a m o s a Ge t By t e Arra y Re g io n . S ó lo h a y u n a fu n ció n
S e t < t y p e > Arra y Re g io n p a ra m o d ifica r e le m e n t o s d e u n a rra y. S in e m b a rg o la
re g ió n p o d ría t e n e r u n t a m a ñ o 1 , lo q u e s e ría e q u iva le n t e a la n o - e xis t e n t e
S e t e < t y p e > Arra y Ele m e n t s .
Tip o d e
Fu n c io n e s u s a d a s
Có d ig o N a t iv o
jb o o le a n Ne wBo o le a n Arra y
Ge t Bo o le a n Arra yEle m e n t s
Ge t Bo o le a n Arra yRe g io n / S e t Bo o le a n Arra yRe g io n
Re le a s e Bo o le a n Arra yRe g io n
jb yt e Ne wByt e Arra y
Ge t Byt e Arra yEle m e n t s
Ge t Byt e Arra yRe g io n / S e t Byt e Arra yRe g io n
Re le a s e Byt e Arra yRe g io n
jch a r Ne wCh a rArra y
Ge t Ch a rArra yEle m e n t s
Ge t Ch a rArra yRe g io n / S e t Ch a rArra yRe g io n
Re le a s e Ch a rArra yRe g io n
jd o u b le Ne wDo u b le Arra y
Ge t Do u b le Arra yEle m e n t s
Ge t Do u b le Arra yRe g io n / S e t Do u b le Arra yRe g io n
Re le a s e Do u b le Arra yRe g io n
jflo a t Ne wFlo a t Arra y
Ge t Flo a t Arra yEle m e n t s
Ge t Flo a t Arra yRe g io n / S e t Flo a t Arra yRe g io n
Re le a s e Flo a t Arra yRe g io n
jin t Ne wIn t Arra y
Ge t In t Arra yEle m e n t s
Ge t In t Arra yRe g io n / S e t In t Arra yRe g io n
Re le a s e In t Arra yRe g io n
jlo n g Ne wLo n g Arra y
Ge t Lo n g Arra yEle m e n t s
Ge t Lo n g Arra yRe g io n / S e t Lo n g Arra yRe g io n
Re le a s e Lo n g Arra yRe g io n
jo b je ct Ne wOb je ct Arra y
Ge t Ob je ct Arra yEle m e n t / S e t Ob je ct Arra yEle m e n t
js h o rt Ne wS h o rt Arra y
Ge t S h o rt Arra yEle m e n t s
Ge t S h o rt Arra yRe g io n / S e t S h o rt Arra yRe g io n
Re le a s e S h o rt Arra yRe g io n

En e l m é t o d o n a t ivo lo a d File d e l e je m p lo d e la s e cció n a n t e rio r, s e a ct u a liza e l


a rra y e n t e ro e s p e cifica n d o u n a re g ió n q u e t ie n e e l t a m ñ o d e l fich e ro q u e e s t á
s ie n d o le íd o :
jbyteArray jb;

jb=(*env)->NewByteArray(env, finfo.st_size);
(*env)->SetByteArrayRegion(env, jb, 0,
finfo.st_size, (jbyte *)m);
close(fd);
El a rra y e s d e vu e lt o a l m é t o d o Ja va lla m a n d t e , q u e lu e g o , e n vía a l re co le ct o r d e
b a s u ra la re fe re n cia d e l a rra y cu a n d o ya n o e s u t iliza d o . El a rra y p u e d e s e r
lib e ra d o e xp lícit a m e n t e co n la s ig u ie n t e lla m a d a :

(*env)-> ReleaseByteArrayElements(env, jb,


(jbyte *)m, 0);
El ú lt im o a rg u m e n t o d e la fu n ció n Re le a s e By t e Arra y Ele m e n t s p u e d e t e n e r lo s
s ig u ie n t e s va lo re s :
● 0 : La s a ct u a liza cio n e s d e l a rra y d e s d e d e n t ro d e l có d ig o C s e rá n re fle ja d a s e n
la co p ia Ja va .
● JN I _ COMMI T: La co p ia Ja va e s a ct u a liza d a , p e ro e l jb y t e Arra y lo ca l n o e s
lib e ra d o .
● JNI_ ABORT: Lo s Ca m b io s n o s o n co p ia d o s d e vu e lt a , p e ro e l jb y t e Arra y e s
lib e ra d o . El va lo r u s a d o s u e l a rra y s e o b t ie n e co n e l m o d e g e t d e JN I _ TRUE
s ig n ifica q u e e l a rra y e s u n a co p ia .

Pinning Array
Cu a n d o re cu p e ra m o s u n a rra y, p o d e m o s e s p e cifica r s i e s u n a co p ia ( JN I _ TRUE) o
u n a re fe re cia d e l a rra y q u e re s id e e n e l p ro g ra m a Ja va ( JN I _ FALS E) . S i u s a m o s
u n a re fe re n cia a l a rra y, q u e rre m o s q u e e l a rra y p e rm a n e zca e n la p ila ja va y q u e
n o s e a e lim in a d o p o r e l re co le ct o r d e b a s u ra cu a n d o co m p a ct e la p ila d e m e m o ria .
Pa ra e vit a r q u e la s re fe re n cia s a l a rra y s e a n e lim in a d a s , la Má q u in a Virt u a l Ja va
"cla va " e l a rra y e n la m e m o ria . Cla va r e l a rra y n o s a s e g u ra q u e cu a n d o e l a rra y
s e a lib e ra d o , lo s e le m e n t o s co rre ct o s s e rá n a ct u a lzia d o s e n la JVM.
En e l m é t o d o n a t ivo lo a d file d e l e je m p lo d e la p á g in a a n t e rio r, e l a rra y n o s e
lib e ró e xp lícit a m e n t e . Un a fo rm a d e a s e g u ra rn o s d e q u e e l a rra y e s re co le ct a d o p o r
e l re co le ct o r d e b a s u ra cu a n d o ya n o lo n e ce s it a m o s , e s lla m a r a l m é t o d o Ja va ,
p a s a rle e l a rra y d e b yt e s y lu e g o lib e ra r la co p ia lo ca l d e l a rra y. Es t a t é cn ica s e
m u e s t ra e n la s e cció n Arra ys Mu lt i- Dim e n s io n a le s .

Arrays de Objetos
Po d e m o s a lm a ce n a r cu a lq u ie r o b je t o Ja va e n u n a rra y co n lla m a d a s a la s fu n cio n e s
N e w Ob je c t Arra y y S e t Ob je c t Arra y Ele m e n t . La p rin cip a l d ife re n cia e n t re u n
a rra y d e o b je t o s y u n a rra y d e t ip o s p rim it ivo s e s q u e cu a n d o s e co n s t ru ye n s e u s a
u n a cla s e jo b je c t a rra y Ja va , co m o u n p a rá m e t ro .
El s ig u ie n t e e je m p lo C+ + m u e s t ra có m o lla m a r a N e w Ob je c t Arra y p a ra cre a r u n
a rra y d e o b je t o s S t rin g . El t a m a ñ o d e l a rra y s e co n fig u ra rá a cin co . la d e fin ició n d e
la cla s e e s d e vu e lt a d e s d e u n a lla m a d a a Fin d Cla s s , y lo s e le m e n t o s d e l a rra y
s e rá n in icia liza d o s co n u n ca d e n a va cía . Lo s e le m e n t o s d e l a rra y s e a ct u a liza rá n
lla m a n d o a S e t Ob je c t Arra y Ele m e n t co n la p o s ició y e l va lo r a p o n e r e n e l a rra y.

#include <jni.h>
#include "ArrayHandler.h"

JNIEXPORT jobjectArray JNICALL


Java_ArrayHandler_returnArray
(JNIEnv *env, jobject jobj){

jobjectArray ret;
int i;

char *message[5]= {"first",


"second",
"third",
"fourth",
"fifth"};

ret= (jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));

for(i=0;i<5;i++) {
env->SetObjectArrayElement(
ret,i,env->NewStringUTF(message[i]));
}
return(ret);
}
La cla s e ja va q u e lla m a a e s t e m é t o d o n a t ivo e s la s ig u ie n t e :

public class ArrayHandler {


public native String[] returnArray();
static{
[Link]("nativelib");
}

public static void main(String args[]) {


String ar[];
ArrayHandler ah= new ArrayHandler();
ar = [Link]();
for (int i=0; i<5; i++) {
[Link]("array element"+i+
"=" + ar[i]);
}
}
}

Arrays Multi-Dimensionales
Po d ría m o s n e ce s it a r lla m a r a lib e ría s n u m é rica s y m a t e m á t ica s e xis t e n t e s co m o la
lib re ría d e á lg e b ra lin e a l CLAPACK/ LAPACK u o t ro s p ro g ra m a s d e cá lcu lo d e
m a t rice s d e s d e n u e s t ro p ro g ra m a Ja va . Mu ch a s d e e s t a s lib re ría s y p ro g ra m a s
u s a n d o a rra ys d e d o s o m á s d im e n s io n e s .
En e l le n g u a je ja va , cu a lq u ie r a rra y q u e t e n g a m á s d e u n a d im e n s ió n e s t ra t a d o
co m o u n a rra y d e a rrys . Po r e je m p lo , u n a rra y d e e n t e ro s d e d o s d im e n s io n e s e s
m a n e ja d o co m o u n a rra y d e a rra ys d e e n t e ro s . El a rra y s e le e h o rizo n t a lm e n t e , o
t a m b ié n co n o cid o co m o ó rd e n d e fila .
Ot ro s le n g u a je s co m o FORTRAN u s a n la o rd e n a ció n p o r co lu m n a s , p o r e s o e s
n e ce s a rio u n cu id a d o e xt ra s u n u e s t ro p ro g ra m a m a n e ja u n a rra y Ja va a u n a
fu n ció n FORTRAN. Ta m b ié n , lo s e le m e n t o s d e u n a rra y d e u n a a p lica ció n Ja va n o
e s t á g a ra n t iza d o q u e s e a n co n t ig u o s e n la m e m o ria . Alg u n a s lib re ría s u s a n e l
co n o cim ie n t o d e q u e lo s e le m e n t o s d e u n a rra y s e a lm a ce n a n u n o ju n t o a l o t ro e n
la m e m o ria p a ra re a liza r o p t im iza cio n e s d e ve lo cid a d , p o r e s o p o d ría m o s n e ce s it a r
h a ce r u n a co p ia lo ca l d e l a rra y p a ra p a s a rs e lo a e s t a s fu n cio n e s .
El s ig u ie n t e e je m p lo p a s a d u n a rra y d e d o s d im e n s io n e s a u n m é t o d o n a t ivo q u e
e xt ra e lo s e le m e n t o s , re a liza u n cá lcu lo , y lla m a a l m é t o d o Ja va p a ra d e vo lve r lo s
re s u lt a d o s .
El a rra y e s p a s a d o co m o u n o b je t o a rra y q u e co n t ie n e u n a rra y d e jin t s . Lo s
e le m e n t o s in d ivid u a le s s e e xt ra e n p rim e ro re cu p e ra n d o u n e je m p la r d e jin t Arra y
d e s d e e l o b je t o a rra y lla m a n d o a Ge t Ob je c t Arra y Ele m e n t , y lu e g o s e e xt ra e n lo s
e le m e n t o s d e s d e la fila jin t Arra y .
El e je m p lo u s a u n a m a t riz d e t a m a ñ o fijo . S u n o co n o ce m o s e l t a m a ñ o d e l a rra y
q u e s e e s t á u t iliza n d o , la fu n ció n Ge t Arra y Le n g t h ( a rra y ) d e vu e lve e l t a m a ñ o d e l
a rra y m á s e xt e rio r. Ne ce s it a re m o s lla m a r a la fu n ció n Ge t Arra y Le n g t h ( a rra y )
s o b re ca d a d im e n s ió n d e l a rra y p a ra d e s cu b rir s u t a m a ñ o t o t a l.
El n u e vo a rra y e n via d o d e vu e lt a a l p ro g ra m a Ja va e s t á co n s t ru id o a la in ve rs a .
Prim e ro , s e cre a u n e je m p la r d e jin t Arra y y e s t e e je m p la r s e p o n e e n e l o b je t o
a rra y lla m a n d o a S e t Ob je c t Arra y Ele m e n t .

public class ArrayManipulation {


private int arrayResults[][];
Boolean lock=new Boolean(true);
int arraySize=-1;

public native void manipulateArray(


int[][] multiplier, Boolean lock);

static{
[Link]("nativelib");
}

public void sendArrayResults(int results[][]) {


arraySize=[Link];
arrayResults=new int[[Link]][];
[Link](results,0,arrayResults,
0,arraySize);
}

public void displayArray() {


for (int i=0; i<arraySize; i++) {
for(int j=0; j <arrayResults[i].length;j++) {
[Link]("array element "+i+","+j+
"= " + arrayResults[i][j]);
}
}
}

public static void main(String args[]) {


int[][] ar = new int[3][3];
int count=3;
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
ar[i][j]=count;
}
count++;
}
ArrayManipulation am= new ArrayManipulation();
[Link](ar, [Link]);
[Link]();
}
}

#include <jni.h>
#include <iostream.h>
#include "ArrayManipulation.h"

JNIEXPORT void
JNICALL Java_ArrayManipulation_manipulateArray
(JNIEnv *env, jobject jobj, jobjectArray elements,
jobject lock){

jobjectArray ret;
int i,j;
jint arraysize;
int asize;
jclass cls;
jmethodID mid;
jfieldID fid;
long localArrayCopy[3][3];
long localMatrix[3]={4,4,4};

for(i=0; i<3; i++) {


jintArray oneDim=
(jintArray)env->GetObjectArrayElement(
elements, i);
jint *element=env->GetIntArrayElements(oneDim, 0);
for(j=0; j<3; j++) {
localArrayCopy[i][j]= element[j];
}
}

// With the C++ copy of the array,


// process the array with LAPACK, BLAS, etc.

for (i=0;i<3;i++) {
for (j=0; j<3 ; j++) {
localArrayCopy[i][j]=
localArrayCopy[i][j]*localMatrix[i];
}
}

// Create array to send back


jintArray row= (jintArray)env->NewIntArray(3);
ret=(jobjectArray)env->NewObjectArray(
3, env->GetObjectClass(row), 0);

for(i=0;i<3;i++) {
row= (jintArray)env->NewIntArray(3);
env->SetIntArrayRegion((jintArray)row,(
jsize)0,3,(jint *)localArrayCopy[i]);
env->SetObjectArrayElement(ret,i,row);
}

cls=env->GetObjectClass(jobj);
mid=env->GetMethodID(cls, "sendArrayResults",
"([[I)V");
if (mid == 0) {
cout <<"Can't find method sendArrayResults";
return;
}

env->ExceptionClear();
env->MonitorEnter(lock);
env->CallVoidMethod(jobj, mid, ret);
env->MonitorExit(lock);
if(env->ExceptionOccurred()) {
cout << "error occured copying array back" << endl;
env->ExceptionDescribe();
env->ExceptionClear();
}
fid=env->GetFieldID(cls, "arraySize", "I");
if (fid == 0) {
cout <<"Can't find field arraySize";
return;
}
asize=env->GetIntField(jobj,fid);
if(!env->ExceptionOccurred()) {
cout<< "Java array size=" << asize << endl;
} else {
env->ExceptionClear();
}
return;
}
_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM"
s ig n ifica u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .

Oz it o
Otros Problemas de Programación
Es t a s e cció n p re s e n t a in fo rm a ció n s o b re a cce s o a cla s e s , m é t o d o s y ca m p o s , y cu b re
lo s t h re a d s , la m e m o ria y la JVM1 .
● Pro b le m a s d e Le n g u a je

● Lla m a r a Mé t o d o s
● Acce d e r a Ca m p o s
● Th re a d s y S in cro n iza ció n
● Pro b le m a s d e Me m o ria
● In vo ca ció n
● Ad ju n t a r Th re a d s

Problemas de Lenguaje
Ha s t a a h o ra , lo s e je m p lo s d e m é t o d o s n a t ivo s h a n cu vie rt o lla m a d a s s o lit a ria s a
fu n cio n e s C y c+ + q u e o d e vu e lve n u n re s u lt a d o o m o d ifica n lo s p a rá m e t ro p a s a d o s a
la fu n ció n . S in e m b a rg o , C+ + a l ig u a l q u e u t iliza e je m p la re s d e cla s e s . s i cre a m o s u n a
cla s e e n u n m é t o d o n a t ivo , la re fe re n cia a e s t a cla s e n o t ie n e u n a cla s e e q u iva le n t e e n
e l le n g u a je Ja va , lo q u e h a ce d íficil lla m a r a fu n cio n e s d e la cla s e C+ + q u e s e cre ó
p rim e ro .
Un a fo rm a d e m a n e ja r e s t a s it u a ció n e s m a n t e n e r u n re g is t t ro d e la s cla s e s C+ +
re fe re n cia s y p a s a d a s d e vu e lt a a u n p ro xy o a l p ro g ra m a lla m a n t e . Pa ra a s e g u ra rn o s
d e q u e u n a cla s e C+ + p e rs is t e a t ra vé s d e lla m a d a s a m é t o d o n a t ivo s , u s a m o s e l
o p e ra d o r n e w d e C+ + p a ra cre a r u n a re fe re n cia a l o b je t o C+ + e n la p ila .
El s ig u ie n t e có d ig o p ro p o rcio n a u n m a p e o e n t re la b a s e d e d a t o s Xb a s e y có d ig o e n
le n g u a je Ja va . La b a s e d e d a t o s Xb a s e t ie n e u n API C+ + y u s a in icia liza ció n d e cla s e s
p a ra re a liza r o p e ra cio n e s s u b s e cu e n t e s e n la b a s e d e d a t o s . Cu a n d o s e cre a e l o b je t o
cla s e , s e d e vu e lve u n p u n t e ro a e s t e o b je t o co m o u n a va lo r in t a l le n g u a je Ja va .
Po d e m o s u s a r u n va lo r lo n g o m a yo r p a ra m á q u in a s m a yo re s d e 3 2 b it s .

public class CallDB {


public native int initdb();
public native short opendb(String name, int ptr);
public native short GetFieldNo(
String fieldname, int ptr);

static {
[Link]("dbmaplib");
}

public static void main(String args[]) {


String prefix=null;
CallDB db=new CallDB();
int res=[Link]();
if([Link]>=1) {
prefix=args[0];
}
[Link]([Link]("[Link]", res));
[Link]([Link]("LASTNAME", res));
[Link]([Link]("FIRSTNAME", res));
}
}
El va lo r d e l re s u lt a d o d e vu e lt o d e s d e la lla m a d a a l m é t o d o n a t ivo in it d b , s e p a s a a la s
s ig u e in t e s lla m a d a s a l m é t o d o n a t ivo . El có d ig o n a t ivo in clu id o e n la lib re ría
d b m a p lib . c c d e s - re fe re n cia e l o b je t o Ja va p a s a d o co m o p a rá m e t ro y re cu p e ra e l
o b je t o p u n t e ro . La lín e a x b D b f* My file = ( x b D b f* ) p t r; fu e rza e l va lo r d e l p u n t e ro
in it a s e r u n p u n e t ro d e l t ip o Xb a s e x b D b f.

#include <jni.h>
#include <xbase/xbase.h>
#include "CallDB.h"

JNIEXPORT jint JNICALL Java_CallDB_initdb(


JNIEnv *env, jobject jobj) {
xbXBase* x;
x= new xbXBase();
xbDbf* Myfile;
Myfile =new xbDbf(x);
return ((jint)Myfile);
}

JNIEXPORT jshort JNICALL Java_CallDB_opendb(


JNIEnv *env, jobject jobj,
jstring dbname, jint ptr) {
xbDbf* Myfile=(xbDbf*)ptr;
return((*Myfile).OpenDatabase( "[Link]"));
}

JNIEXPORT jshort JNICALL Java_CallDB_GetFieldNo


(JNIEnv *env, jobject jobj,
jstring fieldname,
jint ptr) {
xbDbf* Myfile=(xbDbf*)ptr;
return((*Myfile).GetFieldNo(
env->GetStringUTFChars(fieldname,0)));
}
Llamar a Métodos
La s e cció n s o b re lo s a rra ys ilu m in ó a lg u n a s ra zo n e s p o r la s q u e lla m a r a m é t o d o Ja va
d e s d e d e n t ro d e có d ig o n a t ivo ; p o r e je m p lo , cu a n d o n e ce s it a m o s lib e ra r e l re s u lt a d o
q u e in t e n t a m o s d e vo lve r. Ot ro s u s o s d e la s lla m a d a s a m é t o d o ja va d e s d e d e n t ro d e
có d ig o n a t ivo p o d ría s e r s i n e ce s it a m o s d e vo lve r m á s d e u n re s u lt a d o o s im p le m e n t e
q u e re m o s m o d ifica r va lo re s ja b a d e s d e d e n t ro d e l có d ig o n a t ivo .
Lla m a r a m é t o d o s Ja va d e s d e d e n t ro d e có d ig o n a t ivo im p lica e s t o s t re s p a s o s :
1 . Re cu p e ra r u n a Re fe re n cia a la Cla s e .
2 . Re cu p e ra r u n id e n t ifica d o r d e m é t o d o .
3 . LLa m a r a lo s m é t o d o s .

Recuperar una Referencia de Clase

Es p rim e r p a s o e s re cu p e ra r u n a re fe re n cia a u n a cla s e q u e co n t e n g a lo s m é t o d o s a


lo s q u e q u e re m o s a cce d e r. Pa ra re cu p e ra r u n a re fe re n cia , p o d e m o s u s a r e l m é t o d o
Fin d Cla s s o a ce d e r a lo s a rg u m e n t o s jo b je c t p jc la s s p a ra e l m é t o d o n a t ivo :

Usa el método FindClass:

JNIEXPORT void JNICALL Java_ArrayHandler_returnArray


(JNIEnv *env, jobject jobj){
jclass cls = (*env)->FindClass(env, "ClassName");
}

Usa el argumento jobject:

JNIEXPORT void JNICALL Java_ArrayHandler_returnArray


(JNIEnv *env, jobject jobj){
jclass cls=(*env)->GetObjectClass(env, jobj);
}

Usa el argumento jclass:

JNIEXPORT void JNICALL Java_ArrayHandler_returnArray


(JNIEnv *env, jclass jcls){
jclass cls=jcls;
}

Recuperar un identificador de Método

Un a ve z q u e h e m o s o b t e n id o la cla s e , e l s e g u n d o p a s o e s lla m a r a la fu n ció n


Ge t Me t h o d I D p a ra re cu p e ra r u n id e n t ifica d o r p a ra u n m é t o d o q u e s e le ccio n e m o s d e
la cla s e . El id e n t ifica d o r e s n e ce s a rio cu a n d o lla m a m o s a l m é t o d o d e e s t e e je m p la r d e
la cla s e . Co m o e l le n g u a je Ja va s o p o rt a s o b re ca rg a d e m é t o d o , t a m b ié n n e ce s it a m o s
e s p e cífica r la firm a p a rt icu la r d e l m é t o d o a l q u e q u e re m o s lla m a r. Pa ra e n co n t a r q u é
firm a u s a n u e s t ro m é t o d o Ja va , e je cu t a m o s e l co m a n d o ja v a p d e e s t a fo rm a :

javap -s Class
La firm a d e l m é t o d o u s a s a s e m u e s t ra co m o u n co m e n t a rio d e s p u é s d e ca d a
d e cla ra ció n d e m é t o d o co m o s e ve a q u í:

bash# javap -s ArrayHandler


Compiled from [Link]
public class ArrayHandler extends [Link] {
[Link] arrayResults[];
/* [Ljava/lang/String; */
static {};
/* ()V */
public ArrayHandler();
/* ()V */
public void displayArray();
/* ()V */
public static void main([Link][]);
/* ([Ljava/lang/String;)V */
public native void returnArray();
/* ()V */
public void sendArrayResults([Link][]);
/* ([Ljava/lang/String;)V */
}
Us a m o s la fu n ció n Ge t Me t h o d I D p a ra lla m a r a m é t o d o s d e e je m p la r d e u n e je m p la r
d e l o b je t o . o u s a m o s la fu n ció n Ge t S t a t ic Me t h o d I D p a ra lla m a r a u n m é t o d o
e s t á t ico . S u s lis t a s d e a rg u m e n t o s s o n ig u a le s .

Llamar a Métodos

Te rce ro , s e lla m a a l m é t o d o d e e je m p la r co rre s p n d ie n t e u s a n d o u n a fu n ció n


Ca ll< t y p e > Me t h o d . El va lo r t y p e p u e d e s e r Vo id , Ob je c t , Bo o le a n , By t e , Ch a r,
S h o rt , I n t , Lo n g , Flo a t , o D o u b le .
Lo s p a ra m é t ro s p a ra e l m é t o d o p u e d e n p a s a rs e co m o u n a lis t a s e p a ra d a p o r co m a , u n
a rra y d e va lo re s a la fu n ció n Ca ll< t y p e > Me t h o d A, o co m o u n a v a _ lis t . El v a _ lis t e s
u n a co n s t ru ccu ó n u s a d a fre cu e n t e m e n t e co m o lis t a d e a rg u m e n t o s e n C.
Ca llMe t h o d V e s la fu n ció n u s a d a p a ra p a s a r u n v a _ lis t ( ) .
Lo s m é t o d o s e s t á t ico s s o n lla m a d o s d e u n a fo rm a s im ila r e xce p t o e n q u e e l n o m b re
d e l m é t o d o in clu ye u n in d e n fica d o r S a t ic a d icio n a l, Ca llS t a t ic By t e Me t h o d A, y s e u s a
e l va lo r jc la s s e n lu g a r d e l va lo r jo b je c t .
El s ig u ie n t e e je m p lo d e vu e lve u n o b je t o a rra y lla m a n d o a l m é t o d o s e n d Arra y Re s u lt s
d e s d e la cla s e Arra y Ha n d le r.

// [Link]
public class ArrayHandler {
private String arrayResults[];
int arraySize=-1;

public native void returnArray();

static{
[Link]("nativelib");
}

public void sendArrayResults(String results[]) {


arraySize=[Link];
arrayResults=new String[arraySize];
[Link](results,0,
arrayResults,0,arraySize);
}

public void displayArray() {


for (int i=0; i<arraySize; i++) {
[Link]("array element "+i+ "= " + arrayResults[i]);
}
}

public static void main(String args[]) {


String ar[];
ArrayHandler ah= new ArrayHandler();
[Link]();
[Link]();
}
}
El có d ig o n a t ivo C+ + s e d e fin e d e e s t a fo rm a :

#include <jni.h>
#include <iostream.h>
#include "ArrayHandler.h"

JNIEXPORT void JNICALL Java_ArrayHandler_returnArray


(JNIEnv *env, jobject jobj){

jobjectArray ret;
int i;
jclass cls;
jmethodID mid;

char *message[5]= {"first",


"second",
"third",
"fourth",
"fifth"};

ret=(jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));

for(i=0;i<5;i++) {
env->SetObjectArrayElement(
ret,i,env->NewStringUTF(message[i]));
}

cls=env->GetObjectClass(jobj);
mid=env->GetMethodID(cls,
"sendArrayResults",
"([Ljava/lang/String;)V");
if (mid == 0) {
cout "<<Can't find method sendArrayResults";
return;
}

env->ExceptionClear();
env->CallVoidMethod(jobj, mid, ret);
if(env->ExceptionOccurred()) {
cout << "error occured copying array back" <<endl;
env->ExceptionDescribe();
env->ExceptionClear();
}
return;
}
Pa ra co n s t ru ir e s t o s o b re Lin u x, e je cu t a m o s lo s s ig u ie n t e s co m a n d o s :

javac [Link]
javah -jni ArrayHandler

g++ -o [Link]
-shared -Wl,-soname,[Link]
-I/export/home/jdk1.2/include
-I/export/home/jdk1.2/include/linux [Link]
-lc
S i q u e re m o s e s p e cifica r u n m é t o d o d e s u p e rcla s e , p o r e je m p lo p a ra lla m a r a l
co n s t ru ct o r d e p a d re , p o d e m o s h a ce rlo lla m a n d o a la s fu n cio n e s
Ca llN o n v irt u a l< t y p e > Me t h o d .
Un p u n t o im p o rt a n t e cu a n d o lla m a m o s a m é t o d o s Ja va o a ca m p o s d e s d e d e n t ro d e l
có d ig o n a t ivo e s q u e n e ce s it a m o s ca p t u ra r la s e xce p cio n e s la n za d a s . La fu n ció n
Ex c e p t io n Cle a r lim p ia cu a lq u ie r e xce p ció n p e n d ie n t e m ie s n t ra s q u e la fu n ció n
Ex c e p t io n Oc c u re d ch e q u e a p a ra ve r s i s e h a la n za d o a lg u n a e xce p ció n e n la s e s ió n
a ct u a l JNI.

Acceder a Campos
Acce d e r a ca m p o s Ja va d e s d e d e n t ro d e có d ig o n a t ivo e s s im ila r a lla m a r a m é t o d o s
Ja va . S in e m n a rg o , e l ca m p o e s re cu p e ra d o co n u n ID d e ca m p o e n lu g a r d e u n ID d e
m é todo.
Lo p rim e ro q u e n e ce s it a m o s e s re cu p e ra r e l ID d e u n ca m p o . Po d e m o s u s a r la fu n ció n
Ge t Fie ld I D , e s p e cifica n d o e l n o m b re d e l ca m p o y la firm a e n lu g a r d e l n o m b re y la
firm a d e l m é t o d o . Un a ve z q u e t e n e m o s e l ID d e l ca m p o , lla m a m o s a u n a fu n ció n
Ge t < t y p e > Fie ld . El < t y p e > e s e l m is m o t ip o n a t ivo q u e e s t á s ie n d o d e vu e lt o
e xce p t o q u e s e q u it a la j y la p rim e ra le t ra s e p o n e e n m a yú s cu la s . Po r e je m p lo e l
va lo r < t y p e > e s I n t p a ra e l t ip o n a t ivo jin t , y By t e p a ra e l t ip o n a t ivo jb y t e .
El re s u lt a d o d e la fu n ció n Ge t < t y p e > Fie ld e s d e vu e lt o co m o e l t ip o n a t ivo . Po r
e je m p lo , p a ra re cu p e ra r e l ca m p o a rra y S iz e d e la cla s e Arra y Ha n d le r, lla m a m o s a
Ge t I n t Fie ld co m o s e ve e n e l s ig u ie n t e e je m p lo .
El ca m p o p u e d e s e r s e le ccio n a d o lla m a n d o a la s fu n cio n e s e n v - > S e t I n t Fie ld ( jo b j,
fid , a rra y s iz e ) . Lo s ca m p o s e s t á t ico s p u e d e n s e r co n fig u ra d o s lla m a n d o a
S e t S t a t ic I n t Fie ld ( jc la s s , fid , a rra y s iz e ) y re cu p e ra d o s lla m a n d o a
Ge t S t a t ic I n t Fie ld ( jo b j, fid ) .

#include <jni.h>
#include <iostream.h>
#include "ArrayHandler.h"

JNIEXPORT void JNICALL Java_ArrayHandler_returnArray


(JNIEnv *env, jobject jobj){

jobjectArray ret;
int i;
jint arraysize;
jclass cls;
jmethodID mid;
jfieldID fid;

char *message[5]= {"first",


"second",
"third",
"fourth",
"fifth"};

ret=(jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));
for(i=0;i<5;i++) {
env->SetObjectArrayElement(
ret,i,env->NewStringUTF(message[i]));
}

cls=env->GetObjectClass(jobj);
mid=env->GetMethodID(cls,
"sendArrayResults",
"([Ljava/lang/String;)V");
if (mid == 0) {
cout <<Can't find method sendArrayResults";
return;
}

env->ExceptionClear();
env->CallVoidMethod(jobj, mid, ret);
if(env->ExceptionOccurred()) {
cout << "error occured copying
array back" << endl;
env->ExceptionDescribe();
env->ExceptionClear();
}
fid=env->GetFieldID(cls, "arraySize", "I");
if (fid == 0) {
cout <<Can't find field arraySize";
return;
}
arraysize=env->GetIntField(jobj, fid);
if(!env->ExceptionOccurred()) {
cout<< "size=" << arraysize << endl;
} else {
env->ExceptionClear();
}
return;
}

Threads y Sincronización
Au n q u e la lib re ría n a t iva s e ca rg a u n a ve z p o r ca d a cla s e , lo s t h re a d s in d ivid u a le s d e
u n a a p lica ció n e s crit a e n Ja va u s a n s u p ro p io p u n t e ro in t e rfa ce cu a n d o lla m a n a u n
m é t o d o n a t ivo . S i n e ce s it a m o s re s t rin g ir e l a cce s o a u n o b je t o Ja va d e s d e d e n t ro d e l
có d ig o n a t ivo , p o d e m o s a s e g u ra rn o s d e lo s m é t o d o s Ja va a lo s q u e lla m a m o s t ie n e n
s in cro n iza ció n e xp lícit a o p o d e m o s u s a r la s fu n cio n e s Mo n it o rEn t e r y Mo n it o rEx it .
En e l le n g u a je Ja va , e l có d ig o e s t á p ro t e g id o p o r u n m o n it o r s ie m p re q u e
e s p e cifiq u e m o s la p a la b ra cla ve s y n c h ro n iz e d . En Ja va e l m o n it o r q u e e n t ra y s a le d e
la s ru t in a s n o rm a lm e n t e e s t á o cu lt o p a ra e l d e s a rro lla d o r d e la a p lica ció n . En JNI,
n e ce s it a m o s d e lin e a r e xp lícit a m e n t e lo s p u n t o s d e la e n t ra d a y d e s a lid a d e l có d ig o d e
s e g u rid a d d e l t h re a d .
El s ig u ie n t e e je m p lo u s a u n o b je t o Bo o le a n p a ra re e s t rin g ir e l a cce s o a la fu n ció n
Ca llVo id Me t h o d .

env->ExceptionClear();
env->MonitorEnter(lock);
env->CallVoidMethod(jobj, mid, ret);
env->MonitorExit(lock);
if(env->ExceptionOccurred()) {
cout << "error occured copying array back" << endl;
env->ExceptionDescribe();
env->ExceptionClear();
}
Po d ría m o s e n co n t ra r q u e e n ca s o d o n d e q u e re m o s a ccd e r a re cu rs o s lo ca le s d e l
s is t e m a co m o u n m a n e ja d o r MFC win d o ws o u n a co la d e m e n s a je s , e s m e jo r u s a r u n
Th re a d Ja va y a cce d e r a la co la d e e ve n t o s n a t iva o a l s is t e m a d e m e n s a je s d e n t ro
d e l có d ig o n a t ivo .

Problemas de Memoria
Po r d e fe ct o , JNI u s a re fe re n cia s lo ca le s cu a n d o cre a o b je t o s d e n t ro d e u n m é t o d o
n a t ivo . Es t o s ig n ifica q u e cu a n d o e l m é t o d o re t o rn a , la s re fe re n cia s e s t á n d is p o n ib le s
p a ra e l re co le ct o r d e b a s u ra . S i q u e re m o s q u e u n o b je t o p e rs is t a a t ra vé s d e la s
lla m a d a s a u n m é t o d o n a t ivo , d e b e m o s u s a r u n a re fe re n cia g o lb a l. Un a re fe re n cia
g lo b a l s e cre a d e s d e u n a re fe re n cia lo ca l lla m a n d o a N e w Glo b a lRe fe re n c e s o b re la
re fe re n cia lo ca l.
Po d e m o s m a rca r e xp líct a m e n t e p a ra e l re co le ct o r d e b a s u ra lla m a n d o a
D e le t e Glo b a lRe f s o b re la re fe re n cia . Ta m b ié n p o d e m o s cre a r u n a re fe re n cia g lo b a l a l
e s t ilo we a k q u e s e a a cce s ib le d e s d e fu e ra d e l m é t o d o , p e ro p u e d e s e r re co le ct a d o p o r
e l re co le ct o r d e b a s u ra . Pa ra cre a r u n a d e e s t a s re fe re n cia s , lla m a m o s a
N e w W e a k Glo b a lRe f y D e le t e W e a k Glo b a lRe f p a ra m a rca r la re fe re n cia p a ra la
re co le cció n d e b a s u ra .
In clu s o p o d e m o s m a rca r e xp lícit a m e n t e u n a re fe re n cia lo ca l p a ra la re co le cció n d e
b a s u ra lla m a n d o a l m é t o d o e n v - > D e le t e Lo c a lRe f( lo c a lo b je c t ) . Es t o e s ú t il s i
e s t a m o u s a n d o u n a g ra n ca n t id a d d e d a t o s t e m p o ra le s :

static jobject stringarray=0;

JNIEXPORT void JNICALL Java_ArrayHandler_returnArray


(JNIEnv *env, jobject jobj){

jobjectArray ret;
int i;
jint arraysize;
int asize;
jclass cls, tmpcls;
jmethodID mid;
jfieldID fid;

char *message[5]= {"first",


"second",
"third",
"fourth",
"fifth"};

ret=(jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));

//Make the array available globally


stringarray=env->NewGlobalRef(ret);

//Process array
// ...

//clear local reference when finished..


env->DeleteLocalRef(ret);
}

Invocaciones
La s e cció n s o b re lla m a d a s a m é t o d o s n o s m o s t ra b a co m o lla m a r a u n m é t o d o o ca m p o
Ja va u s a n d o e l in t e rfa ce JNI y u n a cla s e ca rg a d a u s a n d o la fu n ció n Fin d Cla s s . Co n u n
p o co m á s d e có d ig o , p o d e m o s cre a r u n p ro g ra m a q u e in vo q u e a la m á q u in a virt u a l
Ja va e in clu ya s u p ro p io p u n t e ro a l in t e rfa ce JNI q u e p u e d e s e r u s a d o p a ra cre a r
e je m p la re s d e cla s e s Ja va . En Ja va 2 , e l p ro g ra m a d e e je cu ció n lla m a n d o ja v a e s u n a
p e q u e ñ a a p lica ció n JNI q u e h a ce e xa ct a m e n t e e s t o .
Po d e m o s cre a r u n a m á q u in a virt u a l Ja va co n u n a lla m a d a a JN I _ Cre a t e Ja v a VM, y
d e s co n e ct a r la m á q u in a virt u a l Ja va cre a d a co n u n a lla m a d a a JN I _ D e s t ro y Ja v a VM.
Un a JVM t a m b ié n p o d ría n e ce s it a r a lg u n a s p ro p ie d a d e s a d icio n a le s d e e n t o rn o . Es t a s
p ro p ie d a d e s p o d ría n p a s a rs e a la fu n ció n JN I _ Cre a t e Ja v a VM e n u n e s t ru ct u ra
Ja v a VMI n it Arg s .
La e s t ru ct u ra Ja v a VMI n it Arg s co n t ie n e u n p u n t e ro a u n va lo r Ja v a VMOp t io n u s a d o
p a ra a lm a ce n a r in fo rm a ció n d e l e n t o rn o co m o e l cla s s p a t h y la ve rs ió n d e la m á q u in a
virt u a l Ja va , o p ro p ie d a d e s d e l s is t e m a q u e p o d ría n p a s a rs e n o rm a lm e n t e e n la lín e a
d e co m a n d o s d e l p ro g ra m a .
Cu a n d o re t o rn a la fu n ció n JN I _ Cre a t e Ja v a VM, p o d e m o s lla m a r a m é t o d o y cre a r
e je m p la re s d e cla s e s u s a n d o la s fu n cio n e s Fin d Cla s s y N e w Ob je c t d e la m is m a
fo rm a q u e lo h a ría m o s co n có d ig o n a t ivo e m b e b id o .
N o t a : La in vo ca ció n d e la m á q u in a virt u a l Ja va s ó lo s e u s a p a ra t h re a d s
n a t ivo s e n m á q u in a s virt u a le s Ja va . Alg u n a s a n t ig u a s m á q u in a s virt u a le s
Ja va t ie n e n u n a o p ció n d e t h re a d s ve rd e s q u e e s e s t a b le p a ra e l u s o d e
in vo ca cio n e s , S o b re u n a p la t a fo rm a Un ix, p o d ría m o s n e ce s it a r e n la za r
e xp lícit a m e n t e co n - lt h re a d o - lp t h re a d .

El s ig u ie n t e p ro g ra m a in vo ca u n a m á q u in a virt u a l Ja va , ca rg a la cla s e Arra y Ha n d le r


y re cu p e ra e l ca m p o a rra y S iz e q u e d e b e ría t e n e r e l va lo r m e n o s u n o . La s o p cio n e s d e
la m á q u in a virt u a l Ja va in clu ye n e l p a t h a ct u a l e n e l cla s s p a t h y d e s a ct iva r d e l
co m p ila d o r Ju s t - In _ Tim e ( JIT) - D ja v a . c o m p ile r= N ON E.

#include <jni.h>

void main(int argc, char *argv[], char **envp) {


JavaVMOption options[2];
JavaVMInitArgs vm_args;
JavaVM *jvm;
JNIEnv *env;
long result;
jmethodID mid;
jfieldID fid;
jobject jobj;
jclass cls;
int i, asize;

options[0].optionString = ".";
options[1].optionString = "-[Link]=NONE";

vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 2;
vm_args.ignoreUnrecognized = JNI_FALSE;

result = JNI_CreateJavaVM(
&jvm,(void **)&env, &vm_args);
if(result == JNI_ERR ) {
printf("Error invoking the JVM");
exit (-1);
}

cls = (*env)->FindClass(env,"ArrayHandler");
if( cls == NULL ) {
printf("can't find class ArrayHandler\n");
exit (-1);
}
(*env)->ExceptionClear(env);
mid=(*env)->GetMethodID(env, cls, "<init>", "()V");
jobj=(*env)->NewObject(env, cls, mid);
fid=(*env)->GetFieldID(env, cls, "arraySize", "I");
asize=(*env)->GetIntField(env, jobj, fid);

printf("size of array is %d",asize);


(*jvm)->DestroyJavaVM(jvm);
}

Adjuntar Threads
De s p u é s d e in vo ca r la m á q u in a virt u a l Ja va , h a y u n t h re a d lo ca l e je cu t á n d o s e e n e lla .
Po d e m o s cre a r m á s t h re a d s e n e l s is t e m a o p e ra t ivo lo ca l y a d ju n t a r t h re a d s e n la
m á q u in a virt u a l Ja va p a ra e s t o s n u e vo s t h re a d s . Po d ria m o s q u e re r h a ce r e s t o s u
n u e s t ra a p lica ció n n a t iva e s m u lt i- t h re a d s .
Ad ju n t a m o s e l t h re a d lo ca l a la m á q u in a virt u a l Ja va co n u n a lla m a d a a
At t a c h Cu rre n t Th re a d . Ne ce s it a m o s s u m in is t ra r p u n t e ro s a l e je m p la r d e la m á q u in a
virt u a l Ja va y a l e n t o rn o JNI. En la p la t a fo rm a Ja va 2 , p o d e m o s e s p e cífica r e n e l t e rce r
p a rá m e t ro e l n o m b re d e l t h re a d y/ o e l g ru p o b a jo e l q u e q u e re m o s q u e viva n u e s t ro
t h re a d . Es im p o rt a n t e e lim in a r cu a lq u ie r t h re a d q u e h a ya s id o p ré via m e n t e a d ju n t a d o ;
d e o t ra fo rm a , e l p ro g ra m a n o s a ld rá cu a n d o lla m e m o s a D e s t ro y Ja v a VM.

#include <jni.h>
#include <pthread.h>

JavaVM *jvm;

void *native_thread(void *arg) {


JNIEnv *env;
jclass cls;
jmethodID mid;
jfieldID fid;
jint result;
jobject jobj;
JavaVMAttachArgs args;
jint asize;

[Link]= JNI_VERSION_1_2;
[Link]="user";
[Link]=NULL;
result=(*jvm)->AttachCurrentThread(
jvm, (void **)&env, &args);

cls = (*env)->FindClass(env,"ArrayHandler");
if( cls == NULL ) {
printf("can't find class ArrayHandler\n");
exit (-1);
}
(*env)->ExceptionClear(env);
mid=(*env)->GetMethodID(env, cls, "<init>", "()V");
jobj=(*env)->NewObject(env, cls, mid);
fid=(*env)->GetFieldID(env, cls, "arraySize", "I");
asize=(*env)->GetIntField(env, jobj, fid);
printf("size of array is %d\n",asize);
(*jvm)->DetachCurrentThread(jvm);
}

void main(int argc, char *argv[], char **envp) {


JavaVMOption *options;
JavaVMInitArgs vm_args;
JNIEnv *env;
jint result;
pthread_t tid;
int thr_id;
int i;

options = (void *)malloc(3 * sizeof(JavaVMOption));

options[0].optionString = "-[Link]=.";
options[1].optionString = "-[Link]=NONE";

vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 2;
vm_args.ignoreUnrecognized = JNI_FALSE;

result = JNI_CreateJavaVM(&jvm,(void **)&env, &vm_args);


if(result == JNI_ERR ) {
printf("Error invoking the JVM");
exit (-1);
}

thr_id=pthread_create(&tid, NULL, native_thread, NULL);

// If you don't have join, sleep instead


//sleep(1000);
pthread_join(tid, NULL);
(*jvm)->DestroyJavaVM(jvm);
exit(0);
}
_______
1 Cu a n d o s e u s a n e n t o d a e s t a s it e , lo s t é rm in o s , "Ja va virt u a l m a ch in e " o "JVM"
s ig n ifica u n a m á q u in a virt u a l d e la p la t a fo rm a Ja va .

Oz it o
Proyecto Swing: Construir un Interface
de Usuario
La s a rq u it e ct u ra s Ja va Fo u n d a t io n Cla s s e s ( JFC) y Ja va Be a n s En t e rp ris e co m p a rt e n
u n e le m e n t o d e d is e ñ o cla ve : la s e p a ra ció n d e lo s d a t o s d e s u a s p e ct o e n p a n t a lla
o la m a n ip u la ció n d e lo s d a t o s . En la s a p lica cio n e s Ja va Be a n s En t e rp ris e , e l b e a n d e
e n t id a d p ro p o rcio n a u n a vis t a d e lo s d a t o s . El m e ca n is m o d e lo s d a t o s o cu lt o
p u e d e s e r s o la p a d o y m o d ifica d o s in m o d ifica r la vis t a d e l b e a n d e e n t id a d o
re co m p ila r cu a lq u ie r có d ig o q u e u s e la vis t a .
El p ro ye ct o S win g s e p a ra la vis t a y co n t ro l d e u n co m p o n e n t e vis u a l d e s u s
co n t e n id o s , o m e d e lo d e d a t o s . S in e m b a rg o , a q u n q u e e l Pro ye ct o S win g t ie n e lo s
co m p o n e n t e s q u e cre a n la a rq u it e ct u ra Mo d e lo - Vis t a - Co n t ro la d o r ( MVC) , e s m á s
s e g u ro d e s crib irlo co m o u n a a rq u it e ct u ra d e m o d e lo - d e le g a d o . Es t e o e s o p o r la
p a rt e co n t ro la d o r d e u n in t e rfa ce S win g , fre cu e n t e m e n t e u s a e l e ve n t o s d e l ra t ó n y
d e t e cla d o p a ra re s p o n d e r a l co m p o n e n t e , e s co m b in a d a co n la vis t a fís ica e n u n
o b je t o "Us e r In t e rfa ce d e le g a t e " ( UI d e le g a t e ) .
Ca d a co m p o n e n t e , p o r e je m p lo u n JBu t t o n o u n JS c ro llBa r, t ie n e u n a cla s e UI
d e le g a t e s e p a ra d a q u e d e s cie n d e d e s d e la cla s e Co m p o n e n t UI y e s t á b a jo e l
co n t ro l d e u n co n t ro la d o r UI s e p a ra d o . Mie n t ra s q u e ca d a co m p o n e n t e t ie n e u n UI
d e lg a t e b á s ico , n o e s t á m á s u n id o co n lo s d a t o s o cu lt o s p o r lo q u e s e p u e d e n
in t e rca m b ia r m ie n t ra s q u e la a p lica ció n t o d a vía s e e s t á e je cu t a n d o . La p o s ib ilid a d
d e ca m b ia r e l a s p e ct o y co m p o rt a m ie n t o re fle ja la ca ra ct e rís t ica d e l a s p e ct o y
co m p o rt a m ie n t o co n e ct a b le ( PLAF) d is p o n ib le e n S win g .
Es t e ca p ít u lo d e s crib e co m p o n e n t e s d e u s u a rio S win g e n t é rm in o s d e la a p lica ció n
Au c t io n Clie n t .
● Co m p o n e n t e s y Mo d e lo d e Da t o s

● El API d e Im p re s ió n
● Im p re s ió n Ava n za d a

¿Tienes Prisa?
Es t a t a b la co n t ie n e e n la ce s d ire ct o s a lo s t ó p ico s e s p e cífico s .
Tó p ic o s S e c c ió n
Co m p o n e n t e s y Mo d e lo s d e Da t o s ● Co m p o n e n t e s d e Pe s o Lig e ro
● Ord e n a ció n d e Co m p o n e n t e s
● Mo d e lo s d e Da t o s
● Dib u ja d o Pe rs o n a liza d o d e Ce ld a s
● Ed ició n d e Ce ld a s Pe rs o n a liza d a s
● Ma n e jo d e Eve n t o s Es p e cia liza d o
● Dire ccio n e s d e l Pro ye ct o S win g

Oz it o
Componentes y Modelos de Datos
El p ro g ra m a Au ct io n Clie n t e s u n a s e n cilla a p lica cio n GUI q u e p e rm it e a lo s a d m in is t ra d o re s d e la ca s a d e s u b a s t a s lis t a r y n a ve g a r p o r lo s ít e m s d e la s u b a s t a , e im p rim e in fo rm e s s o b re
e s t o s ít e m s . Es t a s e cció n d e s crib e e l có d ig o S win g d e la a p lica ció n q u e u t iliza co m p o n e n t e s d e p e s o lig e ro y o t ra s ca ra ct e rís t ica s S win g :

● Co m p o n e n t e s d e Pe s o Lig e ro
● Ord e n a r Co m p o n e n t e s
● Mo d e lo s d e Da t o s
● Dib u jo d e Ce ld a s Pe rs o n a liza d a s
● Ed ició n e n Ce ld a s Pe rs o n a liza d a s
● Ma n e jo d e Eve n t o s Pe rs o n a liza d o s
● Dire ccio n e s S win g

Componentes de Peso Ligero


To d o s lo s co m p o n e n t e s S win g , e xce p t o JAp p le t , JD ia lo g , JFra m e y JW in d o w s o n co m p o n e n t e s d e p e s o lig e ro . Lo s co m p o n e n t e s d e p e s o lig e ro , a l co n t ra rio q u e s u s co n t ra p a rt e d e l
AWT, n o d e p e n d e n d e l t o o lkit lo ca l d e l s is t e m a .
Po r e je m p lo , u n co m p o n e n t e p e s a d o ja v a . a w t . Bu t t o n e je cu t á n d o s e s o b re la p la t a fo rm a Ja va p a ra Un ix m a p e a e l b o t ó n Mo t if re a l. En e s t a re la ció n e s b o t ó n Mo t if e s lla m a d o "p a r" d e l
ja v a . a w t . Bu t t o n . S i h e m o s cre a d o d o s ja v a . a w t . Bu t t o n e n u n a a p lica ció n , t a m b ié n s e cre a rá n d o s "p a re s " y d o s b o t o n e s Mo t if. La p la t a fo rm a Ja va co m u n ica c co n lo s b o t o n e s Mo t if
u s a n d o e l JNI. Pa ra ca d a co m p o n e n t e a ñ a d id o a la a p lica ció n , h a y u n a p ila a d icio n a l u n id a a l s is t e m a d e ve n t a n a s lo ca l, q u e e s p o r lo q u e e s t o s co m p o n e n t e s s e lla m a n d e p e s o p e s a d o .
Lo s co m p o n e n t e s d e p e s o lig e ro n o t ie n e "p a re s " y e m u la n a lo s co m p o n e n t e s d e l s is t e m a lo ca l d e ve n t a n a s . Un b o t ó n d e p e s o lig e ro e s t á re p re s e n t a d o p o r u n re ct á n g u lo co n u n a e t iq u e t a
d e n t ro q u e a ce p t a e ve n t o s d e l ra t ó n . Añ a d ir m á s b o t o n e s s ig n ifica d ib u ja r m á s re ct á n g u lo s .
Un co m p o n e n t e d e p e s o lig e ro n e ce s it a d ib u ja rs e o b re a lg o , y u n a a p lica ció n e s crit a e n Ja va n e ce s it a in t e ra ct u a r co n e l co n t ro la d o r d e ve n t a n a s lo ca l p a ra q u e la ve n t a n a p rin cip a l d e la
a p lica ció n p u e d a s e r ce rra d a o m in im iza d a . Es t o e s p o rq u e lo s co m p o n e n t e s p a d re s d e n ive l s u p e rio r m e n cio n a d o s a rrib a ( JFra m e , JAp p le t , y o t ro s ) e s t á n im p le m e n t a d o co m o
co m p o n e n t e s d e p e s o p e s a d o - - n e ce s it a n s e r m a p e a d o s s o b re u n co m p o n e n t e e n e l s is t e m a lo ca l d e ve n t a n a s .
Un JBu t t o n e s u n a fo rm a m u y s e n cilla d e d ib u ja r. Pa ra co m p o n e n t e s m á s co m p le jo s , co m o JLis t o JTa b le , lo s e le m e n t o s o ce ld a s d e la lis t a o la t a b la s o n d ib u ja d a s p o r u n o b je t o
Ce llRe n d e re r. Un o b je t o Ce llRe n d e re r p ro p o rcio n a fle xib ilid a d p o rq u e h a ce p o s ib le q u e cu a lq u ie r t ip o d e o b je t o p u e d a s e r m o s t ra d o e n cu a lq u ie r fila o co lu m n a .
Po r e je m p lo , u n JTa b le p u e d e u s a r u n Ce llRe n d e re r d ife re n t e p a ra ca d a co lu m n a . Es t e s e g m e n t o d e có d ig o s e ls ccio n a la s e g u n d a co lu m n a , q u e e s t á re fe re n cia d a co m o ín d ice 1 , p a ra
u s a r u n o b je t o Cu s t o m Re n d e re r p a ra cre a r la s ce ld a s d e e s a co lu m n a .

JTable scrollTable=new JTable(rm);


TableColumnModel scrollColumnModel =
[Link]();
CustomRenderer custom = new CustomRenderer();
[Link](1).setCellRenderer(custom);

Ordenar Componente
Ca d a a p lica ció n o a p p le t S win g n e ce s it a a l m e n o s u n co m p o n e n t e co n t e n e d o r d e p e s o p e s a d o ( u n JFra m e , JW in d o w , JAp p le t , o JD ia lo g ) . Ca d a u n o d e e s t o s co m p o n e n t e s co n la
co n t ra p a rt e d e JFra m e : JI n t e rn a lFra m e , co n t ie n e u n co m p o n e n t e lla m a d o Ro o t P a n e . El JRo o t P a n e co n t ro la la a d ició n d e ca p a s a d icio n a le s u s a d a s e n d ich o co n t e n e d o r co m o
JLa y e re d P a n e , JCo n t e n t P a n e , Gla s s P a n e y la o p cio n a lJMe n u Ba r. Ta m b ié n le s p e rm it e a t o d o s lo s co m p o n e n t e s e m u la d o s ( d e p e s o lig e ro ) in t e ra ct u a r co n la co la d e e ve n t o s AWT p a ra
e n via r y re cib ir e ve n t o s . Al in t e ra ct u a r co n la co la d e e ve n t o s , t o d o s lo s co m p o n e n t e s e m u la d o s o b t e in e n u n a in t e ra cció n in d ire ct a co n e l co n t ro la d o r d e ve n t a n a s lo ca l.

JLayeredPane
El JLa y e re d P a n e s e s it ú a s o b re e l JRo o t P a n e , y co m o s u n o m b re in d ica , co n t ro la la s ca p a s d e l co m p o n e n t e co n t e n id a s d e n t ro d e lo s lím it e s d e l co n t e n e d o r d e p e s o p e s a d o . Lo s
co m p o n e n t e s n o s o n a ñ a d id o s a l JLa y e re d P a n e , s in o a l JCo n t e n t P a n e . El JLa y e re d P a n e d e t e rm in a e l o rd e n Z d e lo s co m p o n e n t e s d e l JRo o t P a n e . S e p u e d e p e n s a r e n e l o rd e n Z
co m o e l o rd e n d e s o la p a m ie n t o d e va rio s co m p o n e n t e s . S i a rra s t ra m o s y s o lt a m o s u n co m p o n e n t e o s o licit a m o s u n d iá lo g o d e s p le g a b le , q u e re m o s q u e e l co m p o n e n t e a p a re zca e n cim a d e
t o d a s la s o t ra s ve n t a n a d e la a p lica ció n . El JLa y e re d P a n e n o s p e rm it e p o n e r lo s co m p o n e n t e s e n ca p a s .
El JLa y e re d P a n e d ivid e la p ro fu n d id a d d e l co n t e n e d o r e n d ife re n t e s b a n d a s q u e p u e d e n u s a rs r p a ra a s ig n a rle a u n co m p o n e n t e u n t ip o d e n ive l a p ro p ia d o . La b a n d a D RAG_ LAYER ,
va lo r 4 0 0 , a p a re ce s o b re t o d a s la s d e m á s ca p a s . El n ive l m á s in g e rio r d e JLa y e re d p a n e , la b a n d a D EFAULT_ FRAME_ LAYER, t ie n e va lo r - 3 0 0 0 y y e s e l n ive l d e lo s co n t e n e d o re s d e
p e s o p e s a d o , in clu ye n d o e l Me n u Ba r. La s b a n d a s s o n la s s ig u ie n t e s :
Va lo r N o m b re d e Ba n d a Tip o s d e Co m p o n e n t e s
-3000 D EFAULT_ FRAME_ LAYER JMe n u b a r
0 D EFAULT_ LAYER JBu t t o n , JTa b le , . .
Co m p o n e n t e s flo t a n t e s
P ALETTE_ LAYER
co m o u n JTo o lBa r
MOD AL_ LAYER Diá lo g o s Mo d a le s
FONT FACE="Verdana, Arial, Helvetica, sans-serif">Arrastrar y Soltar
400 D RAG_ LAYER
sobre todas las capas

De n
d e e s t a s b a n d a s d e p ro fu n d id a d g e n e ra le s , lo s co m p o n e n t e s p e u d e n e s t á r o rg a n iza d o s co n u n s is t e m a d e o rd e n a ció n p a ra o rd e n a r lo s co m p o n e n t e s d e n t ro d e u n a b a n d a p a rt icu la r, p e ro
e s t e s is t e m a in vie rt e la p rio rid a d d e lo s n ú m e ro s . Po r e je m p lo , e n u n a b a n d a e s p e cifica d a co m o D EFAULT_ LAYER, lo s co m p o n e n t e s co n u n va lo r, a p a re ce n d e la n t e d e lo s o t ro s
co m p o n e n t e s d e la b a n d a ; m ie n t ra s , co m p o n e n t e s co n u n n ú m e ro m a yo r o - 1 a p a re ce n p o r d e t rá s d e é l. El n ú m e ro m á s a lt o e n e s e s q u e d e n u m e ra ció n e s . 1 , p o r e s o u n a fo rm a d e
vis u a liza rlo e s u n ve ct o r d e co m p o n e n t e s q u e p a s a a t ra vé s d e d ib u ja r p rim e ro lo s co m p o n e n t e s co n u n n ú m e ro m a yo r t e rm in a n d o co n e l co m p o n e n t e e n la p o s ició n 0 .
Po r e je m p lo , e l s ig u ie n t e có d ig o a ñ a d e u n JBu t t o n a la ca p a p o r d e fe ct o y e s p e cifica q u e a p a re zca e n cim a d e lo s o t ro s co m p o n e n t e s d e e s a m is m a ca p a :

JButton enterButton = new JButton("Enter");


[Link](enterButton,
JLayeredPane.Default_Layer, 0);
Po d e m o s co n s e g u ir e l m is m o e fe ct o lla m a n d o a l m é t o d o La y e re d P a n e . m o v e To Fo n t d e n t ro d e u n a ca p a o u s a n d o e l m é t o d o La y e re d P a n e . s e t La y e r m é t o d o p a ra m o ve rlo a u n a ca p a
d ife re n t e .

JContentPane

El JCo n t e n t P a n e co n t ro la la a d ició n d e co m p o n e n t e s a lo s co n t e n e d o re s d e p e s o p e s a d o . Po r e s o , t e n e m o s q u e lla m a r a l m é t o d o g e t Co n t e n t P a n e p a ra a ñ a d ir u n co m p o n e n t e a l


Co n t e n t P a n e d e l Ro o t P a n e . Po r d e fe ct o , u n Co n t e n t P a n e s e in icia liza co n u n co n t ro la d o r d e d is t rib u ció n Bo rd e rLa y o u t . Ha y d o s fo rm a s d e ca m b ia r e l co n t ro la d o r d e d is t rib u ció n .
Po d e m o s lla m a r a l m é t o d o s e t La y o u t d e e s t a fo rm a :

getContentPane()).setLayout(new BoxLayout())
O p o d e m o s re e m p la za r e l Co n t e n t P a n e p o r d e fe ct o co n n u e s t ro p ro p io Co n t e n t P a n e , co m o u n JP a n e l, co m o e s t e :

JPanel pane= new JPanel();


[Link](new BoxLayout());
setContentPane(pane);

GlassPane

El Gla s s P a n e n o rm a lm e n t e e s co m p le t a m e n t e t ra n s p a re n t e y s o lo a ct ú a co m o u n a h o ja d e cris t a l d e la n t e d e lo s co m p o n e n t e s . Po d e m o s im p le m e n t a r n u e s t ro p ro p io Gla s s P a n e u s a n d o


u n co m p o n e n t e co m o JP a n e l e in s t a lá n d o lo co m o e l Gla s s P a n e lla m a n d o a l m é t o d o s e t Gla s s P a n e . El Ro o t P a n e s e co n fig u ra co n u n Gla s s P a n e q u e p u e d e s e r re cu p e ra d o lla m a n d o a
g e t Gla s s P a n e .
Un a fo rm a d e u s a r u n Gla s s P a n e e s p a ra im p le m e n t a r u n co m p o n e n t e q u e d e fo rm a in vis b le m a n e je t o d o s lo s e ve n t o s d e t e cla d o y d e ra t ó n , b lo q u e a n d o e fe ct iva m e n t e la e n t ra d a d e l
u s u a rio h a s t a q u e s e co m p le t e u n e ve n t o . El Gla s s P a n e p u e d e b lo q u e a r lo s e ve n t o s , p e ro re a lm e n t e e l cu rs o r n o vo lve rá a s u e s t a d o p o r d e fe ct o s i t e n e rm o s s e le ccio n a r e l cu rs o r p a ra
q u e s e a u n cu rs o r o cu p a d o e n e l Gla s s P a n e . S e re q u ie re u n e ve n t o d e ra t ó n a d icio n a l p a ra e l re fre s co :

MyGlassPane glassPane = new MyGlassPane();


setGlassPane(glassPane);
[Link](true); //before worker thread
..
[Link](false); //after worker thread

private class MyGlassPane extends JPanel {

public MyGlassPane() {
addKeyListener(new KeyAdapter() { });
addMouseListener(new MouseAdapter() { });
[Link](
[Link](Cursor.WAIT_CURSOR));
}
}

Modelos de Datos
S e h a n co m b in a d o n u m e ro s o s m o d e lo s d e ca p a s p a ra fo rm a r la s t a b la s d e l GUI Au c t io n Clie n t . A u n n ive l fu n d a cio n a l, e l in t e rfa ce Ta b le Mo d e l y s u s d o s im p le m e n t a cio n e s
Ab s t ra c t Ta b le Mo d e l y D e fa u lt Ta b le Mo d e l p ro p o cio n a n la s o p cio n e s m á s b á s ica s p a ra a lm a ce n a r, re cu p e a r y m o d ifica r lo s d a t o s b á s ico s .
El Ta b le Mo d e l e s re s p o n s a b le d e d e fin ir y ca t e g o riza r lo s d a t o s p o r s u s cla s e s . Ta m b ié n d e t e rm in a s i e l d a t o p u e d e s e r e d it a d o y có m o s e a g ru p a n lo s d a t o s e n co lu m n a s y fila s . S in
e m b a rg o , e s im p o rt a n t e o b s e rva r q u e m ie n t ra s e l in t e rfa ce Ta b le Mo d e l s e u s a m á s fre cu e n t e m e n t e e n la co n s t ru cció n d e u n JTa b le , n o e s t á u n id o fu n d a m e n t a lm e n t e a s u a p a rie n cia e n
p a n t a lla . La s im p le m e n t a cio n e s p o d ría fá cilm e n t e fo rm a r la p a rt e b á s ica d e la h o ja d e cá lcu lo , o in clu is o u n a cla s e n o - GUI q u e p id a la o rg a n iza ció n d e lo s d a t o s d e u n a fo rm a t a b u la r.
La cla s e Re s u lt s Mo d e l e s e l co ra zó n d e la s t a b la s Au c t io n Clie n t . De fin e u n a h o ja d e d a t o s d im á m ica , d ict a q u é u s u a rio s d e la cla s e p u e d e n e d it a r lo s d a t o s a t ra vé s d e l m é t o d o
Re s u lt s Mo d e l. is Ce llEd it a b le , y p ro p o rcio n a e l m é t o d o u p d a t e p a ra m a n t e n e r lo s d a t o s a ct u a liza d o s . El m o d e lo e s la b a s e d e la t a b la s fija s y e s cro lla b le s , y d e ja q u e la s m o d ifica cio n e s
s e re fle je n e n ca d a vis t a .
A u n a lt o n ive l, y re p re s e n t a d o u n ca ca p a in t e rm e d ia e n t re lo s d a t o s y s u re p re s e n t a ció n g rá fica e s t a e l Ta b le Co lu m n Mo d e l. En e s t e n ive l lo s d a t o s s o n a g ru p a d o s p o r co lu m n a s e n
a n t icip a ció n d e s u a p a rició n g rá fica e n la t a b la . La vis ib ilid a d y t a m a ñ o d e la s co lu m n a s , s u s ca b e ce ra s , y lo s t ip o s d e co m p o n e n t e s d e s u s re n d e riza d o re s d e ce ld a s y e d it o re s s o n t o d o s
m a n e ja d o s p o r la cla s e Ta b le Co lu m n Mo d e l.
Po r e je m p lo , co n g e la r la co lu m n a m á s a la izq u ie rd a d e l GUI Au c t io n Clie n t e s p o s ib le p o rq u e lo s d a t o s d e la co lu m n a s in fá cilm e n t e in t e rca m b ia b le s e n t re m ú lt ip le s o b je t o s
Ta b le Co lu m n Mo d e l y JTa b le . Es t o t ra d u ce lo s o b je t o s fix e d Ta b le y s c ro llTa b le d e l p ro g ra m a Au c t io n Clie n t .
Má s a lt o t a d a vía s e u n e n lo s d is t in t o s re d e riza d o re s , e d it o re s y co m p o n e n t e s d e ca b e ce ra cu ya co m b in a ció n d e fin e e l a s p e ct o y o rg a n iza ció n d e l co m p o n e n t e JTa b le . Es t e n ive l e s o n d e s e
t o m a s la s d e cis io n e s fu n d a m e n t a le s s o b re la d is t rib u ció n d e l JTa b le .
La cre a cció n d e la s cla s e s in t e rn a s Cu s t o m Re n d e re r y Cu s t o m Bu t t o n Re n d e re r d e n t ro d e la a p lica ció n Au c t io n Clie n t p e rm it e a lo s u s u a rio s d e e s a s cla s e s re d e fin ir lo s co m p o n e n t e s
s o b re lo s q u e s e b a s a la a p a rie n cia d e la s ce ld a s d e la t a b la . De ig u a l fo rm a , la cla s e Cu s t o m Bu t t o n Ed it o r t o m a e l lu g a r d e l e d it o r p o r d e fe ct o d e la t a b la . De u n a fo rm a ve rd a d e ra m e n t e
o rie n t a d a a o je t o s , lo s e d it o re s p o r d e fe ct o y re n d e riza d o re s s o n fá cilm e n t e re e m p la za d o s s i a fe ct a r a lo s d a t o s q u e e llo s re p re s e n t a n n i la fu n ció n d e l co m p o n e n t e e n e l q u e re s id e n .
Fin a lm e n t e , lo s d is t in t o s in t e rfa ce s d e lo s co m p o n e n t e d e u s u a rio s o n re s p o n s a vle s d e la a p a rie n cia ú lt im a d e la JTa b le . Es t a e s la re p re s e n t a ció n e s p e cífica d e l a s p e ct o y co m p o rt a m ie n t o
d e la s t a b la s Au c t io n Clie n t y s u s d a t o s d e u n a fo rm a fin a l. El re s u lt a d o fin a l e s q u e a ñ a d ir u n a p a rt e fin a l S win g a u n o s s e rvicio s e xis t e n t e s re q u ie re m u y có d ig o a d icio n a l. De h e ch o , la
co d ifica ció n d e l m o d e lo e s u n a d e la s t a re a s m á s s e n cilla s a l co n s t ru ir u n a a p lica ció n S win g .

Modelo de la Tabla

La cla s e JTa b le t ie n e a s o cia d a u n a cla s e D e fa u lt Ta b le Mo d e l q u e in t e rn a m e n t e u s a u n ve ct o r p a ra a lm a ce n a r d a t o s . Lo s d a t o s d e ca d a fila s o n a lm a ce n a d o s e n u n o b je t o Ve ct o r s in g l


m ie n t ra s q u e o t ro o b je t o Ve c t o r a lm a ce n a ca d a u n a d e e s a s co lu m n a s y lo s e le m e n t o s q u e la s co n s t it u ye n . El o b je t o D e fa u lt Ta b le Mo d e l p u e d e s e r in icia liza d o co n d a t o s d e va ria s
fo rm a s d ife re n t e s . Es t e có d ig o m u e s t a e l D e fa u lt Ta b le Mo d e l cre a d o co n u n a rra y d e d o s d im e n s io n e s y u n s e g u n d o a rra y q u e re p re s e n t a la s ca b e ce ra s d e co lu m n a s . El
D e fa u lt Ta b le Mo d e l co n vie rt e e l a rra y d e Ob je c t e n lo s o b je t o s Ve c t o r a p ro p id o s :

Object[][] data = new Object[][]{ {"row 1 col1",


"Row 1 col2" },
{"row 2 col 1",
"row 2 col 2"}
};
Object[] headers = new Object[] {"first header",
"second header"};
DefaultTableModel model = new DefaultTableModel(data,
headers);

table = new JTable(model);


[Link](JTable.AUTO_RESIZE_OFF);
Cre a r u n m o d e lo d e t a b la p e rs o n a liza d o e s t a n ce rca n o y s e n cillo co m o u s a r D e fa u lt Ta b le Mo d e l, y re q u ie re m u y p o ca co d ifica ció n a d icio n a l. Po d e m o s im p le m e n t a r u n m o d e lo d e t a b la
im p le m e n t a n d o u n m é t o d o q u e d e vu e lva e l n ú m e ro d e e n t ra d a s d e l m o d e lo , y u n m é t o d o q u e re cu p e re u n e le m e n t o e n u n p o s ició n e s p e cífica d e e s e m o d e lo . Po r e je m p lo , e l m o d e lo
JTa b le p u e d e s e r im p le m e n t a d o d e s d e ja v a x . s w in g . t a b le . Ab s t ra c t Ta b le Mo d e l m e d ia n t e la im p le m e n t a ció n d e lo s m é t o d o s g e t Co lu m n Co u n t , g e t Ro w Co u n t y g e t Va lu e At co m o s e
ve a q u í:

final Object[][] data = new Object[][]{ {


"row 1 col1",
"row 1 col2" },
{"row 2 col 1",
"row 2 col 2"} };
final Object[] headers = new Object[] {
"first header",
"second header"};

TableModel model = new AbstractTableModel(){


public int getColumnCount() {
return data[0].length;
}
public int getRowCount() {
return [Link];
}
public String getColumnName(int col) {
return (String)headers[col];
}

public Object getValueAt(int row,int col) {


return data[row][col];
}
};
table = new JTable(model);
[Link](
JTable.AUTO_RESIZE_OFF);
Es t a t a b la e s d e s ó lo le ct u ra y lo s va lo re s d e s u s d a t o s ya s o n co n o cid o s . De h e ch o , in clu s o lo s d a t o s s o n d e cla ra d o s fin a l p a ra q u e p e u d a n s e r re cu p e ra d o s p o r la cla s e in t e rn a
Ta b le Mo d e l. Es t a n o e s la s it u a ció n n o rm a l cu a n d o t ra b a ja m o s co n d a t o s vivo s .
Po d e m o s cre a r u n a t a b la e d it a b le a ñ a d ie n d o e l m é t o d o d e ve rifica ció n is Ce llEd it a b le , q u e e s u s a d o p o r e l e d it o r d e ce ld a p o r d e fe ct o , y e l m é t o d o Ab s t ra c t Ta b le Mo d e l p a ra co n fig u ra r
u n va lo r e n u n a p o s ició n . Ha s t a e s t e ca m b io , e l Ab s t ra c t Ta b le Mo d e l h a e s t a d o m a n e ja n d o e l re d ib u ja d o y e l re d im e n s io n a d o d e la t a b la d is p a ra n d o d is t in t o s e ve n t o s d e ca m b io d e t a b la .
co m o e l Ab t ra c t Ta b le Mo d e l n o co n o ce n a d a d e lo o cu rrid o a lo s d a t o s d e la t a b la , n e ce s it a m o s in fo rm a rle lla m a n d o a l m é t o d o fire Ta b le Ce llUp d a t e d . La s s ig u ie n t e s lín e a s h a n a ñ a d id o
la cla s e in t e rn a Ab s t ra c t Ta b le Mo d e l p a ra p e rm it ir la e d ició n d e lo s d a t o s :

public void setValueAt (Object value,


int row, int col) {
data[row][col] = value;
fireTableCellUpdated (row, col);
}

public boolean isCellEditable(int row,


int col) {
return true;
}

Más Modelos de Tablas

Un re q u e rim ie n t o co m ú n p a ra m o s t ra r d a t o s t a b u la re s e s la in clu s ió n d e u n co lu m n a n o d e s p la za b le . Es t e co lu m n a p ro p o rcin a u n a co n ju n t o d e d a t o s a n cla d o s q u e p e rm a n e ce n


e s t a cio n a rio s y vis ib le s m ie n t ra s q u e s u s co lu m n a s ve cin a s s o n d e s p la za d a s h o rizo n t a lm e n t e ( y fre cu e n t e m e n t e fu e ra d e la vis t a ) . Es t o e s im p o rt a n t e e n ca s o s d o n d e la fila d e d a t o s
p u e d e s e r id e n t ifica d a p o r u n ú n ico va lo r e n la co lu m n a fija d a , co m o u n n o m b re o n ú m e ro id e n t ifica d o r. e l s ig u ie n t e có d ig o d e e je m p lo u s a u n a co lu m n a d e t a b la fija d a p a ra m o s t ra r u n a
lis t a d e ít e m s d e la s u b a s t a .
El m o d e lo d e t a b la b a s e d e e s t e e je m p lo im p le m e n t a la cla s e Ab s t ra c t Ta b le Mo d e l. S u m é t o d o u p d a t e re lle n a d in á m ica m e n t e lo s d a t o s d e la t a b la d e s d e u n a lla m a d a a la b a s e d e d a t o s .
En vía n u n e ve n t o d e la t a b la h a s id o a ct u a liza d a lla m a n d o a l m é t o d o fire Ta b le S t ru c t u re Ch a n g e d p a ra in d ica r e l n ú m e ro d e fila s o co lu m n a s d e la t a b la q u e s e h a n m o d ifica d o .

package auction;

import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link].*;

public class ResultsModel extends AbstractTableModel{


String[] columnNames={};
Vector rows = new Vector();

public String getColumnName(int column) {


if (columnNames[column] != null) {
return columnNames[column];
} else {
return "";
}
}

public boolean isCellEditable(int row, int column){


return false;
}

public int getColumnCount() {


return [Link];
}

public int getRowCount() {


return [Link]();
}

public Object getValueAt(int row, int column){


Vector tmprow = (Vector)[Link](row);
return [Link](column);
}

public void update(Enumeration enum) {


try {
columnNames = new String[5];
columnNames[0]=new String("Auction Id #");
columnNames[1]=new String("Description");
columnNames[2]=new String("High Bid");
columnNames[3]=new String("# of bids");
columnNames[4]=new String("End Date");
while((enum !=null) &&
([Link]())) {
while([Link]()) {
AuctionItem auctionItem=(
AuctionItem)[Link]();
Vector items=new Vector();
[Link](new Integer(
[Link]()));
[Link](
[Link]());
int bidcount= [Link]();
if(bidcount >0) {
[Link](
[Link]().
format([Link]()));
} else {
[Link]("-");
}
[Link](new Integer(bidcount));
[Link]([Link]());
[Link](items);
}
}

fireTableStructureChanged();
} catch (Exception e) {
[Link]("Exception e"+e);
}
}
}
La t a b la e s cre a d a d e s d e e l m o d e lo Re s u lt s Mo d e l, Lu e g o s e e lim in a la p rim e ra co lu m n a d e la t a b la y s e a ñ a d e a u n a n u e va t a b la . Co m o a h o ra t e n e m o s d o s t a b la s , la ú n ica fo rm a d e q u e
la s s e le ccio n e s e s t é n s in cro n iza d a s e s u s a r u n o b je t o Lis t S e le c t io n Mo d e l p a ra co n fig u ra r la s e le cció n s o b re la fila d e la t a b la e n la s o t ra s t a b la s q u e n o fu e ro n s e le ccio n a d a s lla m a n d o a l
m é t o d o s e t Ro w S e le c t io n I n t e rv a l.
El e je m p lo co m p le t o lo p o d e m o s e n co n t ra r e n e l fich e o fu e n t e Au ct io n Clie n t . ja va :

private void listAllItems() throws IOException{


ResultsModel rm=new ResultsModel();
if (!standaloneMode) {
try {
BidderHome bhome=(BidderHome)
[Link]("bidder");
Bidder bid=[Link]();
Enumeration enum=
(Enumeration)[Link]();
if (enum != null) {
[Link](enum);
}
} catch (Exception e) {
[Link](
"AuctionServlet <list>:"+e);
}
} else {
TestData td= new TestData();
[Link]([Link]());
}
scrollTable=new JTable(rm);
adjustColumnWidth([Link](
"End Date"), 150);
adjustColumnWidth([Link](
"Description"), 120);
scrollColumnModel = [Link]();
fixedColumnModel = new DefaultTableColumnModel();

TableColumn col = [Link](0);


[Link](col);
[Link](col);

fixedTable = new JTable(rm,fixedColumnModel);


[Link]([Link]());
headers = new JViewport();

ListSelectionModel fixedSelection =
[Link]();
[Link](
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (
ListSelectionModel)[Link]();
if (![Link]()) {
setScrollableRow();
}
}
});

ListSelectionModel scrollSelection =
[Link]();
[Link](
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm =
(ListSelectionModel)[Link]();
if (![Link]()) {
setFixedRow();
}
}
});

CustomRenderer custom = new CustomRenderer();


[Link]([Link]);
[Link](2).setCellRenderer(
custom);
[Link](3).setCellRenderer(
new CustomButtonRenderer());

CustomButtonEditor customEdit=new
CustomButtonEditor(frame);
[Link](3).setCellEditor(
customEdit);

[Link]([Link]());

JPanel topPanel = new JPanel();


[Link](new BoxLayout(topPanel,
BoxLayout.X_AXIS));
adjustColumnWidth(
[Link](0), 100);

JTableHeader fixedHeader=
[Link]();
[Link](Component.TOP_ALIGNMENT);
[Link](fixedHeader);
[Link]([Link](
new Dimension(2, 0)));
[Link](new Dimension(400, 40));

JPanel headerPanel = new JPanel();


[Link](Component.TOP_ALIGNMENT);
[Link](new BorderLayout());

JScrollPane scrollpane = new JScrollPane();


scrollBar = [Link]();

[Link](headers, "North");
[Link](scrollBar, "South");
[Link](headerPanel);

[Link](
new Dimension(300,180));
[Link](
new Dimension(100,180));
[Link](
new Dimension(100,180));

innerPort = new JViewport();


[Link](scrollTable);
[Link](innerPort);

[Link]().addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent e) {
Point q = [Link]();
Point p = [Link]();
int val = [Link]().getValue();
p.x = val;
q.x = val;
[Link](p);
[Link]([Link]());
[Link](p);
[Link]([Link]());
}
});

[Link](
).setUpdateTableInRealTime(
false);

JPanel bottomPanel = new JPanel();


[Link](new BoxLayout(
bottomPanel, BoxLayout.X_AXIS));
[Link](Component.TOP_ALIGNMENT);
[Link](fixedTable);
[Link]([Link](
new Dimension(2, 0)));
[Link](Component.TOP_ALIGNMENT);
[Link](innerPort);
[Link]([Link](
new Dimension(2, 0)));

scrollPane= new JScrollPane(bottomPanel,


JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JViewport outerPort = new JViewport();
[Link](bottomPanel);
[Link](topPanel);
[Link](outerPort);

[Link](
JTable.AUTO_RESIZE_OFF);
[Link]().add(scrollPane);

[Link]();
[Link](450,200);
}

void setFixedRow() {
int index=[Link]();
[Link](index, index);
}

void setScrollableRow() {
int index=[Link]();
[Link](index, index);
}

void adjustColumnWidth(TableColumn c, int size) {


[Link](size);
[Link](size);
[Link](size);
}

Modelo JList

El co m p o n e n t e JLis t m u e s t ra u n a lis t a ve rt icla d e d a t o s y u s a u n Lis t Mo d e l p a ra co n t e n e r y m a n ip u la r lo s d a t o s . Ta m b ié n u s a u n o b je t o Lis t S e le c t io n Mo d e l p a ra p e rm it ir la s e le cció n y


s u b s e cu e n t e re cu p e ra ció n d e e le m e n t o s d e la lis t a .
La s im p le m e n t a cio n e s p o r d e fe ct o d e la s cla s e s Ab s t ra c t Lis t Mo d e l y Ab s t ra c t Lis t S e le c t io n Mo d e l la s p ro p o rcio n a e l API S win g d e s d e la s cla s e s D e fa u lt Lis t Mo d e l y
D e fa u lt Lis t S e le c t io n Mo d e l. S i u s a m o s e s t o s d o s m o d e lo s p o r d e fe ct o y e l re n d e riza d o r d e ce ld a s p o r d e fe ct o , o b t e n d re m o s u n a lis t a q u e m u e s t ra e le m e n t o s m o d e lo lla m a d o a l m é t o d o
t o S t rin g s o b re ca d a o b je t o . La lis t a u s a e l m o d e lo MULTI P LE_ I N TERVAL_ S ELECTI ON d e s e le cció n d e lis t a p a ra s e le ccio n a r ca d a e le m e n t o d e la lis t a .
Ha y d is p o n ib le s t re s m o d o s d e s e le cció n p a ra D e fa u lt Lis t S e le c t io n Mo d e l: S I N GLE_ S ELECTI ON , d o n d e s ó lo s e p u e d e s e le ccio n a r u n ít e m a la ve z; S I N GLE_ I N TERVAL_ S ELECTI ON
e n e l q u e s e p u e d e s e le ccio n a r u n ra n g o d e it e m s s e cu e n cia le s ; y MULTI P LE_ I N TERVAL_ S ELECTI ON , e n e l q u e s e p e rm it e q u e cu a lq u ir o t o d o s lo s e le m e n t o s s e a n s e le ccio n a d o s . El
m o d o d e s e le cció n p u e d e ca m b ia rs e lla m a n d o a l m é t o d o s e t S e le c t io n Mo d e d e cla s e JLis t .

public SimpleList() {
JList list;
DefaultListModel deflist;
deflist= new DefaultListModel();
[Link]("element 1");
[Link]("element 2");
list = new JList(deflist);

JScrollPane scroll = new JScrollPane(list);


getContentPane().add(scroll, [Link]);
}

Modelo JTree
La cla s e JTre e m o d e la y m u e s t ra u n a lis t a ve rt ica l d e e le m e n t o s o n o d o s o rd e n a d o s e n u n a fo rm a d e á rb o l d e h e re n cia .
Un o b je t o JTre e t e in e u n n o d o ra íz y u n o o m á s n o d o s h ijo s , q u e p u e d e n co n t e n e r m á s n o d o s h ijo s . Ca d a n o d o p a d re p u e d e e xp a n d irs e p a ra m o s t ra r
s u s h ijo s d e fo rm a s im ila r a lo s fa m ilia re s á rb o le s d e d ire ct o rio s d e lo s u s u a rio s d e Win d o ws .
Co m o lo s co m p o n e n t e s JLis t y JTa b le , e l JTre e co n s t a d e m á s d e u n m o d e lo . El m o d o d e s e le cció n e s s im ila r a l d e t a lla d o p a ra e l m o d e lo JLis t . El
m o d o d e s e le cció n t ie n e e s t á s lig e ra s d ife re n cia s e n lo s n o m b re s : S I N GLE_ TREE_ S ELECTI ON , D I S CON TI GUOUS _ TREE_ S ELECTI ON , y
CON TI GUOUS _ TREE_ S ELECTI ON .
Mie n t ra s q u e D e fa u lt Tre e Mo d e l m a n t ie n e lo s d a t o s e n u n á rb o l y e s re s p o n s a b le d e a ñ a d ir y e lim in a r n o d o s , e s la cla s e
D e fa u lt Tre e Mu t a b le Tre e N o d e la q u e d e fin e lo s m é t o d o s u s a d o s p a ra m o ve rs e p o r lo s n o d o s . El D e fa u lt Tre e Mo d e l s e u s a fre cu e n t e m e n t e p a ra
im p le m e n t a r m o d e lo s p e rs o n a lo iza d o s p o rq u e n o h a y u n Ab s t ra c t Tre e Mo d e l e n e l p a q u e t e JTre e . S in e m b a rg o , s i u s a m o s o b je t o s p e rs o n a liza d o s ,
d e b e m o s im p le m e n t a r Tre e Mo d e l. Es t e có d ig o d e e je m p lo cre a u n JTre e u s a n d o e l D e fa u lt Tre e Mo d e l.

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

public class SimpleTree extends JFrame {


public SimpleTree() {
String[] treelabels = {
"All Auctions",
"Closed Auction",
"Open Auctions"};
Integer[] closedItems = { new Integer(500144),
new Integer(500146),
new Integer(500147)};

Integer[] openItems = { new Integer(500148),


new Integer(500149)};

DefaultMutableTreeNode[] nodes = new


DefaultMutableTreeNode[[Link]];
DefaultMutableTreeNode[] closednodes = new
DefaultMutableTreeNode[[Link]];
DefaultMutableTreeNode[] opennodes = new
DefaultMutableTreeNode[[Link]];

for (int i=0; i < [Link]; i++) {


nodes[i] = new
DefaultMutableTreeNode(treelabels[i]);
}
nodes[0].add(nodes[1]);
nodes[0].add(nodes[2]);

for (int i=0; i < [Link]; i++) {


closednodes[i] = new
DefaultMutableTreeNode(closedItems[i]);
nodes[1].add(closednodes[i]);
}

for (int i=0; i < [Link]; i++) {


opennodes[i] = new
DefaultMutableTreeNode(openItems[i]);
nodes[2].add(opennodes[i]);
}
DefaultTreeModel model=new
DefaultTreeModel(nodes[0]);

JTree tree = new JTree(model);

JScrollPane scroll = new JScrollPane(tree);


getContentPane().add(scroll, [Link]);
}
public static void main(String[] args) {
SimpleTree frame = new SimpleTree();
[Link]( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
[Link](0);
}
});
[Link](true);
[Link]();
[Link](150,150);
}
}
El m é t o d o t o S t rin g s e u s a p a ra re cu p e ra r e l va lo r d e lo s o b je t o s I n t e g e r e n e k á rb o l. Y a u n q u e s e u s a D e fa u lt Tre e Mo d e l p a ra m a n t e n e r lo s d a t o s e n e l á rb o l y p a ra a ñ a d ir y e lim in a r
n o d o s , la cla s e D e fa u lt Mu t a b le Tre e N o d e d e f¡n e lo s m é t o d o s u s a d o s p a ra m o ve rs e a t ra vé s d e lo s n o d o s d e u n á rb o l.
co n e l m é t o d o d e p t h Firs t En u m e ra t io n s e co n s ig u e u n a b ú s q u e d a d e n o d o s d e n t ro d e u n JTre e , q u e e s e l m is m o q u e e l m é t o d o p o s t o rd e rEn u m e ra t io n d e s d e e l p u n t o fin a l h a s t a e l
p rim e r á rb o l. O p o d e m o s lla m a r a l m é t o d o p re o rd e rEn u m e ra t io n , e l in ve rs o d e l m é t o d o p o s t o rd e rEn u m e ra t io n , q u e e m p ie za d e s d e la ra íz y d e s cie n d e ca d a ra m a p o r o rd e n . O
p o d e m o s lla m a r a l m é t o d o b re a d t h Firs t En u m e ra t io n , q u e e m p ie za e n la ra íx y vis it a t o d o s lo s n o d o s h ijo s e n u n n ive l n a t e s d e vis it a r lo s n o d o s h ijo s d e u n a p ro fu n d id a d in fe rio r.
El s ig u ie n t e có d ig o d e e je m p lo e xp a n d e e l n o d o p a d re s i co n t e in e u n n o d o h ijo q u e co rre s p o n d a co n e l ca m p o d e b ú s q u e d a in t ro d u cid o . Us a u n a lla m a d a a En u m e ra t io n e =
n o d e s [ 0 ] . d e p t h Firs t En u m e ra t io n ( ) ; p a ra d e vo lve r la lis t a d e t o d o s lo s n o d o s d e l á rb o l. Un a ve z q u e h a e n co n t ra d o u n a co rre s p o n d e n cia , co n s t ru ye e l Tre e P a t h d e s d e e l n o d o ra íz
h a cia e l n o d o q u e co n cu e rd a co n la ca d e n a b ú s q u e d a p a s a d a a m a k e Vis ib le d e la cla s e JTre e q u e s e a s e g u ra d e q u e n o d o s e e xp a n d irá e n e l á rb o l.

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

public class SimpleSearchTree extends JFrame {


JPanel findPanel;
JTextField findField;
JTree tree;
JButton findButton;
DefaultMutableTreeNode[] nodes;

public SimpleSearchTree() {
String[] treelabels = { "All Auctions",
"Closed Auction",
"Open Auctions" };
Integer[] closedItems = { new Integer(500144),
new Integer(500146),
new Integer(500147) };

Integer[] openItems ={ new Integer(500148),


new Integer(500149)};

nodes = new
DefaultMutableTreeNode[[Link]];
DefaultMutableTreeNode[] closednodes = new
DefaultMutableTreeNode[[Link]];
DefaultMutableTreeNode[] opennodes = new
DefaultMutableTreeNode[[Link]];
for (int i=0; i < [Link]; i++) {
nodes[i] = new
DefaultMutableTreeNode(treelabels[i]);
}
nodes[0].add(nodes[1]);
nodes[0].add(nodes[2]);

for (int i=0; i < [Link]; i++) {


closednodes[i] = new
DefaultMutableTreeNode(closedItems[i]);
nodes[1].add(closednodes[i]);
}
for (int i=0; i < [Link]; i++) {
opennodes[i] = new DefaultMutableTreeNode(
openItems[i]);
nodes[2].add(opennodes[i]);
}

DefaultTreeModel model=new
DefaultTreeModel(nodes[0]);
tree = new JTree(model);

JScrollPane scroll = new JScrollPane(tree);


getContentPane().add(scroll, [Link]);
findPanel= new JPanel();
findField= new JTextField(10);
findButton= new JButton("find");
[Link] (new ActionListener() {
public void actionPerformed (ActionEvent e) {
String field=[Link]();
if (field != null) {
findNode([Link]());
} else {
return;
}
}
});
[Link](findField);
[Link](findButton);
getContentPane().add(findPanel, [Link]);
}
public void findNode(String field) {
Enumeration e = nodes[0].depthFirstEnumeration();
Object currNode;
while ([Link]()) {
currNode = [Link]();
if ([Link]().equals(field)) {
TreePath path=new TreePath(((
DefaultMutableTreeNode)currNode).getPath());
[Link](path);
[Link]([Link](path));
return;
}
}
}

public static void main(String[] args) {


SimpleSearchTree frame = new SimpleSearchTree();
[Link]( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
[Link](0);
}
});
[Link](true);
[Link]();
[Link](300,150);
}
}
JTre e , JTa b le y JLis t p ro b a b le m e n t e s o n lo s m o d e lo s m á s co m u n e s q u e q u e rre m o s p e rs o n a liza r. Pe ro p o d e m o s u s a r m o d e lo s co m o S in g le S e le c t io n Mo d e l p a ra m a n ip u la ció n d e d a t o s
e n g e n e ra l. Es t a cla s e n o s p e rm it e e s p e cifica r co m o s e s e le ccio n a n lo s d a t o s e n u n co m p o n e n t e .

Dibujo de Celdas Personalizado


Co m o h e m o s a p re n d id o a rrib a , m u ch o s co m p o n e n t e s t ie n e n u n re n d e riza d o r d e ce ld a s p o r d e fe ct o p a ra d ib u ja r ca d a e le m e n t o d e la t a b la , á rb o l o lis t a . El re n d e riza d o r d e ce ld a s p o r
d e fe ct o n o rm a lm e n t e e s u n JLa b e l y m u e s t ra u n a re p re s e n t a ció n S t rin g d e lo s d a t o s d e l e le m e n t o .
Un s e n cillo re n d e riza d o r d e ce ld a p e rs o n a liza d o p u e d e e xt e n d e r la cla s e D e fa u lt XXXCe llRe n d e re r p a ra p ro p o rcio n a r p e rs o n a liza ció n a d icio n a l e n e l g e t XXXCe llRe n d e re r. Lo s
co m p o n e n t e s D e fa u lt Ta b le Ce llRe n d e re r y D e fa u lt Tre e Ce llRe n d e re r u s a n u n JLa b e l p a ra d ib u ja r la ce ld a . Es t o s ig n ifica q u e cu a lq u ie r p e rs o n a liza ció n q u e p u e d a s e r a p lica d a a u n
JLa b e l t a m b ié n p u e d e s e r u s a d a e n u n a ce ld a d e JTa b le o d e JTre e .
Po r e je m p lo , e l s ig u ie n t e re n d e riza d o r s e le ccio n a e l co lo r d e l fo n d o d e l co m p o n e n t e s i e l ít e m d e la s u b a s t a h a re cib id o u n a lt o n ú m e ro d e p u ja s :

class CustomRenderer extends DefaultTableCellRenderer {


public Component getTableCellRendererComponent(
JTable table,Object value,
boolean isSelected,
boolean hasFocus,
int row, int column) {

Component comp =
[Link](
table,value,isSelected,hasFocus,
row,column);

JLabel label = (JLabel)comp;

if(((Integer)value).intValue() >= 30) {


[Link](new ImageIcon("[Link]"));
} else {
[Link](new ImageIcon("[Link]"));
}

return label;
}
}
El re n d e riza d o r s e s e le ccio n a s o b re u n a co lu m n a d e e s t a fo rm a :

CustomRenderer custom = new CustomRenderer();


[Link]([Link]);
[Link](2).setCellRenderer(
custom);
S i e l co m p o n e n t e q u e e s t á s ie n d o m o s t ra d o d e n t ro d e la co lu m n a JTa b le re q u ie re m á s fu n cio n a lid a d q u e la d is p o n ib le u s a n d o u n JLa b e l, p o d e m o s cre a r n u e s t ro p ro p io
Ta b le Ce llRe n d e re r. Es t e có d ig o d e e je m p lo u s a u n JBu t t o n co m o re n d e riza d o r d e ce ld a s :

class CustomButtonRenderer extends JButton


implements TableCellRenderer {
public CustomButtonRenderer() {
setOpaque(true);
}

public Component getTableCellRendererComponent(


JTable table, Object value,
boolean isSelected,
boolean hasFocus, int row,
int column) {

if (isSelected) {
((JButton)value).setForeground(
[Link]());
((JButton)value).setBackground(
[Link]());
} else {
((JButton)value).setForeground([Link]());
((JButton)value).setBackground([Link]());
}
return (JButton)value;
}
}
Al ig u a l q u e e l re n d e riza d o r d e ce ld a s p o r d e fe ct o JLa b e l, e s t a cla s e t ra t a co n e l co m p o n e n t e p rin cip a l ( e n e s t e ca s o JBu t t o n ) p a ra h a ce r e l d ib u ja d o . La s e le cció n d e la ce ld a ca m b ia lo s
co lo re s d e l b o t ó n . Co m o a n t e s , e l re n d e riza d o r d e ce ld a s e s t á s e g u ro s o b re la co lu m n a a p ro p ia d a d e la t a b la d e s u b a s t a s co n e l m é t o d o s e t Ce llRe n d e re r:

[Link](3).setCellRenderer(
new CustomButtonRenderer());
De fo rm a a lt e rn a t iva , t o d o s lo s co m p o n e n t e s JBu t t o n p u e d e n co n fig u ra rs e p a ra u s a r e l Cu s t o m Bu t t o n Re n d e re r e n la t a b la co n u n a lla m a d a a s e t D e fa u lt Re n d e re r d e e s t a fo rm a :

[Link](
[Link], new CustomButtonRenderer());

Editor de Celdas Personalizado


De la m is m a fo rm a q u e p o d e m o s co n fig u ra r co m o s e d ib u ja n la s ce ld a s e n u n a JTa b le o e n u n JTre e , t a m b ié n p o d e m o s co n fig u ra r co m o u n a ce ld a e d it a b le re s p o n d e a la e d icio n e s . Un a
d ife re n cia e n t re u s a r e d it o re s y re n d e riza d o re s d e cle d a s e s q u e h a y u n D e fa u lt Ce llEd it o r p a ra t o d o s lo s co m p o n e n t e s , p e ro n o h a y u n D e fa u lt Ta b le Ce llEd it o r p a ra ce ld a s d e t a b la s .
Mie n t ra s e xis t e n re n d e riza d o re s s e p a ra d o s p a ra JTre e y JTa b le , u n a s ó la cla s e D e fa u lt Ce llEd it o r im p le m e n t a lo s d o s in t e rfa ce s Ta b le Ce llEd it o r y Tre e Ce llEd it o r. S in e m b a rg o , la
cla s e D e fa u lt Ce llEd it o r s ó lo t ie n e co n s t ru ct o re s p a ra lo s co m p o n e n t e s JCo m b o Bo x , JCh e c k Bo x , y JTe x t Fie ld . La cla s e JBu t t o n n o s e m a p e a co n t in g u n o d e e s t o s co n s t ru ct o re s p o r
e s o s e cre a u n JCh e c k Bo x in ú t il p a ra s a t is fa ce r lo s re q u e rim ie n t o s d e la cla s e D e fa u lt Ce llEd it o r.
El s ig u ie n t e e je m p lo u s a u n e d it o r d e b o t ó n p e rs o n a liza d o q u e m u e s t ra e l n ú m e ro d e d ía s q u e q u e d a n d e s u b a s t a cu a n d o s e h a ce r d o b le click s o b re é l. El d o b le click p a ra d is p a ra r la a cció n
s e e s p e cifica s e le ccio n a n d o e l va lo r c lic k Co u n t To S t a rt a d o s . Un a co p ia e xa ct a d e l m é t o d o g e t Ta b le Ce llEd it o rCo m p o n e n t d ib u ja e l b o t ó n e n m o d o e d ició n . Un co m p o n e n t e JD ia lo g
q u e m u e s t ra e l n ú m e ro d e d ía s q u e q u e d a n a p a re ce rá cu a n d o s e lla m e a l m é t o d o g e t Ce llEd it o rVa lu e . El va lo r d e l n ú m e ro d e d ía s q u e q u e d a n s e ca lcu la m o vie n d o la fe ch a d e l ca le n d a rio
a ct u a l h a s t a la fe ch a fin a l. La cla s e Ca le n d a r n o t ie n e u n m é t o d o q u e e xp re s e u n a d ife re n cia e n t re d o s fe ch a s d is t in t o a lo s m ilis e g u n d o s q u e h a ya e n t re e s a s d o s fe ch a s .

class CustomButtonEditor extends DefaultCellEditor {


final JButton mybutton;
JFrame frame;

CustomButtonEditor(JFrame frame) {
super(new JCheckBox());
mybutton = new JButton();
[Link] = mybutton;
[Link] = 2;
[Link]=frame;
[Link](true);
[Link](new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}

protected void fireEditingStopped() {


[Link]();
}

public Object getCellEditorValue() {


JDialog jd= new JDialog(frame, "Time left");
Calendar today=[Link]();
Calendar end=[Link]();
SimpleDateFormat in=new SimpleDateFormat("yyyy-MM-dd");
try {
[Link]([Link]([Link]()));
} catch (Exception e){
[Link]("Error in date"+[Link]()+e);
}
int days = 0;
while([Link](end)) {
[Link]([Link],true);
days++;
}
[Link](200,100);
if ([Link](end)) {
[Link]().add(new JLabel("Auction completed"));
} else {
[Link]().add(new JLabel("Days left="+days));
}
[Link](true);
return new String([Link]());
}

public Component getTableCellEditorComponent(JTable table,


Object value, boolean isSelected,
int row, int column) {

((JButton) editorComponent).setText(((
JButton)value).getText());
if (isSelected) {
((JButton) editorComponent).setForeground(
[Link]());
((JButton) editorComponent).setBackground(
[Link]());
} else {
((JButton) editorComponent).setForeground(
[Link]());
((JButton) editorComponent).setBackground(
[Link]());
}
return editorComponent;
}
}

Manejo de Eventos Especializados


S win g u s a la s cla s e s d e m a n e jo d e e ve n t o s d is p o n ib le s e n e l API AWT d e s d e e l JDK 1 . 1 . S in e m b a rg o , a lg u n o s APIs n u e vo s e s t á n d is p o n ib le s e n la cla s e S w in g Ut ilit ie s q u e s e u s a n p a ra
a ñ a d ir m á s co n t ro l s o b re la co la d e e ve n t o s . Lo s d o s n u e vo s m é t o d o s m a n e ja d o re s d e e ve n t o s s o n in v o k e La t e r y in v o k e An d W a it . Es t e ú lt im o e s p e ra a q u e e l e ve n t o s e a p ro ce s a d o r e n
la co la d e e ve n t o s .
Es t o s m é t o d o s s e u s a n fre cu e n t e m e n t e p a ra s o licit a r e l fo co s o b re u n co m p o n e n t e d e s p u é s d e q u e o t ro e ve n t o h a ya o cu rrid o y q u e p o d ría a fe ct a r a l fo co d e co m p o n e n t e s . Po d e m o s
d e vo lve r e l fo co lla m a n d o a l m é t o d o in v o k e La t e r y p a s a n d o u n Th re a d :

JButton button =new JButton();


[Link](new Runnable() {
public void run() {
[Link]();
}
});

Direcciones Swing
Mie n t ra s q u e la a rq u it e ct u ra b á s ica S win g h a p e rm a n e cid o e s t a b le a s u d is e ñ o o rig in a l, s e h a n re a liza d o m u ch a s m e jo ra s y o p t im iza cio n e s s o b re co m p o n e n t e s co m o JTa b le y e n á re a s
d e s p la za b le s .
S in e m b a rg o , co m o ve re m o s e n la s e cció n An a liza r u n Pro g ra m a , u n a s im p le t a b la d e 7 0 0 x3 0 0 re q u ie re ca s i m e d io m e g a b yt e d e m e m o ria cu a n d o s e u s a d o b le b u ffe r. La cre a cció n d e 1 0
t a b la s p ro b a b le m e n t e n e ce s it a ría e l in t e rca m b io d e m e m o ria a d is co , a fe ct a n d o s e ve ra m e n t a a l re n d im ie n t o e n m á q u in a s d e b a jo n ive l.

Oz it o
El API de Impresión
El p a q u e t e ja v a . a w t . p rin t d e la p la t a fo rm a Ja va 2 n o s p e rm it e im p rim ir cu a lq u ie r
co s a q u e p u e d a s e r re n d e riza d a a u n co n t e xt o Gra p h ic s o Gra p h ic s 2 D —
in clu ye n d o co m p o n e n t e s AWT, co m p o n e n t e s S win g y g rá fico s 2 D. El API d e
im p re s ió n e s fá cil d e u s a r. Nu e s t ra a p lica ció n le d ice a l s is t e m a d e im p re s ió n q u é
im p rim ir, y e l s is t e m a d e im p re s ió n d e t e rm in a cu a n d o s e re n d e riza ca d a p á g in a .
Es t e m o d e lo d e im p re s ió n p o r re t ro lla m a d a p e rm it e s o p o rt e d e im p re s ió n e n u n
a m p lio ra n g o d e im p re s o ra s y s is t e m a s . El m o d e lo d e re t ro lla m a d a t a m b ié n
p e rm it e a l u s u a rio im p rim ir a u n a im p re s o ra d e m a p a d e b it s d e s d e u n o rd e n a d o r
q u e n o t ie n e s u ficie n t e m e m o ria o e s p a cio e n d is c p a ra co n t e n e r e l b it m a p d e u n a
p á g in a co m p le t a .
Un co n t e xt o g rá fico p e rm it e a u n p ro g ra m a d ib u ja r e n u n d is p o s it ivo d e
re n d e riza ció n co m o u n a p a n t a lla , u n a im p re s o ra o u n a im a g e n fu e ra d e p a n t a lla .
Co m o lo s co m p o n e n t e s S win g s e re n d e riza n a t ra vé s d e u n o b je t o Gra p h ic s
u s a n d o e l s o p o rt e d e g rá fico s AWT, e s fá cil im p rim ir co m p o n e n t e s S win g co n e l
n u e vo API d e im p re s ió n . S in e m b a rg o , lo s co m p o n e n t e s AWT n o s e re n d e riza n a u n
d is p o s it ivo g rá fico , d e b e m o s e xt e n d e r la cla s e d e l co m p o n e n t e AWT e im p le m e n t a r
e l m é t o d o d e d ib u jo d e l co m p o n e n t e AWT.
● ¿ Qu é h a y e n e l Pa q u e t e ?

● Im p rim ir u n Co m p o n e n t e AWT
● Im p rim ir u n Co m p o n e n t e S win g
● Im p rim ir Grá fico s e n S win g
● Diá lo g o d e Im p re s ió n
● Diá lo g o d e Co n fig u ra ció n d e Pá g in a
● Im p rim ir u n a co le cció n d e p á g in a s

¿Qué hay en el Paquete?


El ja v a . a w t . p rin t co n t ie n e lo s s ig u ie n t e s in t e rfa ce s , cla s e s y e xce p cio n e s . Aq u í
p o d rá s e n co n t ra r la Es p e cifica ció n d e l API.
● In t e rfa ce s
❍ Pa g e a b le

❍ Prin t a b le

❍ Prin t e rGra p h ics

● Cla s e s
❍ Bo o k

❍ Pa g e Fo rm a t

❍ Pa p e r
❍Prin t e rJo b
● Exce p cio n e s
❍ Prin t e rAb o rt Exce p t io n

❍ Prin t e rExce p t io n

❍ Prin t e rIOExce p t io n

Imprimir un Componente AWT


La a p lica ció n p rin t b u t t o n . ja va m u e s t ra u n p a n e l co n u n
My Bu t t o n s o b re é l. Cu a n d o s e p u ls a e l b o t ó n , la a p lica ció n
im p rim e e l co m p o n e n t e My Bu t t o n .
En e l có d ig o , la cla s e Bu t t o n s e e xt ie n d e p a ra im p le m e n t a r P rin t a b le e in clu ye lo s
m é t o d o p a in t y p rin t . Es t e ú lt im o e s n e ce s a rio p o rq u e la cla s e im p le m e n t a
P rin t a b le , y e l m é t o d o p a in t e s n e ce s a rio p o rq u e d e s crib e co m o a p a re ce n la
fo rm a d e l b o t ó n y la e t iq u e t a d e t e xt o cu a n d o s e im p rim e n .
Pa ra ve r e l b o t ó n , la co n t e xt o g rá fico d e im p re s ió n e s t ra s la d a d o a u n á re a
im a g in a b le d e la im p re s o ra , y p a ra ve r la e t iq u e t a d e t e xt o , s e s e le ccio n a u n a
fu e n t e e n e l co n t e xt o g rá fico d e im p re s ió n .
En e s t e e je m p lo , e l b o t ó n s e im p rim e a 1 6 4 / 7 2 p u lg a d a s d e n t ro d e l m a rg e n
im a g in a b le ( h a y 7 2 p ixe ls p o r p u lg a d a ) y a 5 / 7 2 p u lg a d a s d e l m a rg e n s u p e rio r
im a g in a d o . Aq u í e s d o n d e e l b o t ó n e s p o s icio n a d o p o r e l co n t ro la d o r d e d is t rib u ció n
y e s t o s m is m o n ú m e ro s o n d e vu lt o s p o r la s s ig u ie n t e s lla m a d a s :

int X = (int)[Link]().getX();
int Y = (int)[Link]().getY();
Y a q u í e s t á e l có d ig o d e la cla s e My Bu t t o n :

class MyButton extends Button


implements Printable {

public MyButton() {
super("MyButton");
}

public void paint(Graphics g) {


//To see the label text, you must specify a font for
//the printer graphics context
Font f = new Font("Monospaced", [Link],12);
[Link] (f);

//Using "g" render anything you want.


//Get the button's location, width, and height
int X = (int)[Link]().getX();
int Y = (int)[Link]().getY();
int W = (int)[Link]().getWidth();
int H = (int)[Link]().getHeight();

//Draw the button shape


[Link](X, Y, W, H);

//Draw the button label


//For simplicity code to center the label inside the
//button shape is replaced by integer offset values
[Link]([Link](), X+10, Y+15);

public int print(Graphics g,


PageFormat pf, int pi)
throws PrinterException {
if (pi >= 1) {
return Printable.NO_SUCH_PAGE;
}

Graphics2D g2 = (Graphics2D) g;

//To see the button on the printed page, you


//must translate the printer graphics context
//into the imageable area
[Link]([Link](), [Link]());
[Link]([Link]);
paint(g2);
return Printable.PAGE_EXISTS;
}
N o t a : La im p re s ió n Gra p h ics 2 D e s t á b a s a d a e n la cla s e Bu ffe re d I m a g e
y a lg u n a s p la t a fo rm a s n o p e rm it e n u n co lo r d e fo n d o n e g ro p o r d e fe ct o .
S i e s t e e s n u e s t ro ca s o t e n e m o s q u e a ñ a d ir g 2 . s e t Co lo r( Co lo r. b la c k )
a l m é t o d o p rin t a n t e s d e la in vo ca ció n a p a in t .

Imprimir un Componente Swing


Im p rim ir u n co m p o n e n t e S win g e s ca s i lo m is m o q u e im p rim ir
u n co m p o n e n t e AWT, e xce p t o q u e la cla s e My Bu t t o n n o
n e ce s it a u n a im p le m e n t a ció n d e l m é t o d o p a in t . S in e m b a rg o ,
s i t e in e u n m é t o d o p rin t q u e lla m a a l m é t o d o p a in t d e l co m p o n e n t e . La
im p le m e n t a ció n d e l m é t o d o p a in t n o e s n e ce s a ria p o rq u e lo s co m p o n e n t e s S win g
s a b e n co m o d ib u ja rs e a s í m is m o s .
Aq u í e s t á e l có d ig o fu e n t e co m p le t o p a ra la ve rs ió n S win g d e p rin t b u t t o n . ja va .

class MyButton extends JButton implements Printable {

public MyButton() {
super("MyButton");
}

public int print(Graphics g,


PageFormat pf, int pi)
throws PrinterException {
if (pi >= 1) {
return Printable.NO_SUCH_PAGE;
}

Graphics2D g2 = (Graphics2D) g;
[Link]([Link](),
[Link]());
Font f = new Font("Monospaced", [Link],12);
[Link] (f);
paint(g2);
return Printable.PAGE_EXISTS;
}
S i e xt e n d e m o s u n JP a n e l e im p le m e n t a m o s P rin t a b le , p o d e m o s im p rim ir u n
co m p o n e n t e p a n e l y t o d o s s u s co m p o n e n t e s .

public class printpanel extends JPanel


implements ActionListener,
Printable {
Aq u í e s t á e l có d ig o d e p rin t p a n e l. ja va q u e im p rim e u n o b je t o JP a n e l y e l JBu t t o n
q u e co n t ie n e , y e l có d ig o d e Co m p o n e n t Prin t e rFra m e . ja va q u e im p rim e u n o je t o
JFra m e y lo s co m p o n e n t e s JBu t t o n , JLis t , JCh e c k Bo x , y JCo m b o Bo x q u e
co n t ie n e .

Imprimir Gráficos en Swing


De la m is m a fo rm a q u e e l e je m p lo AWT e xt ie n d e u n co m p o n e n t e Bu t t o n e
im p le m e n t a e l m é t o d o p a in t p a ra d ib u ja r u n b o t ó n , p o d e m o s s u b cla s ifica r
co m p o n e n t e s AWT y S win g e im p le m e n t a r e l m é t o d o p a in t p a ra re n d e riza r
g rá fico s 2 D e n la p a n t a lla o e n la im p re s o ra . La a p lica ció n S win g S h a p e s Prin t . ja va
m u e s t ra co m o s e h a ce e s t o .
El m é t o d o p a in t Co m p o n e n t lla m a a l m é t o d o d ra w S h a p e s p a ra re n d e riza r
g rá fico s 2 D e n la p a n t a lla cu a n d o a rra n ca la a p lica ció n . Cu a n d o p u ls a m o s s o b re e l
b o t ó n , P rin t , s e cre a u n co n t e xt o g rá fico d e im p re s ió n y e s p a s a d o a l m é t o d o
d ra w S h a p e s p a ra e l d ib u ja d o .

Diálogo de Impresión
Es fá cil m o s t ra r e l Diá lo g o d e Im p re s ió n p a ra q u e e l u s u a rio fin a l p u e d a
in t e rca m b ia r la s p ro p ie d a d e s d e l ra b a jo d e im p re s ió n . El m é t o d o
a c t io n P e rfo rm e d d e l e je m p lo S win g a n t e rio r m o d ifica d o a q u í h a ce ju s t o e s t o :
public void actionPerformed(ActionEvent e) {
PrinterJob printJob = [Link]();
[Link]((MyButton) [Link]());
if([Link]()){
try { [Link](); }
catch (Exception PrinterExeption) { }
}
}
N o t a : En S win g , la s e n t e n cia p rin t Jo b . s e t P a g e a b le ( ( My Bu t t o n )
e . g e t S o u rc e ( ) ) ; p u e d e e s crib irs e co m o
p rin t Jo b . s e t P rin t a b le ( ( My Bu t t o n ) e . g e t S o u rc e ( ) ) ;. La d ife re n cia e s
q u e s e t P rin t a b le e s p a ra a p lica cio n e s q u e n o co n o ce n e l n ú m e ro d e
p á g in a s q u e e s t á n im p rim ie n d o . S i u s a m o s s e t P rin t a b le , n e ce s it a m o s
a ñ a d ir if( p i > = 1 ) { re t u rn P rin t a b le . N O_ S UCH_ P AGE: } a l p rin cip io
d e l m é t o d o p rin t .

Diálogo de configuración de Página


Po d e m o s a ñ a d ir u n a lín e a d e có d ig o q u e le d ice a l o b je t o P rin t e rJo b q u e m u e s t e
e l Diá lo g o d e Co n fig u ra ció n d e Pá g in a p a ra q u e e l u s u a rio fin a l p u e d a m o d ifica r
in t e ra ct iva m e n t e e l fo rm a t o d e la p á g in a p a ra im p rim ir e n ve rt ica l u h o rizo n t a l, e t c.
El m é t o d o a c t io n P e rfo rm e d e je m p lo S win g a cn t e rio r e s t á m o s t ra d o a q u í p a ra q u e
m u e s t re lo s d iá lo g o s d e Im p re s ió n y Co n fig u ra ció n d e Pá g in a :
N o t a : Alg u n a s p la t a fo rm a s n o s o p o rt a n e l d iá lo g o d e co n fig u ra ció n d e
p á g in a . En e s t a s p la t a fo rm a s , la lla m a d a a p a g e D ia lo g s im p le m e n t e
d e vu e lve n e l o b je t o P a g e Fo rm a t q u e s e le s p a s ó y n o m u e s t ra n n in g ú n
d iá lo g o .

public void actionPerformed(ActionEvent e) {


PrinterJob printJob = [Link]();
[Link]((MyButton) [Link]());
PageFormat pf = [Link](
[Link]());
if([Link]()){
try { [Link](); } catch (Exception ex) { }
}
}

Imprimir una Colección de Páginas


Po d e m o s u s a r la cla s e Bo o k p a ra im p rim ir u n a co le cció n d e p á g in a s q u e a ñ a d im o s
a l lib ro . Es t a p á g in a s p u e d e n e s t á r e n cu a lq u ie r o rd e n y t e n e r d ife re n t e s fo rm a t o s .
El e je m p lo p rin t 2 b u t t o n . ja va p o n e
lo s b o t o n e s P rin t y P rin t 2 d e l t ip o
My Bu t t o n e n u n p a n e l. Cre a u n
lib ro q u e co n t ie n e la s p á g in a s p a ra
im p rim ir. Cu a n d o p u ls a m o s a lg u n
b o t ó n , e l lib ro im p rim e u n a co p ia
d e l b o t ó n P rin t e n m o d o h o rizo n t a l
y d o s co p ia s d e l b o t ó n P rin t 2 e n
m o d o ve rt ica l, co m o s e e s p e cifica
e n la im p le m e n t a ció n d e l m é t o d o
a c t io n P e rfo rm e d m o s t ra d a a q u í:

N o t a : Act u a lm e n t e u n Bu g re s t rin g e a la p la t a fo rm a S o la ris a im p rim ir


s ó lo e n ve rt ica l.

public void actionPerformed(ActionEvent e) {


PrinterJob printJob = [Link]();

/* Set up Book */
PageFormat landscape = [Link]();
PageFormat portrait = [Link]();
[Link]([Link]);
[Link]([Link]);
Book bk = new Book();
[Link]((Printable)b, landscape);
[Link]((Printable)b2, portrait, 2);
[Link](bk);
try { [Link](); } catch (Exception ex) { }
}

Oz it o
Impresión Avanzada
La s e cció n a n t e rio r e xp licó có m o im p rim ir co m p o n e n t e s s e n cillo s y cu b ría la s t é cn ica s q u e s e p u e d e n u s a r p a ra im p rim ir ca p t u ra s d e p a n t a lla . S in e m b a rg o , s i q u e re m o s im p rim ir
m á s q u e u n co m p o n e n t e p o r ca d a p á g in a , o s u n u e s t ro co m p o n e n t e s e s m a yo r q u e e l t a m a ñ o d e u n a p á g in a , n e ce s it a m o s h a ce r a lg ú n t ra b a jo a d icio n a l d e n t ro d e l m é t o d o p rin t .
Es t a s e cció n e xp lica q u é n e ce s it a m o s h a ce r y co n clu ye co n u n e je m p lo d e có m o im p rim ir lo s co n t e n id o s d e u n co m p o n e n t e JTa b le .
● Va rio s Co m p o n e n t e s p o r Pá g in a

● Co m p o n e t e s Ma yo re s q u e u n a Pá g in a
● Im p rim ir u n Co m p o n e n t e JTa b le
● Im p rim ir u n In fo rm e d e Ve n t a s

Varios Componentes por Página


Ha y ve ce s cu a n d o im p rim im o s u n co m p o n e n t e e n u n a p á g in a q u e n o s e cu b re la s n e ce s id a d e s d e im p re s ió n q u e q u e re m o s . Po r e je m p lo , p o d ría m o s q u e re n in clu ir u n a ca b e ce ra o
u n p ie e n ca d a p á g in a d e im p re s ió n co n u n n ú m e ro d e p á g in a - - a lg o q u e n o e s n e ce s a rio m o s t ra r e n la p a n t a lla .
De s a fo rt u n a d a m e n t e , im p rim ir m ú lt ip le s co m p o n e n t e s s o b re u n a p á g in a n o e s t á n s e n cillo co m o a ñ a d ir lla m a d a s a p a in t p o rq u e ca d a lla m a d a s o b re e s crib e la s a lid a d e la lla m a d a
a n t e rio r.
La cla ve p a ra im p rim ir m á s d e u n co m p o n e n t e e n u n p á g in a , e s u s a r lo s m é t o d o s t ra n s la t e ( d o u b le , d o u b le ) y s e t Clip d e la cla s e Gra p h ic s 2 D .
El m é t o d o t ra n s la t e m u e ve u n lá p iz im a g in a rio a la s ig u ie n t e p o s ició n d e la s a lid a d e im p re s ió n d o n d e e l co m p o n e n t e p u e d e s e r d ib u ja d o y lu e g o im p rim id o . Ha y d o s m é t o d o s
t ra n s la t e e n la cla s e Gra p h ic s 2 D . Pa ra im p rim ir m ú lt ip le s co m p o n e n t e s n e ce s it a m o s e l q u e t o m a d o s a rg u m e n t o s d o u b le p o rq u e e s t e m é t o d o p e rm it e p o s ico n a m ie n t o re la t ivo .
De b e m o s a s e g u ra rn o s d e fo rza r cu a lq u ie r va lo r e n t e ro a d o u b le o flo a t . El p o s icio n a m ie n t o re la t ivo e n e s t e co n t e xt o s ig n ifica q u e la s lla m a d a s a n t e rio re s a t ra n s la t e s o n t e n id a s e n
cu e n t a cu a n d o s e ca lq u la e l n u e vo p u n t o d e t ra s la d o .
El m é t o d o s e t Clip s e u s a p a ra re s t rin g ir q u e e l co m p o n e n t e s e a p in t a d o , y p o r lo t a n t o , im p rim id o , e n e l á re a e s p e cifica d a . Es t o n o s p e rm it e im p rim ir m ú lt ip le s co m p o n e n t e s e n
u n a p á g in a m o vie n d o e l lá p iz im a g in a rio a d ife re n t e s p u n t o s d e la p á g in a y lu e g o p in t á n d o ca d a co m p o n e n t e e n e l á re a re co rt a d a .

Ejemplo

Po d e m o s re e m p la za r e l m é t o d o p rin t d e lo s e je m p lo s p rin t b u t t o n . ja v a Ab s t ra ct Win d o w To o lkit ( AWT) y S win g co n e l s ig u ie n t e có d ig o p a ra a ñ a d ir u n m e n s a je e n e l p ie d e p á g in a


d e Co m p a n y Co n fid e n t ia l.

public int print(Graphics g, PageFormat pf, int pi)


throws PrinterException {

if (pi >= 1) {
return Printable.NO_SUCH_PAGE;
}

Graphics2D g2 = (Graphics2D) g;
Font f= [Link]("Courier");
double height=[Link]();
double width=[Link]();

[Link]([Link](),
[Link]());
[Link]([Link]);
[Link]("Company Confidential", (int)width/2,
(int)[Link]().getHeight());
[Link](0f,0f);
[Link](0,0,(int)width,
(int)([Link]().getHeight()*2));
paint (g2);
return Printable.PAGE_EXISTS;
}
En e l n u e vo m é t o d o p rin t , e l co n t e xt o Gra p h ic s 2 D e s re co rt a d o a n t e s d e lla m a r a l m é t o d o p a in t d e l p a d re JBu t t o n . Es t o e vit a q u e e l m é t o d o JBu t t o n p a in t s o b re e s crib a e l
b o t ó n d e la p á g in a . El m é t o d o t ra n s la t e s e u s a p a ra a p u n t a n e l m é t o d o JBu t t o n p a in t a q u e e m p ie za e l p a in t co n u n d e s p la za m ie n t o d e 0 , 0 d e s d e la p a rt e vis ib le d e la p á g in a . e l
á re a vis ib le ya e s t á ca lcu la d a m e d ia n t e u n a lla m a d a a n t e rio r a t ra n s la t e :

[Link]([Link](), [Link]());
Pa ra m á s co m p o n e n t e s , p o d ría m o s n e ce s it a r co n fig u ra r e l co lo r d e fo n d o p a ra ve r lo s re s u lt a d o s . En e s t e e je m p lo e l co lo r d e t e xt o s e im p rim ió e n n e g ro .

Métodos Útiles para Llamar en el Método print

Lo s s ig u ie n t e s m é t o d o s s o n ú t ile s p a ra ca lcu la r e l n ú m e ro d e p á g in a s re q u e rid a s y p a ra h a ce r q u e u n co m p o n e n t e s e re d u zca h a s t a e n t ra r e n u n a p á g in a :


Mé t o d o s P a g e Fo rm a t :
g e t I m a g e a b le He ig h t ( )
d e vu e lve la a lt u ra d e la p á g in a q u e p o d e m o s u s a r p a ra im p rim ir la s a lid a .
g e t I m a g e a b le W id t h ( )
d e vu e lve la a n ch u ra d e la p á g in a q u e p o d e m o s u s a r p a ra im p rim ir la s a lid a .
Mé t o d o Gra p h ic s 2 D :
s c a le ( x ra t io , y ra t io )
e s ca la e l co n e xt o g rá fico 2 D a e s t e t a m a ñ o . Un ra t ío d e u n o m a n t ie n e e l t a m a ñ o , m e n o s d e u n o re d u ce e l t a m a ñ o d e l co n t e xt o g rá fico .

Componentes Mayores de una Página


El API d e im p re s ió n d e Ja va " t ie n e u n API Bo o k q u e p ro p o rcio n a e l co n ce p t o d e p á g in a s . S in e m b a rg o , e s t e API s ó lo a ñ a d e o b je t o s p rin t a b le s a u n a co le cció n d e o b je t o s p rin t a b le s .
No ca lcu la la s ru p t u ra s d e p á g in a n i e xp a n d e co m p o n e n t e s s o b re m ú lt ip le s p á g in a s
Cu a n d o im p rim im o s u n s ó lo co m p o n e n t e e n u n a p á g in a , s ó lo t e n e m o s q u e ch e q u e a r q u e e l va lo r d e l ín d ice e s m a yo r o ig u a l q u e u n o y d e vo lve r N O_ S UCH_ P AGE cu a n d o s e
a lca n za e s t e va lo r.
Pa ra im p rim ir m u lt ip le s p á g in a s , t e n e m o s q u e ca lcu la r e l n ú m e ro d e p á g in a s n e ce s a ria s p a ra co n t e n e r e l co m p o n e n t e . Po d e m o s ca lcu la r e l n ú m e ro t o t a l d e p á g in a s n e ce s a ria s
d ivid ie n d o e l e s p a cio o cu p a d o p o r e l co m p o n e n t e p o r e l va lo r d e vu e lt o p o r e l m é t o d o g e t I m a g e a b le He ig h t . Un a ve z ca lcu la d o e l n ú m e ro t o t a l d e p á g in a s , p o d e m o s e je cu t a r e l
s ig u ie n t e ch e q u e o d e n t ro d e l m é t o d o p rin t :

if (pageIndex >=TotalPages) {
return NO_SUCH_PAGE;
}
El m a rco d e t ra b a jo d e im p re s ió n lla m a a l m é t o d o p rin t m u lt ip le s ve ce s h a s t a q u e p a g e I n d e x s e a m e n o r o ig u a l q u e To t a lP a g e s . To d o lo q u e n e ce s it a m o s h a ce r e s cre a r u n a
n u e va p á g in a p a ra d e l m is m o co m p o n e n t e e n ca d a b u cle p rin t . Es t o s e p u e d e h a ce r t ra t a n d o la p á g in a im p re s a co m o u n a ve n t a n a d e s liza n t e s o b re e l co m p o n e n t e . La p a rt e d e l
co m p o n e n t e q u e s e e s t á im p rim ie n d o e s s e le ccio n a d a p o r u n a lla m a d a a t ra n s la t e p a ra m a rca r la p a rt e s u p e rio r d e la p á g in a y u n a lla m a a s e t Clip p a ra m a rca r la p a rt e in fe rio r d e
la p á g in a . e l s ig u ie n t e d ia g ra m a ilu s t ra e s t e p ro ce s o .
El la d o izq u ie rd o d e l d ia g ra m a re p re s e n t a la p á g in a e n via d a a la im p re s o ra . El la d o LEFT co n t ie n e la lo n g it u d d e l co m p o n e n t e q u e e s t á s ie n d o im p rim id o e n e l m é t o d o p rin t . La
p rim e ra p á g in a p u e d e s e r re p re s e n t a d a d e e s t a fo rm a :
Lu e g o la ve n t a n a d e la p á g in a im p re s a s e d e s liza a lo la rg o d e l co m p o n e n t e p a ra im p rim ir la s e g u n d a p á g in a , co n e l ín d ice u n o .
Es t e p ro ce s o co n t in ú a h a s t a q u e s e a lca n za la ú lt im a p á g in a .
Imprimir un Componente JTable
La cla s e Re p o rt . ja va u s a m u ch o s d e t é cn ica s a va n za d a s cu b ie rt a s e n e s t a s e cció n p a ra im p rim ir lo s d a t o s y la ca b e ce ra d e u n co m p o n e n t e JTa b le q u e e xp a n d e m u ch a s p á g in a s . La
s a lid a d e im p re s ió n t a m b ié n in lcu ye u n p ié d e p á g in a co n e l n ú m e ro d e é s t a .

Es t e d ia g ra m a m u e s t ra co m o s e ría la im p re s ió n :
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link];

public class Report implements Printable{


JFrame frame;
JTable tableView;

public Report() {
frame = new JFrame("Sales Report");
[Link](new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);}});

final String[] headers = {"Description", "open price",


"latest price", "End Date", "Quantity"};
final Object[][] data = {
{"Box of Biros", "1.00", "4.99", new Date(),
new Integer(2)},
{"Blue Biro", "0.10", "0.14", new Date(),
new Integer(1)},
{"legal pad", "1.00", "2.49", new Date(),
new Integer(1)},
{"tape", "1.00", "1.49", new Date(),
new Integer(1)},
{"stapler", "4.00", "4.49", new Date(),
new Integer(1)},
{"legal pad", "1.00", "2.29", new Date(),
new Integer(5)}
};

TableModel dataModel = new AbstractTableModel() {


public int getColumnCount() {
return [Link]; }
public int getRowCount() { return [Link];}
public Object getValueAt(int row, int col) {
return data[row][col];}
public String getColumnName(int column) {
return headers[column];}
public Class getColumnClass(int col) {
return getValueAt(0,col).getClass();}
public boolean isCellEditable(int row, int col) {
return (col==1);}
public void setValueAt(Object aValue, int row,
int column) {
data[row][column] = aValue;
}
};

tableView = new JTable(dataModel);


JScrollPane scrollpane = new JScrollPane(tableView);

[Link](new Dimension(500, 80));


[Link]().setLayout(
new BorderLayout());
[Link]().add(
[Link],scrollpane);
[Link]();
JButton printButton= new JButton();

[Link]("print me!");

[Link]().add(
[Link],printButton);

// for faster printing turn double buffering off

[Link](
frame).setDoubleBufferingEnabled(false);

[Link]( new ActionListener(){


public void actionPerformed(ActionEvent evt) {
PrinterJob pj=[Link]();
[Link]([Link]);
[Link]();
try{
[Link]();
}catch (Exception PrintException) {}
}
});

[Link](true);
}

public int print(Graphics g, PageFormat pageFormat,


int pageIndex) throws PrinterException {
Graphics2D g2 = (Graphics2D) g;
[Link]([Link]);
int fontHeight=[Link]().getHeight();
int fontDesent=[Link]().getDescent();

//leave room for page number


double pageHeight =
[Link]()-fontHeight;
double pageWidth =
[Link]();
double tableWidth = (double)
[Link](
).getTotalColumnWidth();
double scale = 1;
if (tableWidth >= pageWidth) {
scale = pageWidth / tableWidth;
}

double headerHeightOnPage=
[Link](
).getHeight()*scale;
double tableWidthOnPage=tableWidth*scale;

double oneRowHeight=([Link]()+
[Link]())*scale;
int numRowsOnAPage=
(int)((pageHeight-headerHeightOnPage)/
oneRowHeight);
double pageHeightForTable=oneRowHeight*
numRowsOnAPage;
int totalNumPages=
(int)[Link]((
(double)[Link]())/
numRowsOnAPage);
if(pageIndex>=totalNumPages) {
return NO_SUCH_PAGE;
}

[Link]([Link](),
[Link]());
//bottom center
[Link]("Page: "+(pageIndex+1),
(int)pageWidth/2-35, (int)(pageHeight
+fontHeight-fontDesent));

[Link](0f,headerHeightOnPage);
[Link](0f,-pageIndex*pageHeightForTable);

//If this piece of the table is smaller


//than the size available,
//clip to the appropriate bounds.
if (pageIndex + 1 == totalNumPages) {
int lastRowPrinted =
numRowsOnAPage * pageIndex;
int numRowsLeft =
[Link]()
- lastRowPrinted;
[Link](0,
(int)(pageHeightForTable * pageIndex),
(int) [Link](tableWidthOnPage),
(int) [Link](oneRowHeight *
numRowsLeft));
}
//else clip to the entire area available.
else{
[Link](0,
(int)(pageHeightForTable*pageIndex),
(int) [Link](tableWidthOnPage),
(int) [Link](pageHeightForTable));
}

[Link](scale,scale);
[Link](g2);
[Link](1/scale,1/scale);
[Link](0f,pageIndex*pageHeightForTable);
[Link](0f, -headerHeightOnPage);
[Link](0, 0,
(int) [Link](tableWidthOnPage),
(int)[Link](headerHeightOnPage));
[Link](scale,scale);
[Link]().paint(g2);
//paint header at top

return Printable.PAGE_EXISTS;
}

public static void main(String[] args) {


new Report();
}
}

Imprimir un Informe de Ventas


La cla s e Ap p le t S a le s Re p o rt . ja va im p rim e u n in fo rm e d e ve n t a s co n fila s q u e e xp á n d e n s o b re m ú lt ip le s p á g in a s co n n ú m e ro s e n la p a rt e in fe rio r d e ca d a p á g in a . Aq u í s e vé la
a p lica ció n cu a n d o s e la n za :

Ne ce s it a m o s e s t e fich e ro d e p o licía p a ra la n za r e l a p p le t :

grant {
permission [Link]
"queuePrintJob";
};
Pa ra la n za r e l a p p le t a s u m ie n d o u n fich e ro d e p o licía lla m a d o p rin t p o l y u n a p á g in a HTML lla m a d a S a le s Re p o rt . h t m l, t e cle a re m o s :

appletviewer -[Link]=
printpol [Link]
El d ia g ra m a m u e s t ra có m o s e ve rá la im p re s ió n d e l in fo rm e :
Oz it o
Depurar Applets, Aplicaciones y Servlets
Un a le y n o e s crit a d e la p ro g ra m a ció n s e n t e n cia q u e g a s t a t e m o s e l 1 0 p o r cie n d e
n u e s t ro t ie m p o e n e l p rim e r 9 0 p o r cie n t o d e u n p ro ye ct o , y e l o t ro 9 0 p o r cie n t o
d e n u e s t ro t ie m p o e n e l 1 0 p o r cie rt o re s t a n t e . Es t o s u e n a ig u a l q u e cu a lq u ie ra d e
n u e s t ro s p ro ye ct o s , p ro b a b le m e n t e e s t a m o s g a s t a n d o e l ú lt im o 1 0 p o r cie n t o e n
d e p u ra ció n e in t e g ra ció n . Mie n t ra s q u e h a y ca n t id a d d e lib ro s y d e g e n t e
a yu d á n d o n o s a e m p e za r u n p ro g ye ct o , h a y m u y p o co s re cu rs o r d is p o n ib le s p a ra
a yu d a rn o s a fin a liza rlo .
La b u e n a n o t icia e s q u e e s t e ca p ít u lo s e e n fo ca co m p le t a m e n t e e n la d e p u ra ció n , y
e n e vit a r q u e n u e s t ro p ro ye ct o s e p a s e d e t ie m p o . Us a e je m p lo s d e l m u n d o re a l
p a ra p a s e a r a t ra vé s d e p a s o s s e n cillo s p a ra d e p u ra r y fija r n u e s t ro s p ro g ra m a s .
Cu a n d o t e rm in e m o s , d e b e re m o s s e r u n o s e xp e rt o s e n e l s e g u im ie n t o d e p ro b le m a s
e n p ro g ra m a s e s crit o s e n Ja va - - a p p le t s , a p lica cio n e s y s e rvle t s - - d e t o d a s la s
fo rm a s y t a m a ñ o s .
● Re co le ct a r Evid e n cia s

● Eje cu t a r Te s t s y An á liza rlo s


● De p u ra ció n d e S e rvle t
● De p u ra ció n d e Eve n t o s AWT
● An á lis is y S e g u im ie n t o d e Pila
● Pro b le m a s d e Ve rs io n e s

¿Tienes Prisa?
S i t ie n e s u n p ro b le m a q u e t e p re s io n a y n e ce s it a s u n a re s p u e s t a a h o ra m is m o ,
e s t a t a b la p o d ría a yu d a rt e . No s d ice d ó n d e e n co n t ra r la s re s p u e s t a s a lo s
p ro b le m a s m á s co m u n e s a la s q u e p o d e m o s a cu d ir d ire ct a m e n t e .
P ro b le m a S e c c ió n
El p ro g ra m a s e cu e lg a o b lo q u e a An á lis is y S e g u im ie n t o d e Pila
Pro b le m a s e n la e je cu ció n d e l p ro g ra m a Ir d e t rá s d e la s illa co n jd b
Pro b le m a s co n Ja va We b S e rve r TM De p u ra d o r d e S e rvle t s y
An a liza r y s e g u ir Pis t a s

Oz it o
Recolección de Evidencias
El p rim e r p a s o p a ra in t e n t a r re s o lve r cu a lq u ie r p ro b le m a e s o b t e n e r t a n t a
in fo rm a ció n co m o s e a p o s ib le . S i p o d e m o s im a g n in a rn o s la e s ce n a d e u n
crim e n , s a b e m o s q u e t o d o e s t á ch e q u e a d o , ca t a lo g a d o y a n a liza d o a n t e s d e
a lca n za r cu a lq u ie r co n clu s ió n . Cu a n d o s e d e p u ra u n p ro g ra m a , n o t e n e m o s a rm a s ,
m u e s t ra s d e p e lo , n i h u e lla s d a ct ila re s , p e ro e xis t e n ca n t id a d d e e vid e n cia s q u e
p o d e m o s o b t e n e r y q u e p o d ría n co n t e n e r o a p u n t a r a la s o lu ció n ú lt im a . Es t a
s e cció n e xp líca co m o re co g e r e s a s e vid e n cia s .
● In s t a la ció n y En t o rn o

● El Pa t h d e Cla s e s
● Ca rg a d e Cla s e s
● In clu ir Có d ig o d e De p u ra d o

Instalación y Entorno
La p la t a fo rm a Ja va TM e s u n a t e cn o lo g ía ca m b ia n t e y d e rá p id o m o vim ie n t o .
Po d ría m o s t e n e r m á s d e u n a ve rs ió n in s t a la d a e n n u e s t ro s is t e m a , y e s a s
ve rs io n e s p o d ría n h a b e r s id o in s t a la d a s co m o p a rt e d e la in s t a la ció n d e o t ro s
p ro d u ct o s . En u n e n t o rn o co n ve rs io n e s m e zcla d a s , u n p ro g ra m a p u e d e
e xp e rim e n t a r p ro b le m a s d e b id o a lo s ca m b io s d e la p la t a fo rm a e n la s n u e va s
ve rs io n e s .
Po r e je m p lo , s i la s cla s e s , la s lib re ría s , o la s e n t ra d a s d e re g is t ro d e Win d o w d e
in s t a la cio n e s a n t e rio re s p e rm a n e ce n e n n u e n s t ro s is t e m a d e s p u é s d e u n a
a ct u a liza ció n , h a y u n a o p o rt u n id a d d e q u e la m e zcla d e l n u e vl s o ft wa re s e a la
ca u s a n t e d e n u e s t ro s p ro b le m a s y n e ce s it a s e r in ve s t ig a d a y e lim in a d a . La s
o p o rt u n id a d e s p a ra lo s p ro b le m a s re la cio n a d o s co n la m e zcla d e ve rs io n e s d e
s o ft wa re s e h a in cre m e n t a d o co n e l u s o d e d ife re n t e s ve rs io n e s d e h e rra m ie n t a s
p a ra d e s a rro lla r s o ft wa re d e la p la t a fo rm a Ja va .
La s e cció n s o b re Pro b le m a s co n Ve rs io n e s a l fin a l d e e s t e ca p ít u lo p ro p o rcio n a u n a
lis t a co m p le t a d e la s p rin cip a le s ve rs io n e s d e la p la t a fo rm a Ja va p a ra a yu d a rn o s a
re s o lve r n u e s t ro s p ro b le m a s co n ve rs io n e s d e s o ft wa re .

Path de Clases
En la p la t a fo rm a Ja va 2 , la va ria b le d e e n t o rn o CLAS S P ATH e s n e ce s a ria p a ra
e s p e cifica r a la p ro p ia a p lica ció n d ó n d e e s t á n s u s cla s e s , y n o la s cla s e s d e la
p la t a fo rm a Ja va co m o e n ve rs io n e s a n t e rio re s . Po r e s o e s p o s ib le q u e n u e s t ro
CLAS S P ATH a p u n t e a la s cla s e s d e la p la t a fo rm a Ja va d e s d e ve rs io n e s a n t e rio re s
y n o s ca u s e p ro b le m a s .
Pa ra e xa m in a r e l CLAS S P ATH, t e cle a m o s e s t o e n la lín e a d e co m a n d o :
W in d o w s 9 5 / 9 8 / N T:
e ch o % CLAS S PATH%

Un ix :
e ch o $ CLAS S PATH

La s cla s e s Ja va s e ca rg a n e n p rim e r lu g a r, p rim e ra fo rm a b á s ica d e la lis t a


CLAS S P ATH. S i la va ria b le CLAS S P ATH co n t ie n e u n a re fe re n cia a u n fich e ro
lib / c la s s e s . z ip , q u e a p u n t a a u n a in s t a la ció n d ife re n t e d e la p la t a fo rm a Ja va , e s t o
p e u d e ca u s a r q u e s e ca rg e n cla s e s in co m p la t ib le s .
N o t a : En la p la t a fo rm a Ja va 2 , la s cla s e s d e l s is t e m a s e e lig e n a n t e s d e
cu a lq u ie r cla s e s d e la lis t a CLAS S P ATH p a ra m in im iza r d e q u e s e
ca e g u e n cla s e s Ja va a n t e rio re s a la cla s e Ja va 2 d e l m is m o n o m b re .

La va ria b le CLAS S P ATH p u e d e o b t e n e r s u co n fig u ra ció n d e s d e la lín e a d e


co m a n d o s o d e s d e la s s e le ccio n e s d e co n fig u ra ció n co m o a q u e lla s e s p e cifica d a s e n
e l En t o rn o d e Us u a rio s o b re Win d o ws NT, u n fich e ro a u t o e x e c . b a t , o u n fich e ro d e
a rra n q u e d e l s h e ll . c s h rc s o b re Un ix.
Po d e m o s co n t ro la r la s cla s e s d e la Má q u in a Virt u a l Ja va u s a d a s p a ra co m p ila r
n u e s t ro s p ro g ra m a s co n u n a o p ció n e s p e cia l d e la lín e a d e co m a n d o s q u e n o s
p e rm it e s u m in is t ra r e l CLAS S P ATH q u e q u e rra m o s . La o p ció n y p a rá m e t ro d e la
p la t a fo rm a Ja va 2 - Xb o o t c la s s p a t h c la s s p a t h , y la s ve rs io n e s a n t e rio re s u s a n
- c la s s p a t h c la s s p a t h y - s y s c la s s p a t h c la s s p a t h . S in im p o rt a r la ve rs ió n q u e
e s t a m o s e je cu t a n d o , e l p a rá m e t ro c la s s p a t h e s p e cifica e l cla s s p a t h d e l s is t e m a y
d e l u s u a rio , y lo s fich e ro s zip o JAR a u s a r e n la co m p ila ció n .
Pa ra co m p ila r y e je cu t a r e l p ro g ra m a My a p p . ja v a co n u n CLAS S P ATH
s u m in is t ra d o e n la lín e a d e co m a n d o s , u s a m o s la s s ig u ie n t e s in s t ru ccio n e s :
W in d o w s 9 5 / 9 8 / N T:
En e s t e e je m p lo , la p la t a fo rm a Ja va e s t á in s t a la d a e n e l d ire ct o rio C:\ ja v a .
Te cle a m o s lo s s ig u ie n t e e n u n a s ó la lín e a :

javac -J-Xbootclasspath:c\java\lib\[Link];c:
\java\jre\lib\[Link];c:\java\jre\lib\[Link];.
[Link]
No n e ce s it a m o s la b a n d e ra - J p a ra e je cu t a r e l p ro g ra m a My a p p co m p ila d o , s ó lo
t e cle a m o s e s t o e n u n a s ó la lín e a :

java -Xbootclasspath:c:\java\jre\lib\[Link];c:
\java\jre\lib\[Link];. Myapp
S is t e m a s Un ix :
En e s t e e je m p lo , la p la t a fo rm a Ja va e s t á in s t a la d a e n e l d ire ct o rio
/ u s r/ lo c a l/ ja v a . Te cle a m o s t o d o e n u n a s ó la lín e a :

javac -J-Xbootclasspath:/usr/local/java/lib/[Link]:
/usr/local/java/jre/lib/[Link]:
/usr/local/java/jre/lib/[Link]:. [Link]
No n e ce s it a m o s la b a n d e ra - J p a ra e je cu t a r e l p ro g ra m a My a p p co m p ila d o , s ó lo
t e cle a m o s e s t o e n u n s ó la lín e a :

java -Xbootclasspath:/usr/local/java/jre/lib/[Link]:
/usr/local/java/jre/lib/[Link]:. Myapp

Carga de Clases
Ot ra fo rm a d e a n a liza r p ro b le m a s co n e l CLAS S P ATH e s lo ca liza r d e s d e d ó n d e
e s t á ca rg a n d o la s cla s e s n u e s t ra a p lica ció n . La o p ció n - v e rb o s e d e l co m a n d o ja v a
m u e s t ra d e d o n d e vie n e n lo s fich e ro s . z ip o . ja r cu a n d o s e ca rg a . De e s t a fo rm a ,
p o d re m o s d e cir s i vie n e n d e l fich e ro zip d e la p la t a fo rm a Ja va o d e s d e a lg ú n
fich e ro JAR d e la a p lica ció n .
Po r e je m p lo , u n a a p lica ció n p o d ría e s t a r u s a n d o la cla s e P a s s w o rd q u e e s crib im o s
p a ra e lla o p o d ría e s t a r ca rg a n d o la cla s e P a s s w o rd d e s d e la h e rra m ie n t a IDE
in s t a la d o .
De b e ría s m o s ve r ca d a n o m b re d e fich e ro zip o Ja r co m o s e vé a q u í:

$ java -verbose SalesReport


[Opened /usr/local/java/jdk1.2/solaris/jre/lib/[Link]
in 498 ms]
[Opened /usr/local/java/jdk1.2/solaris/jre/lib/[Link]
in 60 ms]
[Loaded [Link] from
/usr/local/java/jdk1.2/solaris/jre/lib/[Link]]
[Loaded [Link] from
/usr/local/java/jdk1.2/solaris/jre/lib/[Link]]
[Loaded [Link] from
/usr/local/java/jdk1.2/solaris/jre/lib/[Link]]

Incluir Código de Depurado


Un a fo rm a co m ú n d e a ñ a d ir có d ig o d e d ia g n ó s t ico a u n a a p lica ció n e s u s a
s e n t e n cia s S y s t e m . o u t . p rin t ln e n p o s icio n e s e s t ra t é g ica s d e la a p lica ció n . Es t a
t é cn ica e s t á b ie n d u ra n t e e l d e s a rro llo , p e ro d e b e m o s a co rd a rn o s d e e lim in a rla s
t o d a s a n t e s d e lib e ra r n u e s t ro p ro d u ct o . S in e m b a rg o h a y o t ra s a p ro xim a cio n e s
q u e s o n t a n s e n cilla s y q u e n o a fe ct a n a l re n d im ie n t o d e n u e s t ra a p lica ció n , y n o
m u e s t ra m e n s a je s q u e n o q u e re m o s q u e ve a e l clie n t e .

Activar la Información de Depuración en Tiempo de Ejecución


La p rim e ra a lt e rn a t iva a la s clá s ica s s e n t e n cia s d e d e p u ra ció n p rin t ln e s a ct iva r la
in fo rm a ció n d e d e p u ra ció n e n e l m o m e n t o d e la e je cu ció n . Un a ve n t a ja d e e s t o e s
q u e n o n e ce s it a m o s re co m p ila r n in g ú n có d ig o s i a p a re ce n p ro b le m a s m ie n t ra s
h a ce m o s p ru e b a s e e n la o ficin a d e l clie n t e .
Ot ra ve n t a ja e s q u e a lg u n a s ve ce s lo s p ro b le m a s d e s o ft wa re p u e d e n s e r a t rib u id o s
a co n d icio n e s d e ca rre ra d o n d e e l m is m o s e g m e n t o d e có d ig o s e co n vie rt e e n
im p re d e cib le d e b id o a l t ie m p o e n t re ca d a it e ra cció n d e l p ro g ra m a . S i co n t ro la m o s
e l có d ig o d e o p e ra ció n d e s d e la lín e a d e co m a n d o s e n lu g a r d e a ñ a d ir s e n t e n cia s
d e d e p u ra ció n p rin t ln , p o d e m o s a rre g la r la s e cu e n cia d e p ro b le m a s q u e ca u s a la s
co n d icio n e s d e ca rre ra q u e vie n e n d e s d e e l có d ig o p rin t ln . Es t a t é cn ica t a m b ié n
n o s e vit a t e n e r q u e a ñ a d ir y e lim in a r la s s e n t e n cia s p rin t ln y t e n e r q u e re co m p ila r
n u e s t ro có d ig o .
Es t a t é cn ica re q u ie re q u e u s e m o s u n a p ro p ie d a d d e l s is t e m a co m o b a n d e ra d e
d e p u ra d o y q u e in clu ya m o s có d ig o e n la a p lica ció n p a ra co m p ro b a r q u e e l va lo r d e
e s t a p ro p ie d a d d e l s is t e m a . Pa ra a ct iva r la in fo rm a ció n d e d e p u ra ció n d e s d e la
lín e a d e co m a n d o s e n e l m o m e n t o d e la e je cu ció n , a rra n ca m o s la a p lica ció n y
s e le ccio n a m o s la p ro p ie d a d d e l s is t e m a d e b u g a t ru e d e e s t a fo rm a :
ja v a - D d e b u g = t ru e Te s t Ru n t im e
El có d ig o fu e n t e q u e n e ce s it a la cla s e Te s t Ru n t im e p a ra e xa m in a r e s t a p ro p ie d a d
y co n fig u ra r la b a n d e ra b o o le a n a d e b u g d e e s e l s ig u ie n t e :

public class TestRuntime {


boolean debugmode; //global flag that we test

public TestRuntime () {

String dprop=[Link]("debug");

if ((dprop !=null) && ([Link]("yes"))){


debugmode=true;
}

if (debugmode) {
[Link]("debug mode!");
}
}
}
Crear Versiones de Depuración y Producción en Tiempo de
Compilación
Co m o s e m e n cio n ó a n t e s , u n p ro b le m co n la a d ició n d e s e n t e n cia s
S y s t e m . o u t . p rin t ln p a ra d e p u ra r n u e s t o có d ig o e s q u e d e b e m o s e lim in a rla s a n t e s
d e lib e ra r n u e s t ro p ro d u ct o . Ad e m á s d e a ñ a d ir có d ig o in n e ce s a rio , la s s e n t e cia s d e
d e p u ra ció n p rin t ln p u e d e n co n t e n e r in fo rm a ció n q u e n o q u e re m o s q u e ve a e l
clie n t e .
Un a fo rm a d e e lim in a r la s s e n t e n cia s d e d e p u ra ció n S y s t e m . o u t . p rin t ln d e
n u e s t ro có d ig o e s u s a r la s ig u ie n t e o p t im iza ció n d e l co m p ila d o r p a ra e le m in a r lo s
co rch e t e s p re - d e t e rm in a d o s d e n u e s t o s có d ig o e n e l m o m e n t o d e la co m p ila zió n y
a ct iva r a lg u n a a lg o s im ila r a u n d e p u ra d o r p re - p ro ce s a d o r.
Es t e e je m p lo u s a u n a b a n d e ra b o o le a n a e s t á t ica d m o d e q u e cu a n d o s e s e le ccio n a
a fa ls e re s u lt a e n la e lim in a ció n e l có d ig o d e d e p u ra ció n y d e la s s e n t e n cia s d e
d e p u ra ció n . Cu a n d o e l va lo r d e d m o d e s e s e le ccio n a a t ru e , e l có d ig o e s in clu id o
e n e l fich e ro cla s s co m p ila d o y e s t á d is p o n ib le e n la a p lica ció n p a ra p ro p ó s it o s d e
d e p u ra ció n .

class Debug {

//set dmode to false to compile out debug code


public static final boolean dmode=true;
}

public class TestCompiletime {

if ([Link]) { // These
[Link]("Debug message"); // are
} // removed
}

Usar Métodos de Diagnósticos


Po d e m o s u s a r m é t o d o s d e d ia g n ó s t ico p a ra s o licit a r in fo rm a ció n d e d e p u ra ció n
d e s d e la m á q u in a virt u a l Ja va ( JVM) . Lo s d o s s ig u ie n t e s m é t o d o s d e la cla s e
Ru n t im e s ig u e l la s lla m a d a s a m é t o d o s y lo s b yt e s co d e s d e la JVM q u e u s a
n u e s t ra a p lica ció n . Co m o e s t o s d o s m é t o d o s p ro d u ce n ca n t id a d d e in fo rm a ció n e s
m e jo r s e g u ir p e q u e ñ a s ca n t id a d e s d e có d ig o , in clu s o t a n p e q u e ñ a s co m o u n a lín e a
a la ve z.
Pa ra p e rm it ie s e g u ir la s lla m a d a s , t e n e m o s q u e a rra n ca n la JVM co n lo s co m a n d o s
d e l in t é rp re t e ja v a _ g o ja v a - Xd e b u g .
Pa ra lis t a r ca d a m é t o d o cu a n d o e s in vo ca d o d u ra n t e la e je cu ció n , a ñ a d im o s la
s ig u ie n t e lín e a a n t e s d e l có d ig o d o n d e q u e re m o s e m p e za r a s e g u ir la p is t a y
a ñ a d im o s la co rre s p o n d ie n t e lín e a t ra c e Me t h o d Ca lls co n e l a rg u m e n t o
s e le ccio n a d o a fa ls e p a ra d e s a ct iva r e l s e g u im ie n t o . La in fo rm a ció n d e s e g u im ie n t o
s e m u e s t ra e n la s a lid a e s t á n d a rd .

// set boolean argument to false to disable


[Link]().traceMethodCalls(true);
callMyCode();
[Link]().traceMethodCalls(false);
Pa ra ve r ca d a lín e a e n b yt e co d e s cu a n d o s e e je cu t a n , a ñ a d im o s la s ig u ie n t e lín e a
a l có d ig o d e n u e s t ra a p lica ció n :

// set boolean argument to false to disable


[Link]().traceInstructions(true);
callMyCode();
[Link]().traceInstructions(false);
Ta m b ié n p o d e m o s a ñ a d ir la s ig u ie n t e lín e a p a ra q u e n u e s t ra a p lica ció n vu e lq u e la
p ila u s a n d o e l m é t o d o d u m p S t a c k d e la cla s e Th re a d . La s a lid a d e e s t e vo lca d o
d e p ila s e e xp lica e n An á lis is y S e g u im ie n t o d e la Pila , p e ro a h o ra p o d e m o s p e n s a r
e n la p ila co m o u n a p u n t e d e lo s t h re a d s q u e s e e s t á n e je cu t a n d o e n la JVM.

[Link]().dumpStack();

Añadir Información de Depurado


La in fo rm a ció n d e va ria b le s lo ca le s n o e s t á in clu id a e n e l co ra zó n d e la s cla s e s d e l
s is t e m a d e la p la t a fo rm a Ja va . Po r e s o , s i u s a m o s u n a h e rra m ie n t a d e d e p u ra ció n
p a ra lis t a r va ria b le s lco a le s p a ra cla s e s d e l s is t e m a d o n d e co lo q u e m o s co m a n d o s
s t o p , o b t e n d re m o s la s ig u ie n t e s a lid a , in clu s o cu a n d o co m p ile m o s co n la b a n d e ra
- g co m o s u g ie re la s a lid a . Es t a s a lid a e s d e u n a s e s ió n jd b :

main[1] locals
No local variables: try compiling with -g
Pa ra o b t e n e r a cce s o a la in fo rm a ció n d e va ria b le s lco a le s , t e n e m o s q u e o b t e n e r e l
fu e n t e ( s rc . z ip o s rc . ja r) y re co m p ila rlo co n u n a b a n d e ra d e b u g . Po d e m o s
o b t e n e r e l fu e n t e d e la m a yo ría d e la s cla s e s ja va . * cla s s e s co n la d e s ca rg a d e lo s
b in a rio s d e s d e ja va . s u n . co m .

Un a ve z h a ya m o s d e s ca rg a d o e l fich e ro s rc . z ip o s rc . ja r, e xt ra e m o s s ó lo lo s
fich e ro s q u e n e ce s it a m o s . Po r e je m p lo , p a ra e xt ra e r la cla s e S t rin g , t e cle a m o s
e s t o e n la lín e a d e co m a n d o s :

unzip /tmp/[Link] src/java/lang/[Link]


o

jar -xf /tmp/[Link] src/java/lang/[Link]


Re co m p ila m o s la cla s e o cla s e s e xt ra id a s co n la o p ció n - g . Ta m b ié n p o d e m o s
a ñ a d ir n u e s t ro s p ro p io s d ia g n ó s t ico s a d icio n a le s s o b re e l fich e ro fu e n t e e n e s t e
m om e nto.

javac -g src/java/lang/[Link]

El co m p ila d o r Ja va 2 ja v a c o fre ce m á s o p cio n e s q u e s ó lo la o p ció n


o rig in a l - g p a ra có d ig o d e d e p u ra ció n , y p o d e m o s re d u cir e l t a m a ñ o d e
n u e s t ra s cla s e s u s a n d o - g :n o n e , q u e n o s o fre ce u n a re d u cció n d e u n
10% de l ta m a ño.

Pa ra e je cu t a r la a p lica ció n co n la s n u e va s cla s e s co m p ila d a s , n e ce s it a m o s u s a r la


o p cio ó n b o o t c la s s p a t h p a ra q u e e s a s cla s e s s e u t ilice n e n p rim e r lu g a r.
Te cle a m o s lo s ig u ie n t e e n u n a s ó la lín e a co n e s p a cio a n t e s d e m y a p p .
P la t a fo rm a Ja v a 2 W in 9 5 / N T:
Es t e e je m p lo a s u m e q u e la p la t a fo rm a Ja va e s t á in s t a la d a e n c :\ ja v a , y lo s
fich e ro s fu e n t e e s t á n e n c :\ ja v a \ s rc :

jdb -Xbootclasspath:c:\java\src;c:\java\jre\lib\[Link];c:
\java\jre\[Link];. myapp
S is t e m a s Un ix :
Es t e e je m p lo a s u m e q u e la p la t a fo rm a Ja va e s t á in s t a la d a e n / u s r/ lo c a l/ ja v a , y
lo s fich e ro s fu e n t e e s t á n e n / u s r/ lo c a l/ ja v a / s rc .

jdb -Xbootclasspath:/usr/java/src;
/usr/java/jre/lib/[Link];
/usr/java/jre/[Link];. myapp
La s ig u ie n t e ve z q u e e je cu t e m o s e l co m a n d o lo c a ls ve re m o s lo s ca m p o s in t e rn o s
d e la cla s e q u e d e s e a m o s a n a liza r.

Oz it o
Ejecutar Tests y Analizar
S i t o d a vía t e n e m o s p ro b le m a s in clu s o d e s p u é s d e h a b e r re vis a d o lo s p ro b le m a s d e
in s t a la ció n y d e e n t o rn o y h a b e r in clu id o có d ig o d e d e p u ra ció n , e s e l m o m e n t o d e
u s a r h e rra m ie n t a s p a ra p ro b a r y a n a liza r n u e s t ro p ro g ra m a .
● Tra b a ja r De t rá s d e la S illa co n jd b

● Pru e b a S e n cilla co n jd b
● De p u ra ció n Re m o t a
● Us a r Pilo t o Au t o m á t ico
● Cre a r u n Dia rio d e S e s ió n

Trabajar Detrás de la Silla con jdb


Au n q u e h a y a lg u n a s m u y b u e n a s h e rra m ie n t a s IDE e n e l m e rca d o , la h e rra m ie n t a
d e d e p u ra ció n Ja va TM, jd b y s u s s u ce s o re s t ie n e n u n p a p e l im p o rt a n t e q u e ju g a r e n
la p ru e b a y d e p u ra ció n d e p ro g ra m a . a lg u n a s ve n t a ja s d e jd b s o b re lo s IDE e s q u e
e s g ra t is , e s in d e p e n d ie n t e d e la p la t a fo rm a ( a lg u n o s IDE n o lo s o n ) , y s e e je cu t a
co m o u n p ro ce s o s e p a ra d o a l p ro g ra m a q u e e s t á d e p u ra n d o . El b e n e ficio d e
e je cu t a r jd b co m o u n p ro ce s o s e p a ra d o e s q u e p o d e m o s a ñ a d ir u n a s e s ió n d e
d e p u ra d o a u n p ro g ra m a q u e e s t á e je cu t á n d o s e .
El la d o n e g a t ivo d e u s a r jd b e s q u e s ó lo h a y u n in t e rfa ce d e lín e a d e co m a n d o s , y
t ra t a co n e l m is m o có d ig o q u e e s t á m o s t ra t a n d o d e d e p u ra r. Es t o s ig n ifica q u e s i
h a y u n b u g e n la m á q u in a virt u a l Ja va , jd b s e p o d ría e q u ivo ca r a l in t e n t a r
d ia g n is t ica r e l m is m o b u g !
La n u e va a rq u it e ct u ra JBUG s e cre ó p a ra re s o lve r e s t o s p ro b le m a s e n e l jd b .
JBUG, e n t re o t ra s co s a s , p ro p o rcio n a u n API d e a yu d a d e d e p u ra ció n e n la
m á q u in a virt u a l Ja va lla m a d o "Ja va VM De b u g In t e rfa ce " ( JVMDI) . Es t e a yu d a n t e
s e co m u n ica co n e l d e p u ra d o r d e s d e e l fin a l u s a n d o e l "Ja va De b u g Wire Pro t o co l"
( JDWP) . La d e p u ra ció n d e s d e e l fin a l u s a e l in t e rfa ce re m o t o "Ja va De b u g
In t e rfa ce " ( JDI) p a ra e n via r y re cib ir co m a n d o s o b re e l p ro t o co lo JDWP. JBu g e s t á
d is p o n ib le p a ra la p la t a fo rm a Ja va 2 , y t ie n e u n e s t ilo jd b q u e a p re n d e re m o s m á s
a d e la n t e .

Prueba Sencilla con jdb


De vu e lt a a la clá s ica h e rra m ie n t a jd b . Aq u í t e n e m o s u n o s e n cillo s p a s o s p a ra
a n a liza r u n p ro g ra m a u s a n d o jd b . Es t e p rim e r e je m p lo d e p u ra u n p ro g ra m a d e la
a p lica ció n s t a rt u p . El e je m p lo De p u ra ció n Re m o t a m u e s t ra co m o co n e ct a rlo co n
u n a a p lica ció n q u e s e e s t á e je cu t a n d o .

Arrancar la Sesión
Pa ra e m p e za r u n a s e s ió n d e d e p u ra d o , co m p ila m o s e l p ro g ra m a
S im p le Jd b Te s t . ja va co n in fo rm a ció n co m p le t a d e d e p u ra d o u s a n d o ja v a c y la
b a n d e ra - g . En e s t e e je m p lo , e l p ro g ra m a S im p le Jd b Te s t . ja v a e s u n a a p lica ció n
p e ro t a m b ié n p o d ría s e r u n a p p le t . Lo s p ro ce d im ie n t o s p a ra d e p u ra r a p lica cio n e s
s o n ig u a le s q u e p a ra d e p u ra r a p p le t s u n a q u e s e h a e m p e za d o la s e s ió n d e
d e p u ra d o .

javac -g [Link]
Lu e g o a rra n ca m o s la h e rra m ie n t a jd b co n e l n o m b re d e la cla s e d e l p ro g ra m a
co m o p a rá m e t ro :

jdb SimpleJdbTest
Initializing jdb...
0xad:class(SimpleJdbTest)
Pa ra d e p u ra r u n a p p le t e n e l a p p le t v ie w e r u s a m o s e l p a rá m e t ro - d e b u g co m o e n
e s t e e je m p lo :

$ appletviewer -debug [Link]


Initializing jdb...
0xee2f9808:class([Link])
>

Seleccionar un método de ruptura y métodos de listado

En e s t e p u n t o , s ó lo s e h a ca rg a d o la cla s e S im p le Jd b Te s t ; n o s e h a lla m a d o a l
co n s t ru ct o r d e la cla s e . Pa ra h a ce r q u e e l jd b s e p a re cu a n d o e l p ro g ra m a s e
in icia liza p o r p rim e ra ve z, p o n e m o s u n s t o p , o p u n t o d e ru p t u ra , e n e l co n s t ru ct o r
u s a n d o e l co m a n d o s t o p in . Cu a n d o s e s e le ccio n a n p u n t o s d e ru p t u ra , in s t u irm o s
a l jd b a e je cu t a r n u e s t ro p ro g ra m a u s a n d o e l co m a n d o ru n d e e s t a fo rm a :

stop in SimpleJdbTest.<init>
Breakpoint set in SimpleJdbTest.<init>
run
run SimpleJdbTest
running ...
main[1]
Breakpoint hit: SimpleJdbTest.<init>
(SimpleJdbTest:10)
La h e rra m ie n t a jd b s e p a ra e n la p rim e ra lín e a d e l co n s t ru ct o r. Pa ra lis t a r lo s
m é t o d o q u e fu e ro n lla m a d o s h a s t a lle g a r a e s t e p u n t o d e ru p t u ra , in t ro d u cim o s e l
co m a n d o w h e re :

main[1] where
[1] SimpleJdbTest.<init> (SimpleJdbTest:10)
[2] [Link] (SimpleJdbTest:29)
Lo s m é t o d o s n u m e ra d o s d e la lis t a e s e l ú lt im o m a rco d e p ila q u e h a a lca n za d o la
JVM. En e s t e ca s o e l ú lt im o m a rco d e p u la e s e l co n s t ru ct o r S im p le Jd b Te s t q u e
fu e lla m a d o d e s d e e l S im p le Jd b Te s t m a in .
S ie m p re q u e s e lla m a a u n n u e vo m é t o d o , s e s it ú a e n e s t a lis t a d e p ila . La
t e cn o lo g ía Ho t s p o t co n s ig u e a lg u n a d e s u s g a n a n cia s d e ve lo cid a d e lim a n d o u n
n u e vo m a rco d e p ila cu a n d o s e lla m a a u n n u e vo m é t o d o . Pa ra o b t e n e r u n a
a p re cia ció n g e n e ra l d e d ó n d e s e p a ró e l có d ig o , in t ro d u cim o s e l co m a n d o lis t .

main[1] list
6 Panel p;
7 Button b;
8 int counter=0;
9
10 SimpleJdbTest() {
11 setSize(100,200);
12 setup();
13 }
14 void setup (){

Localizar la Fuente

S i e l fu e n t e d e l fich e ro cla s s p a ra d o n o e s t á d is p o n ib le e n e l p a t h a ct u a l, p o d e m o s
d e cirle a jd b d o n d e e n co n t ra r e l fu e n t e co n e l co m a n d o u s e d á n d o le e l d ire ct o rio
fu e n t e co m o u n p a rá m e t ro . En e l s ig u ie n t e e je m p lo e l fu e n t e e s t á u n s u b d ire ct o rio
o ca rp e t a lla m a d o b o o k .

main[1] list
Unable to find [Link]
main[1] use book
main[1] list
6 Panel p;
7 Button b[];
8 int counter=0;
9
10 => SimpleJdbTest() {

Buscar un Método

Pa ra ve r q u e s u ce d e e n e l m é t o d o s e t u p d e S im p le Jd b Te x t , u s a m o s e l co m a n d o
s t e p p a ra p a s a r a t ra vé s d e s u s 4 lín e a s y ve r lo q u e p a s a .

main[1] step
main[1]
Breakpoint hit: [Link].<init> (Frame:222)
Pe ro e s p e ra u n m in u t o ! Es t e e s a h o ra e l co n s t ru ct o r d e la cla s e Fra m e ! S i lo
s e g u im o s p a s a re m o s a t ra vé s d e l co n s t ru ct o r d e la cla s e Fra m e y n o e l d e la cla s e
S im p le Jd b Te x t . Po rq u e S im p le Jd b Te s t d e s cie n d e d e la cla s e Fra m e , e l
co n s t ru ct o r p a d re , q u e e n e s t e ca s o e s Fra m e , e s lla m a d o s in a vis a rn o s .

El comando step up

Po d ría m o s co n t in u a r p a s a n d o y e ve n t u a lm e n t e vo lve ría m o s a l co n s t ru ct o r d e


S im p le Jd b Te s t , p e ro p a ra re t o rn a r in m e d ia t a m e n t e p o d e m o s u s a r e l co m a n d o
s t e p u p p a ra vo lve r a l co n s t ru ct o r d e S im p le Jd b Te s t .

main[1] step up
main[1]
Breakpoint hit: SimpleJdbTest.<init>
(SimpleJdbTest:8)

El comando next

Ta m b ié n p o d e m o s u s a r e l co m a n d o n e x t p a ra o b t e n e r e l m é t o d o s e t u p . En e s t e
s ig u ie n t e e je m p lo , la h e rra m ie n t a jd b h a a p ro xim a d o q u e e l fich e ro fu e n t e e s t á
fu e ra d e l co n s t ru ct o r cu a n d o p ro ce s ó e l ú lt im o co m a n d o s t e p u p . Pa ra vo lve r a l
co n s t ru ct o r, u s a m o s o t ro co m a n d o s t e p , y p a ra o b t e n e r e l m é t o d o s e t u p , u s a m o s
u n co m a n d o n e x t . Pa ra d e p u ra r e l m é t o d o s e t u p , p o d e m o s s t e p ( p a s a r) a t ra vé s
de l m é todo s e tu p .

main[1] step
Breakpoint hit: SimpleJdbTest.<init>
(SimpleJdbTest:11)
main[1] list
7 Button b[]=new Button[2];
8 int counter=0;
9
10 SimpleJdbTest() {
11 setSize(100,200);<
12 setup();
13 }
14 void setup (){
15 p=new Panel();
16 }
main[1] next
Breakpoint hit: SimpleJdbTest.<init>
(SimpleJdbTest:12)
main[1] step
Breakpoint hit: [Link] (SimpleJdbTest:15)

El comando stop in

Ot ra fo rm a d e o b t e n e r e l m é t o d o s e t u p e s u s a r e l co m a n d o s t o p in
S im p le Jd b Te s t . s e t u p . Po d e m o s lis t a r e l fu e n t e d e n u e vo p a ra s a b e r d o n d e
e sta m os:

main[1] list
11 setSize(100,200);
12 setup();
13 }
14 void setup (){
15 => p=new Panel();
16 b[0]= new Button("press");
17 [Link](b[0]);
18 add(p);
19

El comando print

Lo p rim e ro q u e h a ce e l m é t o d o s e t u p e s cre a r u n P a n e l p . S i in t e n t a m o s m o s t ra r
e l va lo r d e p co n e l co m a n d o p rin t p , ve re m o s q u e e s t e va lo r e s n u ll.

main[1] print p
p = null
Es t o o cu rre p o rq u e la lín e a a ú n n o s e h a e je cu t a d o y p o r lo t a n t o a l ca m p o p n o s e
le h a a s ig n a d o n in g ú n va lo r. Ne ce s it a m o s p a s a r s o b re la s e n t e n cia d e a s ig n a ció n
co n e l co m a n d o n e x t y lu e g o u s a r d e n u e vo e l co m a n d o p rin t p .

main[1] next

Breakpoint hit: [Link] (SimpleJdbTest:16)


main[1] print p
p = [Link][panel0,0,0,0x0,invalid,
layout=[Link]]

Seleccionar Puntos de Ruptura en Métodos Sobrecargado

Au n q u e p a s a r a t ra vé s d e cla s e s p e q u e ñ a s e s rá p id o , co m o re g la g e n e ra l e n
g ra n d e s a p lica cio n e s , e s m á s rá p id o u s a r p u n t o s d e ru p t u ra . Es t o e s a s í p o rq u e jd b
t ie n e u n co n ju n t o d e co m a n d o s m u y s im p le s y n o t e in e a t a jo s , p o r e s o ca d a
co m a n d o t e in e q u e s e r p e g a d o o t e cle a d o p o r co m p le t o .
Pa ra s e le ccio n a r u n p u n t o d e ru p t u ra e n la cla s e Bu t t o n , u s a m o s s t o p in
ja v a . a w t . Bu t t o n . < in it >
main[1] stop in [Link].<init>
[Link].<init> is overloaded,
use one of the following:
void <init>
void <init>[Link])
El m e n s a je e xp lica p o rq u e jd b n o p u e d e p a ra r e n e s t e m é t o d o s in m á s
in fo rm a ció n , p e ro e l m e n s a je n o s e xp lica q u e s ó lo n e ce s it a m o s s e r e xp lícit o s e n e l
t ip o d e re t o rn o p a ra lo s m é t o d o s s o b re ca rg a d o s e n lo s q u e q u e re m o s p a ra r. Pa ra
p a ra r e n e l co n s t ru ct o r d e Bu t t o n q u e cre a e s t e Bu t t o n , u s a m o s s t o p in
ja v a . a w t . Bu t t o n . < in it > ja v a . la n g . S t rin g ) .

El comando cont

Pa ra co n t in u a r la s e s ió n jd b , u s a m o s e l co m a n d o c o n t . La s ig u ie n t e ve z q u e e l
p ro g ra m a cre e u n Bu t t o n co n u n co n s t ru ct o r S t rin g , jd b s e p a ra rá p a ra q u e
p o d a m o s e xa m in a r la s a lid a .

main[1] cont
main[1]
Breakpoint hit: [Link].<init>
(Button:130)
S i la cla s e Bu t t o n n o h a s id o co m p ila d a co n in fo rm a ció n d e d e p u ra d o co m o s e
d e s crib ió a n t e s , n o ve re m o s lo s ca m p o s in t e rn o s d e s d e e l co m a n d o p rin t .

Limpiar Puntos de Ruptura

Pa ra lim p ia r e s t e p u n t o d e ru p t u ra y q u e n o p a re ca d a ve z q u e s e cre e u n Bu t t o n
s e u s a e l co m a n d o c le a r. Es t e e je m p lo u s a e l co m a n d o c le a r s in a rg u m e n t o s p a ra
m o s t ra r la lis t a d e p u n t o s d e ru p t u ra a ct u a le s , y e l co m a n d o c le a r co n e l
a rg u m e n t o ja v a . a w t . Bu t t o n :1 3 0 . p a ra b o rra r e l p u n t o d e ru p t u ra
ja v a . a w t . Bu t t o n :1 3 0 . .

main[1] clear
Current breakpoints set:
SimpleJdbTest:10
[Link]
main[1] clear [Link]
Breakpoint cleared at [Link]: 130

Mostrar Detalles del Objeto

Pa ra m o s t ra r lo s d e t a lle s d e u n o b je t o , u s a m o s e l co m a n d o p rin t p a ra lla m a r a l


m é t o d o t o S t rin g d e l o b je t o , o u s a r e l co m a n d o d u m p p a ra m o s t ra r lo s ca m p o s y
va lo re s d e l o b je t o .
Es t e e je m p lo p o n e u n p u n t o d e ru p t u ra e n la lín e a 1 7 y u s a lo s co m a n d o s p rin t y
d u m p p a ra im p rim ir y vo lca r e l p rim e r o b je t o Bu t t o n d e l a rra y d e o b je t o s Bu t t o n .
La s a lica d e l co m a n d o Th e d u m p h a s id o a b re via d a .

main[1] stop at SimpleJdbTest:17


Breakpoint set at SimpleJdbTest:17
main[1] cont
main[1]
Breakpoint hit: [Link] (SimpleJdbTest:17)

main[1] print b[0]


b[0] = [Link][button1,0,0,0x0,invalid,
label=press]
main[1] dump b[0]
b[0] = ([Link])0x163 {
private int componentSerializedDataVersion = 2
boolean isPacked = false
private [Link]
changeSupport = null
long eventMask = 4096
transient [Link]
inputMethodListener = null
....
[Link] actionCommand = null
[Link] label = press
}

Finalizar la Sesión

Es t o fin a liza e l s e n cillo e je m p lo jd b . Pa ra t e rm in a r u n a s e s ió n jd b , s e u s a e l


co m a n d o q u it :

0xee2f9820:class(SimpleJdbTest)
> quit

Depuración Remota
El jd b e s u n p ro ce s o d e d e p u ra ció n e xt e rn o , lo q u e s ig n ifica q u e d e p u ra e l
p ro g ra m a e n viá n d o le m e n s a je s h a cia y d e s d e e l a yu d a n t e d e la m á q u in a virt u a l
Ja va . Es t o h a ce r m u y fá cil la d e p u ra ció n d e u n p ro g ra m a e n e je cu ció n , y n o s a yu d a
a d e p u ra r u n p ro g ra m a q u e in t e ra ct u a co n e l u s u a rio fin a l. Un a s e s ió n d e
d e p u ra ció n re m o t a d e s d e la lín e a d e co m a n d o s n o in t e rfie re co n la o p e ra ció n
n o rm a l d e la a p lica ció n .

Arrancar la Sesión
An t e s d e la ve rs ió n Ja va 2 , lo ú n ico q u e s e re q u e ría p a ra p e rm it ir la d e p u ra ció n
re m o t a e ra a rra n ca r e l p ro g ra m a co n la b a n d e ra - d e b u g co m o p rim e r a rg u m e n t o ,
y s i la a p lica ció n u s a lib re ría s n a t iva s , t e rm in a n o s e l n o m b re d e la lib re ría co n u n a
_ g . Po r e je m p lo , n e ce s it a ría m o s u n a co p ia d e la lib re ría n a t iv e lib . d ll co m o
n a t iv e lib _ g . d ll p a ra d e p u ra r co n e s t a lib re ría .
En Ja va 2 , la s co s a s s o n u n p o co m á s co m p lica d a . Ne ce s it a m o s d e cirla a la JVM
d ó n d e e s t á e l fich e o t o o ls . ja r u s a n d o la va ria b le CLAS S P ATH. El fich e ro t o o ls . ja r
n o rm a lm e n t e s e e n cu e n t ra e n e l d ire ct o rio lib d e la in s t a la ció n d e la p la t a fo rm a
Ja va .
Ta m b ié n n e ce s it a m o s d e s a ct iva r e l co m p ila d o r "Ju s t In Tim e " ( JIT) s i e xis t e . Es t e
co m p ila d o r s e d e s a ct iva s e le ccio n a d o la p ro p ie d a d ja v a . c o m p ile r a N ON E o a u n a
ca d e n a va cía . Fin a lm e n t e , co m o la o p ció n - c la s s p a t h s o b re e s crib e cu a lq u ie r
cla s s p a t h s e le ccio n a d o p o r e l u s u a rio , t a m b ié n n e ce s it a m o s a ñ a d ir e l CLAS S P ATH
n e ce s a rio p a ra n u e s t ra a p lica ció n .
Po n ié n d o t o d o e s t o ju n t o , a q u í e s t á lín e a d e co m a n d o s n e ce s a ria p a ra a rra n ca r u n
p ro g ra m a e n m o d o d e d e p u ra ció n re m o t o . S e p o n e t o d o e n u n a s ó la lín e a e
in clu im o s t o d a s la s cla s e s n e ce s a ria s e n la lín e a d e co m a n d o s .

Windows:

$ java -debug -classpath C:\java\lib\[Link];.


-[Link]=NONE SimpleJdbTest
Agent password=4gk5hm

Unix:

$ java -debug -classpath /usr/java/lib/[Link]:.


-[Link]=NONE SimpleJdbTest
Agent password=5ufhic
La s a lid a e s e l p a s s wo rd d e l a g e n t e ( e n e s t e ca s o , 4 g k 5 h m ) s i e l p ro g ra m a s e
a rra n ca d e fo rm a s a t is fa ct o ria . La p a s s wo rd d e a g e n t e s e s u m in is t ra cu a n d o s e
a rra n ca jd b p a ra q u e é s t e p e u d a e n co n t ra r la a p lica ció n a rra n ca d a co rre s p o n d ie n t e
e n m o d o d e p u ra ció n e n e s a m á q u in a .
Pa ra a rra n ca r jd b e n m o d o d e p u ra ció n re m o t o , s u m in is t ra m o s u n n o m b re d e h o s t ,
q u e p u e d e s e r la m is m a m á q u in a d o n d e s e e s t á e je cu t a n d o e l p ro g ra m a o
lo c a lh o s t s i e s t á m o s d e p u ra n d o e n la m is m a m á q u in a q u e e l p ro g ra m a re m o t o , y
la p a s s wo rd d e a g e n t e .

jdb -host localhost -password 4gk5hm

Listar Threads
Un a ve z d e n t ro d e la s e s ió n jd b , p o d e m o s lis t a r lo s t h re a d s a ct ivo s a ct u a lm e n t e ,
co n e l co m a n d o t h re a d s , y u s a r e l co m a n d o t h re a d < t h re a d n u m b e r> , p o r
e je m p lo , t h re a d 7 p a ra s e le ccio n a r u n t h re a d p a ra a n a liza rlo . Un a ve z
s e le ccio n a d o u n t h re a d , u s a m o s e l co m a n d o w h e re p a ra ve r lo s m é t o d o s q u e h a n
s id o lla m a d o s p o r e s t e t h re a d .

$ jdb -host arsenal -password 5ufhic


Initializing jdb...
> threads
Group system:
1. ([Link])0x9 Signal dispatcher
cond. waiting
2. ([Link] 0xb Reference Handler
$ReferenceHandler) cond. waiting
3. ([Link]. Finalizer
Finalizer cond. waiting
$FinalizerThread)0xd

4. ([Link])0xe Debugger agent


running
5. ([Link]. Breakpoint handler
Handler)0x10 cond. waiting
6. ([Link]. Step handler
StepHandler)0x12 cond. waiting
Group main:
7. ([Link]. AWT-EventQueue-0
EventDispatchThread) cond. waiting
0x19
8. ([Link]. PostEventQueue-0
PostEventQueue)0x1b cond. waiting
9. ([Link])0x1c AWT-Motif
running
10. ([Link])0x1d TimerQueue
cond. waiting
11. ([Link]. Screen Updater
ScreenUpdater)0x1f cond. waiting
12. ([Link])0x20 Thread-0
cond. waiting
> thread 7
AWT-EventQueue-0[1] where
[1] [Link] (native method)
[2] [Link] (Object:424)
[3] [Link]
(EventQueue:179)
[4] [Link]
(EventDispatchThread:67)

Listar el Fuente

Pa ra lis t a r e l fu e n t e , e l t h re a d n e ce s it a s e r s u s p e n d id o u s a n d o e l co m a n d o
s u s p e n d . Pa ra p e rm it ir q u e u n t h re a d co n t in ú e u s a m o s e l co m a n d o re s u m e . El
e je m p lo u s a re s u m e 7 .

AWT-EventQueue-0[1] suspend 7
AWT-EventQueue-0[1] list
Current method is native
AWT-EventQueue-0[1] where
[1] [Link] (native method)
[2] [Link] (Object:424)
[3] [Link]
(EventQueue:179)
[4] [Link]
(EventDispatchThread:67)
AWT-EventQueue-0[1] resume 7

Finalizar la Sesión

Cu a n d o fin a liza m o s d e d e p u ra r re m o t a m e n t e e s t e p ro g ra m a , e lim in a m o s cu a lq u ie r


p u n t o d e ru p t u ra re s t a n t e a n t e s d e s a lir d e la s e s ió n d e d e p u ra ció n . Pa ra o b t e n e r
u n a lis t a d e e s t o s p u n t o s d e ru p t u ra u s a m o s e l co m a n d o c le a r, y p a ra e lim in a rlo s
in t ro d u cim o s e l co m a n d o c le a r c la s s :lin e n u m b e r d e e s t a fo rm a :

main[1] clear
Current breakpoints set:
SimpleJdbTest:10

main[1] clear SimpleJdbTest:10


main[1] quit

Usar el Piloto Automático


Un t ru co p o co co n o cid o d e l jd b e s e l fich e ro d e a rra n q u e jd b . jd b
a u t o m á t ica m e n t e b u s ca u n fich e ro lla m a d o jd b . in i e n e l d ire ct o rio u s e r. h o m e . S i
t e n e m o s va rio s p ro ye ct o , e s u n a b u e n a id e a s e le ccio n a r u n a p ro p ie d a d u s e r. h o m e
d ife re n t e p a ra ca d a p ro ye ct o cu a n d o a rra n q u e m o s jd b . Pa ra a rra n ca r jd b co n u n
fich e ro jd b . in i e n e l d ire ct o rio a ct u a l, t e cle a m o s e s t o :

jdb -[Link]=.
El fich e ro jd b . in i n o s p e rm it e s e le ccio n a r lo s co m a n d o s d e co n fig u ra ció n d e jd b ,
co m o u s e , s in t e n e r q u e in t ro d u cir lo s d e t a lle s ca d a ve z q u e e je cu t a m o s jd b . El
s ig u ie n t e fich e ro d e e je m p lo jd b . in i e m p ie za u n a s e s ió n jd b p a ra la cla s e Fa c Te s t .
In clu ye lo s fu e n t e s d e la p la t a fo rm a Ja va e n e l p a t h d e fu e n t e s y le p a s a e l
p a rá m e t ro n ú m e ro 6 a l p ro g ra m a . S e e je cu t a y p a ra e n la lín e a 1 3 , m u e s t ra la
m e m o ria lib re , y e s p e ra u n a e n t ra d a p o s t e rio r.

load FacTest
stop at FacTest:13
use /home/calvin/java:/home/calvin/jdk/src/
run FacTest 6
memory
Aq u í e s t á s a lid a d e la e je cu ció n d e l fich e ro jd b . in i:

$ jdb -[Link]=/home/calvin/java
Initializing jdb...
0xad:class(FacTest)
Breakpoint set at FacTest:13
running ...
Free: 662384, total: 1048568
main[1]
Breakpoint hit: [Link] (FacTest:13)
main[1]
Po d ría m o s p e g u n t a rn o s s i lo s fich e ro s jd b . in i p u e d e n u s a rs e p a ra co n t ro la r u n a
s e s ió n jd b co m p le t a . De s a fo rt u n a d a m e n t e , lo s co m a n d o s e n u n fich e ro jd b . in i s e
e je cu t a n d e fo rm a s ín cro n a , y jd b n o e s p e ra h a s t a q u e s e lle g u e a u n p u n t o d e
ru p t u ira p a ra e je cu t a r e l s ig u ie n t e co m a n d o . Po d e m o s a ñ a d ir re t a rd o s a rt ificia le s
co n co m a n d o s h e lp re p e t id o s , p e ro n o h a y g a ra n t ía d e q u e e l t h re a d s e s u s p e n d a
cu a n d o n e ce s it a m o s q u e lo h a g a .

Crear un Diálogo de Sesión


Po d e m o s u s a r u n a ca ra ct e rís t ica p o co co n o cid a d e jd b p a ra o b t e n e r u n re g is t ro d e
n u e s t ra s e s ió n d e d e p u ra ció n . La s a lid a e s s im ila r a la q u e ve ría m o s s i
e je cu t á ra m o s jd b - d b g t ra c e .
Pa ra p e rm it ir e l d ia rio jd b , cre a m o s u n fich e ro lla m a d o . a g e n t Lo g e n e l d ire ct o rio
d o n d e e s t á m o s e je cu t a n d o jd b o ja v a - d e b u g . En e l fich e ro . a g e n t Lo g , p o n e m o s
e l n o m b re d e l fich e ro e n e l q u e s e e s crib a la in fo rm a ció n d e la s e s ió n e n la p rim e ra
lín e a . Po r e je m p lo , u n fich e ro . a g e n t Lo g p o d ría t e n e r e s t o s co n t e n id o s :

jdblog
Cu a n d o lu e g o e je cu t a m o s jd b o ja v a - d e b u g , ve re m o s q u e la in fo rm a ció n d e
s e s ió n jd b s e m u e s t ra d e e s t a fo rm a . Po d e m o s u s a r e s t a in fo rm a ció n p a ra
re cu p e ra r lo s p u n t o s d e ru p t u ra y lo s co m a n d o s in t ro d u cid o s p o r s i n e ce s it a m o s
re p ro d u cir e s t a s e s ió n d e d e p u ra ció n .
---- debug agent message log ----
[debug agent: adding Debugger agent to
system thread list]
[debug agent: adding Breakpoint handler
to system thread list]
[debug agent: adding Step handler to
system thread list]
[debug agent: adding Finalizer to
system thread list]
[debug agent: adding Reference Handler to
system thread list]
[debug agent: adding Signal dispatcher to
system thread list]
[debug agent: Awaiting new step request]
[debug agent: cmd socket:
Socket[addr=localhost/[Link],
port=38986,localport=3 8985]]
[debug agent: connection accepted]
[debug agent: dumpClasses()]
[debug agent: no such class: [Link]]
[debug agent: Adding breakpoint bkpt:main(0)]
[debug agent: no last suspended to resume]
[debug agent: Getting threads for [Link]]

Oz it o
Depurar Servlets
Po d e m o d e p u ra r s e rvle t s co n lo s m is m o s co m a n d o s jd b u s a d o s p a ra d e p u ra r u n
a p p le t o u n a a p lica ció n . JS DK "Ja va TM S e rvle t De ve lo p m e n t Kit " p ro p o rcio n a u n a
p ro g ra m a lla m a d o s e rv le t ru n n e r q u e n o s p e rm it e e je cu t a r u n s e rvle t s in u n
n a ve g a d o r we b . En la m a yo ría d e lo s s is t e m a s , e s t e p ro g ra m a s im p le m e n t e
e je cu t a e l co m a n d o ja v a s u n . s e rv le t . h t t p . Ht t p S e rv e r. Po r lo t a n t o , p o d e m o s
a rra n ca r la s e s ió n jd b co n la cla s e Ht t p S e rv e r.
Un p u n t o im p o rt a n t e a re co rd a r cu a n d o d e p u ra m o s s e rvle t s e s q u e e l s e rvid o r We b
Ja va y s e rv le t ru n n e r re a liza n la ca rg a y d e s ca rg a s d e s e rvle t s , p e ro n o in clu ye n
e l d ire ct o rio s e rv le t s e n e l CLAS S P ATH. Es t o s ig n ifica q u e lo s s e rvle t s s e ca rg a n
u s a n d o u n ca rg a d o r d e cla s e s p e rs o n a liza d o y n o p o r e l ca rg a d o r d e cla s e s p o r
d e fe ct o d e l s is t e m a .
● Eje cu t a r s e rvle t ru n n e r e n Mo d o De p u ra ció n

● Eje cu t a r e l Ja va We b S e rve r TM e n m o d o De p u ra ció n

Ejecutar servletrunner en Modo Depuración


En e s t e e je m p lo , s e in clu ye e l d ire ct o rio d e e je m p lo s s e rv le t s e n e l CLAS S P ATH.
Co n fig u ra m o s e l CLAS S PATH e n m o d o d e p u ra ció n d e e s t a fo rm a :

Unix

$ export CLASSPATH=./lib/[Link]:./examples:$CLASSPATH

Windows

$ set CLASSPATH=lib\[Link];examples;%classpath%
Pa ra a rra n ca r e l p ro g ra m a s e rvle t ru n n e r, p o d e m o s e je cu t a r e l s crip t d e a rra n q u e
s u m in is t ra d o lla m a d o s e rv le t ru n n e r o s im p le m e n t e s u m in is t ra m o s la s cla s e s
s e rvle t ru n n e r co m o p a rá m e t ro s d e jd b . Es t e e je m p lo u s a e l p a rá m e t ro
s e rvle t ru n n e r.

$ jdb [Link]
Initializing jdb...
0xee2fa2f8:class([Link])
> stop in [Link]
Breakpoint set in [Link]
> run
run [Link]
running ...
main[1] servletrunner starting with settings:
port = 8080
backlog = 50
max handlers = 100
timeout = 5000
servlet dir = ./examples
document dir = ./examples
servlet propfile = ./examples/[Link]
Pa ra e je cu t a r S n o o p S e rv le t e n m o d o d e p u ra ció n , in t ro d u cim o s la s ig u ie n t e URL
d o n d e y o u rm a c h in e e s la m á q u in a d o n d e a rra n ca m o s e l s e rvle t ru n n e r y 8 0 8 0 e s
e l n ú m e ro d p u e rt o m o s t ra d o e n la s s e le ccio n e s d e s a lid a .

[Link]
En e s t e e je m p lo jd b p a ra e n la p rim e ra lín e a d e l m é t o d o d o Ge t d e l s e rvle t . El
n a ve g a d o r e s p e ra u n a re s p u e s t a d e n u e s t ro s e rvle t h a s t a q u e s e p a s e e l t im e o u t .

main[1] SnoopServlet: init

Breakpoint hit: [Link] (SnoopServlet:45)


Thread-105[1]
Po d e m o u s a r e l co m a n d o lis t p a ra s a b e r d ó n d e s e h a p a ra d o jd b e n e l fu e n t e .

Thread-105[1] list
41 throws ServletException, IOException
42 {
43 PrintWriter out;
44
45 => [Link]("text/html");
46 out = [Link] ();
47
48 [Link]("<html>");
49 [Link]("<head>
<title>Snoop Servlet
</title></head>");
Thread-105[1]
El s e rvle t p u e d e co n t in u a r u s a n d o e l co m a n d o c o n t .

Thread-105[1] cont

Ejecutar el Java Web Server en Modo Depuración


La ve rs ió n JS DK n o co n t ie n a la s cla s e s d is p o n ib le s e n e l Ja va We b S e rve r y
t a m b ié n t ie n e s u p ro p ia co n fig u ra ció n s e rvle t e s p e cia l. S i n o p o d e m o s e je cu t a r
n u e s t ro s e rvle t d e s d e s e rv le t ru n n e r, o t ra o p ció n p u e d e s e r e je cu t a r e l s e rvid o r
we b Ja va e n m o d o d e p u ra ció n .
Pa ra h a ce r e s t o a ñ a d im o s la b a n d e ra - d e b u g co m o e l p rim e r p a rá m e t ro d e s p u é s
d e l p ro g ra m a ja v a . Po r e je m p lo e n e l s crip t b in / js ca m b ia m o s la lín e a Ja va p a ra
q u e s e p a re zca a e s t o . En ve rs io n e s a n t e rio re s d e la p la t a fo rm a ja va 2 , t a m b ié n
t e n d re m o s q u e ca m b ia r e l p u n t e ro d e l p ro g ra m a a la va ria b le $ JAVA a ja v a _ g e n
ve z d e a ja v a .

Antes:

exec $JAVA $THREADS $JITCOMPILER $COMPILER $MS $MX \

Depués:

exec $JAVA -debug $THREADS $JITCOMPILER


$COMPILER $MS $MX \

Aq u í e s t á co m o co n e ct a r re m o t a m e n t e co n e l Ja va We b S e rve r. La p a s s wo rd d e
a g e n t e e s g e n e ra d a s o b re la s la id a e s t a n d a rd d e s d e e l Ja va We b S e rve r p e ro
p u e d e s e r re d irig id a a u n fich e ro e n cu a lq u ie r lu g a r. Po d e m o s e n co n t ra r d ó n d e
ch e q u e a n d o lo s s crip t s d e a rra n q u e d e l Ja va We b S e rve r.

jdb -host localhost -password <the agent password>


Lo s s e rvle t s s e ca rg a n p o r u n ca rg a d o r d e cla s e s s e p a ra d o s i e s t á n co n t e n id o s e n
e l d ire ct o rio s e rv le t s , q u e n o e s t á e n e l CLAS S P ATH u s a d o cu a n d o s e a rra n có e l
Ja va We b s e rve r. De s a fo rt u n a d a m e n t e , cu a n d o d e p u ra m o s e n m o d o re m o t o co n
jd b , n o p o d e m o s co n t ro la r e l ca rg a d o r d e cla s e s p e rs o n a liza d o y s o licit a rle q u e
ca rg u e e l s e rvle t , p o r e s o t e n e m o s q u e in clu ir e l d ire ct o rio s e rv le t s e n e l
CLAS S P ATH p a ra d e p u ra r o ca rg a r e l s e rvle t re q u irié n d o lo a t ra vé s d e u n
n a ve g a d o r y lu e g o s it u a n d o u n p u n t o d e ru p t u ra u n a ve z q u e e l s e rvle t e s t á
e je cu t a n d o .
En e s t e s ig u ie n t e e je m p lo , s e in clu ye e l jd c . W e b S e rv e r. P a s s w o rd S e rv le t e n e l
CLAS S P ATH cu a n d o s e a rra n ca e l Ja va We b s e rve r. El e je m p lo s e le ccio n a u n
p u n t o d e ru p t u ra p a ra p a ra r e l m é t o d o s e rv ic e d e e s t e s e rvle t , q u e e s e l m é t o d o
d e p ro ce s o p rin cip a l.
La s a lid a e s t á n d a rd d e l Ja va We b S e rve r s t a n d a rd p ro d u ce e s t e m e n s a je , q u e n o s
p e rm it e s e g u ir co n la s e s ió n re m o t a d e jd b :

Agent password=3yg23k

$ jdb -host localhost -password 3yg23k


Initializing jdb...
> stop in [Link]:service
Breakpoint set in [Link]
> stop
Current breakpoints set:
[Link]
El s e g u n d o s t o p lis t a lo s p u n t o s d e ru p t u ra a ct u a le s e n e s t a s e s ió n y m u e s t ra e l
n ú m e ro d e lín e a d o n d e s e e n cu e n t a n . Ah o ra p o d e m o s lla m a r a l s e rvle t a t ra vé s d e
n u e s t ra p á g in a HTML. En e s t e e je m p lo , e l s e rvle t e s t á e je cu t a n d o u n a o p e ra ció n
POS T:

<FORM METHOD="post" action="/servlet/PasswordServlet">


<INPUT TYPE=TEXT SIZE=15 Name="user" Value="">
<INPUT TYPE=SUBMIT Name="Submit" Value="Submit">
</FORM>
Ob t e n e m o s e l co n t ro l d e l t h re a d d e l Ja va We b S e rve r cu a n d o s e a lca n za e l p u n t o
d e ru p t u ra , y p o d e m o s co n t in u a r d e p u ra n d o u s a n d o la s m is m a s t é cn ica s q u e s e
u s a ró n e n la s e cció n De p u ra ció n Re m o t a .

Breakpoint hit: [Link]


(PasswordServlet:111) webpageservice Handler[1] where
[1] [Link]
(PasswordServlet:111)
[2] [Link]
(HttpServlet:588)
[3] [Link]
(ServletState:204)
[4] [Link]
(ServletManager:940)
[5] [Link]
(InvokerServlet:101)
Un p ro b le m a co m ú n cu a n d o s e u s a n e l Ja va We b S e rve r y o t ro s e n t o rn o s d e
s e rvle t s e s q u e s e la n za n e xce p io n e s p e ro s o n ca p t u ra d a s y m a n e ja d a s d e s d e fu e ra
d e l á m b it o d e l s e rvle t . El co m a n d o c a t c h n o s p e rm it e a t ra p a r t o d a s e s t a s
e xce p cio n e s .

webpageservice Handler[1] catch [Link]


webpageservice Handler[1]
Exception: [Link]
at [Link](
[Link])
at [Link](
[Link])
at [Link](
[Link])
at [Link](
[Link])
at [Link](
[Link])
at [Link]
.handleRequest([Link])
at [Link]
.handleRequest([Link])
at [Link](
[Link])
Es t e s e n cillo e je m p lo fu e g e n e ra d o cu a n d o lo s fich e ro s n o s e e n co n t ra b a n p e ro
e s t a t é cn ica p u e d e u s a rs e p a ra p ro b le m a s co n d a t o s p o s t e a d o s . Re co rd a m o s u s a r
c o n t p a ra p e rm it ir q u e e l s e rvid o r we b co n t in ú e . Pa ra lim p ia r e s t á t ra m p a u s a m o s
e l co m a n d o ig n o re .

webpageservice Handler[1] ignore [Link]


webpageservice Handler[1] catch
webpageservice Handler[1]

Oz it o
Depurar Eventos AWT
An t e s d e l n u e vo m e ca n is m o d e e ve n t o s d e l S WT p re s e n t a d o e n e l JDK 1 . 1 lo s
e ve n t o s e ra n re cib id o s p o r u n co m p o n e n t e co m o u n Te x t Fie ld , y p ro p a g a d o h a cia
a rrib a a s u s co m p o n e n t e s p a d re . Es t o s ig n ifica q u e p o d ría s im p le m e n t e a ñ a d ir
a lg ú n có d ig o d e d ia g n ó s t ico a lo s m é t o d o h a n d le Ev e n t o a c t io n d e l co m p o n e n t e
p a ra m o n it o riza r lo s e ve n t o s q u e le h a n lle g a d o .
Co n la p re s e n t a ció n d e l JDK 1 . 1 y e l n u e vo s is t e m a d e la co la d e e ve n t o s , lo s
e ve n t o s s o n e n via d o s a u n a co la d e e ve n t o s e n lu g a r d e a l p ro p io co m p o n e n t e . Lo s
e ve n t o s s o n d e s p a ch a d o s d e s d e la co la d e Eve n t o s d e l S is t e m a a lo s o ye n t e s d e
e ve n t o s q u e s e h a n re g is t ra d o p a ra s e r n o t ifica d o s cu a n d o s e d e s p a ch e u n e ve n t o
p a ra e s e o b je t o .

Usar AWTEventListener
Po d e m o s u a r u n AW TEv e n t Lis t e n e r p a ra m o n it o riza r lo s e ve n t o s AWT d e s d e la
co la d e e ve n t o s d e l s is t e m a . Es t e o ye n t e t o m a u n a m á s ca d a d e e ve n t o co n s t ru id a
d e s d e u n a o p e ra ció n OR d e lo s AW TEv e n t q u e q u e re m o s m o n it o riza r. Pa ra
o b t e n e r u n a s im p le lis t a d e lo s e ve n t o s AW TEv e n t , u s a m o s e l co m a n d o ja v a p
- p u b lic ja v a . a w t . AW TEv e n t . Es t e e je m p lo s ig u e la p is t a a lo s e ve n t o s d e fo co y
d e l ra t ó n .

N o t a : No s e d e b e u t iliza r AW TEv e n t Lis t e n e r e n u n p ro d u ct o p a ra la


ve n t a , ya q u e d e g ra d a e l re n d im ie n t o d e l s is t e m a .

//[Link]
import [Link].*;
import [Link].*;
import [Link].*;

public class EventTest extends JFrame {

public EventTest() {
JButton jb1=new JButton("hello");
getContentPane().add(jb1);

//AWTEventListener
getToolkit().addAWTEventListener(
new AWTEventListener() {
public void eventDispatched(AWTEvent e) {
[Link](e+"\n");
}
}, AWTEvent.MOUSE_EVENT_MASK |
AWTEvent.FOCUS_EVENT_MASK
);
}

public static void main (String args[]) {

EventTest et=new EventTest();


[Link](300,300);
[Link]();
[Link]();
}
}

Oz it o
Analizar la Pila
Lo s d e s a rro lla d o re s s ie m p re h a n co n s id e ra d o u n m is t e rio e l s e g u im ie n t o d e p ila .
Ha y m u y p o ca o n in g u n a d o cu m e n t a ció n d is p o n ib le , y cu a n d o o b t e n e n o s u n a , o
n e ce s it a m o s g e n e ra r u n a , e l t ie m p o lo p ro h ib e . La s ig u ie n t e s e cció n d e s cu b re lo s
s e cre t o s d e la d e p u ra ció n co n s e g u im ie n t o d e la p ila , y a l fin a l, p o d re m o s
co n s id e ra r e l s e g u im ie n t o d e p ila co m o u n a h e rra m ie n t a ú t il p a ra a n a liza r o t ro s
p ro g ra m a s - - n o s ó lo lo s q u e n o fu n cio n a n !
¿ Qu é e s u n s e g u im ie n t o d e p ila p ro d u cid o p o r la p la t a fo rm a TM? Es u n a im a g e n
a m ig a b le p a ra e l u s u a rio d e lo s t h re a d s y m o n it o re s e n la m á q u in a virt u a l Ja va .
De p e n d ie n d o d e lo co m p le ja q u e s e a n u e s t ra a p lica ció n o a p p le t , u n s e g u im ie n t o
d e p ila p u e d e t e n e r u n ra n g o d e s d e la s cin cu e n t a lín e a s h a s t a lo s cie n t o s d e lín e a s
d e d ia g n ó s t ico .
S in im p o rt a r e l t a m a ñ o d e l s e g u im ie n t o d e p ila , h a y u n a s p o ca s co s a s im p o rt a n t e s
q u e n o s p u e d e n a yu d a r a d ia g n o s t ica r la m a yo ría d e lo s p ro b le m a s d e s o ft wa re s in
im p o rt a r s i s o m o s e xp e rt o s o n u e vo s e n la p la t a fo rm a Ja va .
Ha y t re s fo rm a s p o p u la re s p a ra g e n e ra r u n s e g u im ie n t o d e p ila : e n via r u n a s e ñ a l a
la Má q u in a Virt u a l Ja va ( JVM) ; la m á q u in a virt u a l ja va g e n e ra u n s e g u im ie n t o d e
p ila p o r n o s o t ro s ; o u s a r h e rra m ie n t a s d e d e p u ra ció n o lla m a d a s a l API.
● En via r u n a S e ñ a l a la JVM

● La JVM Ge n e ra u n S e g u im ie n t o d e Pila
● Us a r He rra m ie n t a s d e De p u ra ció n o Lla m a d a s a l API
● ¿ Qu é b u s ca r p rim e ro ?
● ¿ Qu é ve rs ió n g e n e ra e l S e g u im ie n t o d e Pila ?
● ¿ Qu é Pla t a fo rm a g e n e ra e l S e g u im ie n t o d e Pila ?
● ¿ Qu é p a q u e t e Th re a d fu e u t iliza d o ?
● ¿ Qu é s o n lo s Es t a d o s d e l Th re a d ?
● Exa m in a r Mo n it o re s
● Po n e r lo s Pa s o s e n Prá ct ica
● Ch e cklis t d e l Exp e rt o

Enviar una Señal a la JVM


En p la t a fo rm a s UNIX p o d e m o s e n via r u n a s e ñ a l a l p ro g ra m a co n e l co m a n d o k ill.
Es t á e s la s e ñ a l d e s a lid a , q u e e s m a n e ja d a p o r la m á q u in a virt u a l Ja va .
S is t e m a s Un ix :
Po r e je m p lo , e n la p la t a fo rm a S o la ris TM, p o d e m o s u s a r e l co m a n d o k ill - QUI T
p ro c e s s _ id , d o n d e p ro c e s s _ id e s e l n ú m e ro d e p ro ce s o d e n u e s t ro p ro g ra m a .
De fo rm a a lt e rn a t iva p o d e m o s in t ro d u cir la s e cu e n cia cla ve < c t rl> \ e n la ve n t a n a
d o n d e s e a rra n có e l p ro g ra m a .
El e n vío d e e s t a s e ñ a l in s t ru ye a u n m a n e ja d o r d e s e ñ a l d e la JVM a q u e im p rim a
re cu rs iva m e n t e t o d a la in fo rm a ció n d e lo s t h re a d s y m o n it o re s q u e h a y d e n t ro d e
la JVM.
W in d o w s 9 5 / N T:
Pa ra g e n e ra r u n s e g u im ie n t o d e p ila e n p la t a fo rm a s Win d o ws 9 5 o Win d o ws NT,
in t ro d u cim o s e s t a s e cu e n cia < c t rl> < b re a k > e n la ve n t a n a d o n d e s e e s t á
e je cu t a n d o e l p ro g ra m a .

La JVM genera un Seguimiento de Pila


S i la JVM e xp e rim e n t ó u n e rro r in t e rm o co m o u n a vio la ció n d e s e g m e n t o o u n a
fa llo d e p á g in a ile g a l, lla m a a s u p ro p io m a n e ja d o r d e s e ñ a le s p a ra im p rim ir
in fo rm a ció n s o b re lo s t h re a d s y m o n it o re s .

Usar Herramientas de Depuración o Llamadas al API


Po d e m o s g e n e ra r u n s e g u im ie n t o p a rcia l d e la p ila , ( q u e e n e s t e ca s o e s s ó lo
in fo rm a ció n d e lo s t h re a d s ) u s a n d o e l m é t o d o Th re a d . d u m p S t a c k , o e l m é t o d o
p rin t S t a c k Tra c e d e la cla s e Th ro wa b le .
Ta m b ié n p o d e m o s o b t e n e r in fo rm a ció n s im ila r in t ro d u cie n d o e l co m a n d o w h e re
d e n t ro d e l d e p u ra d o r Ja va .
S i t e n e m o s é xit o a l g e n e ra r u n s e g u im ie n t o d e p ila , p o d re m o s ve r a lg o s im ila r a
e s t o s e g u im ie n t o d e p ila .

strings core | grep JAVA_HOME


En la ve rs io n e s Ja va 2 , lo s t h re a d s q u e lla m a n a m é t o d o s q u e re s u lt a n e n u n a
lla m a d a a có d ig o n a t ivo s o n in d ica d o s e n e l s e g u im ie n t o d e p ila .

¿Qué Versión Genera el Seguimiento de Pila?


En la ve rs ió n Ja va 2 e l s e g u im ie n t o d e p ila co n t ie n e la ve rs ió n d e l JVM, la m is m a
in fo rm a ció q u e ve riá m o s u s a n d o e l p a rá m e t ro - v e rs io n .
S in e m b a rg o s i n o h a y s t rin g d e ve rs ió n , p o d e m o s o b t e n e r u n a id e a s o b re d e q u é
ve rs ió n p ro vie n e e s t e s e g u im ie n t o d e p ila . Ob via m e n t e , s i n o s o t ro s m is m o s h e m o s
g e n e ra d o e s t e s e g u im ie n t o d e p ila n o d e b e s e r u n p ro b le m a , p e ro p o d ría m o s e s t a r
vie n d o u n s e g u im ie n t o d e p ila p o s t e a d o e n u n g ru p o d e n o t icia s o e n u n a rt ícu lo
p o r e - m a il.
Prim e ro id e n t ifica re m o s d o n d e e s t á la s e cció n "Re g is t e re d Mo n it o r Du m p " e n e l
s e g u im ie n t o d e p ila :
● S i ve m o s u n u t f8 h a s h t a b le lo c k e n e l "Re g is t e re d Mo n it o r Du m p ", e s t o e s
u n s e g u im ie n t o d e p ila d e la p la t a fo rm a Ja va 2 . La ve rs ió n fin a l d e la
p la t a fo rm a Ja va 2 t a m b ié n co n t ie n e u n s t rin g d e ve rs ió n , p o r e s o s i n o h a y
s t rin g d e ve rs ió n p o d ría t ra t a rs e d e u n a ve rs ió n Be t a d e Ja va 2 .
● S i ve m o s u n JN I p in n in g lo c k y n o ve m o s u t f8 h a s h lo c k , e s t o e s u n a
ve rs ió n JDK 1 . 1 + .
S i n o a p a re ce n in g u n a d e la s co s a s a n t e rio re s e n e l "Re g is t e re d Mo n it o r Du m p ",
p ro b a b le m e n t e s e rá u n a ve rs ió n JDK 1 . 0 . 2 .

¿Qué Plataforma Genera el Seguimiento de Pila?


Ta m b ié n p o d e m o s s a b e r s i e l s e g u im ie n t o d e p ila vie n e d e u n a m á q u in a Win d o ws
9 5 , u n a NT, o UNIX b u s ca n d o lo s t h re a d s q u e e s t á e s p e ra d n o . En u n a m á q u in a
Un ix lo s t h re a d s q u e e s t á n e s p e ra n d o s e lla m a n e xp lícit a m e n t e . En u n a m á q u in a
Win d o ws 9 5 , o NT s ó lo s e m u e s t ra u n co n t a d o r d e lo s t h re a d s q u e e s t á n
e s p e ra n d o :
● W in d o w s 9 5 / N T: Fin a lize m e q u e u e lo ck: < u n o wn e d > Writ e r: 1

● UN I X: Fin a lize m e q u e u e lo ck: < u n o wn e d >


wa it in g t o b e n o t ifie d "Fin a lize r Th re a d "

¿Qué Paquete Thread fue Utilizado?


La s JVMs d e Win d o ws 9 5 y Win d o ws NT s o n p o r d e fe ct o t h re a d a s n a t ivo s d e l JVM.
En UNIX la s JVMs s o n p o r d e fe ct o s , t h re a d s ve rd e s d e la JVM, u s a n u n a
p s e u d o - im p le m e n t a ció n t h re a d . Pa ra h a ce r q u e la JVM u s e t h re a d s n a t ivo s
n e ce s it a m o s s u m in is t ra r e l p a rá m e t ro - n a t iv e , p o r e je m p lo , ja v a - n a t iv e
My Cla s s .
Ve rifica n d o la e xis t e n cia d e u n Ala rm m o n it o r e n la s a lid a d e l s e g u im ie n t o d e p ila
p o d e m o s id e n t ifica r q u e e s t e s e g u im ie n t o d e p ila vie n e d e u n t h re a d ve rd e la JVM.

¿Qué son los Estados de Threads?


Ve re m o s m u ch o s t h re a d s d ife re n t e s e n m u y d ife re n t e s e s t a d o s e n u n a im a g e n d e l
s e g u im ie n t o d e p ila d e JVM. Es t a t a b la d e s cfrib e va ria s cla ve s y s u s s ig n ifica d o s .
Cla v e S ig n ific a d o
R Th re a d ru n n a b le o e je cu t á n d o s e
S Th re a d s u s p e n d id o
CW Th re a d e s p e ra n d o e n u n co n d ició n va ria b le
MW Th re a d e s p e ra n d o u n b lo q u e o d e m o n it o r
MS Th re a d s u s p e n d id o e s p e ra n d o u n b lo q u e o d e m o n it o r
No rm a lm e n t e , s ó lo lo s t h re a d a s e n e s t a d o s R, S , CW o MW d e b e ría n a p a re ce r e n
e l s e g u im ie n t o d e p ila .
Lo s m o n it o re s s e u s a n p a ra co n t ro la r e l a cce s o a có d ig o q u e s ó lo d e b e ría s e r
e je cu t a d o p o r u n s ó lo t h re a d a la ve z. Mo n it o re s s e cu b re n e n m á s d e t a lle s e n la
s ig u ie n t e s e cció n . Lo s o t ro s d o s e s t a d o s d e t h re a d s co m u n e s q u e p o d ría m o s ve r
s o n R, t h re a d s e je cu t a b le s y CW, t h re a d s e n u n a co n d ició n d e e s t a d o d e e s p e ra .
Lo s t h re a d a s e je cu t a b le s s o n p o r d e fin ició n t h re a d s q u e p o d ría n s e r e je cu t a d o s o
e s t a r e je cu t á n d o s e e n e s e m o m e n t o . En u n a m á q u in a m u lt i- p ro ce s a d o r e je cu t á n d o
u n s is t e m a o p e ra t ivo re a lm e n t e m u lt i- p ro ce s a d o r e s p o s ib le q u e t o d o s lo s t h re a d s
e je cu t a b le s s e e s t é n e je cu t a n d o e n e l m is m o m o m e n t o . S in e m b a rg o e s m á s
p ro b a b le q u e o t ro s t h re a d s e je cu t a b le s e s t é n e s p e ra n d o u n p ro g ra m a d o r d e
t h re a d s p a ra t e n e r s u t u rn o d e e je cu ció n .
Po d ría m o s p e n s a r e n lo s t h re a d s e n u n a co n d ició n d e e s t a d o d e e s p e ra co m o
e s p e ra n d o a q u e o cu rra u n e ve n t o . Fre cu e n t e m e n t e u n t h re a d a p a re ce rá e n e l
e s t a d o CW s i e s t á e n u n Th re a d . s le e p o e n u n a e s p e ra s in cro n iza d a . En n u e s t ro
a n t e rio r s e g u im ie n t o d e p ila e l m é t o d o m a in e s t a b a e s p e ra n d o a q u e u n t h re a d s e
co m p le t a ra y s e n o t ifica ra s u fin a liza ció n . En e l s e g u im ie n t o d e p ila e s t o a p a re ce rá
co m o :

"main" (TID:0xebc981e0, sys_thread_t:0x26bb0,


state:CW) prio=5
at [Link](Native Method)
at [Link]([Link])
at [Link]([Link])
El có d ig o q u e cre ó e s t e s e g u im ie n t o d e fila e s e s t e :

synchronized(t1) {
try {
[Link](); //line 33
}catch (InterruptedException e){}
}
En la ve rs ió n Ja va 2 la s o p e ra cio n e s d e m o n it o re s , in clu ye n d o n u e s t ra e s p e ra a q u í,
s o n m a n e ja d a s p o r la m á q u in a virt u a l Ja va a t ra vé s d e u n a lla m a d a JNI a
s ys Mo n it o r. La co n d ició n d e e s p e ra d e u n t h re a d s e m a n t ie n e e n u n a co la d e
e s p e ra d e m o n it o r e s p e cia l d e l o b je t o q u e e s t á e s p e ra n d o . Es t o e xp lica p o rq u é
a u n q u e s e a m o s lo s ú n ico s e s p e ra n d o p o r u n o b je t o e l có d ig o t o d a vía n e ce s it a e s t a r
s in cro n iza d o co n e l o b je t o co m o s i e s t u vie ra u t iliza n o d e h e ch o e l m o n it o r d e e s e
o b je t o .
Examinar Monitores
Es t o n o s t ra e la o t ra p a rt e d e l s e g u im ie n t o d e p ila : e l vo lca d o d e m o n it o re s . S i
co n s id e ra m o s q u e la s e cció n d e t h re a d s d e u n s e g u im ie n t o d e p ila id e n t ifica la
p a rt e m u lt i- t h re a d d e n u e s t ra a p lica ció n , e n t o n ce s la s e cció n d e m o n it o re s
re p re s e n t a la s p a rt e s d e n u e s t ra a p lica ció n q u e u s a n u n s ó lo t h re a d .
Po d ría s e r s e n cillo im a g in a r u n m o n it o r co m o u n la va d e ro d e co ch e s . En m u ch o s
la va d e ro s d e co ch e s , s ó lo s e p u e d e la va r u n co ch e a la ve z. En n u e s t ro có d ig o Ja va
s ó lo u n t h re a d a la ve z p u e d e t e n e r e l b lo q u e o s o b re u n a p ie za s in cro n iza d a d e
có d ig o . To d o s lo s d e m á s t h re a d s e s p e ra n e n la co la p a ra e n t ra r a l có d ig o
s in cro n iza d o co m o lo h a ce n lo s co ch e s p a ra e n t ra r e n e l la va d e ro d e co ch e s .
S e p u e d e p e n s a r e n u n m o n it o r co m o u n b lo q u e o p a ra u n o b je t o , y ca d a o b je t o
t ie n e u n m o n it o r. Cu a n d o g e n e ra m o s u n s e g u im ie n t o d e p ila , lo s m o n it o re s s e
lis t a n co m o re g is t ra d o s o n o re g is t ra d o s . En la m a yo ría d e lo s ca s o s e s t o s
m o n it o re s re g is t ra d o s , o m o n it o re s d e l s is t e m a , n o d e b e ría n s e r la ca u s a d e
n u e s t ro p ro b le m a d e s o ft wa re , p e ro n o s a yu d a rá n a e n t e n d e rlo s y re co n o ce rlo s . La
s ig u ie n t e t a b la d e s crib e lo s m o n it o re s re g is t ra d o s m a s co m u n e s :
Mo n it o r D e s c rip c ió n
Blo q u e a e l h a s h t a b le d e S t rin g s i1 8 N
u t f8 h a s h t a b le d e fin id o s q u e fu e ro n ca rg a d o s d e s d e la cla s e
co n s t a n t p o o l.
Pro t e g e la s co p ia s d e b lo q u e s d e a rra y a có d ig o
JNI p in n in g lo ck
d e m é t o d o s n a t ivo s .
¡Blo q u e a la t a b la d e re fe re n cia s g lo b a le s q u e
co n t ie n e lo s va lo re s q u e n e ce s it a n s e r lib e ra d o
JNI g lo b a l re fe re n ce lo ck
e xp lícit a m e t e , y s o b re vivirá a l t ie m p o d e vid a d e
la lla m a d a d e l m é t o d o n a t ivo .
Blo q u e a e l a cce s o a la lis t a d e cla s e s ca rg a d a s y
Bin Cla s s lo ck
re s u e lt a s . La t a b la g lo b a l d e lis t a d e cla s e s .
Pro t e g e d a t o s d e cla s e s cu a n d o s e ca rg a n
Cla s s lin kin g lo ck lib re ría s n a t iva s p a ra re s o lve r re fe re n cia s
s im b ó lica s
As e g u ra q u e s ó lo u n t h re a d s e ca rg a e n u n a
S ys t e m cla s s lo a d e r lo ck
cla s e d e l s is t e m a a la ve z.
Pro t e g e e l có d ig o cu a n d o s e in t e n t a u n a
Co d e re writ e lo ck
o p t im iza ció n .
Pro t e g e la p ila Ja va d u ra n t e e l m a n e jo d e
He a p lo ck
m e m o ria d e la p ila .
S ó lo u n t h re a d p u e d e t e n e r a cce s o a l m o n it o r
Mo n it o r ca ch e lo ck ca ch e a la ve z e s t e b lo q u e o a s e g u ra la
in t e g rid a d d e l m o n it o r ca ch e .
Pro t e g e lo s t h re a d s ve rd e s d e la JVM Un ix d e la
Dyn a m ic lo a d in g lo ck ca rg a d e lib re ría co m p a rt id a s t u b lib d l. s o m á s d e
u n o a la ve z.
Mo n it o r IO lo ck Pro t e g e I/ O fís ica p o r e je m p lo , a b rir y le e r.
Co n t ro la e l a cce s o a l co n t ro la d o r d e s e ñ a l s i h a y
Us e r s ig n a l m o n it o r u n a s e ñ a l d e u s u a rio e n u n t h re a d ve rd e d e la
JVM.
Co n t ro la a cce s o s a l p ro ce s o d e in fo rm a ció n d e
e s p e ra cu a n d o u s a m o s lla m a d a s a l s is t e m a d e
Ch ild d e a t h m o n it o r
e je cu ció n p a ra e je cu t a r co m a n d o s lo ca le s e n u n
t h re a d ve rd e d e la JVM.
Co n t ro la a cce s o s a l fich e ro d e s crip t o r d e
I/ O Mo n it o r
t h re a d a s p a ra e ve n t o s p o ll/ s e le ct .
Co n t ro la a cce s o s a u n co n t ro la d o r d e re lo j u s a d o
Ala rm Mo n it o r e n t h re a d s ve rd e s d e la JVM p a ra m a n e ja r
t im e o u t s
Th re a d q u e u e lo ck Pro t e g e la co la d e t h re a d s a ct ivo s .
S ó lo u n t h re a d p u e d e t e n e r a cce s o a l re g is t ro d e
Mo n it o r re g is t ry m o n it o re s a l m is m o t ie m p o q u e e s t e b lo q u e o
a s e g u ra la in t e g rid a d d e e s t e re g is t ro .
Pro t e g e la lis t a d e o b je t o s b lo q u e a d o s q u e h a n
s id o re co le ct a d a s p a ra la b a s u ra , y co n s id e ra la
Ha s fin a liza t io n q u e u e lo ck *
fin a liza ció n n e ce s a ria . S o n co p ia d o s a la co la
Fin a lize .
Pro t e g e u n a lis t a d e o b je t o s q u e p u e d e n s e r
Fin a lize m e q u e u e lo ck *
fin a liza d o s p o r d e s o cu p a d o s .
Pro t e g e la s t a b la s d e co n s t a n t e s d e la s JVMs y
Na m e a n d t yp e h a s h t a b le lo ck *
s u s t ip o s .
Blo q u e a la h a s h t a b le d e S t rin g s d e fin id o s q u e
S t rin g in t e rn lo ck *
fu e ro n ca rg a d a s d e s d e la cla s e co n s t a n t p o o l
As e g u ra q u e s ó lo u n t h re a d ca rg a u n a cla s e a la
Cla s s lo a d in g lo ck *
ve z.
Ja va s t a ck lo ck * Pro t e g e la lis t a d e s e g m e n t o s lib re s d e la p ila

N o t a : * b lo q u e o a p a re cid o s s ó lo e n lo s s e g u im ie n t o s d e p re - Ja va 2 .

El p ro p io re g is t ro d e m o n it o re s e s t á p ro t e g id o p o r u n m o n it o r. Es t o s ig n ifica q u e e l
t h re a d a l q u e p e rt e n e ce u n b lo q u e o e s e l ú lt im o t h re a d e n u s a r u n m o n it o r. Es
co m o d e cir q u e e s t e t h re a d e s e l t h re a d a ct u a l. Co m o s ó lo u n t h re a d p u e d e n e n t ra r
e n u n b lo q u e s in cro n iza d o a la ve z, o t ro s t h re a d s s e p o n e n a la co la p a ra e n t ra r e n
e l có d ig o s in cro n iza d o y a p a re ce n co n e l e s t a d o MW . En e l vo lca d o d e l ca ch é d e
m o n it o re s , s e d e n o t a n co m o t h re a d s "e s p e ra n d o p a ra e n t ra r". En e l có d ig o d e
u s u a rio u n m o n it o r e s lla m a d o a a cció n s ie m p re q u e s e u s a u n b lo q u e o m é t o d o
s in cro n iza d o .
Cu a lq u ie r có d ig o q u e e s p e re u n o b je t o o u n e ve n t o ( m é t o d o q u e e s p e ra ) t a m b ié n
t ie n e q u e e s t a r d e n t ro d e u n b lo q u e s in cro n iza d o . S in e m a b rg o , u n a ve z q u e s e
lla m a a e s t e m é t o d o , s e e n t re g a e l b lo q u e o s o b re e l o b je t o s in cro n iza d o .
Cu a n d o e l t h re a d e n e s t a d o d e e s p e ra e s n o t ifica d o d e u n e ve n t o h a cia e l o b je t o ,
t e in e la co m p e t e n cia d e l a cce s o e xclu s ivo a e s e o b je t o , y t ie n e q u e o b t e n e r e l
m o n it o r. In clu s o cu a n d o u n t h re a d a e n via d o u n "n o t ify e ve n t " a lo s t h re a d s q u e
e s t á n e s p e ra n d o , n in g u n o d e e s t o s t h re a d s p u e d e o b t e n e r re a lm e n t e le co n t ro l d e l
m o n it o r b lo q u e a d o h a s t a q u e e l t h re a d n o t ifica d o h a ya a b a n d o n a d o e l b lo q u e d e
có d ig o s in cro n iza d o

Poner los Pasos en Práctica


Eje m p lo 1
Co n s id e re m o s u n p ro b le m a d e la vid a re a l co m o p o r e je m p lo e l Bu g ID 4 0 9 8 7 5 6 .
Po d e m o s e n co n t ra r m á s d e t a lle s s o b re e s t e b u s e n e l JDC Bu g Pa ra d e . Es t e b u g
d o cu m e n t a u n p ro b le m a q u e o cu rre cu a n d o u s a m o s u n co m p o n e n t e Ch o ic e s o b re
Win d o ws 9 5 .
Cu a n d o e l u s u a rio s e le ccio n a u n a d e la s o p cio n e s d e s d e e l co m p o n e n t e Ch o ic e
u s a n d o e l ra t ó n , t o d o va b ie n . S in e m b a rg o , cu a n d o e l u s u a rio in t e n t a u s a r u n a
t e cla d e fle ca p a ra m o ve r la lis t a d e o p cio n e s , la a p lica ció n Ja va s e co n g e la .
Afo rt u n a d a m e n t e , e s t e p ro b le m a e s re p ro d u cib le y h a b ía u n s e g u im ie n t o d e p ila
Ja va p a ra a yu d a r a co rre g ir e l p ro b le m . El s e g u im ie n t o d e p ila co m p le t o e s t á e n la
p á g in a d e l b u g , p e ro s ó lo n e ce s it a m o s e n fo ca rn o s e n e s t o s d o s t h re a d s cla ve s :

"AWT-Windows" (TID:0xf54b70,
sys_thread_t:0x875a80,Win32ID:0x67,
state:MW) prio=5
[Link]([Link])
[Link](
[Link])

"AWT-EventQueue-0" (TID:0xf54a98,sys_thread_t:0x875c20,
Win32ID:0x8f, state:R) prio=5
[Link]([Link])
[Link]([Link])
El t h re a d AW T- Ev e n t Qu e u e - 0 e s t á e n e s t a d o e je cu t a b le d e n t ro d e l m é t o d o
re m o v e . Re m o v e e s t á s in cro n iza d o , lo q u e e xp líca p o r q u é e l t h re a d
AW T- W in d o w s n o p u e d e e n t ra r a l m é t o d o s e le c t . El t h re a d AW T- W in d o w s e s t á
e n e s t a d o MW ( m o n it o r wa it ) ; s in e m b a rg o , s in e m b a rg o s i s e g u im o s e l
s e g u im ie n t o d e p ila , e s t a s it u a ció n n o ca m b ia a u n q u e e l in t e rfa ce g rá fico d e
u s u a rio ( GUI) p a re zca e s t á r co n g e la d o .
Es t o in d ica q u e la lla m a d a a re m o v e n u n ca re t o rn ó . S ig u ie n d o e l ca m in o d e l
có d ig o h a cia la cla s e Ch o ic e P e e r, p o d e m o s ve r q u e s e e s t á h a cie n d o a u n lla m a d a
a l MFC n a t ivo q u e n o re t o rn a , Es a q u í d o n d e e s t á e l p ro b le m a re a l y e s u n b u g d e
la s cla s e s co ra zó n Ja va . El có d ig o d e l u s u a rio e s t a b ie n .
Eje m p lo 2
En e s t e s e g u n d o e je m p lo in ve s t ig a re m o s u n b u g q u e a l p rin cip io p a re ce s e r u n fa llo
d e S win g p e ro d e s cu b rire m o s q u e e s d e b id o a l h e ch o q u e S win g n o e s s e g u ro a n t e
lo s t h re a d s .
El in fo rm a d e b u g t a m b ié n e s t á d is p o n ib le e n la s it e JDCm e l n ú m e ro d e l b u g e s
4098525.

Aq u í t e n e m o s u n e je m p lo d e l có d ig o u s a d o p a ra re p ro d u cir e s t e p ro b le m . El
d ía lo g o m o d a l s e cre a d e s d e d e n t ro d e l m é t o d o JP a n e l p a in t .

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

class MyDialog extends Dialog


implements ActionListener {

MyDialog(Frame parent) {
super(parent, "My Dialog", true);
Button okButton = new Button("OK");
[Link](this);
add(okButton);
pack();
}

public void actionPerformed(ActionEvent event) {


dispose();
}
}

public class Tester extends JPanel {

MyDialog myDialog;
boolean firstTime = true;

public Tester (JFrame frame) throws Exception {


super();
myDialog = new MyDialog(frame);
}

void showDialogs() {
[Link]();
}

public void paint(Graphics g) {


[Link](g);
if (firstTime) {
firstTime = false;
showDialogs();
}
}

public static void main(String args[])


throws Exception {

JFrame frame = new JFrame ("Test");


Tester gui = new Tester(frame);
[Link]().add(gui);
[Link](800, 600);
[Link]();
[Link](true);
}
}
Cu a n d o e je cu t a m o s e s t e p ro g ra m a e n co n t ra m o s q u e s e b lo q u e a a l p rin cip io .
Ha cie n d o u n s e g u im ie n t o d e p ila p o d re m o s ve r e s t o s t h re a d s cla ve s .

El s e g u im ie n t o d e p is t a q u e t e n e m o s a q u í e s lig e ra m e n t e d ife re n t e a l q u e a p a re ce
e n e l in fo rm e d e l b u g , p e ro t ie n e n e l m is m o e fe ct o . Ta m b ié n u s a m o s la ve rs ió n
Ja va 2 p a ra g e n e ra r e l s e g u im ie n t o y s u m in is t ra r la o p ció n
- D ja v a . c o m p ile r= N ON E cu a n d o e je cu t a m o s e l p ro g ra m a p a ra q u e p o d a m s ve r
lo s n ú m e ro s d e lín e a d e l fu e n t . El t h re a d a b u s ca r e s e l q u e t ie n e e l e s t a d o MW,
m o n it o r d e e s p a e ra q u e e n e s t e ca s o e s e l t h re a d AW T- Ev e n t Qu e u e - 1

"AWT-EventQueue-1" (
TID:0xebca8c20, sys_thread_t:0x376660,
state:MW) prio=6
at [Link]([Link])
at [Link]([Link])
t [Link]([Link])
at [Link](
[Link])
at [Link](
[Link])
at [Link](
[Link])
S i b u s ca m o s e s t á lín e a e n e l fich e ro ja v a / a w t / Co m p o n e n t . ja v a q u e e s t á
co n t e n id o e n e l a rch ivo s rc . ja r, ve re m o s e s t o :

public void invalidate() {


synchronized (getTreeLock()) { //line 1664
Es a q u ío d o n d e n u e s t ra a p lica ció n s e b lo q u e a , e s t á e s p e ra n d o a q u e e l m o n it o r
g e t Tre e Lo c k s e lib e re . La s ig u ie n t e t a re a e s e n co n t ra r e lt h re a d q u e t ie n e
b lo q u e a d o e s t e m o n it o s .
Pa ra ve r q u ié n e s t á b lo q u e a n d o e s t e m o n it o r b u s ca m o s e n e l vo lca d o d e l ca ch e d e
Mo n it o re s y e n e s t e e je m p lo p o d e m o s ve r lo s ig u ie n t e :

Monitor Cache Dump:


[Link]$AWTTreeLock@EBC9C228/EBCF2408:
owner "AWT-EventQueue-0" ( 0x263850) 3 entries
Waiting to enter:
"AWT-EventQueue-1" (0x376660)
El m o n it o r g e t Tre e Lo c k e s t á a ct u a lm e n t e b lo q u e a d o e n u n o b je t o d e u n a cla s e
in t e rn a cre a d a e s p e cia lm e n t e AW TTre e Lo c k . Es t e e s e l có d ig o p a ra cre a r e s e
b lo q u e o e n e l fich e ro Co m p o n e n t . ja v a .

static final Object LOCK = new AWTTreeLock();


static class AWTTreeLock {}
El p ro p ie t a rio a ct u a l e s AW T- Ev e n t Qu e u e - 0 . El t h re a d lla m ó a n u e s t ro m é t o d o
p a in t p a ra cre a r n u e s t o D ia lo g m o d a l m e d ia n t e u n a lla m a d a a p a in t Co m p o n e n t .
El p ro p io p a in t Co m p o n e n t fu e lla m a d o d e s d e u n a lla m a d a a u p d a t e d e l JFra m e .
¿ Pe ro d ó n d e s e o rig in ó e l b lo q u e o ? Bie n , n i h a y u n a fo rm a s e n cilla d e e n co n t ra r
q u é p a rt e d e l m a rco t ie n e e l b lo q u e o p e ro u n a s im p le b ú s q u e d a d e
ja v a x . s w in g . JCo m p o n e n t p o d re m o s ve r q u e g e t Tre e Lo c k e s lla m a d o d e n t ro d e l
m é t o d o p a in t Ch ild re n q u e d e ja m o s e n la lín e a 3 8 8 .

at [Link]([Link])
at [Link](
[Link])
El re s t o d e l p u zzle s e co lo ca ju n t o a n a liza n d o e l m é t o d o MD ia lo g P e e r s h o w . El
có d ig o d e l d iá lo g o cre a u n n u e vo Mo d a lTh re a d q u e e s p o r lo q u e h e m o s vis t o u n
t h re a d AW T- Mo d a l e n la s a lid a d e l s e g u im ie n t o d e p ila , e s t e t h re a d e s u s a d o p a ra
p o s t e a r e l d iá lo g o . Es cu a n d o e l e ve n t o d e d e s p a ch a u s a n d o AW T- Ev e n t Qu e u e - 1
q u e e s u s a d o p a ra s e r e l p ro xy d e d e s p a ch o d e e ve n t o s d e AWT y e s n e ce s a rio u n
a cce s o a l m o n it o r g e t Tre e Lo c k y e s a q u í d o n d e t e n e m o s e l b lo q u e o .
De s a fo rt u n a d a m e n t e e l có d ig o S win g n o e s t á d is e ñ a d o p a ra s e r s e g u ro co n lo s
t h re a d s p o r e s o la s o lu ció n e n e s t e e je m p lo e s n o cre a r d iá lo g o s m o d a le s d e s d e
d e n t ro d e m é t o d o p a in t d e S win g . Ya q u e S win g t ie n e q u e h a ce r ca n t id a d d e
b lo q u e o s y cá lcu lo s ; q u e la s p a rt e s d e u n co m p o n e n t e lig e ro q u e n e ce s it a n s e r
d ib u ja d a s d e b e n e s t a r fu e rt e m e n t e a d ve rt id a s d e q u e n o in clu ya n có d ig o
s in cro n iza d o o có d ig o q u e p u e d e re s u lt a r e n u n a lla m a d a s in cro n iza d a c co m o e n u n
d iá lo g o m o d a l, d e n t ro d e l m é t o d o p a in t .
Es t o co m p le t a la t e o ria d e l s e g u im ie n t o d e p ila Ja va , y a h o ra d e b e ría m o s s a b e r q u é
b u s a r la s ig u ie n t e ve z q u e ve a m o s u n s e g u im ie n t o d e p ila . Pa ra a h o rra r t ie m p o ,
d e b e ría m o s h a ce r u s o d e la b ú s q u e d a d e Bu g s d e l JDC p a ra ve r s i n u e s t ro
p ro b le m a h a s id o re p o rt a d o p o r a lg u ie n m á s .

Lista de chequeo del Experto


Pa ra s u m a riza r, e s t o s s o n lo s p a s o s a t o m a r la p ro xim a ve z q u e n o s cru ce m o s co n
u n p ro b le m a e n u n p ro g ra m a Ja va :
● P ro g ra m a s Co lg a d o s , b lo q u e a d o s o c o n g e la d o s : S i p e n s a m o s q u e
n u e s t ro p ro g ra m a e s t á co lg a d o , g e n e ra m o s u n s e g u im ie n t o d e p ila .
Exa m in a m o s lo s t h re a d s e n e s t a d o s MW o CW . S i e l p ro g ra m a e s t á
b lo q u e a d o , a lg u n o s t h re a d s d e l s is t e m a s e n o s m o s t ra rá n co m o e l t h re a d
a ct u a l p o rq u e la JVM n o t e n d rá n a d a m á s q u e h a ce r
● P ro g ra m a s Ca s c a d o s o Ab o rt a d o s : S o b re Un ix b u s ca re m o s p o r u n fich e ro
co ra zó n . Po d e m o s a n a liza r e s t e fich e ro e n u n a h e rra m ie n t a d e d e p u ra ció n
n a t iva co m o g d b o d b x . Bu s ca m o s lo s t h re a d s q u e h a ya n s id o lla m a d o s p o r
m é t o d o n a t ivo s . Co m o la t e cn o lo g ía Ja va u s a u n m o d e lo d e m e m o ria s e g u ro ,
cu a lq u ie r p o s ib le co rru p ció n h a b rá o cu rrid o e n e l m é t o d o n a t ivo . Re co rd a m o s
q u e la JVM t a m b ié n u s a có d ig o n a t ivo p o r lo q u e b ie n p o d ría n o s e r u n b u g d e
n u e s t ra a p lica ció n .
● P ro g ra m a s o c u p a d o s : El m e jo r cu rs o d e a cció n q u e p o d e m o s t o m a r p a ra lo s
p ro g ra m a s o cu p a d o s e s g e n e ra r fre cu e n t e s s e g u im ie n t o s d e p ila . Es t o n o s
a p u n t a rá h a cia e l có d ig o q u e e s t á ca u s a n d o lo s e rro re s , y p o d rm o s e m p e za r
n u e s t ra in ve s t ig a ció n d e s d e a q u í.

Oz it o
Problemas de Versiones
Es t a s e cció n p ro p o rcio n a u n a t a b la q u e s u m a riza lo s p ro b le m a s y s o lu cio n e s
re la cio n a d o s co n la t e n e n cia d e d is t in t a s ve rs io n e s d e la p la t a fo rm a Ja va TM
in s t a la d o s e n n u e s t o s is t e m a .

P ro d u c t o D e s a rro llo

JDK 1 . 0 . 2 Ut iliza CLAS S P ATH p a ra e n co n t ra r y ca rg a r la s cla s e s co ra zó n d e l


s is t e m a .
En Win d o ws 9 5 :
CLAS S P ATH= / u s r/ ja v a / lib / c la s s e s . z ip :.
En Un ix:
CLAS S P ATH= c :\ ja v a \ lib \ c la s s e s . z ip
La s lib re ría s d in á m ica s Un ix, lo s fich e ro s . d ll, lo s o b je t o s
co m p a rt id o s y fich e ro . s o e s t á n lo ca liza d o s e n la va ria b le PATH.
Efe c t o s la t e ra le s :
El fich e ro Au t o e x e c . b a t d e Win 9 5 co n t ie n e u n a va ria b le
CLAS S P ATH ca d u ca d a s e le ccio n a d p o r e l u s u a rio o la in s t a la ció n d e
o t ra s a p lica cio n e s .
El En t o rn o d e u s u a rio d e Win Nt co n t ie n e u n vie ja va ria b le
CLAS S P ATH.
Lo s s crip t s Un ix . c s h rc , . p ro file , o . lo g in co n t ie n e u n
CLAS S P ATH e rró n e o .
La va riá b le d e e n t o rn o JAVA_ HOME t a m b ié n e s u s a d a p o r
p ro g ra m a s p a ra co m p ro b a r s i n o e s t á s e le ccio n a d a . Po d e m o s
b o rra r e s t e ca m p o e n e l s h e l Bo u rn e ( s h ) d e e s t a fo rm a : u n s e t
JAVA_ HOME
D ia g n ó s t ic o s :
Us a m o s la o p ció n - c la s s p a t h p a ra fo rza r a la m á q u in a virt u a l Ja va
a q u e u s e s ó lo la lín e a d e co m a n d o s . S ó lo CLAS S P ATH: ja v a
- c la s s p a t h c :\ ja v a \ lib \ c la s s e s . z ip ;. m y a p p

P ro d u c t o D e s a rro llo
JDK 1 . 1 Us a p a t h s re la t ivo s p a ra e n co n t ra r e l fich e ro c la s s e s . z ip d e s d e la
in s t a la ció n d e la p la t a fo rm a Ja va . La va ria b le d e e n t o rn o
CLAS S P ATH s e u s a p a ra ca rg a r la s cla s e s d e la a p lica ció n .
Efe c t o s la t e ra le s :
Ot ra s ve rs io n e s Ja va e n co n t ra d a d e n e l p a t h d e la a p lica ció n
p o d ría n s e r ca rg a d a s s i e l d ire ct o rio b in d e l JDK n o s e s e le ccio n a
e xp lít a m e n t e d e la n t e d e la va ria b le d e e n t o rn o P ATH.
D ia g n ó s t ic o s :
Us a m o s la o p ció n - c la s s p a t h p a ra fo rza r a la m á q u in a virt u a l Ja va
a q u e u s e s ó lo la lín e a d e co m a n d o s . S ó lo CLAS S P ATH: ja v a
- c la s s p a t h c :\ ja v a \ lib \ c la s s e s . z ip ;. m y a p p

P ro d u c t o D e s a rro llo

Pla t a fo rm a La p la t a fo rm a e s t á d ivid id a e n u n En t o rn o d e Eje cu ció n Ja va ( JRE)


Ja va 2 y u n co m p ila d o r Ja va . El JRE e s t á in clu id o co m o u n s u b d ire ct o rio
d e la ve rs ió n , y lo s t ra d icio n e s p ro g ra m a s ja v a y ja v a c d e l
d ire ct o rio b in lla m a n d ire ct a m e n t e e l p ro g ra m a re a l e n e l
d ire ct o rio jre / b in .
Lo s a rch ivo s JAR q u e co n t ie n e n la s cla s e s d e l s is t e m a d e la
p la t a fo rm a Ja va , rt . ja r y i1 8 . ja r, e s t á n lo ca liza d o s e n e l
d ire ct o rio jre / lib co n u n p a t h d e b ú s q u e d a re la t ivo .
Efe c t o s La t e ra le s :
S i la s a p lica cio n e s a n t e rio re s u s a b a n e l fich e ro c la s s e s . z ip p a ra
ca rg a r la s cla s e s d e l s is t e m a d e la p la t a fo rm a Ja va , p o d ría
in t e n t a r ca rg a r e rró n e a m e n t e u n co n ju n t o d e cla s e s a d icio n a le s .
D ia g n ó s t ic o s :
Us a m o s la o p ció n - Xb o o t c la s s p a t h p a ra fo rza r a l m á q u in a virt u a l
Ja va a u s a r e l CLAS S P ATH s u m n is t ra d o e n la lín e a d e
co m a n d o s : ja v a - Xb o o t c la s s p a t h :c :\ ja v a \ jre \ lib \ rt . ja r;
c :\ ja v a \ jre \ lib \ i1 8 n . ja r;. m y a p p
Po d ría m o s n e ce s it a r s u m in is t ra r e s t o co m o u n a o p ció n d e la lín e a
d e co m a n d o s d e e s t a fo rm a :
ja v a c - J- Xb o o t c la s s p a t h :c \ ja v a \ lib \ t o o ls . ja r;c :
\ ja v a \ jre \ lib \ rt . ja r;c :\ ja v a \ jre \ lib \ i1 8 n . ja r;. m y a p p . ja v a

P ro d u c t o D e s a rro llo
Ja va S o b re Win d o ws 9 5 y Win d o ws NT u s a m o s e l re g is t ro p a ra
Plu g - In e n co n t ra r p lu g - in d e la p la t a fo rm a Ja va in s t a la d o s .
Efe c t o s La t e ra le s :
El re g is t ro p o d ría e s t a r co rro m p id o , o e l p lu g - in e lim in a d o
fís ica m e n t e p e ro n o d e l re g is t ro .
D ia g n ó s t ic o s :
Mo s t ra r la s p ro p ie d a d e s ja v a . v e rs io n y ja v a . c la s s . p a t h e n
n u e s t o có d ig o y ve rlo e n la Co n s o la d e l Ja va Plu g - in Co n s o le

[Link]("version="+[Link](
"[Link]"
));
[Link]("class path="+[Link](
"[Link]"
));
S i h a y u n co n flict o , ch e q u e a m o s e l re g is t ro co n e l co m a n d o
re g e d it , b u s ca m o s la p a la b ra VM, y s i e xis t e la b o rra m o s y
re in s t a la m o s e l p lu g - in .

P ro d u c t o D e s a rro llo

Ne t s ca p e u s a fich e ro s . ja r co m o ja v a 4 0 . ja r d e l d ire ct o rio n e t s c a p e .


Efe c t o s La t e ra le s :
No t o d a s la s ve rs io n e s d e Ne t s ca p e s o n t o t a lm e n t e co m p a t ib le s
co n JDK 1 . 1 . Po d e m o s o b t e n e r a ct u a liza cio n e s e n
h t t p : / / www. n e t s ca p e . co m .
D ia g n ó s t ic o s :
Arra n ca m o s e l n a ve g a d o r d e s d e la lín e a d e co m a n d o s co n la o p ció n
- c la s s e s .

P ro d u c t o D e s a rro llo
In t e rn e t Us a fich e ro s . c a b p a ra co n t e n e r la s cla s e s d e l s is t e m a . Ta m b ié n
Exp lo re r u s a e l re g is t ro d e l s is t e m a s o b re Win d o ws 9 5 / NT.
Efe c t o s La t e ra le s :
Us a m o s e l co m a n d o re g e d it p a ra b u s ca r la p a la b ra VM. Es a e s la
e n t ra d a CLAS S P ATH d o n d e p o d e m o s a ñ a d ir n u e s t ra s p ro p ia s
cla s e s .
D ia g n ó s t ic o s :
El re g is t ro p u e d e co rro m p e rs e . Bu s ca m o s CLAS S PATH u s a n d o e l
p ro g ra m a re g e d it y e d it a m o s e l va lo r a l q u e a p u n t a CLAS S PATH.

Oz it o
Mejorar el Rendimiento por Diseño
La s re s t riccio n e s d e l a n ch o d e b a n d a e n la s re d e s a lre d e d o r d e l m u n d o h a ce n d e
la s o p e ra cio n e s b a s a d a s e n re d p o t e n cia le s cu e llo s d e b o t e lla q u e p u e d e n t e n e r u n
im p o rt a n t e im p a ct o e n e l re n d im ie n t o d e la s a p lica cio n e s . Mu ch a s a p lica cio n e s d e
re d e s t á n d is a ñ a d a s p a ra u s a r a lm a ce n e s d e co n e xio n e s y p o r e llo p u e d e n
re u t iliza r co n e xio n e s d e re d e xis t e n t e s y a h o rra r e l t ie m p o y la s o b re ca rg a q u e
co n lle va n e l a b rir y ce rra r co n e xio n e s d e re d .
Ju n t o co n e l a lm a ce n d e co n e xio n e s , h a y o t ra s ca ra ct e rís t ica s q u e p o d e m o s d is e ñ a r
d e n t ro d e n u e s t ro s p ro g ra m a s p a ra m e jo ra r e l re n d im ie n t o . Es t e ca p ít u lo e xp lica
có m o p o d e m o s d is e ñ a r u n a p p le t p a ra q u e d e s ca rg u e fich e ro s y re cu rs o s d e fo rm a
m á s e ficie n t e , o d is e ñ a r u n p ro g ra m a b a s a d o e n t h re a d s p a ra u s a r u n a lm a ce n d e
t h re a d s p a ra a h o rra rn o s e l co s t o s o p ro ce s o d e a rra n ca r t h re a d s .
● Me jo ra r la De s ca rg a d e u n Ap p le t

● Alm a ce n d e Th re a d s

Mejorar la Velocidad de Descarga de un Applet


El re n d im ie n t o d e d e s ca rg a d e u n a p p le t s e re fie re a l t ie m p o q u e t a rd a e l
n a ve g a d o r e n d e s ca rg a r t o d o s lo s fich e ro s y re cu rs o s q u e n e ce s it a p a ra a rra n ca r e l
a p p le t . Un fa ct o r im p o rt a n t e q u e a fe ct a a l re n d im ie n t o d e la d e s ca rg a d e l a p p le t e s
e l n ú m e ro d e ve ce s q u e t ie n e q u e s o licit a r d a t o s a l s e rvid o r. Po d e m o s re d u cir e l
n ú m e ro d e p e t icio n e s e m p a q u e t a n d o la s im a g e n e s d e l a p p le t e n u n fich e ro cla s s , o
u s a n d o u n a rch ivo JAR.

Empaquetar Imágenes en un Clase

No rm a lm e n t e , s i u n a p p le t t ie n e s e is im á g e n e s d e b o t o n e s s e t ra d u ce n e n s e is
s o licit u d e s a d icio n a le s a l s e rvid o r p a ra ca rg a r e s o s fich e ro s d e im á g e n e s . S e is
s o licit u d e s a d icio n a le s p o d ría n n o p a re ce r d e m a s ia d a s e n u n a re d in t e rn a , p e ro e n
la s co n e xio n e s d e b a ja ve lo cid a d y e ficie n cia , e s a s s o licit u d e s a d icio n a le s p u e d e n
t e n e r u n im p a ct o m u y n e g a t ivo e n e l re n d im ie n t o . Po r e s o , n u e s t ro ú lt im o o b je t ivo
s e rá ca rg a r e l a p p le t t a n rá p id o co m o s e a p o s ib le .
Un a fo rm a d e a lm a ce n a r im á g e n e s e n u n fich e ro cla s s e s u s a r u n e s q u e m a d e
co d ifica ció n AS CII co m o X- PixMa p ( XPM) . De e s t a fo rm a , e n ve z d e m a n t e n e r la
im á g e n e s e n fich e ro s GIF e n e l s e rvid o r, lo s fich e ro s s o n co d ifica d o s co m o u n
S t rin g s y s o n a lm a ce n a d o s e n u n s ó lo fich e ro cla s s .
Es t e có d ig o d e e je m p lo u s a p á q u e t e s d e l g a n a d o r d e la Ja va Cu p d e l Ja va On e 1 9 9 6 ,
q u e co n t e n ía la s cla s e s XI m a g e S o u rc e y Xp m P a rs e r. Es t a s cla s e s p ro p o rcio n a
t o d o lo s n e ce s a rio p a ra le e r u n fich e ro XP M. Po d e m o s ve r e s t o fich e ro s e n
S u n S it e .

Pa ra e l p ro ce s o in icia l d e co d ifica ció n , h a y u n n ú m e ro d e h e rra m ie n t a s g rá fica s q u e


p o d e m o s u s a r p a ra cre a r fich e ro XP M. En S o la ris p o d e m o s u s a r I m a g e To o l o u n a
va rie d a d d e o t ro s GNU im a g e p a cka g e s . Po d e m o s ir a la we b s it e Do wn lo a d . co m
p a ra o b t e n e r s o ft wa re d e co d ifica ció n p a ra la s p la t a fo rm a s Win d o ws .
El s ig u ie n t e có d ig o e xt ra id o d e l e je m p lo d e có d ig o MyAp p le t q u e ca rg a im á g e n e s .
Po d e m o s ve r e l S t rin g co d ifica d o e n la d e fin ició n XPM d e im á g e n e s .

La cla s e To o lk it cre a u n o b je t o I m a g e p a ra ca d a im a g e n d e s d e e l o b je t o fu e n t e
XPM Im a g e .

Toolkit kit = [Link]();


Image image;
image = [Link] (new XImageSource (_reply));
image = [Link] (new XImageSource (_post));
image = [Link] (new XImageSource (_reload));
image = [Link] (new XImageSource (_catchup));
image = [Link] (new XImageSource (_back10));
image = [Link] (new XImageSource (_reset));
image = [Link] (new XImageSource (_faq));
La a lt e rn a t iva t é cn ica d e a b a jo u s a fich e ro s GIF. Re q u ie re u n a p e t ició n a l s e rvid o r
p a ra ca d a im a g e n ca rg a d a .

Image image;
image = getImage ("[Link]");
image = getImage ("[Link]");
image = getImage ("[Link]");
image = getImage ("[Link]");
image = getImage ("[Link]");
image = getImage ("[Link]");
image = getImage ("[Link]");
Es t a t é cn ica re d u ce e l t ra fico d e la re d p o rq u e t o d a s la s im á g e n e s e s t á n d is p o n ib le s
e n u n s ó lo fich e ro cla s s .
● Us a r im á g e n e s XPM co d ifica d a s h a ce m á s g ra n d e e l fich e ro d e la cla s e , p e ro e l
n ú m e ro d e p e t icio n e s d e re d e s m e n o r.
● Al h a ce r q u e la s d e fin icio n e s d e im á g e n e s XPM fo rm e n p a rt e d e l fich e ro cla s s ,
h a ce m o s q u e e l p ro ce s o d e ca rg a d e im á g e n e s s e a p a rt e d e la ca rg a n o rm a l
d e l fich e ro cla s s d e l a p p le t s in cla s e s e xt ra s .
Un a ve z ca rg a d o , p o d e m o s u s a r la s im á g e n e s p a ra cre a r b o t o n e s u o t ro s
co m p o n e n t e s d e l in t e rfa ce d e u s u a rio . El s ig u ie n t e s e g m e n t o d e có d ig o m u e s t ra
có m o u s a r la im á g e n e s co n la cla s e ja v a x . s w in g . JBu t t o n .

ImageIcon icon = new ImageIcon (


[Link] (
new XImageSource (_reply)));
JButton button = new JButton (icon, "Reply");

Usar Ficheros JAR

Cu a n d o u n a p p le t co n s t a d e m á s d e u n fich e ro , p o d e m o s m e jo ra r e l re n d im ie n t o d e
la d e s ca rg a co n fich e ro s JAR. Un fich e ro JAR co n t ie n e t o d o s lo s fich e ro s d e l a p p le t
e n u n s ó lo fich e ro m á s rá p id o d e d s a ca rg a r. Mu ch a p a rt e d e l t ie m p o a h o rra d o
vie n e d e la re d u cció n d e l n ú m e ro d e co n e xio n e s HTTP q u e e l n a ve g a d o r t ie n e q u e
h a ce r.
El ca p ít u lo : De s a rro lla r Nu e s t ra Ap lica ció n t ie n e in fo rm a ció n s o b re có m o cre a r y
firm a r fich e ro s JAR.
El có d ig o HTML d e a b a jo u s a la e t iq u e t a COD E p a ra e s p e cifica r e l e je cu t a b le d e l
a p p le t My Ap p le t , y la e t iq u e t a ARCHI VE e s p e cifica e l fich e ro JAR q u e co n t ie n e
t o d o s lo s fich e ro s re la cio n a d o s co n My Ap p le t . El e je cu t a b le e s p e cifica d o p o r la
e t iq u e t a COD E a lg u n a s ve ce s e s lla m a d o c o d e b a s e .
Po r ra zo n e s d e s e g u rid a s lo s fich e ro s JAR lis t a d o s p o r e l p a rá m e t ro a rc h iv e d e b e n
e s t a r e n e l m is m o d ire ct o rio o s u b d ire ct o rio q u e e l c o d e b a s e d e l a p p le t . S i n o s e
s u m in is t ra e l p a rá m e t ro c o d e b a s e e l d ire ct o rio d e d o n d e s e ca rg ó e l a p p le t s e u s a
co m o e l c o d e b a s e .
El s ig u ie n t e e je m p lo e s p e cifica ja rfile co m o e l fich e ro JAR q u e co n t ie n e t o d o s lo s
fich e ro s re la cio n a d o s p a ra e l e je cu t a b le My Ap p le t . c la s s .
< APPLET CODE= "MyAp p le t . cla s s " ARCHIVE= "ja rfile " WIDTH= "1 0 0 "
HEIGHT= "2 0 0 "> < / APPLET>
S i la d e s ca rg a d e l a p p le t u s a m ú lt ip le s fich e ro s JAR co m o s e m u e s t ra e n e l
s ig u ie n t e s e g m e n t o HTML, e l Cla s s Lo a d e r ca rg a ca d a fich e ro JAR cu a n d o e l a p p le t
a rra n ca . Po r e s o , s i n u e s t ro a p p le t u s a a lg u n o s fich e ro s d e re cu rs o s d e fo rm a
in fre cu e n t e , e l fich e ro JAR q u e co n t ie n e e s o s fich e ro s e s d e s ca rg a d o s in im p o rt a r s i
lo s re cu rs o s va n a s e r u s a d o s d u ra n t e la s e s ió n o n o .
< APPLET CODE= "MyAp p le t . cla s s " ARCHIVE= "ja rfile 1 , ja rfile 2 " WIDTH= "1 0 0 "
HEIGHT= "2 0 0 "> < / APPLET>
Pa ra m e jo ra r e l re n d im ie n t o cu a n d o s e d e s ca rg a n fich e ro n o u s a d o s d e fo rm a
fre cu e n t e , p o n e m o s lo s fich e ro s u s a d o s m á s fre cu e n t e m e n t e d e n t ro d e u n fich e ro
JAR y lo s fich e ro s m e n o s u s a d o s e n e l d ire ct o rio d e la cla s e d e l a p p le t . Lo s fich e ro s
u s a d o s p o co fre cu e n t e m e n t e s o n lo ca liza d o s y d e s ca rg a d o s s ó lo cu a n d o e l
n a ve g a d o r lo s n e ce s it a .

Almacen de Threads
El s e rvid o r d e a p p le t s Ja va De ve lo p e r Co n n e ct io n S M ( JDC) y e l Ja va We b S e rve r TM
h a ce n u n u s o e xt e n s ivo d e l a lm a ce n d e t h re a d s p a ra m e jo ra r e l re n d im ie n t o . El
a lm a ce n d e t h re a d s e s cre a r u n s u m in is t ro d e t h re a d s d u rm ie n t e s a l p rin cip io d e la
e je cu ció n . Co m o e l p ro ce s o d e a rra n q u e d e u n t h re a d e s m u y ca ro e n t é rm in o s d e
re cu rs o s d e l s is t e m a , e l a lm a ce n d e t h re a d s h a ce e l p ro ce s o d e a rra n ca d a u n p o co
m á s le n t o , p e ro a u m e n t a e l re n d im ie n t o e n t ie m p o d e e je cu ció n p o rq u e lo s t h re a d s
d u rm ie n t e s ( o s u s p e n d id o s ) s ó lo s e d e s p ie rt a n cu a n d o cu a n d o s o n n e ce s a rio s p a ra
re a liza r n u e va s t a re a s .
Es t e có d ig o d e e je m p lo t o m a d o d e la cla s e Po o l. ja va m u e s t ra u n a fo rm a d e
im p le m e n t a r la fu s ió n d e t h re a d s , En e l co n s t ru ct o r d e la fu s ió n ( m o s t ra d o a b a jo ) ,
s e in icia liza n y a rra n ca n lo s W o rk e rTh re a d s . La lla m a d a a l m é t o d o s t a rt e je cu t a
e l m é t o d o ru n d e l W o rk e rTh re a d , y la lla m a d a a w a it s u s p e n d e e l Th re a d
m ie n t ra s e l Th re a d e s p e ra a q u e lle g u e u n t ra b a jo . La ú lt im a lín e a d e l co n s t ru ct o r
e m p u ja e l Th re a d d u rm ie n t e h a cia la p ila .

public Pool (int max, Class workerClass)


throws Exception {

_max = max;
_waiting = new Stack();
_workerClass = workerClass;
Worker worker;
WorkerThread w;
for ( int i = 0; i < _max; i++ ) {
worker = (Worker)_workerClass.newInstance();
w = new WorkerThread ("Worker#"+i, worker);
[Link]();
_waiting.push (w);
}
}
Ju n t o a l m é t o d o ru n , la cla s e W o rk e rTh re a d t ie n e u n m é t o d o w a k e . Cu a n d o
vie n e e l t ra b a jo , s e lla m a a l m é t o d o w a k e , q u e a s ig n a lo s d a t o s y n o t ifica a l
W o rk e rTh re a d d u rm ie n t e ( e l in icia liza d o p o r e l P o o l) p a ra re cu p e ra r la e je cu ció n .
El m é t o d o w a k e lla m a a n o t ify h a ce q u e e l W o rk e rTh re a d b lo q u e a d o s a lg a d e l
e s t a d o d e e s p e ra , y s e e je cu t a e l m é t o d o ru n d e la cla s e Ht t p S e rve rWo rke r. Un a
ve z re a liza d o e l t ra b a jo , e l W o rk e rTh re a d s e p o n e d e n u e vo e n e l S t a c k
( a s u m ie n t o q u e e l P o o l d e t h re a d s n o e s t á lle n o ) o t e rm in a .

synchronized void wake (Object data) {


_data = data;
notify();
}

synchronized public void run(){


boolean stop = false;
while (!stop){
if ( _data == null ){
try{
wait();
}catch (InterruptedException e){
[Link]();
continue;
}
}

if ( _data != null ){
_worker.run(_data);
}

_data = null;
stop = !(_push (this));
}
}
En e s t e a lt o n ive l, e l t ra b a jo e n t ra n t e e s m a n e ja d o p o r e l m é t o d o p e rfo rm W o rk
e n la cla s e P o o l. Cu a n d o vie n e e l t ra b a jo , s e s a ca d e la p ila u n W o rk e rTh re a d
e xis t e n t e ( o s e cre a u n o n u e vo s i e l P o o l e s t á va cío ) . El W o rk e rTh re a d d u rm ie n t e
e s a ct iva d o m e n d ia t e u n a lla m a d a a s u m é t o d o w a k e .

public void performWork (Object data)


throws InstantiationException{
WorkerThread w = null;
synchronized (_waiting){
if ( _waiting.empty() ){
try{
w = new WorkerThread ("additional worker",
(Worker)_workerClass.newInstance());
[Link]();
}catch (Exception e){
throw new InstantiationException (
"Problem creating
instance of [Link]: "
+ [Link]());
}
}else{
w = (WorkerThread)_waiting.pop();
}
}
[Link] (data);
}
El co n s t ru ct o r d e la cla s e Ht t p S e rve r. ja va cre a u n n u e vo e je m p la r P o o l p a ra s e rvir
e je m p la re s d e la cla s e Ht t p S e rve rWo rke r. Lo s e je m p la re s Ht t p S e rv e rW o rk e r s e
cre a n y a lm a ce n a n co m o p a rt e d e lo s d a t o s W o rk e rTh re a d . Cu a n d o s e a ct iva u n
W o rk e rTh re a d m e d ia n t e u n a lla m a d a a s u m é t o d o w a k e , e l e je m p la r
Ht t p S e rv e rW o rk e r e s in vo ca d o m e d ia n t e s u m é t o d o ru n .

try{
_pool = new Pool (poolSize,
[Link]);
}catch (Exception e){
[Link]();
throw new InternalError ([Link]());
}
Es t e có d ig o e s t á e n e l m é t o d o ru n d e la cla s e Ht t p S e rve r. ja va . Ca d a ve c q u e vie n e
u n a p e t ició n , e l d a t o e s in icia liza d o y e l Th re a d e m p ie za e l t ra b a jo .

N o t a : S i cre a m o s u n n u e vo Ha s h t a b le p o r ca d a W o rk e rTh re a d
p ro vo ca m o s d e m a s ia d a s o b re ca rg a , s ó lo m o d ifica m o s e l có d ig o p a ra q u e
n o u s e la a b s t ra ció n W o rk e r.

try{
Socket s = _serverSocket.accept();
Hashtable data = new Hashtable();
[Link] ("Socket", s);
[Link] ("HttpServer", this);
_pool.performWork (data);
}catch (Exception e){
[Link]();
}
El a lm a ce n d e t h re a d s e s u n a t é cn ica e fe ct iva d e a ju s t e d e re n d im ie n t o q u e co lo ca
e l ca ro p ro ce s o d e a rra n q u e d e t h re a d s e n la a rra n ca d a d e la a p lica ció n . De e s t a
fo rm a , e l im p a ct o n e g a t ivo e n e l re n d im ie n t o o cu rre s ó lo u n a ve z d u ra n t e e l
a rra n ca d a d e l p ro g ra m a d o n d e s e n o t a m e n o s .

Oz it o
Almacen de Conexiones
S i h e m o s u s a d o S QL u o t ra h e rra m ie n t a s im ila r p a ra co n e ct a rn o s co n u n a b a s e d e
d a t o s y a ct ú a r s o b re lo s d a t o s , p ro b a b le m e n t e h a b re m o s n o t a d o q u e la o b t e n e ció n
d e la co n e xió n y e l lo g in e s la p a rt e q u e t a rd a m á s t ie m p o . Un a a p lica ció n p u e d e
fá cilm e n t e t a rd a r va rio s s e g u n d o s ca d a ve z q u e n e ce s it a e s t a b le ce r u n a co n e xió n .
El va rs io n e s a n t e rio re s a JDBC TM 2 . 0 ca d a s e s ió n d e b a s e d e d a t o s re q u e ría u n a
n u e va co n e xió n y u n lo g in in clu s o s i la co n e xió n a n t e rio r u s a b a la m is m a t a b la y
cu e n t a d e u s u a rio . S i e s t á m o s u s a n d o ve rs io e n s a n t e rio re s a l JDBC 2 . 0 y q u e re m o s
m e jo ra r e l re n d im ie n t o , p o d e m o s ca ch e a r la s co n e xio n e s JDBC.
La s co n e xio n e s ca ch e a d a s s e m a n t ie n e n u n o b je t o p o o l e n t ie m p o d e e je cu ció n y
p u e d e n s e r u t iliza d a s y re u t iliza d a s cu a n d o la s n e ce s it e la a p lica ció n . Un a fo rm a d e
im p le m e n t a r u n o b je t o p o o l e s h a ce r u n a u n a s im p le h a s h t a b le d e o b je t o s
co n e ct io n . S in e m b a rg o , u n a fo rm a m á s s e n cilla d e h a ce rlo e s e s crib ir u n d riv e r
JDBC e n vu e lt o q u e e s u n in t e rm e d ia rio e n t re la a p lica ció n y la b a s e d e d a t o s .
La e n vo lt u ra t ra b a ja p a rt icu la m e n t e e n lo s Be a n s d e En t e rp ris e q u e s a n
p e rs is t e n cia m a n e ja d a p o r e l Be a n p o r d o s ra zo n e s : 1 ) S ó lo s e ca rg a u n a cla s e
D riv e r p o r ca d a Be a n , y 2 ) lo s d e t a lle s e s p e cífico s d e la co n e xió n s e m a n e ja n
fu e ra d e l Be a .
Es t a s e cció n e xp lica có m o e s crib ir u n a cla s e D riv e r JDBC e n vu e lt a
● Cla s e s Wra p p e r

● Drive r d e Co n e xió n
● Alm a ce n d e Co n e xio n e s
● Blo q u e o s y Cu e lg u e s
● Ce rra r Co n e xio n e s
● Ap lica ció n d e Eje m p lo

Clases Wrapper
El D riv e r JDBC e n vu e lt o cre a d o p a ra e s t o s e je m p lo s co n s t a d e la s s ig u ie n t e s
cla s e s :
● JD CCo n n e c t io n D riv e r

● JD CCo n n e c t io n P o o l

● JD CCo n n e c t io n
Driver de Conexión
La cla s e JDCCo n n e ct io n Drive r. ja va im p le m e n t a e l in t e rfa ce ja v a . s q l. D riv e r, q u e
p ro p o rcio n a m é t o d o p a ra ca rg a r d rive rs y cre a r n u e va s co n e xio n e s a b a s e s d e
da tos.
Un o b je t o JD CCo n n e c t io n Ma n a g e r e s cre a d o p o r u n a a p lica ció n q u e p re t e n d e
u n a co n e xió n co n u n a b a s e d e d a t o s . La a p lica ció n p ro p ro cio n a e l ULR p a ra la b a s e
d e d a t o s , e l ID d e l u s u a rio y la p a s s wo rd .
El co n s t ru ct o r JD CCo n n e c t io n Ma n a g e r h a ce e s t o :
● Re g is t ra e l o b je t o JD CCo n n e c t io n Ma n a g e r co n D riv e rMa n a g e r.

● Ca rg a la cla s e D riv e r p a s a d a a l co n s t ru ct o r p o r e l p ro g ra m a lla m a n t e .

● In icia liza u n o b je t o JD CCo n n e c t io n P o o l p a ra la s co n e xio n e s co n la URL d e la


b a s e d e d a t o s , e l ID y e l p a s s wo rd d e l u s u a rio p a s a d o s a l co n s t ru ct o r p o r e l
p ro g ra m a lla m a n t e .

public JDCConnectionDriver(String driver,


String url,
String user,
String password)
throws ClassNotFoundException,
InstantiationException,
IllegalAccessException,
SQLException {

[Link](this);
[Link](driver).newInstance();
pool = new JDCConnectionPool(url, user, password);
}
Cu a n d o e l p ro g ra m a lla m a n t e n e ce s it a u n a co n e xió n co n la b a s e d e d a t o s , lla m a a l
m é t o d o JD CCo n n e c t io n D riv e r. c o n n e c t , q u e a s u ve z, lla m a a l m é t o d o
JD CCo n n e c t io n P o o l. g e t Co n n e c t io n .

Almacen de Conexiones
La cla s e JDCCo n n e ct io n Po o l. ja va t ie n e co n e xio n e s d is p o n ib le s p a ra e l p ro g ra m a
lla m a n d o e n s u m é t o d o g e t Co n n e c t io n . Es t e m é t o d o b u s ca u n a co n e xió n
d is p o n ib le e n e l a lm a ce n d e co n e xio n e s . S i n o h a y n in g u n a d is p o n ib le , cre a u n a
n u e va co n e xió n . S i h a y u n a co n e xió n d is p o n ib le e n e l a lm a ce n , e l m é t o d o
g e t Co n n e c t io n a lq u ila la co n e xió n y la d e vu e lve a l p ro g ra m a lla m a n t e .

public synchronized Connection getConnection()


throws SQLException {
JDCConnection c;
for(int i = 0; i < [Link](); i++) {
c = (JDCConnection)[Link](i);
if ([Link]()) {
return c;
}
}

Connection conn = [Link](


url, user, password);
c = new JDCConnection(conn, this);
[Link]();
[Link](c);
return c;
}
La cla s e JDCCo n n e ct io n . ja va re p re s e n t a u n a co n e xió n JDBC e n e l a lm a ce n d e
co n e xio n e s , y e s e n cia lm e n t e e s u n a e n vo lt u ra a lre d e d o r d e u n co n e xió n re a l JDBC.
El o b je t o JD CCo n n e c t io n m a n t ie n e u n a b a n d e ra d e e s t a d o p a ra in d ica r s i la
co n e xió n e s t á e n u s o y e l m o m e n t o e n q u e la co n e xió n s e s a có d e l a lm a ce n . Es t e
t ie m p o e s u s a d o p o r la cla s e Co n n e c t io n Re a p e r. ja v a p a ra id e n t ifica r la s
co n e xio n e s co lg a d a s .

Bloqueos y Cuelgues
Mie n t ra s q u e m u ch o s clie n t e s y s e rvid o re s d e b a s e s d e d a t o s t ie n e fo rm a s d e
m a n e ja r lo s b lo q u e o s y lo s cu e lg u e s y n o t e n e m o s q u e p re o cu p a rn o s d e e s crib ir
có d ig o p a ra m a n e ja r e s t a s s it u a cio n e s , m u ch o s d e lo s n u e vo s m o d e lo s d e b a s e d e
d a t o s lig e ro s d is t rib u id o s n o e s t á n t a n b ie n e q u ip a d o s . La cla s e co n e ct io n p o o l
p ro p o rcio n a u n a co s e ch a d o r d e co n e xio n e s m u e rt a p a ra m a n e ja r d ich a s
s it u a ccio n e s .
La cla s e Co n n e ct io n Re a p e r d e cid e q u e u n a cla s e e s t á m u e rt a cu a n d o s e cu m p le n
la s s ig u ie n t e s co n d icio n e s :
● La co n e xió n e s t á m a rca d a co m o q u e e s t á e n u s o .

● La co n e xió n e s m á s vie ja q u e t ie m p o d e t im e o u t p re s e le ccio n a d o .

● La co n e xió n fa lla e n u n ch e q u e o d e va lid a ció n .

El ch e q u e o d e va lid a ció n e je cu t a u n a s im p le co n s u lt a S QL s o b re la co n e xió n p a ra


ve r s i la n za u n a e xce p ció n . En e s t e e je m p lo , e l m é t o d o d e va lid a ció n s o licit a u n a
d e s crip ció n d e a lt o n ive l d e la s t a b la s d e la b a s e d e d a t o s . S i u n a co n e xió n fa lla e l
t e s t d e va lid a ció n , s e cie rra , s e in icia u n a n u e va co n e xió n co n la b a s e d e d a t o s y s e
a ñ a d e a l a lm a ce n d e co n e xio n e s .

public boolean validate() {


try {
[Link]();
}catch (Exception e) {
return false;
}
return true;
}

Cerrar Conexiones
La co n e xió n e s d e vu e lt a a l a lm a ce n d e co n e xio n e s cu a n d o e l p ro g ra m a lla m a n t e
lla m a a l m é t o d o JD CCo n n e c t io n . c lo s e e n s u cla ú s u la fin a lly .

public void close() throws SQLException {


[Link](this);
}

Aplicación de Ejemplo
Us a m o s u n a lm a ce n d e co n e xio n e s e n u n a a p lica ció n d e fo rm a s im ila r a co m o
u s a ría m o s cu a lq u ie re o t ro d rive r JDBC. Aq u í e s t á e l có d ig o d e u n Re g is t ra t io n Be a n
co n t ro la d o p o r e l Be a n . Es t e Re g is t ra t io n Be a n s e h a a d a p t a d o d e s d e la ca s a d e
s u b a s t a s d e Ja va Be a n s e n t e rp ris e d e s crit o e n lo s co a ít u lo 1 - 3 .
Cu a n d o s e cre a e l p rim e r o b je t o Re g is t ra t io n Be a n , cre a u n e je m p la r e s t á t ico d e
la cla s e JD CCo n n e c t io n D riv e r. Es t e o b je t o d rive r e s t á t ico s e re g is t ra a s í m is m o
co n e l D riv e rMa n a g e r e n e l co n s t ru ct o r JD CCo n n e c t io n D riv e r p o n ie n d o
d is p o n ib le s la s o licit u d e s d e co n e xio n e s p a ra t o d o s lo s o b je t o s Re g is t ra t io n Be a n
cre a d o s p o r la a p lica ció n clie n t e .
Pa s a r la URL co m o jd b c :jd c :jd c p o o l e n e l m é t o d o g e t Co n n e c t io n p e rm it e q u e e l
D riv e rMa n a g e r co rre s p o n d a la g e t Co n n e c t io n s o licit a d a a l d rive r re g is t ra d o . El
D riv e rMa n a g e r u s a u n s e n cillo S t rin g p a ra e n co n t ra r u n d rive r d is p o n ib le q u e
p u e d a m a n e ja r URLs e n e s e fo rm a t o .

public class RegistrationBean implements EntityBean{

private transient EntityContext ctx;


public String theuser, password;
public String creditcard, emailaddress;
public double balance;

//Static class instantiation


static {
try{
new [Link](
"[Link]",
"jdbc:cloudscape:ejbdemo",
"none", "none");
}catch(Exception e){}
}

public Connection getConnection()


throws SQLException{
return [Link](
"jdbc:jdc:jdcpool");
}
}

Oz it o
Características y Herramientas de Rendimiento
La n u e va Má q u in a Virt u a l Ja va TM ( JVM) t ie n e ca ra ct e rís t ica s p a ra m e jo ra r e l
re n d im ie n t o , y p o d e m o s u s a r u n n ú m e ro d e h e rra m ie n t a s p a ra in cre m e n t a r e l
re n d im ie n t o d e la a p lica ció n o re d u cir e l t a m a ñ o d e lo s fich e ro s Cla s s g e n e ra d o s .
Po r e s o la s ca ra ct e rís t ica s y h e rra m ie n t a s m e jo ra n e l re n d im ie n t o d e n u e s t ra
a p lica ció n co n m u y p o co s o ca s i n in g ú n ca m b io e n e n n u e s t ra a p lica ció n .
● Ca ra ct e rís t ica s d e la Má q u in a Virt u a l Ja va

● Co m p ila d o re s Ju s t - In - Tim e
● He rra m ie n t a s d e Te rce ra s Pa rt e s

Caracterísitcas de la Máquina Virtual Java (JVM)


La p la t a fo rm a Ja va ® 2 h a p re s e n t a m o m u ch a s m e jo ra s d e re n d im ie n t o s o b re
ve rs io n e s a n t e rio re s , in clu ye n d o a s ig n a ció n m á s rá p id a d e m e m o ria , re d u cció n d e l
t a m a ñ o d e la s cla s e s , m e jo ra r la re co le cció n d e b a s u ra , m o n it o re s lin e a le s y u n JIT
in t e rn o co m o e s t á n d a rd . Cu a n d o u s a m o la n u e va JVM d e Ja va 2 n a d a m á s s a ca rla
d e la ca ja ve re m o s u n a m e jo ra , s in e m b a rg o p a ra e n t e n d ie n d o co m o fu n cio n a e l
a u m e n t o d e ve lo cid a d p o d e m o s a ju s t a r n u e s t ra a p lica ció n p a ra e xp rim ir h a s t a e l
ú lt im o b it d e re n d im ie n t o .

Métodos en Línea

La ve rs ió n Ja va 2 d e la JVM a u t o m á t ica m e n t e a lin e a m é t o d o s s e n cillo e n e l


m o m e n t o d e la e je cu ció n . En u n a JVM s in o p t im iza r, ca d a ve z q u e s e lla m a a u n
m é t o d o , s e cre a u n n u e vo m a rco d e p ila . La cre a cció n d e u n n u e vo m a rco d e p ila
re q u ie re re cu rs o s a d icio n a le s a s í co m o a lg ú n re - m a p e o d e la p ila , e l re s u lt a d o fin a l
cre a r n u e vo s m a rco s d e p ila in cu rre e n u n a p e q u e ñ a s o b re ca rg a .
Lo s m é t o d o s e n lín e a a u m e n t a e l re n d im ie n t o re d u cie n d o e l n ú m e ro d e lla m a d a s a
m é t o d o s q u e h a ce n u e s t ro p ro g ra m a . La JVM a lín e a m é t o d o s q u e d e vu e lve n
co n s t a n t e s o s ó lo a cce d e n a ca m p o s in t e rn o s . Pa ra t o m a r ve n t a ja d e lo s m é t o d o s
e n lín e a p o d e m o s h a ce r u n a d e e s t a s d o s co s a s . Po d e m o s h a ce r q u e u n m é t o d o
a p a re zca a t ra ct ivo p a ra q u e la JVM lo p o n g a e n lín e a o p o n e rlo m a n u a lm e n t e e n
lín e a s i n o ro m p e n u e s t ro m o d e lo d e o b je t o s . La a lin e a ció n m a n u a l e n e s t e
co n t e xt o s ó lo s ig n ifica p o n e r e l có d ig o d e u n m é t o d o d e n t ro d e l m é t o d o q u e lo h a
lla m a d o .
El a lin e a m ie n t o a u t o m á t ico d e la JVM s e ilu s t ra co n e s t e p e q u e ñ o e je m p lo :

public class InlineMe {

int counter=0;
public void method1() {
for(int i=0;i<1000;i++)
addCount();
[Link]("counter="+counter);
}

public int addCount() {


counter=counter+1;
return counter;
}

public static void main(String args[]) {


InlineMe im=new InlineMe();
im.method1();
}
}
En e l e s t a d o a ct u a l, e l m é t o d o a d d Co u n t n o p a re ce m u y a t ra ct ivo p a ra e l d e t e ct o r
e n lín e a d e la JVM p o rq u e e l m é t o d o a d d Co u n t d e vu e lve u n va lo r. Pa ra ve r s i é s t e
m é t o d o e s t á e n lín e a co m p ila m o s e l e je m p lo co n e s t e p e rfil a ct iva d o :

java -Xrunhprof:cpu=times InlineMe


Es t o g e n e ra u n fich e ro d e s a lid a ja v a . h p ro f. t x t . Lo s 1 0 p rim e ro s m é t o d o s s e
p a re ce rá n a e s t o :

CPU TIME (ms) BEGIN (total = 510)


Thu Jan 28 [Link] 1999
rank self accum count trace method
1 5.88% 5.88% 1 25 java/lang/Character.
<clinit>
2 3.92% 9.80% 5808 13 java/lang/[Link]
3 3.92% 13.73% 1 33 sun/misc/
Launcher$AppClassLoader.
getPermissions
4 3.92% 17.65% 3 31 sun/misc/
[Link]
5 1.96% 19.61% 1 39 java/net/
[Link]$1
6 1.96% 21.57% 1000 46 [Link]
7 1.96% 23.53% 1 21 sun/io/
[Link]
8 1.96% 25.49% 1 17 sun/misc/
Launcher$ExtClassLoader.
getExtDirs
9 1.96% 27.45% 1 49 java/util/[Link]
10 1.96% 29.41% 1 24 sun/misc/Launcher.<init>
S i ca m b ia m o s e l m é t o d o a d d Co u n t p a ra q u e n o d e vu e lva n in g ú n va lo r, la JVM lo
p o n d rá e n lín e a d u ra n t e la e je cu ció n . Pa ra a m ig a b le e l có d ig o e n lín e a
re e m p la za m o s e l m é t o d o a d d Co u n t co n e s t o :

public void addCount() {


counter=counter+1;
}
Y e je cu t a m o s e l p e rfil d e n u e vo :

java -Xrunhprof:cpu=times InlineMe


Es t a ve z e l fich e ro d e s a lid a ja v a . h p ro f. t x t d e b e ría p a re ce r d ife re n t e . El m é t o d o
a d d Co u n t s e h a id o . Ha s id o p u e s t o e n lín e a !

CPU TIME (ms) BEGIN (total = 560)


Thu Jan 28 [Link] 1999
rank self accum count trace method
1 5.36% 5.36% 1 27 java/lang/
Character.<clinit>
2 3.57% 8.93% 1 23 java/lang/
[Link]
3 3.57% 12.50% 2 47 java/io/PrintStream.<init>
4 3.57% 16.07% 5808 15 java/lang/[Link]
5 3.57% 19.64% 1 42 sun/net/www/protocol/file/
[Link]
6 1.79% 21.43% 2 21 java/io/[Link]
7 1.79% 23.21% 1 54 java/lang/Thread.<init>
8 1.79% 25.00% 1 39 java/io/[Link]
9 1.79% 26.79% 1 40 java/util/jar/
[Link]
10 1.79% 28.57% 1 38 java/lang/Class.forName0

Sincronización

Lo s m é t o d o s y o b je t o s s in cro n iza d o s e n Ja va h a n t e n id o u n p u n t o d e re n d im ie n t o
a d icio n a l co m o e l m e ca n is m o u t iliza d o p a ra im p le m e n t a r e l b lo q u e o d e e s t e có d ig o
u s a n d o u n re g is t ro d e m o n it o r g lo g a l q u e s ó lo fu e e n h e b ra d o e n a lg u n a s á re a s
co m o la b ú s q u e d a d e m o n it o re s e xis t e n t e s . En la ve rs ió n Ja va 2 , ca d a t h re a d t ie n e
u n re g is t ro d e m o n it o r y p o r e s o s e h a n e lim in a d o m u ch o d e e s o s cu e llo s d e
b o t e lla s .
S i h e m o s u s a d o p ré via m e n t e o t ro s m e ca n im o s d e b lo q u e o s p o rq u e e l p u n t o d e
re n d im ie n t o co n lo s m é t o d o s s in cro n iza d o s m e re ce la p e n a re - vis it a r e s e có d ig o y
in co rp o ra rle lo s b lo q u e o s e n lín e a d e Ja va 2 .
En e l s ig u ie n t e e je m p lo q u e e s t á cre a n d o m o n it o re s p a ra e l b lo q u e s in cro n iza d o
p o d e m o s a lca n za r u n 4 0 % d e a u m e n t o d e ve lo cid a d . El t ie m p o e m p le a d o fu e 1 4 m s
u s a n d o JDK 1 . 1 . 7 y s ó lo 1 0 m s co n Ja va 2 e n u n a m á q u in a S u n Ult ra 1 .

class MyLock {

static Integer count=new Integer(5);


int test=0;

public void letslock() {


synchronized(count) {
test++;
}
}
}

public class LockTest {

public static void main(String args[]) {

MyLock ml=new MyLock();


long time = [Link]();

for(int i=0;i<5000;i++ ) {
[Link]();
}
[Link]("Time taken="+
([Link]()-time));
}
}

Java Hotspot

La m á q u in a virt u a l Ja va Ho t S p o t TM e s la s ig u ie n t e g e n e ra ció n d e im p le m e n t a cio n e s


d e la m á q u in a virt u a l d e S u n Micro s ys t e m . La Ja va Ho t S p o t VM s e a d h ie re a la
m is m a e s p e cifica ció n q u e la JVM d e Ja va 2 , y e je cu t a lo s m is m o s b yt e co d e s , p e ro
h a s id o re d is e ñ a d a p a ra la n za r n u e va s t e cn o lo g ía s co m o lo s m o d e lo s d e la
o p t im iza ció n a d a p t a t iva y d e re co le cció n d e b a s u ra m e jo ra d a p a ra m e jo ra r
d ra m á t ica m e n t e la ve lo cid a d d e l JVM.
Op t im iz a c ió n Ad a p t a t iv a
El Ja va Ho t s p o t n o in clu ye u n co m p ila d o r in t e rn o JIT p e ro e n s u lu g a r co m p ila y
p o n e m é t o d o s e n lín e a q u e p a re ce n s e r lo s m á s u t iliza d o s e n la a p lica ció n . Es t o
s ig n ifica q u e e n e l p rim e r p a s o p o r lo s b yt e s co d e s Ja va s o n in t e rp re t a d o s co m o s i
n i t u b ie ra m o s u n co m p ila d o r JIT. S i e l có d ig o a p a re ce co m o u n p u n t o ca lie n t e d e
n u e s t ra a p lica ció n e l co m p ila d o r Ho t s p o t co m p ila rá lo s b yt e co d e s a có d ig o n a t ivo
q u e e s a lm a ce n a d o e n u n ca ch é y lo s m é t o d o s e n lín e a a l m is m o t ie m p o .
Un a ve n t a ja d e la co m p ila zió n s e le ct iva s o b re u n co m p ila d o r JIT e s q u e e l
co m p ila d o r d e b yt e s p u e d e g a s t a r m á s t ie m p o e n g e n e ra r a lt a o p t im iza ció n p a ra
á re a s q u e p o d ría n p ro vo ca r la m a yo r o p t im iza ció n . e l co m p ila d o r t a m b ié n p u e d e
co m p ila d r có d ig o q u e p o d ría e je cu t a rs e m e jo r e n m o d o in t é rp re t e .
En e l ve rs io n e s a n t e rio re s d e la Ja va Ho t S p o t VM d o n d e n o e ra p o s ib le o p t im iza r
có d ig o q u e n o e s t á b a a ct u a lm e n t e e n u s o . El la d o n e g a t ivo d e e s t o e s q u e la
a p lica ció n e s t a b a e n u n a e n o rm e b u cle y e l o p t im iza d o r n o p o d ía co m p ila r e l có d ig o
d e l á re a h a s t a q u e e l b u cle fin a liza ra . Po s t e rio re s ve rs io n e s d e la Ja va Ho t s p o t VM,
u s a u n re e m p la za m ie n t o e n la p ila , s ig n ifica n d o q u e e l có d ig o p u e d e s e r co m p ila d o
e n có d ig o n a t ivo in clu s o s i e s t á s ie n d o u t iliza d o p o r e l in t é rp re t e .
Re c o le c c ió n d e Ba s u ra Me jo ra d a
El re co le ct o r d e b a s u ra u s a d o e n e l la Ja va Ho t S p o t VM p re s e n t a va ria s m e jo ra s
s o b re lo s re co le ct o re s d e b a s u ra e xis t e n t e s . El p rim e ro e s q u e e l re co le ct o r s e h a
co n ve rt id o e n u n re co le ct o r d e b a s u ra t o t a lm e n t e s e g u ro . Lo q u e e s t o s ig n ifica e s
q u e e l re co e lct o s a b e e xa ct a m e n t e q u é e s u n a re fe re n cia y q u é s o n s ó lo d a t o s . El
u s o d e re fe re n cia s d ire ct a s a o b je t o s e n e l h e a p e n u n a Ja va Ho t S p o t VM e n lu g a r
d e u s a r m a n e ja d o re s d e o b je t o s . Es t e in cre m e n t o d e l co n o cim ie n t o s ig n ifica q u e la
fra g m e n t a ció n d e m e m o ria p u e d e re d u cirs e co n u n re s u lt a d o d e u n a h u e lla d e
m e m o ria m á s co m p a ct a .
La s e g u n d a m e jo ra e s e l u s o d e có p ia d o g e n e ra cio n a l. Ja va cre a u n g ra n n ú m e ro
d e o b je t o s e n la p ila y fre cu e n t e m e n t e e s t o s o b je t o s t e n ía n u n a vid a m u y co rt a .
Re e m p la za d o lo s o b je t o s cre a d o s re cie n t e m e n t e p o r u n cu b o d e m e m o ria ,
e s p e ra n d o a q u e e l cu b o s e le n e y lu e g o s ó lo co p ia n d o lo s o b je t o s vivo s re s t a n t e s a
u n a n u e vo á re a d e l b lo q u e d e m e m o ria q u e e l cu b o p u e d e lib e ra r e n u n b lo q u e .
Es t o s ig n ifica q u e la JVM n o t ie n e q u e b u s ca r u n h u e co p a ra co lo ca r ca d a n u e vo
o b je t o e n la p ila y s ig n ifica q u e s e n e ce s it a m a n e ja r s e ccio n e s d e m e m o ria m á s
p e q u e ñ a s d e u n a ve z.
Pa ra o b je t o s vie jo s e l re co le ct o r d e b a s u ra h a ce u n b a rrid o a t ra vé s d e l h e p a y
co m p a ct a lo s h u e co s d e lo s o b je t o s m u e rt o s d ire ct a m e n t e , e lim in a n d o la n e ce s id a d
d e u n a lis t a lib re u s a d a e n a lg o rit m o s d e re co le cció n d e b a s u ra a n t e rio re s .
El t e rce r á re a d e m e jo ra e s e lim in a r la p e rce p ció n d e p a u s a r e n la re co le cció n d e
b a s u ra e s ca lo n a n d o la co m p a ct a ció n d e g ra n d e s o b je t o s lib e ra d o s e n p e q u e ñ o s
g ru p o s y co m p a ct á n d o lo s d e fo rm a in cre m e n t a l.
S in c ro n iz a c ió n Rá p id a d e Th re a d s
La Ja va Ho t S p o t VM a ls o m e jo ra e l có d ig o d e s in cro n iza ció n e xis t e n t e . Lo s b lo q u e s
y m é t o d o s s in cro n iza d o s s ie m p re n re p re s e n t a n u n a s o b re ca rg a cu a n d o s e e je cu t a n
e n u n a JVM. El Ja va Ho t S p o t im p le m e n t a lo s p ro p io s p u n t o s d e e n t ra d a y s a lid a d e l
m o n it o r d e s in cro n ia ció n y n o d e p e n d e n d e l S is t e m a Op e ra t ivo lo ca l p a ra
p ro p o rcio n a r e s t a s in cro n iza ció n . Es t e re s u lt a d o e s u n g ra n a u m e n t o d e la
ve lo cid a d e s p e cia lm e n t e e n la s fre cu e n t e s a p lica cio n e s GUI s in cro n iza d a s .

Compiladores Just-In-Time
La h e rra m ie n t a m á s s e n cilla p a ra m e jo ra r e l re n d im ie n t o d e n u e s t ra a p lica ció n e l
co m p ila d o r Ju s t - In - Tim e ( JIT) . Un JIT e s u n g e n e ra d o r d e có d ig o q u e co n vie rt e lo s
b yt e co d e s Ja va e n có d ig o n a t ivo d e la m á q u in a . Lo s p ro g ra m a s Ja va in vo ca d o s co n
u n JIT g e n e ra lm e n t e s e e je cu t a n m á s rá p id o s q u e cu a n d o s e e je cu t a n e n
b yt e co d e s p o r e l in t é rp re t e . La Ja va Ho t s p o t VM e lim in a la n e ce s id a d d e u n
co m p ila d o r JIT e n m u ch o s ca s o s , s in e m b a rg o p o d ría n u t iliza r e l co m p ila d o r JIT e n
ve rs io n e s a n t e rio re s .
El co m p ila d o r JIT s e p u s o d is p o n ib le co m o u n a a ct u a liza ció n d e re n d im ie n t o e n la
ve rs ió n Ja va De ve lo p m e n t Kit ( JDKTM) 1 . 1 . 6 y a h o ra e s u n a h e rra m ie n t a e s t á n d a rd
in vo ca d a s ie m p re q u e u s a m o s e l in t é rp re t e ja v a e n la ve rs ió n d e la p la t a fo rm a
Ja va 2 . Po d e m o s d e s a ct iva r e l u s o d e l co m p ila d o r JIT u s a n d o la o p ció n
- D ja v a . c o m p ile r= N ON E e n la JVM.

¿Cómo Funcionan los Compiladores JIT?

Lo s co m p ila d o re s JIT s e s u m in is t ra n co m o lib re ría s n a t iva s d e p e n d ie n t e s d e la


p la t a fo rm a . S i xis t e la lib re ría d e l co m p ila d o r JIT, la JVM in icia liza e l JNI ( Ja va
Na t ive In t e rfa ce ) p a ra lla m a r a la s fu n cio n e s JIT d is p o n ib le s e n la lib re ría e n lu g a r
d e s u fu n ció n e q u iva le n t e d e l in t é rp re t e .
S e u s a la cla s e ja v a . la n g . Co m p ile r p a ra ca rg a r la lib re ría n a t iva y e m p e za r la
in icia liza ció n d e n t ro d e l co m p ila d o r JIT.
Cu a n d o la JVM lla m a a u n m é t o d o Ja va , u s a u n m é t o d o lla m a n t e co m o e s p e cifica d o
e n e l b lo q u e m é t o d o d e l o b je t o cla s s ca rg a d o . La JVM t ie n e va rio s m é t o d o s
lla m a n t e s , p o r e je m p lo , s e u t iliza u n lla m a n t e d ife re n t e s i e l m é t o d o e s
s in cro n iza d o o s i e s u n m é t o d o n a t ivo .
El co m p ila d o r JIT u s a s u p ro p io lla m a n t e . La s ve rs ió n d e S u n ch e q u e a n e l b it d e
a ce s o a l m é t o d o p o r u n va lo r ACC_ MACHI N E_ COMP I LED p a ra n o t ifica rle a l
in t é rp re t e q u e e l có d ig o d e e s t é m é t o d o ya e s t á co m p ila d o y a lm a ce n a d o e n la s
cla s e s ca rg a d a s .

¿Cuando el se compilado el código JIT?

Cu a n d o s e lla m a a u n m é t o d o p o r p rim e ra ve z e l co m p ila d o r JIT co m p ila d e l b lo q u e


d e l m é t o d o a có d ig o n a t ivo y lo a lm a ce n a e n u n b lo q u e d e có d ig o .
Un a ve z q u e e l có d ig o h a s id o co m p ila d o s e a ct iva e l b it
ACC_ MACHI N E_ COMP I LED , q u e e s u s a d o e n la p la t a fo rm a S u n .

¿Cómo puedo ver lo que está haciendo el compilador JIT?


La va ria b le d e e n t o rn o JI T_ ARGS p e rm it e u n co n t ro l s e n cillo s o b re e l co m p ila d o r
JIT e n S u n S o la ris . Ha y d o s va lo re s ú t ile s t ra c e y e x c lu d e ( lis t ) . Pa ra e xclu ir lo s
m é t o d o s d e l e je m p lo I n lin e Me u n m o s t ra r u n s e g u im ie n n t o s e le ccio n a m o s
JI T_ ARGS d e e s t a fo rm a :

Unix:
export JIT_ARGS="trace exclude([Link]
InlineMe.method1)"

$ java InlineMe
Initializing the JIT library ...
DYNAMICALLY COMPILING java/lang/[Link]
mb=0x63e74
DYNAMICALLY COMPILING java/util/[Link]
mb=0x6de74
DYNAMICALLY COMPILING java/util/[Link]
mb=0x714ec
DYNAMICALLY COMPILING java/lang/[Link]
mb=0x44aec
DYNAMICALLY COMPILING java/lang/[Link]
mb=0x447f8
DYNAMICALLY COMPILING java/lang/[Link]
mb=0x454c4
DYNAMICALLY COMPILING java/lang/[Link]
mb=0x451d0
DYNAMICALLY COMPILING java/lang/StringBuffer.<init>
mb=0x7d690
<<<< Inlined java/lang/[Link] (4)
Ob s e rva q u e lo s m é t o d o s e n lín e a co m o S t rin g . le n g t h e s t á e xe n t o s . El m e t o d o
S t rin g . le n g t h t a m b ié n e s u n m é t o d o e s p e cia l y e s n o rm a lm e n t e co m p ila d o e n u n
a t a jo d e b yt e co d e s in t e rn o p a ra e l in t é rp re t e ja va . Cu a n d o u s a m o s e l co m p ila d o r
JIT e s t á s o p t im iza cio n e s p ro p o rcio n a d a s p o r e l in t é rp re t e Ja va s o n d e s a ct iva d a s
p a ra a ct iva r e l co m p ila d o r JIT p a ra e n t e n d e r q u é m é t o d o e s t á s ie n d o lla m a d o .

¿Cómo Aprovechar la Ventaja del Compilador JIT?

Lo p rim e ro a re co rd a r e s q u e e l co m p ila d o r JIT co n s ig u e la m a yo ría d e l a u m e n t o d e


ve lo cid a d la s e g u n d a ve z q u e lla m a a u n m é t o d o . El co m p ila d o r JIT co m p ila e l
m é t o d o co m p le t o e n lu g a r d e in t é rp re t a rlo lín e a p o r lín e a q u e t a m b ié n p u e d e s e r
u n a g a n a n cia d e re n d im ie n t o cu a n d o s e e je cu t a u n a a p lica ció n e l JIT a ct iva d o . Es t o
s ig n ifica q u e s i e l có d ig o s ó lo s e lla m a u n a ve z n o ve re m o s u n a g a n a n cia d e
re n d im ie n t o s ig n ifica n t e . El co m p ila d o r JIT t a m b ié n ig n o ra lo s co n s t ru ct o re s d e la s
cla s e s p o r e s o s i e s p o s ib le d e b e m o s m a n t e n e r a l m ín im o e l có d ig o e n lo s
co n s t ru ct o re s .
El co m p ila d o r JIT t a m b ié n co n s ig u e u n a g a n a n cia s m e n o re s d e re n d im ie n t o a l n o
p re ch e q u e a r cie rt a s co n d icio n e s Ja va co m o p u n t e ro s N u ll o e xce p cio n e s d e a rra y
fu e ra d e lím it e s . La ú n ica fo rm a d e q u e e l co m p ila d o r JIT co n o zca u n a e xce p ció n d e
p u n t e ro n u ll e s m e d ia n t e u n a s e ñ a l la n za d a p o r e l s is t e m a o p e ra t ivo . Co m o la
s e ñ a l vie n e d e l s is t e m a o p e ra t ivo y n o d e la JVM, n u e s t ro p ro g ra m a m e jo ra s u
re n d im ie n t o . Pa ra a s e g u ra rn o s e l m e jo r re n d im ie n t o cu a n d o s e e je cu t a u n a
a p lica ció n co n e l JIT, d e b e m o s a s e g u ra rn o s d e q u e n u e s t ro có d ig o e s t á m u y lim p io
y s in e rro re s co m o e xce p cio n e s d e p u n t e ro s n u ll o a rra ys fu e ra d e lím it e s .
Po d ría m o s q u e re r d e s a ct iva r e l co m p ila d o r JIT s u e s t á m o s e je cu t a n d o la JVM e n
m o d o d e d e p u ra ció n re m o t o , o s i q u e re m o s ve r lo s n ú m e ro s d e lín e a s e n ve z d e la
e t iq u e t a ( Co m p ile d Co d e ) e n n u e s t o s s e g u im ie n t o s d e p ila . Pa ra d e s a ct iva r e l
co m p ila d o r JIT, s u m in is t ra m o s u n n o m b re n o vá lid o o u n n o m b re e n b la n co p a ra e l
co m p ila d o r JIT cu a n d o in vo q u e m o s a l in t é rp re t e . Lo s s ig u ie n t e s e je m p lo s m u e s t ra n
e l co m a n d o ja v a c p a ra co m p ila r e l có d ig o fu e n t e e n b yt e co d e s , y d o s fo rm a s d e l
co m a n d o ja v a p a ra in vo ca r a l in t é rp re t e s in e l co m p ila d o r JIT:

javac [Link]
java -[Link]=NONE MyClass
o

javac [Link]
java -[Link]="" MyClass

Herramientas de Terceras Partes


Ha y o t ra s h e rra m ie n t a s d is p o n ib le s in clu id a s a q u e lla s q u e re d u ce n e l t a m a ñ o d e lo s
fich e ro s cla s s g e n e ra d o s . El fich e ro cla s s Ja va co n t ie n e u n á re a lla m a d a a lm a ce n
d e co n s t a n t e s . Es t e a lm a ce n d e co n s t a n t e s m a n t ie n e u n a lis t a d e s t rin g s y o t ra
in fo rm a ció n d e l fich e ro cla s s p a ra re fe re n cia s . Un a s d e la s p ie za s d e in fo rm a ció n
d is p o n ib le s e n e l a lm a ce n d e co n s t a n t e s s o n lo s n o m b re s d e lo s m é t o d o s y
ca m p o s .
El fich e ro cla s s s e re fie re a u n ca m p o d e la cla s e co m o a u n a re fe re n cia a u n
e n t ra d a e n e l a lm a ce n d e co n s t a n t e s . Es t o s ig n ifica q u e m ie n t ra s la s re fe re n cia s
p e rm a n e zca n ig u a le s n o im p o rt a lo s va lo re s a lm a ce n a d o s e n e l a lm a ce n d e
co n s t a n t e s . Es t e co n o cim ie n t o e s e xp lo t a d o p o r va ria s h e rra m ie n t a s q u e re e s crib e n
lo s n o m b re s d e lo s ca m p o s y d e lo s m é t o d o s e n e l a lm a ce n d e co n s t a n t e s co n
n o m b re s re co rt a rd o s . Es t a t é cn ica p u e d e re d u cir e l t a m a ñ o d e l fich e ro cla s s e n u n
p o rce n t a je s ig n ifica n t e co n e l b e n e ficio d e q u e u n fich e ro cla s s m á s p e q u e ñ o
s ig n ifica u n t ie m p o d e d e s ca rg a m e n o r.

Oz it o
Análisis de Rendimiento
Ot ra fo rm a d e a u m e n t a r e l re n d im ie n t o e s co n á n a lis is d e re n d im ie n t o . Lo s a n á lis is
d e re n d im ie n t o s b u s ca n la s e je cu ció n d e l p ro g ra m a a p u n t a r d o n d e p o d ría n e s t a r
lo s cu e llo s d e b o t e lla y o t ro s p ro b le m a s d e re n d im ie n t o co m o lo s p ico s d e
m e m o ria . Un a ve z q u e s a b le s d o n d e e s t á n lo s p u n t o s d e p ro b le m a s p o t e n cia le s
p o d e m o s ca m b ia r n u e s t ro có d ig o p a ra e lim in a r o re d u cir s u im p a ct o .
● Pe rfila d o

● An a liza r u n Pro g ra m a
● He rra m ie n t a s d e Re n d im ie n t o d e l S is t e m a Op e ra t ivo

Perfiles
La s Má q u in a s Vit u a le s Ja va TM ( JVMs ) h a n t e n id o la h a b ilid a d d e p ro p o rcio n a r
s e n cillo s in fo rm e s d e p e rfile s d e s d e Ja va De ve lo p m e n t Kit ( JDKTM) 1 . 0 . 2 . S in
e m b a rg o , la in fo rm a ció n q u e e llo s p ro p o rcio n a b a n e s t a b a n lim it a d a s a u n a lis t a d e
lo s m é t o d o s q u e u n p ro g ra m a h a b ía lla m a d o .
La p la t a fo rm a Ja va ® 2 p ro p o rcio n a m u ch a s m á s ca p a cid a d e s d e p e rfila d o q u e la s
a n t e rio rm e n t e d is p o n ib le s y e l a n á lis is d e e s t o s d a t o s g e n e ra d o s e h a h e ch o m á s
fá cil p o r la e m e rg e n cia d e u n "He a p An a lys is To o l" ( HAT) . Es t a h e rra m ie n t a , co m o
im p lica s u n o m b re , n o s p e rm it e a n a liza r lo s in fo rm e s d e p e rfile s d e l h e a p . El h e a p
e s u n b lo q u e d e m e m o ria q u e la JVM u s a cu a n d o s e e s t á e je cu t a n d o . La
h e rra m ie n t a d e a n á lis is d e h e a p n o s p e rm it e g e n e ra r in fo rm e s d e o b je t o s q u e
fu e ro n u s a d o a l e je cu t a r n u e s t ra a p lica ció n . No s ó lo p o d e m o s o b t e n e r u n lis t a d o d e
lo s m é t o d o s lla m a d o s m á s fre cu e n t e m e n t e y la m e m o ria u s a d a e n lla m a r a e s o s
m é t o d o s , p e ro t a m b ié n p o d e m o s s e g u ir lo s p ico s d e m e m e o ria . Lo s p ico s d e
m e m o ria p u e d e n t e n e r u n s ig n ifica n t e im p a ct o e n e l re n d im ie n t o .

Analizar un Programa
Pa ra a n a liza r e l p ro g ra m a Ta b le Ex a m p le 3 in clu id o e n e l d ire ct o rio
d e m o / jfc / Ta b le d e la p la t a fo rm a Ja va 2 , n e ce s it a m o s g e n e ra r u n in fo rm e d e
p e rfil. El in fo rm a m á s s e n cillo d e g e n e ra r e s u n p e rfil d e t e xt o . Pa ra g e n e ra rlo ,
e je cu t a m o s la a p lica ció n e l p a rá m e t ro - Xh p ro f. En la ve rs ió n fin a l d e la p la t a fo rm a
Ja va 2 , e s t a o p ció n fu e re n o m b ra d a co m o - Xru n h p ro f. Pa ra ve r u n a lis t a d e
o p cio n e s a ct u a lm e n t e d is p o n ib le s e je cu t a m o s e l co m a n d o :

java -Xrunhprof:help
Hprof usage: -Xrunhprof[:help]|[<option>=<value>, ...]
N o m b re d e Op c ió n y Va lo r D e s c rip c ió n P o r D e fe c t o
-------------------------- --------------- ---------------
h e a p = d u m p | s it e s | a ll h e a p p ro filin g a ll
c p u = s a m p le s | t im e s | o ld CP U u s a g e o ff
m o n it o r= y | n m o n it o r c o n t e n t io n n
fo rm a t = a | b a s c ii o r b in a ry o u t p u t a
file = < file > w rit e d a t a t o file ja v a . h p ro f( . t x t fo r a s c ii)
s e nd da ta o ve r a
n e t = < h o s t > :< p o rt > w rit e t o file
s o cke t
d e p t h = < s iz e > s t a c k t ra c e d e p t h 4
c u t o ff= < v a lu e > o u t p u t c u t o ff p o in t 0 .0 0 0 1
lin e n o = y | n lin e n u m b e r in t ra c e s y
t h re a d = y | n t h re a d in t ra c e s ? n
do e = y| n d u m p o n e x it ? y

Example: java -Xrunhprof:cpu=samples,file=[Link],


depth=3 FooClass

La s ig u ie n t e in vo ca ció n cre a u n a fich e ro d e t e xt o q u e p o d e m o s ve r s in la


h e rra m ie n t a d e a n á lis is d e h e a p lla m a d o ja v a . h p ro f. t x t cu a n d o e l p ro g ra m a
g e n e ra u n s e g u im ie n t o d e p ila o s a le . S e u t iliza u n a in vo ca ció n d ife re n t e p a ra cre a r
u n fich e ro b in a rio p a ra u s a rlo co n la h e rra m ie n t a d e a n á lis is d e h e a p :

java -Xrunhprof TableExample3

d:\jdk12\demo\jfc\Table> java -Xrunhprof TableExample3


Dumping Java heap ... allocation sites ... done.
La o p ció n d e p e rfil lit e ra lm e n t e h a ce u n d ia rio d e ca d a o b je t o cre a d o e n e l h e a p ,
p o r in clu s o cu a n d o a rra n ca m o s y p a ra m o s e l p e q u e ñ o p ro g e a m a Ta b le Ex a m p le 3
re s u lt a u n fich e o d e in fo rm e d e cu a t ro m e g a b yt e s . Au n q u e la h e rra m ie n t a d e
a n á lis is d e h e a p u s a u n a ve rs ió n b in a ria d e e s t e fich e ro y p ro p o rcio n a u n s u m a rio ,
h a y a lg u n a s co s a s rá p id a s y fá cile s q u e p o d e m o s a p re n d e r d e s d e e l fich e ro d e
t e xt o s in u s a r la h e rra m ie n t a d e a n á lis is d e h e a p .
N o t a : Pa ra lis t a r t o d a s la s o p cio n e s d is p o n ib le s , u s a m o s
ja v a - Xru n h p ro f:h e lp

Ver el Fichero de Texto

Ele g im o s u n fich e ro q u e p u e d a m a n e ja r g ra n d e s fich e ro s y va m o s h a s t a e l fin a l d e l


fich e ro . Po d ría h a b e r cie n t o s o m ile s d e lín e a s , p o r e s o u n a t a jo e s b u s ca r la s
p a la b ra s S I TES BEGI N . Ve ría m o s u n a lis t a d e lín e a q u e e m p e za ría n u n t a n g o
cre cie n t e d e n ú m e ro s s e g u id o p o r d o s n ú m e ro s d e p o rce n t a je . La p rim e ra e n t ra d a
e n la lis t a s e ría s im ila r a e s t e e je m p lo :
SITES BEGIN (ordered by live bytes)
Sun Dec 20 [Link] 1998
p e rc e n t liv e alloc'ed s t a c k c la s s
ra n k s e lf a ccum byte s o b js b y t e s o b js t ra c e n a m e
1 5 5 .8 6 % 5 5 .8 6 % 8 2 6 5 1 6 5 826516 5 3981 [S
La n o t a ció n [ S a l fin a l d e la ú lt im a lín e a in d ica q u e e s la p rim e ra e n t ra d a d e u n
a rra y d e s h o rt , u n t ip o p rim it ivo . Es t o e s lo e s p e ra d o co n a p lica cio n e s ( AWT) . Lo s
p rim e ro s cin co co n t a d o re s b a jo la ca b e ce ra o b js s ig n ifica q u e a ct u a lm e n t e h a y
cin co d e e s o s a rra ys , y s ó lo h a h a b id o cin co d u ra n t e e l t ie m p o d e vid a d e e s t a
a p lica ció n , y h a n o cu p a d o 8 2 6 5 1 6 b yt e s . La re fe re n cia cla s e d e e s t e o b je t o e s e l
va lo r lis t a d o b a jp s t a c k t ra c e . Pa ra e n co n t ra r d o n d e s e cre o e s t é o b je t o e n e s t e
e jm p lo , b u s ca m o s TRACE 3 9 8 1 . Ve re m o s e s t o :

TRACE 3981:
java/awt/image/DataBufferUShort.<init>(
[Link])
java/awt/image/[Link](
[Link])
java/awt/image/DirectColorModel.
createCompatibleWritableRaster(
[Link])
sun/awt/windows/[Link](
[Link])
El có d ig o Ta b le Ex a m p le 3 s e le ccio n a u n s c ro llp a n e d e 7 0 0 p o r 3 0 0 . Cu a n d o
m ira m o s e l fu e n t e d e Ra s t e r. ja v a , q u e s t á e n e l fich e ro s rc . ja r, e n co n t ra re m o s
e s t a s s e n t e n cia s e n la lín e a 4 0 0 :

case DataBuffer.TYPE_USHORT:
d = new DataBufferUShort(w*h);
break;
Lo s va lo re s w y h s o n la a n ch u ra y a lt u ra d e la lla m a d a a c re a t e I m a g e q u e
a rra n ca e n TRACE 3 9 8 1 . El co n s t ru ct o r D a t a Bu ffe rUS h o rt cre a u n a rra y d e
s h o rt s :

data = new short[size];


d o n d e s iz e e s w * h . Po r e s o , e n t e o ría d e b e ría h a ce r u n a e n t ra d a e n e l a rra y p a ra
2 1 0 0 0 0 e le m e n t o s . Bu s ca m o s u n a e n t e a d a p o r ca d a e je m p la riza ció n d e e s t a cla s e
b u s ca n d o p o r t ra c e = 3 9 8 1 . Un a d e la s cin co e n t ra d a s s e p a re ce rá a e s t o :

OBJ 5ca1fc0 (sz=28, trace=3979,


class=java/awt/image/DataBufferUShort@9a2570)
data 5ca1670
bankdata 5ca1f90
offsets 5ca1340
ARR 5ca1340 (sz=4, trace=3980, nelems=1,
elem type=int)
ARR 5ca1670 (sz=420004, trace=3981, nelems=210000,
elem type=short)
ARR 5ca1f90 (sz=12, trace=3982, nelems=1,
elem type=[S@9a2d90)
[0] 5ca1670
Po d e m o s ve r q u e lo s va lo re s d e lo s d a t o s d e e s t a s re fe re n cia s d e im a g e n e n u n
a rra y 5 c a 1 6 7 0 q u e d e vu e lve u n a lis t a d e 2 1 0 0 0 0 e le m e n t o s s h o rt d e t a m a ñ o 2 .
Es t o s ig n ifica q u e s t e a rra y u s a 4 2 0 0 0 4 b yt e s d e m e m o ria .
De e s t e d a t o p o d e m o s co n clu ir q u e e l p ro g ra m a Ta b le Ex a m p le 3 u s a ce rca d e
0 . 5 Mb p a ra m a p e a r ca d a t a b a l. S i la a p lica ció n d e e je m p lo s e e je cu t a e n u n a
m á q u in a co n p o ca m e m o ria , d e b e m o s a s e g u ra rn o s d e q u e n o m a n t e n e m o s
re fe re n cia s a o b je t o s g e a n d e s o a im á g e n e s q u e fu e ro n co n s t ru id a s co n e l m é t o d o
c re a t e I m a g e .

La Herramienta de Análisis de Heap

Es t a h e rra m ie n t a p u e d e a n a liza r lo s m is m o s d a t o s q u e n o s o t ro s , p e ro re q u e re u n
fich e ro d e in fo rm e b in a rio co m o e n t ra d a . Po d e m o s g e n e ra r u n fich e ro d e in fo rm a
b in a rio d e e s t a fo rm a :

java -Xrunhprof:file=[Link],format=b
TableExample3
Pa ra g e n e ra r e l in fo rm e b in a rio , ce rra m o s la ve n t a n a Ta b le Ex a m p le 3 . El fich e ro
d e in fo rm e b in a rio Ta b le Ex a m p le 3 . h p ro f s e cre a a l s a lir d e l p ro g ra m a . La
He rra m ie n t a d e An á lis is d e He a p a rra n ca u n s e rvid o r HTTP q u e a n a liza e l fich e ro d e
p e rfil b in a rio y m u e s t ra e l re s u lt a d o e n u n HTML q u e p o d e m o s ve r e n u n
n a ve g a d o r.
Po d e m o s o b t e n e r u n a co p ia d e la He rra m ie n t a d e An á lis is d e He a p d e la s it e
ja va . s u n . co m . Un a ve z in s t a la d o , e je cu t a m o s lo s s crip t s s h e ll y b a t ch e n e l
d ire ct o rio b in in s t a la d o p a ra p o d e r e je cu t a r e l s e rvid o r d e la He rra m ie n t a d e
An á lis is d e He a p d e e s t a fo rm a :

>hat [Link]
Started HCODEP server on port 7000
Reading from /tmp/[Link]...
Dump file created Tue Jan 05 [Link] PST 1999
Snapshot read, resolving...
Resolving 17854 objects...
Chasing references,
expect 35 dots.......................
Eliminating duplicate
references.........................
Snapshot resolved.
Server is ready.
La s a lid a d e a rrib a n o s d ice q u e n u e s t ro s e rvid o r HTTP s e h a a rra n ca d o e n e l
p u e rt o 7 0 0 0 . Pa ra ve r e s t e in fo rm e in t ro d u cim o s la URL h t t p : / / lo ca lh o s t : 7 0 0 0 o
h t t p : / / yo u r_ m a ch in e _ n a m e : 7 0 0 0 e n n u e s t ro n a ve g a d o r We b . S i t e n e m o s
p ro b le m a e n a rra n ca r e l s e rvid o r u s a n d o e l s crip t , p o d e m o s a lt e rn a t iva m e n t e
e je cu t a r la a p lica ció n in clu ye n d o e l fich e ro d e cla s e s h a t . z ip e n n u e s t ro
CLAS S P ATH y u s a r e l s ig u ie n t e co m a n d o :

java [Link] [Link]


La vis t a d e l in fo rm e p o r d e fe ct o co n t ie n e u n a lis t a d e t o d a s la s cla s e s . En la p a rt e
d e a b a jo d e e s t á p á g in a in icia l e s t á n la s d o s o p cio n e s b á s ica s d e in fo rm e s :

Show all members of the rootset


Show instance counts for all classes
S i s e le ccio n a m o s e l e n la ce S h o w a ll m e m b e rs o f t h e ro o t s e t , ve re m o s u n a lis t a
d e la s s ig u ie n t e s re fe re n cia s p o rq u e e s t a s re fe re n cia s a p u n t a n a p ico s p o t e n cia le s
d e m e m o ria .

Java Static References


Busy Monitor References
JNI Global References
JNI Local References
System Class References
Lo q u e ve m o s a q u í s o n e je m p la re s e n la a p lica ció n q u e t ie n e n re fe re n cia s a o b je t o s
q u e t ie n e n u n rie s g o d e n o s e re co le ct a d o s p a ra la b a s u ra . Es t o p u e d e o cu rrir
a lg u n a s ve ce s e n e l ca s o d e l JNI s u s e a s ig n a m e m o ria p a ra u n o b je t o , la m e m o ria
s e d e ja p a ra q u e la lib e re e l re co le ct o r d e b a s u ra , y e l re co le ct o r d e b a s u ra n o
t e in e la in fo rm a ció n q u e n e ce s it a p a ra h a ce rlo . En e s t a lis t a d e re fe re n cia s ,
e s t a m o s p rin cip a lm e n t e in t e re s a d o s e n u n g ra n n ú m e ro d e re fe re n cia s a o b je t o s o
a o b je t o s d e g ra n t a m a ñ o .
El o t ro in fo rm e cla ve e s e l S h o w in s t a n c e c o u n t s fo r a ll c la s s e s . Es t e lis t a lo s
n ú m e ro s d e lla m a d a s a u n m é t o d o p a rt icu la r. Lo s o b je t o s a rra y S t rin g y
Ch a ra c t e r, [ S y [ C, e s t á n s ie m p re e n la p a rt e s u p e rio r d e e s t a lis t a , p e ro a lg u n o s
o b je t o s s o n u n p o co m á s in t rig a n t e s . ¿ Po r q u é h a y 3 2 3 e je m p la re s d e
ja v a . u t il. S im p le Tim e Zo n e , p o r e je m p lo ?

5109 instances of class [Link]


5095 instances of class [C
2210 instances of class [Link]$Entry
968 instances of class [Link]
407 instances of class [[Link];
323 instances of class [Link]
305 instances of class
[Link]
304 instances of class [Link]$Entry
269 instances of class [I
182 instances of class [[Link]$Entry;
170 instances of class [Link]
138 instances of class [Link]$Name
131 instances of class [Link]
131 instances of class [[Link]$Entry;
130 instances of class [[Link];
105 instances of class [Link]
Pa ra o b t e n e r m á s in fo rm a ció n s o b re lo s e je m p la re s S im p le Tim e Zo n e , p u ls a m o s
s o b re e l e n la ce ( la lín e a q u e e m p ie za p o r 3 2 3 ) . Es t o lis t a rá la s 3 2 3 re fe re n cia s y
ca lcu la rá cu á n t a m e m o ria h a s id o u t iliza d a . e n e s t e e je m p lo , s e h a n u t iliza d o
2 1 9 6 4 b yt e s .

Instances of [Link]

class [Link]

[Link]@0x004f48c0 (68 bytes)


[Link]@0x003d5ad8 (68 bytes)
[Link]@0x004fae88 (68 bytes)
.....
Total of 323 instances occupying 21964 bytes.
S i p u ls a m o s s o b re u n o d e e s t o s e je m p la re s S im p le Tim e Zo n e , ve re m o s d o n d e fu e
a s ig n a d o e s t e o b je t o .

Object allocated from:

[Link].<clinit>(()V) :
[Link] line 1222
[Link]((Ljava/lang/String;)
Ljava/util/TimeZone;) :
[Link] line (compiled method)
[Link](
()Ljava/util/TimeZone;) :
[Link] line (compiled method)
[Link](
(Ljava/util/Locale;)V) :
[Link] line (compiled method)
En e s t e e je m p lo e l o b je t o fu e a s ig n a d o d e s d e Tim e Zo n e . ja v a . El fich e ro fu e n t e d e
e s t e fich e ro e s t á n e l fich e ro e s t á n d a rd s rc . ja r, y e xa m in a n d o e s t e fich e ro ,
p o d e m o s ve r q u e d e h e h co h a y ce rca d e 3 0 0 d e e s t o s o b je t o s e n m e m o ria .

static SimpleTimeZone zones[] = {


// The following data is current as of 1998.
// Total Unix zones: 343
// Total Java zones: 289
// Not all Unix zones become Java zones due to
// duplication and overlap.
//-------------------------------------------
new SimpleTimeZone(-11*ONE_HOUR,
"Pacific/Niue" /*NUT*/),
De s a fo rt u n a d a m e n t e , n o t e n e m o s co n t ro l s o b re la m e m o ria u s a d a e n e s t e e je m p lo ,
p o rq u e e s a s ig n a d a cu a n d o e l p ro g ra m a h izo la p rim e ra s o licit u d a l t im e zo n e p o r
d e fe ct o . S in e m b a rg o , e s t a m is m a t é cn ica p u e d e a p lica rs e p a ra a n a liza r n u e s t ra
p ro p ia a p lica ció n d o n d e p ro b a b le m e n t e p o d ría m o s h a ce r a lg u n a s m e jo ra s .

¿Dónde Gasta el Tiempo la Aplicació?

De n u e vo , p o d e m o s u s a r e l p a rá m e t ro - Xru n h p ro f p a ra o b t e n e r in fo rm a ció n s o b re
e l t ie m p o q u e g a s t a la a p lica ció n p ro ce s a n d o u n m é t o d o p a rt icu la r.
Po d e m o s u s a r u n a o d o s o p cio n e s d e p e rfil d e CPU p a ra co n s e g u ir e s t o . La p rim e ra
o p ció n e s c p u = s a m p le s . Es t a o p ció n d e vu e lve e l re s u lt a d o d e u n m u e s t re o d e
e je cu ció n d e t h re a d s d e la Má q u in a Virt u a l Ja va co n u n co n t e o e s t a d ís t ico d e la
fre cu e n cia d e o cu rre n cia co n q u e s e u s a u n m é t o d o p a rt icu la r p a ra e n co n t ra r
s e ccio n e s o cu p a d a s d e la a p lica ció n . La s e g u n d a o p ció n e s c p u = t im e s , q u e m id e
e l t ie m p o q u e t a rd a n lo s m é t o d o s in d ivid u a le s y g e n e ra u n ra n kin g d e l p o rce n t a je
t o t a l d e l t ie m p o d e CPU o cu p a d o p o r la a p lica ció n .
Us a n d o la o p ció n c p u = t im e s , d e b e ría m o s ve r a lg o co m o e s t o a l fin a l d e l fich e ro
d e s a lid a :

CPU TIME (ms) BEGIN (total = 11080)


Fri Jan 8 [Link] 1999
rank self accum count trace method
1 13.81% 13.81% 1 437 sun/
awt/[Link]
2 2.35% 16.16% 4 456 java/
lang/ClassLoader$[Link]
3 0.99% 17.15% 46 401 java/
lang/[Link]
S i co n s t ra s t a m o s e s t o co n la s a lid a d e c p u = s a m p le s , ve re m o s la d ife re n cia e n t re
la fre cu e n cia d e e je cu ció n d e u n m é t o d o d u ra n t e la e je cu ció n d e la a p lica ció n
co m p a ra d a co n e l t ie m p o q u e t a rd a e s e m é t o d o .

CPU SAMPLES BEGIN (total = 14520)


Sat Jan 09 [Link] 1999
rank self accum count trace method
1 2.93% 2.93% 425 2532 sun/
awt/windows/WGraphics.W32LockViewResources
2 1.63% 4.56% 237 763 sun/
awt/windows/[Link]
3 1.35% 5.91% 196 1347 java/
text/DecimalFormat.<init>
El m é t o d o W 3 2 Lo c k Vie w , q u e lla m a a u n a ru t in a d e b lo q u e o d e ve n t a n a n a t iva ,
s e lla m a 4 2 5 ve ce s . Po r e s o cu a n d o a p a re ce n e n lo s t h re a d s a ct ivo s p o rq u e
t a m b ié n t o m a n t ie m p o p a ra co m p le t a rs e . En co n t ra s t e , e l m é t o d o in it D is p la y s ó lo
s e le lla m a u n a ve z, p e ro e s e l m é t o d o q u e t a rd a m á s t ie m p o e n co m p le t a rs e e n
t ie m p o re a l.

Herramientas de Rendimiento de Sistema Operativo


Alg u n a s ve ce s lo s cu e llo s d e b o t e lla d e l re n d im ie n t o o cu rre n a l n ive l d e l s is t e m a
o p e ra t ivo . Es t o e s p o rq u e la JVM d e p e n d e e n m u ch a s o p e ra cio e n s d e la s lib re ría s
d e l s is t e m a o p e ra t ivo p a ra fu n cio n a lid a d e s co m o e l a cce s o a d is co o e l t ra b a jo e n
re d . S in e m b a rg o , lo q u e o cu rre d e s p u é s d e q u e la JVM h a ya lla m a d o a e s t a s
lib re ría s va m á s a lla d e la s h e rra m ie n t a s d e p e rfila d o d e la p la t a fo rm a Ja va .
Aq u í h a y u n a lis t a d e h e rra m ie t n a s q u e p o d e m o s u s a r p a ra a n a liza r p ro b le m a s d e
re n d im ie n t o e n a lg u n o s s is t e m a s o p e ra t ivo s m á s co m u n ie s .

Plataforma Solaris

S ys t e m Acco u n t in g Re p o rt s , s a r, in fo rm a d e la a ct ivid a d d e l s is t e m a e n t é rm in o s
d e I/ O d e d is co , a ct ivid a d d e l p ro g ra m a d e u s u a rio , y a ct ivid a d a n ive l d e l s is t e m a .
S i n u e s t ra a p lica ció n u s a u n a ca n t id a d d e m e m o ria e xce s iva , p o d ría re q u e rir
e s p a cio d e in t e rca m b io e n d is co , p o r lo q u e ve ria m o s g ra n d e s p o rce n t a je s e n la
co lu m n a WIO. Lo s p ro g ra m a s d e u s u a rio q u e s e q u e d a n e n u n b u cle o cu p a d o
m u e s t ra n u n a lt o p o rce n t a je e n la co lu m n a u s e r:

developer$ sar 1 10

SunOS developer 5.6 Generic_105181-09 sun4u


02/05/99

[Link] %usr %sys %wio %idle


[Link] 30 6 9 55
[Link] 27 0 3 70
[Link] 25 1 1 73
[Link] 25 1 0 74
[Link] 27 0 1 72
El co m a n d o t ru s s s ig u e y g u a rd a lo s d e t a lle s d e ca d a lla m a d a a l s is t e m a p o r la
JVM a l ke rn e l S o la ris . Un fo rm a co m ú n d e u s a r t ru s s e s :

truss -f -o /tmp/output -p <process id>


El p a rá m e t ro - f s ig u e cu a lq u ie r p ro ce s o h ijo q u e h a ya cre a d o , e l p a rá m e t ro - o
e s crib e la s a lid a e n e l fich e ro n o m b ra d o , y e l p a rá m e t ro - p s ig u e u n p ro g ra m a e n
e je cu ció n d e s d e s is ID d e p ro ce s o . De fo rm a a lt e rn a t iva p o d e m o s re e m p la za r - p
< p ro ce s s id > co n la JVM, p o r e je m p lo :

truss -f -o /tmp/output java MyDaemon


El / t m p / o u t p u t e s u s a d o p a ra a lm a ce n a r la s a lid a d e t ru s s , lo q u e s e d e b e ría
p a re ce r a e s t o :

15573: execve("/usr/local/java/jdk1.2/solaris/
bin/java", 0xEFFFF2DC,
0xEFFFF2E8) argc = 4
15573: open("/dev/zero", O_RDONLY) = 3
15573: mmap(0x00000000, 8192,
PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE, 3, 0) = 0xEF7C0000
15573: open("/home/calvin/java/native4/[Link].1",
O_RDONLY) Err#2 ENOENT
15573: open("/usr/lib/[Link].1",
O_RDONLY) = 4
15573: fstat(4, 0xEFFFEF6C) = 0
15573: mmap(0x00000000, 8192, PROT_READ|PROT_EXEC,
MAP_SHARED, 4, 0) = 0xEF7B00 00
15573: mmap(0x00000000, 122880, PROT_READ|PROT_EXEC,
MAP_PRIVATE, 4, 0) = 0xEF7 80000
15573: munmap(0xEF78E000, 57344) = 0
15573: mmap(0xEF79C000, 5393,
PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED, 4, 49152)
= 0xEF79C000
15573: close(4) = 0
En la s a lid a d e t ru s s , b u s ca m o s lo s fich e ro s q u e fa lla ra n a l a b rirlo s d e b id o a
p ro b le m a s d e a cce s o , co m o u n e rro r EN OP ERM, o u n e rro r d e fich e ro
d e s a p a re cid o EN OEN T. Ta m b ié n p o d e m o s s e g u ir lo s d a t o s le id o s o e s crit o co n lo s
p a rá m e t ro s d e t ru s s : - ra ll p a ra s e g u ir t o d o s lo s d a t o s le íd o s , o - w a ll p a ra s e g u ir
t o d o s lo s d a t o s e s crit o s p o r e l p ro g ra m a . Co n e s t o s p a rá m e t ro s , e s p o s ib le a n a liza r
d a t o s e n via d o s a t ra vé s d e la re d o a u n d is co lo ca l.
Plataforma Linux

Lin u x t ie n e u n co m a n d o t ra ce lla m a d o s t ra c e . S ig u e la s lla m a d a s d e l s is t e m a a l


ke rn e l Lin u x. Es t e e je m p lo s ig u e e l e je m p lo S p re a d S h e e t d e l d ire ct o rio d e m o d e l
JDK:

$ strace -f -o /tmp/output
java [Link]
[Link]
$ cat /tmp/output

639 execve("/root/java/jdk117_v1at/java/
jdk117_v1a/bin/java", ["java",
"[Link] ",
"[Link]"], [/* 21 vars */]) = 0
639 brk(0) = 0x809355c
639 open("/etc/[Link]", O_RDONLY) = -1
ENOENT (No such file or directory)
639 open("/etc/[Link]", O_RDONLY) = 4
639 fstat(4, {st_mode=0, st_size=0, ...}) = 0
639 mmap(0, 14773, PROT_READ, MAP_PRIVATE,
4, 0) = 0x4000b000
639 close(4) = 0
639 open("/lib/[Link].2", O_RDONLY) = 4
639 mmap(0, 4096, PROT_READ, MAP_PRIVATE,
4, 0) = 0x4000f000
Pa ra o b t e n e r in fo rm a ció n d e l s is t e m a s im ila r a l co m a n d o s a r d e S o la ris , le e lo s
co n t e n id o s d e l fich e ro / p ro c / s t a t . El fo rm a t o d e e s t e fich e ro s e d e s crib e e n la s
p á g in a s d e l m a n u a l p ro c . Mira m o s la lín e a c p u p a ra o b t e n e r la h o ra d e l s is t e m a d e
u s u a rio :

cpu 4827 4 1636 168329


En e l e je m p lo a n t e rio r, la s a lid a c p u in d ica 4 8 . 2 7 s e g u n d o s d e e s p a cio d e u s u a rio ,
0 . 0 4 d e p rio rid a d m á xim a , 1 6 . 3 6 s e g u n d o s p ro ce s a n d o lla m a d a s a l s is t e m a , y 1 6 8
s e g u n d o s lib re . Es t a e s u n a e je cu ció n t o t a l, la s e n t ra d a s p a ra ca d a p ro ce s o e s t á n
d is p o n ib le s e n / p ro c / < p ro c e s s _ id > / s t a t .

Plataforma Windows95/98/NT

No h a y h e rra m ie n t a s d e a n á lis is d e re n d im ie n t o e s t á n d a rd in clu id a s e n e s t a s


p la t a fo rm a s , p e ro s i h a y h e rra m ie n t a s d e s e g u im ie n t o d is p o n ib le s m e d ia n t e
re cu rs o s fre e wa re o s h a re wa re co m o h t t p : / / www. d o wn lo a d . co m .

An á lis is d e m e m o ria : Me m o ry m e t e r
An á lis is d e Re d : Tra ce p lu s

Oz it o
Caché en Aplicaciones Cliente/Servidor
El ca ch é e s u n a d e la s p rim e ra t é cn ica s u s a d a s p a ra a u m e t n a r e l re n d im ie n t o d e n a ve g a d o re s y s e rvid o re s we b . El ca ch é d e l n a ve g a d o r h a ce in n e ce s a rio s lo s b lo q u e o s d e re d
p o rq u e u n a co p ia re cie n t e d e l fich e ro s e m a n t ie n e e n e l ca ch é lo ca l, y e l ca ch é d e l s e rvid o r re d u ce e l co s t e d e la ca rg a d e fich e ro s d e s d e d is co p a ra ca d a p e t ició n . Es t a s e cció n
e xp lica có m o p o d e s u s a r e l ca ch é d e fo rm a s im ila r p a ra m e jo ra r e l re n d im ie n t o e n m u ch a s a p lica cio n e s clie n t e / s e rvid o r e s crit a s e n le n g u a je Ja va TM.
El API ja v a . u t il. Co lle c t io n s d is p o n ib le e n e l S DK Ja va ® 2 h a ce s e n cilla la im p le m e n t a ció n d e l ca ch é . Es t e API p ro p o rcio n a la cla s e Ha s h Ma p , q u e fu n cio n a b ie n p a ra ca ch e a r u n
o b je t o , y la cla s e Lin k e d Lis t , q u e fu n cio n a b ie n e n co m b in a cio n e s co n la cla s e Ha s h Ma p p a ra ca ch e a r m u ch o s o b je t o s .
● Ca ch é d e u n Ob je t o

● Ca ch é d e Mu ch o s Ob je t o s

Caché de un Objeto
Un o b je t o Ha s h Ma p a lm a ce n a o b je t o s e n u n a p a re ja cla ve va lo r. cu a n d o p o n e m o s u n d a t p e n u n Ha s h Ma p , le a s ig n a m o s u n a cla ve y lu e g o u s a m o s e s a cla ve p a ra re cu p e ra r e l
da to.
Un o b je t o Ha s h Ma p e s m u y s im ila r a u n Ha s h t a b le y p u e d e s e r u s a d o p a ra m a n t e n e r u n a co p ia t e m p o ra l d e re s u lt a d o s g e n e ra d o s p ré via m e n t e . Lo s o b je t o s m a n t e n id o s e n e l
ca ch é Ha s h Ma p p o d ría , p o r e je m p lo , s e r u n a lis t a d e s u b a s t a s co m p le t a d a s .
En e s t e ca s o , lo s re s u lt a d o s d e u n a co n s u lt a JDBC p o d ría n s o licit a rs e cie n t o s d e ve ce s e n u n s e g u n d o p o r p e rs o n a s q u e e s t á n e s p e ra n d o co n o ce r la p u ja m á s a lt a , p e ro la lis t a d e
re s u lt a d o s co m p le t a s ó lo ca m b ia u n a ve z p o r m in u t o cu a n d o s e o m p le t a u n a s u b a s t a . Po d e m o s e s crib ir n u e s t ro p ro g ra m a p a ra re cu p e ra r lo s o b je t o s q u e n o h a n ca m b ia d o d e s d e e l
ca ch é d e re s u lt a d o s e n ve z d e s o licit a r a la b a s e d e d a t o s ca d a ve z y o b t e n e r u n s ig n ifica n t e a u m e n t o d e re n d im ie n t o .
Es t e e je m p lo d e có d ig o e je cu t a u n a co n s u lt a a la b a s e d e d a t o s p o r ca d a m in u t o , y d e vu e lve co p ia s ca ch e a d a s p a ra la s s o licit u d e s q u e vie n e n e n t re co n s u lt a s .

import [Link].*;
import [Link].*;

class DBCacheRecord {
Object data;
long time;

public DBCacheRecord(Object results, long when) {


time=when;
data=results;
}
public Object getResults() {
return data;
}
public long getLastModified() {
return time;
}
}

public class DBCache {


Map cache;

public DBCache() {
cache = new HashMap();
}

public Object getDBData(String dbcommand) {


if(![Link](dbcommand)) {
synchronized(cache) {
[Link](dbcommand, readDBData(dbcommand));
}
} else {
if((new Date().getTime() ) -
((DBCacheRecord)[Link](
dbcommand)).getLastModified()>=1000) {
synchronized(cache) {
[Link](dbcommand, readDBData(dbcommand));
}
}
}
return ((DBCacheRecord)[Link](
dbcommand)).getResults();
}

public Object readDBData(String dbcommand) {

/*Insert your JDBC code here For Example:


ResultSet results=[Link](dbcommand);
*/
String results="example results";
return(new DBCacheRecord(results,new
Date().getTime()));

public static void main(String args[]) {


DBCache d1=new DBCache();
for(int i=1;i<=20;i++) {
[Link](
"select count(*) from results where
TO_DATE([Link]) <=SYSDATE");
}
}
}

Cache de Muchos Objetos


Alg u n a s ve ce s q u e re m o s ca ch e a r m á s d e u n o b je t o . Po r e je m p lo , p o d ría m o s q u e re r m a n t e n e r lo s fich e ro s a cce d id o s m á s re cie n t e m e n t e e n e l ca ch é d e u n s e rvid o r we b . S i u s a m o s
u n o b je t o Ha s h Ma p p a ra u n p ro p ó s it o co m o e s t e , co n t in u a rá cre cie n d o y u s a n d o m u ch a m e m o ria .
S i n u e s t ra m á q u in a t ie n e u n a g ra n ca n t id a d d e m e m o ria y s ó lo u n p e q u e ñ o n ú m e ro d e o b je t o s q u e ca ch e a r e n t o n ce s u n cre cie n t e Ha s h Ma p p o d ría n o s e r u n p ro b le m a . S in
e m b a rg o , s i e s t a m o s in t e n t a r ca ch e a r m u ch o s o b je t o s e n t o n ce s p o d ría m o s q u e re s s ó lo m a n t e n e r lo s o b je t o s m á s re cie n t e s e n e l ca ch é p ro p o rcio n a n d o e l m e jo r u s o d e la m é m o ria
d e la m á q u in a . Po d e m o s co m b in a r u n o b je t o Ha s h Ma p co n u n Lin k e d Lis t p a ra cre a r u n ca ch é lla m a d o "Mo s t Re ce n t ly Us e d " ( MRU) .
Co n u n ca ch é MRU, p o d e m o s s it u a r u n a re s t ricció n s o b re lo s o b je t o s q u e p e rm a n e ce n e n e l ca ch é , y p o r lo t a n t o , co n t ro l s o b re e l t a m a ñ o d e l ca ch é . Ha y t re s o p e ra cio n e s
p rin cip a le s q u e p u e d e re a liza r u n ca ch é MRU:
● S i e l ca ch é n o e s t á lle n o , lo s n u e vo s o b je t o s q u e n o e s t á n e n e l ca ch é s e in s e rt a n e n la p a rt e s u p e rio r d e la lis t a .

● S i e l ca ch é n o e s t á lle n o y e l o b je t o a in s e rt a ya e s t á e n e l ca ch é , s e m u e ve a la p a rt e s u p e rio r d e l ca ch é .

● S i e l ca ch é e s t á lle n o y s e in s e rt a u n n u e vo o b je t o , e l ú lt im o o b je t o d e l ca ch é e s e lim in a d o y e l n u e vo o b je t o s e p o n e e n la p a rt e s u p e rio r d e la lis t a .

Es t e d ia g ra m a m u e s t ra có m o t ra b a ja n ju n t o s Lin k e d Lis t y Ha s h Ma p p a ra im p le m e n t a r la s o p e ra cio n e s d e s crit a s a rrib a .


Ca c h é MRU c o n Lin k e d Lis t y Ha s h Ma p
El Lin k e d Lis t p ro p o rcio n a e l m e ca n is m o d e co la , y la s e n t ra d a s d e la Lin k e d Lis t co n t ie n e n la cla ve d e lo s d a t o s e n e l Ha s h Ma p . Pa ra a ñ a d ir u n a n u e va e n t ra d a e n la p a rt e
s u p e rio r d e la lis t a , s e lla m a a l m é t o d o a d d Firs t .
● S i la lis t a ya e s t á lle n a , s e lla m a a l m é t o d o re m o v e La s t y a e n t ra d a d e d a t o s t a m b ié n s e e lim in a d e l Ha s h Ma p .

● S i u n a e n t ra d a ya e xis t e e n la lis t a , s e e lim in a co n u n a lla m a d a a l m é t o d o re m o v e y s e in s e rt a e n la p a rt e s u p e rio r d e la lis t a co n u n a lla m a d a a l m é t o d o a d d Firs t .

El API Co lle ct io s n o im p le m e n t a b lo q u e o s , p o r e s o s i e lim in a d o s o a ñ a d im o s e n t ra d a s a o b je t o s Lin k e d Lis t o Ha s h Ma p , n e ce s it a m o s b lo q u e a r lo s a cce s o s a e s o s o b je t o s . Ta m b ié n


p o d e m o s u s a r u n Ve c t o r o Arra y Lis t p a ra o b t e n e r e l m is m o re s u lt a d o m o s t ra d o e n e l có d id o d e a b a jo d e l Lin k e d Lis t .
Es t e e je m p lo d e có d ig o u s a u n ca ch é MRU p a ra m a n t e n e r u n ca ch é d e fich e ro s ca rg a d o s d e s d e d is co . Cu a n d o s e s o licit a u n fich e ro , e l p ro g ra m a ch e q u e a p a ra ve r s i e l fich e ro e s t á
e n e l ca ch é . S i e l fich e ro n o e s t á e n e l ca ch é , e l p ro g ra m a le e e l fich e ro d e s d e e l d is co y s it ú a u n a co p ia e n e l ca ch é a l p rin cip io d e la lis t a .
S i e l fich e ro e s t á e n e l ca ch é , e l p ro g ra m a co m p a ra la fe ch a d e m o d ifica ció n d e l fich e ro y la e n t ra d a d e l ca ch é .
● S i la e n t ra d a d e l ca ch é e s m á s vie ja , e l p ro g ra m a le e e l fich e ro d e l d is co , e lim in a la co p ia d e l ca ch é , y s it ú a u n a n u e va co p ia e n e l ca ch é e n la p a rt e s u p e rio r d e l Lin k e d Lis t .

● S i e l fich e ro e s m á s vie jo q u e e l ca ch é , e l p ro g ra m a o b t ie n e e l fich e ro d e l ca ch é y m u e ve la co p ia d e l ca ch é a la p a rt e s u p e rio r d e la lis t a .

import [Link].*;
import [Link].*;

class myFile {
long lastmodified;
String contents;

public myFile(long last, String data) {


lastmodified=last;
contents=data;
}
public long getLastModified() {
return lastmodified;
}
public String getContents() {
return contents;
}
}

public class MRUCache {

Map cache;
LinkedList mrulist;
int cachesize;

public MRUCache(int max) {


cache = new HashMap();
mrulist= new LinkedList();
cachesize=max;
}

public String getFile(String fname) {


if(![Link](fname)) {
synchronized(cache) {
if([Link]() >=cachesize) {
[Link]([Link]());
[Link]();
}
[Link](fname, readFile(fname));
[Link](fname);
}
} else {
if((new File(fname).lastModified())>
((myFile)[Link](fname)).getLastModified()) {
synchronized(cache) {
[Link](fname, readFile(fname));
}
}
synchronized(cache) {
[Link](fname);
[Link](fname);
}
}
return ((myFile)[Link](fname)).getContents();
}

public myFile readFile(String name) {


File f = new File(name);
StringBuffer filecontents= new StringBuffer();

try {
BufferedReader br=new BufferedReader(
new FileReader(f));
String line;

while((line =[Link]()) != null) {


[Link](line);
}
} catch (FileNotFoundException fnfe){
return (null);
} catch ( IOException ioe) {
return (null);
}
return (new myFile([Link](),
[Link]()));
}

public void printList() {


for(int i=0;i<[Link]();i++) {
[Link]("item "+i+"="+[Link](i));
}
}

public static void main(String args[]) {

// Number of entries in MRU cache is set to 10


MRUCache h1=new MRUCache(10);
for(int i=1;i<=20;i++) {
// files are stored in a subdirectory called data
[Link]("data"+[Link]+i);
}
[Link]();
}
}

Oz it o
Desplegar la Aplicación Subasta
Co n la a p lica ció n s u b a s t a t e s t e a d a , d e p u ra d a y a ju s t a d a , e s t a m o s lis t o s p a ra
d e s p le g a rla . De s p le g a rla im p lica u n ir t o d o s lo s fich e ro s d e la a p lica ció n , m o ve rlo s a
s u s lo ca liza cio n e s , in s t a la r e l Ja va Plu g - In p a ra q u e lo s a d m in is t ra d o re s d e la
s u b a s t a p u e d a n e je cu t a r e l a p p le t Ad m in is t ra t io n d e s d e s u s n a ve g a d o re s , e in s t a la r
e l fich e ro d e p o licía d e l a p p le t Ad m in is t ra t io n . El Ja va Plu g - In e s n e ce s a rio p o rq u e
e l a p p le t Ad m in is t ra t io n e s t á e s crit o co n e l Ja va De ve lo p m e n t Kit ( JDKTM) 1 . 2 , p e ro
lo s n a ve g a d o re s d e lo s a d m in is t ra d o re s p o d ría n e je cu t a r ve rs io n e s a n t e rio re s d e l
s o ft wa re Ja va Ru n t im e En viro n m e n t TM ( JRE) .
Es t e ca p ít u lo e xp lica co m o u s a r e l fo rm a t o d e fich e ro s Ja va Arch ive ( JAR) p a ra u n ir
lo s fich e ro s d e la a p lica ció n , y có m o in s t a la r e l Ja va Plu g - In y u n fich e ro d e p o licia
d e s e g u rid a d p a ra la s p la t a fo rm a s S o la ris TM y Win 3 2 p a ra e je cu t a r e l a p p le t
Ad m in is t ra t io n .
● Fo rm a t o d e Fich e ro s Ja va Arch ive ( JAR)

● Pla t a fo rm a S o la ris
● Pla t a fo rm a Win 3 2

¿Tienes Prisa?
Es t a t a b la co n t ie n e e n la ce s d ire ct o s a lo s t ó p ico s e s p e cífico s .
Tó p ic o S e c c ió n
Fo rm a t o d e Fich e ro s JAR ● Un ir y De s p le g a r Fich e ro s HTML
● Un ir y De s p le g a r lo s Be a n s En t e rp ris e
● Un ir y De s p le g a r e l Ap p le t Ad m in is t ra t io n
Pla t a fo rm a S o la ris ● Ob t e n e r la s De s ca rg a s
● Ext ra e r lo s Fich e ro s De s ca rg a d o s
● In s t a la r Ja va Plu g - In
● In s t a la r la s Me jo ra s d e l Ja va Plu g - In
● In s t a la r Ne t s ca p e Co m m u n ica t o r
● Ch e q u e a r la In s t a la ció n
● Co n ve rt ir Fich e ro s HTML
● Fich e ro d e Po licía d e S e g u rid a d
● Eje cu t a r e l Ap p le t Ad m in is t ra t io n
Pla t a fo rm a Win 3 2 ● De s ca rg a r e In s t a la r
● Co n ve rt ir Fich e ro s HTML
● Fich e ro s d e Po licía d e S e g u rid a d
● Eje cu t a r e l Ap p le t Ad m in is t ra t io n

Oz it o
Formato de Ficheros JAR
El fo rm a t o d e fich e ro s Ja va JAR e s u n fo rm a t o d e co m p re s ió n y e m p a q u e t a d o d e
fich e ro s y u n a h e rra m ie n t a p a ra u n ir fich e ro s e je cu t a b le s co n o t ro s fich e ro s
re la cio n a d o s co n la a p lica ció n p o r e s o p u e d e n d e s p le g a rs e e n u n a s ó la u n id a d . La
a p lica ció n d e s u b a s t a , t ie n e t re s u n id a d e s o fich e ro s p a ra d e s p le g a r e n t re s
d ife re n t e s lo ca liza cio n e s .
1 . Lo s fich e ro s HTML q u e cre a n e l in t e rfa ce d e u s u a rio d e la a p lilca ció n
d e s p le g a d o e n u n a lo ca liza ció n a cce s ib le b a jo e l s e rvid o r we b .
2 . Lo s Be a n s En t e rp ris e d e s p le g a d o e n u n a lo ca liza ció n in t e rn a a cce s ib le a
n u e s t ro s e rvid o r d e Ja va Be a n s En t e rp ris e TM.
3 . El Ap p le t Ad m in is t ra t io n d e s p le g a d o a u n a lo ca liza ció n in t e rn a a cce s ib le p a ra
lo s a d m in is t ra d o re s d e la s u b a s t a d o n d e e s e je cu t a d o p o r s u s n a ve g a d o re s
Es t a s e cció n n o s m u e s t ra có m o u s a r la h e rra m ie n t a ja r u n ir y d e s p le g a r lo s
fich e ro s d e la a p lica ció n . b u n d le a n d d e p lo y t h e a p p lica t io n file s .
● Un ir y De s p le g a r lo s Fich e ro s HTML

● Un ir y De s p le g a r lo s Be a n s En t e rp ris e
● Un ir y De s p le g a r e l Ap p le t Ad m in is t ra t io n

Unir y Desplegar los Ficheros HTML


Aq u í h a y u n a lis t a d e fich e ro s HTML q u e cre a n e l in t e rfa ce d e u s u a rio d e la
a p lica ció n s u b a s t a :
● a ll. h t m l

● clo s e . h t m l
● d e t a ils . h t m l
● in d e x. h t m l
● ju g g le r. m e d . g if
● n e w. h t m l
● re g is t ra t io n . h t m l
● s e a rch . h t m l
● s e ll. h t m l
Aq u í e s t á e l co m a n d o ja r q u e lo s u n e . To d o va e n u n s ó lo fich e ro . Es t e co m a n d o s e
e je cu t a e n e l m is m o d ire ct o rio q u e lo s fich e ro s . S i lo e je cu t a m o s d e s d e o t ro
d ire ct o rio d is t in t o t e n e m o s q u e e s p e cifica r e l p a t h co m p le t o o re la t ivo s e g ú n
co rre s p o n d a .

jar cvf [Link] [Link] [Link] [Link]


[Link] [Link] [Link]
[Link] [Link] [Link]
ja r e s e l co m a n d o ja r. S i t e cle a m o s ja r s in o p cio n e s , o p t e n e m o s la s ig u ie n t e
p a n t a lla d e a yu d a . Po d e m o s ve r d e e s t a p a n t a lla q u e la s o p cio n e s c f d e l co m a n d o
ja r cre a n u n n u e vo fich e ro JAR lla m a n d o HTML. ja r y p o n e la s ig u ie n t e lis t a d e
fich e ro s e n é l. El n u e vo fich e ro JAR s e s it ú a e n e l d ire ct o rio a ct u a l.

kq6py% jar
Usage: jar {ctxu}[vfm0M] [jar-file] [manifest-file]
[-C dir] files ...
Options:
-c create new archive
-t list table of contents for archive
-x extract named (or all) files from archive
-u update existing archive
-v generate verbose output on standard output
-f specify archive file name
-m include manifest information from specified
manifest file
-0 store only; use no ZIP compression
-M Do not create a manifest file for the entries
-C change to the specified directory and include
the following file
If any file is a directory then it is processed
recursively. The manifest file name and the archive
file name needs to be specified in the same order
the 'm' and 'f' flags are specified.

Example 1: to archive two class files into an archive


called [Link]:
jar cvf [Link] [Link] [Link]
Example 2: use an existing manifest file 'mymanifest'
and archive all the files in the foo/ director
into '[Link]':
jar cvfm [Link] mymanifest -C foo/ .
Pa ra d e s p le g a r lo s fich e ro s HTML, t o d o lo q u e t e n e m o s q u e h a ce r e s m o ve r e l
fich e ro HTML. ja r a u n d ire ct o rio p ú b lica m e n t e a cce s ib le b a jo e l s e rvid o r we b y
d e s co m p rim irlo :

jar xf [Link]

N o t a : S i h e m o s in clu id o u n p a t h co m p le t o o re la t ivo cu a n d o h e m o s
a ñ a d id o lo s fich e ro s a l fich e ro JAR, lo s fich e ro s s e s it u a rá n e n la m is m a
e s t ru ct u ra d e d ire ct o rio cu a n d o lo s d e s e m p a q u e t e m o s .
Unir y Desplegar los Beans Enterprise
Alg u n o e s s e rvid o re s Ja va Be a n s En t e rp ris e p u e d e n cre a r e l fich e ro JAR p o r
n o s o t ro s . S in e m b a rg o , s i e l n u e s t ro n o lo h a ce o s i q u e s ó lo q u e re m o s a p re n d e r a
h a ce rlo , e s t a s e cció n d e s crib e lo s p a s o s .
Aq u í e s t á n lo s fich e ro s d e l la d o d e l s e rvid o r q u e n e ce s it a m o s p a ra d e s p le g a r lo s
Be a n s d e En t e rp ris e . Es t a lis t a e s t á t o m a n d a d e la a p lica ció n d e s u b a s t a o rig in a l
d e s crit a e n e l Ca p ít u lo 2 : Có d ig o d e la Ap lica ció n S u b a s t a a n t e s d e cu a lq u ie r
m o d ifica ció n h e ch a p a ra h a ce r lo s Be a n s En t e rp ris e co n t ro la d o s p o r co n t e n e d o r.
Ob s e rva la in clu s ió n d e l d e s crip t o r d e d e s a rro llo , y d e la s cla s e s s t u b y s ke l d e l
co n t e n e d o r- g e n e ra d o .

Paquete auction

Aq u í e s t á n lo s fich e ro s d e a p lica ció n d e l p a q u e t e a u c t io n q u e cre a n e l s e rvle t


Au c t io n S e rv le t y e l Be a n En t e rp ris e Au c t io n I t e m Be a n . Co m o t o d o s e llo s va n a
s e r in s t a la d o s e n u n d ire ct o rio a u c t io n a cce s ib le d e l s e rvid o r d e p ro d u cció n
Ja va Be a n s En t e rp ris e , lo s u n im o s t o d o s ju n t o s p a ra q u e p u e d a n s e r
d e s e m p a q u e t a d o s e n u n p a s o e n e l d ire ct o rio d e s t in o y s it u a d o s e n e l s u b d ire ct o rio
a c u t io n .
● a u ct io n . Au ct io n S e rvle t . cla s s

● a u ct io n . Au ct io n It e m . cla s s

● a u ct io n . Au ct io n It e m Be a n . cla s s

● a u ct io n . Au ct io n It e m Ho m e . cla s s

● a u ct io n . Au ct io n It e m PK. cla s s

● a u ct io n . De p lo ym e n t De s crip t o r. t xt

● Au ct io n It e m Be a n Ho m e Im p l_ S e rvice S t u b . cla s s

● WLS t u b 1 h 1 1 5 3 e 3 h 2 r4 x3 t 5 w6 e 8 2 e 6 jd 4 1 2 c. cla s s

● WLS t u b 3 6 4 c3 6 3 d 6 2 2 h 2 j1 j4 2 2 a 4 o o 2 g m 5 o . cla s s

● WLS ke l1 h 1 1 5 3 e 3 h 2 r4 x3 t 5 w6 e 8 2 e 6 jd 4 1 2 c. cla s s

● WLS ke l3 6 4 c3 6 3 d 6 2 2 h 2 j1 j4 2 2 a 4 o o 2 g m 5 o . cla s s

Aq u í e s t á có m o u n irlo s . To d a va e n u n a lín e a lín e a , y e l co m a n d o s e e je cu t a u n


d ire ct o rio p o r e n cim a d e d o n d e s e e n cu e n t ra n lo s fich e ro s cla s s .

Unix:
jar cvf [Link] auction/*.class

Win32:
jar cvf [Link] auction\*.class
Un a ve z q u e e l fich e ro JAR s e h a co p ia d o e n e l d ire ct o rio d e d e s t in o p a ra lo s Be a n s
En t e rp ris e , lo d e s e m p a q u e t a m o s d e e s t a fo rm a . La e xt ra cció n cre a u n d ire ct o rio
a u c t io n co n lo s fich e ro s cla s s d e n rt ro .

jar xv [Link]

Paquete registration

Aq u í e s t á n lo s fich e ro s d e la a p lica ció n e n e l p a q u e t e re g is t ra t io n q u e cre a e l


Be a n En t e rp ris e Re g is t ra t io n .
● re g is t ra t io n . Re g is t ra t io n . cla s s

● re g is t ra t io n . Re g is t ra t io n Be a n . cla s s

● re g is t ra t io n . Re g is t ra t io n Ho m e . cla s s

● re g is t ra t io n . Re g is t ra t io n PK. cla s s

● a u ct io n . De p lo ym e n t De s crip t o r. t xt

● Re g is t ra t io n Be a n Ho m e Im p l_ S e rvice S t u b . cla s s

● WLS t u b 1 8 3 w4 u 1 f4 e 7 0 p 6 j1 r4 k6 z1 x3 f6 yc2 1 . cla s s

● WLS t u b 4 z6 7 s 6 n 4 k3 s x1 3 1 y4 fi6 w4 x6 1 6 p 2 8 . cla s s

● WLS ke l1 8 3 w4 u 1 f4 e 7 0 p 6 j1 r4 k6 z1 x3 f6 yc2 1 . cla s s

● WLS ke l4 z6 7 s 6 n 4 k3 s x1 3 1 y4 fi6 w4 x6 1 6 p 2 8 . cla s s

Aq u í e s t á co m o u n irlo . To d o va e n u n a lín e a y e l co m a n d o s e e je cu t a u n d ire ct o rio


p o r e n cim a d e d o n d e s e e n cu e n t ra n lo s fich e ro s cla s s .

Unix:
jar cvf [Link] registration/*.class

Win32:
jar cvf [Link] registration\*.class
Un a ve z q u e e l fich e ro JAR s e h a co p ia d o a l d ire ct o rio d e d e s t in o p a ra lo s Be a n s
En t e rp ris e , lo s d e s e m p a q u e t a m o s d e e s t a fo rm a . La e xt ra cció n cre a u n d ire ct o rio
re g is t ra t io n co n lo s fich e ro cla s s d e n t ro d e é l.

jar xv [Link]

Paquete bidder

Aq u í e s t á n lo s fich e ro s d e la a p lica ció n e n e l p a q u e t e b id d e r q u e cre a n e l Be a n


En t e rp ris e Bid d e r.
● b id d e r. Bid d e r. cla s s

● b id d e r. Bid d e rHo m e . cla s s

● b id d e r. Bid d e rBe a n . cla s s

● a u ct io n . De p lo ym e n t De s crip t o r. t xt

● Bid d e rBe a n EOIm p l_ S e rvice S t u b . cla s s


● Bid d e rBe a n Ho m e Im p l_ S e rvice S t u b . cla s s
● WLS t u b 1 z3 5 5 0 2 7 2 6 3 7 6 o a 1 m 4 m 3 9 5 m 4 w5 j1 j5 t . cla s s

● WLS t u b 5 g 4 v1 d m 3 m 2 7 1 t r4 i5 s 4 b 4 k6 p 3 7 6 d 5 x. cla s s

● WLS ke l1 z3 5 5 0 2 7 2 6 3 7 6 o a 1 m 4 m 3 9 5 m 4 w5 j1 j5 t . cla s s

● WLS ke l5 g 4 v1 d m 3 m 2 7 1 t r4 i5 s 4 b 4 k6 p 3 7 6 d 5 x. cla s s

Aq u í e s t á có m o u n irlo s . To d o va e n u n lín e a y e l co m a n d o s e e je cu t a u n d ire ct o rio


p o r e n cim a d e d o n d e s e e n cu e n t ra n lo s fich e ro s cla s s .

Unix:
jar cvf [Link] bidder/*.class

Win32:
jar cvf [Link] bidder\*.class
Un a ve z q u e e l fich e ro JAR s e h a co p ia d o e n e l d ire ct o rio d e d e s t in o p a ra lo s Be a n s
En t e rp ris e , lo d e s e m p a q u e t a m o s d e e s t a fo rm a . La e xt ra cció n cre a u n d ire ct o rio
b id d e r co n lo s fich e ro s cla s s d e n t ro d e é l.

jar xv [Link]

Paquete seller

Aq u í e s t á n lo s fich e ro s d e la a p lica ció n e n e l p a q u e t e s e lle r q u e cre a e l Be a n


En t e rp ris e S e lle r.
● s e lle r. S e lle r. cla s s

● s e lle r. S e lle rHo m e . cla s s

● s e lle r. S e lle rBe a n . cla s s

● a u ct io n . De p lo ym e n t De s crip t o r. t xt

● S e lle rBe a n EOIm p l_ S e rvice S t u b . cla s s

● S e lle rBe a n Ho m e Im p l_ S e rvice S t u b . cla s s

● WLS t u b 3 xr4 e 7 3 1 e 6 d 2 x3 b 3 w5 b 6 9 3 8 3 3 v3 0 4 q . cla s s

● WLS t u b 8 6 w3 x4 p 2 x6 m 4 b 6 9 6 q 4 kjp 4 p 4 p 3 b 3 3 . cla s s

● WLS ke l3 xr4 e 7 3 1 e 6 d 2 x3 b 3 w5 b 6 9 3 8 3 3 v3 0 4 q . cla s s

● WLS ke l8 6 w3 x4 p 2 x6 m 4 b 6 9 6 q 4 kjp 4 p 4 p 3 b 3 3 . cla s s

Aq u í e s t á có m o u n irlo s . To d o va e n u n lín e a y e l co m a n d o s e e je cu t a u n d ire ct o rio


p o r e n cim a d e d o n d e s e e n cu e n t ra n lo s fich e ro s cla s s .

Unix:
jar cvf [Link] seller/*.class

Win32:
jar cvf [Link] seller\*.class
Un a ve z q u e e l fich e ro JAR s e h a co p ia d o e n e l d ire ct o rio d e d e s t in o p a ra lo s Be a n s
En t e rp ris e , lo d e s e m p a q u e t a m o s d e e s t a fo rm a . La e xt ra cció n cre a u n d ire ct o rio
s e lle r co n lo s fich e ro s cla s s d e n t ro d e é l.

jar xv [Link]

Unir y Desplegar el Applet Administration


La fa m ilia d e fich e ro s d e l a p p le t Ad m in is t ra t io n co n s t a d e lo s fich e ro s
Ad m in Ap p le t . ja va y p o lfile . ja va .

Aq u íe e s t á e l co m a n d o ja r p a ra u n irlo s . To d o va e n u n a lín e a , y e l co m a n d o s e
e je cu t a d ó n d e e s t á e l fich e ro d e p o licia q u e e s u n a d ire ct o rio p o r e n cim a d e d o n d e
e s t á n lo s fich e ro s cla s s .

Unix:
jar cvf [Link] admin/*.class [Link]

Win32:
jar cvf [Link] admin\*.class [Link]
Pa ra d e s p le g a r e l a p p le t , co p ia m o s e l fich e ro a p p le t . ja r e n e l d ire ct o rio d e d e s t in o
d e l a p p le t y lo s e xt ra e m o s d e e s t a fo rm a . La e xt ra cció n cre a u n d ire ct o rio a d m in
co n lo s fich e ro s d e l a p p le t Ad m in is t ra t io n d e n t ro d e é l.

jar xf [Link]

N o t a : El a p p le t u s a lo s APIs JDK 1 . 2 . Ne ce s it a u n fich e ro d e p o licía p a ra


a cce d e r a la im p re s o ra y Ja va Plu g - In p a ra e je cu t a rs e e n u n n a ve g a d o r
p re - JDK 1 . 2 . Pu e d e s e n co n t ra r in fo rm a ció n s o b re có m o e je cu t a r e l
a p p le t co n Ja va Plu g - In y u n fich e ro d e p o licía e n la s s ig u ie n t e s p á g in a s
Pla t a fo rm a S o la ris y Pla t a fo rm a Win 3 2 .

Oz it o
Plataforma Solaris
El s o ft wa re Plu g - In d e Ja va TM n o s p e rm it e d irig ir a p p le t s o co m p o n e n t e s Ja va Be a n s TM e n
p á g in a s d e u n a in t ra n e t p a ra q u e s e e je cu t e n u s a n d o e l Ja va Ru n t im e En viro n m e n t
( JRE) e n lu g a r d e la m á q u in a virt u a l p o r d e fe ct o d e l n a ve g a d o r. El Ja va Plu g - In fu n cio n a
co n Ne t s ca p e Co m m u n ica t o r y Micro s o ft In t e rn e t Exp lo re r.
De s ca rg a t o d o e l s o ft wa re q u e n e ce s it e s in s t a la r y u s a e l Ja va Plu g - In q u e e s t á
d is p o n ib le d e s d e la p á g in a d e d o wn lo a d .
● Ob t e n e r la s De s ca rg a r
● Ext ra e r lo s Fich e ro s De s ca rg a d o s
● In s t a la r e l Ja va Plu g - In
● In s t a la r la Me jo ra s d e l Ja va Plu g - In
● In s t a la r Ne t s ca p e Co m m u n ica t o r
● Ch e q u e a r la In s t a la ció n
● Co n ve rt ir Fich e ro s HTML
● Fich e ro s d e Po licía d e S e g u rid a d
❍ Tip o s d e Fich e ro s d e Po licía
❍ In s t a la r e l Fich e ro d e Po licía
❍ Ca m b ia r e l No m b re o la Po s ició n
● Eje cu t a r e l Ap p le t Ad m in is t ra t io n

Get Downloads
Pa ra is t a la r y u s a r e l Ja va Plu g - In e n S o la ris TM 2 . 6 o S o la ris 7 , n e ce s it a m o s la s
s ig u ie n t e s d e s ca rg a r. Po n e m o s la s d e s ca rg a r e n cu a lq u ie r d ire ct o rio q u e q u e rra m o s .
● Ja va Plu g - In p a ra S is t e m a s Op e ra t ivo s S o la ris . Es t a d is p o n ib le p a ra p la t a fo rm a s
In t e l o S p a rc.
● Pa t ch e s Ja va Plu g - In p a ra S o la ris 2 . 6 o S o la ris 7 , d e p e n d ie n d o d e la q u e
te nga m os.
● Ne t s ca p e Co m m u n ica t o r 4 . 5 . 1 ( ve rs ó n we b s t a rt ) .

● Ja va Plu g - In HTML Co n ve rt e r

Es t a s in s t ru ccio n e s s e p ro b a ró n s o b re u n a S u n Micro s ys t e m s Ult ra 2 e je cu t a n d o S o la ris


2 . 6 co n Ne t s ca p e Co m m u n ica t o r 4 . 5 . 1 .

Extraer los Ficheros Descargados


Va m o s a l d ire ct o rio d ó n d e d e s ca rg a m o s lo s fich e ro s y e xt ra e m o s ca d a u n o .

Extraer los ficheros Java Plug-In:


zcat [Link].Z | tar -xf -
Extraer los Ficheros del Patch Solaris 2.6:
zcat [Link].Z | tar -xf -

Extraer Netscape Navigator 4.5.1:


zcat NSCPcom_webstart_sparc.tar.Z | tar -xf -

Instalar el Java Plug-In


La d e s ca rg a d e l Ja va Plu g - In in clu ye u n a g u ia d e u s u a rio q u e p o d e m o s ve r e n n u e s t ro
n a ve g a d o r d e s d e e l s ig u ie n t e d ire ct o rio :

plugin-12-webstart-sparc/Java_Plug-in_1.2.2/
common/Docs/en/Users_Guide_Java_Plug-[Link]
La g u ía d e u s u a rio e xp lica có m o in s t a la r e l Ja va Plu g - In . Ha y va ria s fo rm a s s e n cilla s d e
h a ce rlo , y la s e cu e n cia d e co m a n d o s d e a b a jo e s u n a fo rm a rá p id a d e in s t a la r Ja va
Plu g - In e n e l d ire ct o rio p o r d e fe ct o / o p t / N S CP c o m u s a n d o e l co m a n d o p k g a d d :

su
<root password>
cd ~/plugin-12-webstart-sparc
pkgadd -d ./Java_Plug-in_1.2.2/sparc/Product

Instalar las Mejoras Java Plug-In


An t e s d e p o d e r e je cu a r e l Ja va Plu g - In , t e n e m o s q u e in s t a la r la s m e jo ra s . La s
in s t a la m o s u n a a u n a co m o ra íz. La s ig u ie n t e s e cu e n cia d e co m a n d o s va a l d ire ct o rio d e
m e jo ra s , lis t a lo s fich e ro s y e n vía e l co m a n d o p a ra in s t a la r la p rim e ra m e jo ra :

cd ~/JPI1.2-Patches-Solaris2.6-sparC
su
<password>
kq6py#ls
105210-19 105490-07 105568-13
kq6py#./105210-19/installpatch 105210-19
Ve re m o s e s t a s a lid a cu a n d o la m e jo ra s e h a ya in s t a la d o s a t is fa ct o ria m e n t e :

Patch number 105210-19 has beenZ successfully


installed.
See /var/sadm/patch/105210-19/log for details

Patch packages installed:


SUNWarc
SUNWcsu
Co n t in u a m o s in s t a la n d o la s m e jo ra a u n a p o r u n a h a s t a in s t a la rla s t o d a s . La g u ía d e l
u s u a rio p ro p o rcio n a u n a lis t a d e la s m e jo ra s n e ce s a ria s y s u g e rid a s y e n la ce s a s it io s
d o n d e p o d e r d e s ca rg a r la s m e jo ra s s u g e rid a s a d icio n a le s s i q u e re m o s in s t a la rla s .

Instalar Netscape Communicator


Lo s fich e ro s e xt ra id o s d e Ne t s ca p e Co m m u n ica t o r 4 . 5 . 1 p ro p o rcio n a n u n a g u ía d e
u s u a rio e n e l d ire ct o rio
/ h o m e / m o n ic a p / N ETS CAP E/ N e t s c a p e _ Co m m u n ic a t o r_ 4 . 5 1 / c o m m o n / D o c s / e n
q u e e xp lica la in s t a la ció n . LA s ig u ie n t e s e cu e n cia d e co m a n d o s e s u n a fo rm a fá cil d e
h a ce rlo co n e l co m a n d o p k g a d d . Po r d e fe ct o , la in s t a ció n p o n e Ne t s ca p e Co m m u n ica t o r
e n e l d ire ct o rio / o p t / N S CP c o m d o n d e t a m b ié n s e in s t a la ro n Ja va Plu g - In y la s
m e jo ra s .
Cu a n d o e xt ra e m o s la d e s ca rg a N S CP c o m _ w e b s t a rt _ s p a rc . t a r. Z. s it ú a lo s fich e ro s e n
u n d ire ct o rio N ETS CAP E. De s d e e s t e d ire ct o rio e je cu t a m o s la s ig u ie n t e s s e cu e n cia d e
co m a n d o s :

cd ~/NETSCAPE/Netscape_Communicator_4.51/sparc/Product
su
<password>
pkgadd -d .

Chequear la Instalación
Ha y d o s fo rm a s d e ch e q u e a r n u e s t ra in s t a la ció n d e l Ja va Plu g - In , la s m e jo ra s y
Ne t s ca p e Co m m u n ica t o r.
1 . Ab rir e l m e n ú d e a yu d a d e Ne t s ca p e y s e le cció n Ab o u t Plu g _ In s . Ve re m o s u n a lis t a
d e lo s t ip o s Mim e . Ch e q u e a m o s e s t a lis t a co n t ra la lis t a p re s e n t e e n la g u ía d e
u s u a rio . S i n u e s t ro s t ip o s m im e s o n co rre ct o s , la in s t a la ció n e s t á co rre ct a y
co m p le t a .
2 . Arra n ca m o s e l a p p le t d e l p a n e l d e co n t ro l, ca rg a n d o e l fich e ro
/ o p t / N S CP c o m / j2 p i/ Co n t ro lP a n e l. h t m l. S i e l a p p le t a rra n ca la in s t a la ció n e s
co rre ct a y co m p le t a .
El a p p le t d e co n t ro l n o s p e rm it e ca m b ia r va lo re s p o r d e fe ct o u s a d o e n e l a rra n q u e d e l
Ja va Plu g - In . To d o s lo s a p p le t s e je cu t a d o s d e n t ro d e l Ja va Plu g - In u s a n e s o s va lo re s .

cd /opt/NSCPcom/j2pi
ControlPanel &

Instalar el Conversor HTML


Nu e s t ro n a ve g a d o r n o u s a rá a u t o m a t ica m e n t e e l Ja va Plu g - In cu a n d o ca rg u e m o s u n
fich e ro HTML co n u n a p p le t . Te n e m o s q u e d e s ca rg a r y e jcu t a r e l Ja va Plu g - In HTML
Co n ve rt e r s o b re la p á g in a HTML q u e in vica a l a p p le t p a ra e je cu t a rlo d ire ct a m e n t e
u s a n d o e l Plu g - In e n lu g a r d e h a ce rlo e n e l e n t o rn o d e e je cu ció n p o r d e fe ct o d e l
n a ve g a d o r.
De s co m p rim im o s e l fich e ro d e d e s ca rg a d e Plu g - In HTML Co n ve rt e r:
unzip [Link]
Añ a d im o s e l p ro g ra m a HTMLCo n v e rt e r. ja v a o s u d ire ct o rio a n u e s t ro CLAS S P ATH.

Fichero de Policía de Seguridad


La a p lica ció n d e s u b a s t a u s a u n a p p le t e je cu t á n d o s e e n u n n a ve g a d o r p a ra o p e ra cio n e s
a d m in is t ra t iva s . En la p la t a fo rm a Ja va TM 2 , lo s a p p le t s e s t á n re s t rin g id o s a u n e n t o rn o
t ip o ca ja s e lla d a y n e ce s it a n p e rm is o s p a ra a cce d e r a re cu rs o s d e l s is t e m a fu e ra d e e s e
e n t o rn o re s t rict ivo . Lo s a p p le t s e s t á n re s t rin g id o s a o p e ra cio n e s d e le ct u ra e n s u
d ire ct o rio lo ca l. To d o s la s d e m á s o p e ra cio n e s d e a cce s o re q u ie re n p e rm is o s .

Tipos de Ficheros de Policía

Ne ce s it a m o s u n fich e ro d e p o licía q u e co n ce d a p e rm is o s a l a p p le t Ad m in is t ra t io n . S i e l
a p p le t s e e je cu t a e n u n d is co d is t in t o a l d e l n a ve g a d o r, e l a p p le t t a m b ié n n e ce s it a rá
e s t a r firm a d o . Pu e d e s ve r la p á g in a Ap p le t s firm a d o s p a ra m á s in fo rm a ció n s o b re firm a r
y d e s p le g a r a p p le t s .
Ha y t re s cla s e s d e fich e ro s d e p o licía : s is t e m a , u s u a rio y p ro g ra m a . El fich e ro d e p o licía
d e l s is t e m a e s t á lo ca liza d o e n jd k 1 . 2 / jre / lib / s e c u rit y / ja v a . p o lic y o
jre 1 . 2 / lib / s e c u rit y / ja v a . p o lic y y co n t ie n e p e rm is o s p a ra ca d a u n o e n e l s is t e m a .
El fich e ro d e p o licía d e u s u a rio e s t á e n d ire ct o rio h o m e d e l u s u a rio . Es t e fich e ro
p ro p o rcio n a u n a fo rm a d e d a r cie rt o s p e rm is o s d e u s u a rio a d icio a n le s a a q u e llo s
co n ce d id o s a t o d o s e n e l s is t e m s . Lo s p e rm is o s d e l fich e ro d e l s is t e m a s e co m b in a n co n
lo s p e rm is o s d e l fich e ro d e u s u a rio .
Un fich e ro d e p o licía d e p ro g ra m a p u e d e s it u a rs e e n cu a lq u ie r p a rt e . S e le n o m b ra
e s p e cífica m e n t e cu a n d o s e in vo ca u n a a p lica ció n co n e l co m a n d o ja v a o cu a n d o s e
in vo ca u n a p p le t co n e l a p p le t vie we r. Cu a n d o u n a a p lica ció n o u n a p p le t s e in vo ca n co n
u n fich e ro d e p o licía e s p e cífico , lo s p e rm is o s d e e s t e fich e ro o cu p a n e l lu g a r d e ( n o s o n
co m b in a d o s co n ) lo s p e rm is o s e s p e cífica d o s e n lo s fich e ro s d e l s is t e m a o d e u s u a rio .
Lo s fich e ro s d e p o licía d e p ro g ra m a s e u s a n p a ra p ro b a r p ro g ra m a s o p a ra d e s p le g a r e n
u n a in t ra n e r a p p le t s y a p lica cio n e s .

Instalar el Fichero de Policía

S it u a m o s e l fich e ro d e p o licía e n n u e s t ro d ire ct o rio h o m e y lo lla m a m o s . ja v a . p o lic y .


Cu a n d o e l a p p le t in t e n t e re a liza r u n a a cció n q u e re q u ie ra u n fich e ro d e p o licía co n u n
p e rm is o , s e ca rg a e l fich e ro d e p o licía d e s d e e s t e d ire ct o rio y p e rm a n e ce e n e fe ct o
h a s t a q u e s a lg a m o s d e l n a ve g a d o r y lo a rra n q u e m o s d e n u e vo .
S i u n a p p le t in t e n t a re a liza r u n a o p e ra ció n s in lo s p e rm is o s co rre ct o s , s a lé
d is cre t a m e n t e s in la n za r n in g ú n e rro r d e l a p p le t o d e l n a ve g a d o r.

Cambiar la Posición o el Nombre

p o d e m o s ca m b ia r e l n o m b re y/ o la lo ca liza ció n d e lo s fich e ro s d e p o licía d e l s is t e m a o


d e u s u a rio p o r d e fe ct o . Ed it a m o s lo s fich e ro s jd k 1 . 2 / jre / lib / s e c u rit y / ja v a . s e c u rit y
o jre 1 . 2 / lib / s e c u rit y / ja v a . s e c u rit y y le a ñ a d im o s u n a t e rce ra e n t ra d a e s p e cifica n d o
e l n o m b re y la lo ca liza ció n d e l fich e ro d e p o licía a lt e rn a t ivo .

[Link].1=
file:${[Link]}/lib/security/[Link]
[Link].2=file:${[Link]}/.[Link]
[Link].3=file:/<mypolicyfile path and name>

Ejecutar el Applet Administration


Co p ia m o s e l a rch ivo JAR co n e l a p p le t Ad m in is t ra t io n y e l fich e ro d e p o licía a s u
lo ca liza ció n fin a l. e n e s t e e je m p lo la lo ca liza ció n e s e l d ire ct o rio
/ h o m e / z e ld a / p u b lic _ h t m l. Lu e g o , e xt ra e m o s e l fich e ro cla s s d e l a p p le t y e l fich e ro
d e p o licía d e l fich e ro JAR:

cp [Link] /home/zelda/public_html
jar xf [Link]
La e xt ra cció n s it ú a e l fich e ro d e p o licía b a jo p u b lic _ h t m l y cre a u n d ire ct o rio a d m in
b a jo e l d ire ct o rio p u b lic _ h t m l co n e l fich e ro cla s s d e l a p p le t d e n t ro . Re n o m b ra m o s e l
fich e ro d e p o licía d e l d ire ct o rio p u b lic _ h t m l co m o . ja v a . p o lic y y lo co p ia m o s e n
n u e s t ro d ire ct o rio h o m e .
En e l d ire ct o rio p u b lic _ h t m l, cre a m o s u n fich e ro HTML q u e in vo q u e a l a p p le t
Ad m in is t ra t io n . No s d e b e m o s a s e g u ra r d e in clu ir e l d ire ct o rio a d m in cu a n d o
e s p e cifiq u e m o s la o p ció n COD E d e l a p p le t . Ob s e rva m o s q u e cu a n d o u s a m o s Ja va
Plu g - In , n o p o d e m o s h a ce r q u e e l n a ve g a d o r ca rg e e l fich e ro cla s s d e s d e e l fich e ro JAR.

<HTML>
<BODY>
<APPLET CODE=admin/[Link]
WIDTH=550
HEIGHT=150>
</APPLET>
</BODY>
</HTML>
Arra n ca m o s e l HTML Co n ve rt e r.

java HTMLConverter
En e l in t e rfa ce g rá fico d e u s u a rio d e l HTML Co n ve rt e r g ra p h ica l, s e le ccio n a m o s On e
File :, e s p e cifica n d o e l p a t h a l fich e ro a d m in . h t m l, y p u ls a m o s e l b o t ó n Co n v e rt .
De s p u é s d e co m p le t a r la co n ve rs ió n , ca rg a m o s e l fich e ro a d m in . h t m l e n n u e s t ro
n a ve g a d o r.

Oz it o
Plataformas Win32
En p la t a fo rm a s Win 3 2 , e l s o ft wa re Ja va TM e s t á u n id o co n e l Ja va 2 Ru n t im e
En viro n m e n t ( JRE) . Ja va Plu g - In p e rm it e a lo s n a ve g a d o re s u s a r e l JRE d e Ja va 2
p a ra e je cu t a r a p p le t s b a s a d o s e n 1 . 2 y co m p o n e n t e s Ja va Be a n s TM e n lu g a r d e la
m á q u in a virt u a l p o r d e fe ct o d e lo s n a ve g a d o re s . El Ja va Plu g - In fu n cio n a co n
Ne t s ca p e Co m m u n ica t o r y Micro s o ft In t e rn e t Exp lo re r.
● Ob t e n e r la s De s ca rg a s

● In s t a la r JRE co n Ja va Plu g - In
● In s t a la r e l HTML Co n ve rt e r
● In s t a la r e l Fich e ro d e Po licía d e S e g u rid a d
❍ Tip o s d e Fich e ro s d e Po licía
❍ In s t a la r e l Fich e ro d e Po licía
❍ Ca m b ia r e l No m b re o la Lo ca liza ció n
● Eje cu t a r e l Ap p le t Ad m in is t ra t io n
● ¿ Có m o Fu n cio n a ?

Obtener las Descargas


Pa ra in s t a la r y u t ilia r e l Ja va Ru n t im e En viro n m e n t co n Ja va Plu g - In , n e ce s it a m o s
la s s ig u ie n t e s d e s ca rg a r. Po n e m o s la s d e s ca rg a s e n u n d ire ct o rio t e m p o ra l.
● Ja va Ru n t im e En viro n m e n t co m Ja va Plu g - In p a ra Pla t a fo rm a s Win 3 2 .

● Ja va Plu g - In HTML Co n ve rt e r

Instalar JRE con Java Plug-In


Un a ve rs ió n o p cio n a lm e n t e in s t a la b le d e la JRE d e Ja va 2 co n Ja va Plu g - In e s t á
co n clu id a e n la d e s ca rg a d e Ja va 2 S DK. Ta m b ié n p o d rm o s d e s ca rg a r e in s t a la r e l
Ja va 2 Ru n t im e En viro n m e n t co m Ja va Plu g - In s e p a ra d a m e n t e .

De cu a lq u ie r fo rm a , in s t a la m o s e l Ja va 2 Ru n t im e En viro n m e n t co n Ja va Plu g - In
h a cie n d o d o b le click s o b re s u ico n o y s ig u ie n d o la s in s t ru ccio n e s d e in s t a la ció n .
Cu a n d o la in s t a la ció n s e co m p le t e , ve re m o s e l p a n e l d e co n t ro l d e l Ja va Plu g - In e n
n u e s t ro m e n ú S t a rt d e Win d o ws b a jo P ro g ra m s .

Instalar el HTML Converter


Nu e s t ro n a ve g a d o r n o u s a rá a u t o m a t ica m e n t e e l Ja va Plu g - In cu a n d o ca rg u e m o s
u n fich e ro HTML co n u n a p p le t . Te n e m o s q u e d e s ca rg a r y e jcu t a r e l Ja va Plu g - In
HTML Co n ve rt e r s o b re la p á g in a HTML q u e in vica a l a p p le t p a ra e je cu t a rlo
d ire ct a m e n t e u s a n d o e l Plu g - In e n lu g a r d e h a ce rlo e n e l e n t o rn o d e e je cu ció n p o r
d e fe ct o d e l n a ve g a d o r.
De s co m p rim im o s e l fich e ro d e d e s a ca rg a d e l Ja va Plu g - In HTML Co n ve rt e r:

unzip [Link]
Añ a d im o s e l p ro g ra m a HTMLCo n v e rt e r. ja v a o s u d ire ct o rio a n u e s t ro
CLAS S P ATH.

Fichero de Policía de Seguridad


La a p lica ció n d e s u b a s t a u s a u n a p p le t e je cu t á n d o s e e n u n n a ve g a d o r p a ra
o p e ra cio n e s a d m in is t ra t iva s . En la p la t a fo rm a Ja va TM 2 , lo s a p p le t s e s t á n
re s t rin g id o s a u n e n t o rn o t ip o ca ja s e lla d a y n e ce s it a n p e rm is o s p a ra a cce d e r a
re cu rs o s d e l s is t e m a fu e ra d e e s e e n t o rn o re s t rict ivo . Lo s a p p le t s e s t á n
re s t rin g id o s a o p e ra cio n e s d e le ct u ra e n s u d ire ct o rio lo ca l. To d o s la s d e m á s
o p e ra cio n e s d e a cce s o re q u ie re n p e rm is o s .

Tipos de Ficheros de Policía

Ne ce s it a m o s u n fich e ro d e p o licía q u e co n ce d a p e rm is o s a l a p p le t Ad m in is t ra t io n .
S i e l a p p le t s e e je cu t a e n u n d is co d is t in t o a l d e l n a ve g a d o r, e l a p p le t t a m b ié n
n e ce s it a rá e s t a r firm a d o . Pu e d e s ve r la p á g in a Ap p le t s firm a d o s p a ra m á s
in fo rm a ció n s o b re firm a r y d e s p le g a r a p p le t s .
Ha y t re s cla s e s d e fich e ro s d e p o licía : s is t e m a , u s u a rio y p ro g ra m a . El fich e ro d e
p o licía d e l s is t e m a e s t á lo ca liza d o e n jd k 1 . 2 \ jre \ lib \ s e c u rit y \ ja v a . p o lic y o
jre 1 . 2 \ lib \ s e c u rit y / ja v a . p o lic y y co n t ie n e p e rm is o s p a ra ca d a u n o e n e l
s is t e m a .
El fich e ro d e p o licía d e u s u a rio e s t á e n e l d ire ct o rio h o m e d e l u s u a rio . Es t e fich e ro
p ro p o rcio n a u n a fo rm a d e d a r cie rt o s p e rm is o s d e u s u a rio a d icio a n le s a a q u e llo s
co n ce d id o s a t o d o s e n e l s is t e m s . Lo s p e rm is o s d e l fich e ro d e l s is t e m a s e co m b in a n
co n lo s p e rm is o s d e l fich e ro d e u s u a rio .
Un fich e ro d e p o licía d e p ro g ra m a p u e d e s it u a rs e e n cu a lq u ie r p a rt e . S e le n o m b ra
e s p e cífica m e n t e cu a n d o s e in vo ca u n a a p lica ció n co n e l co m a n d o ja v a o cu a n d o s e
in vo ca u n a p p le t co n e l a p p le t vie we r. Cu a n d o u n a a p lica ció n o u n a p p le t s e in vo ca n
co n u n fich e ro d e p o licía e s p e cífico , lo s p e rm is o s d e e s t e fich e ro o cu p a n e l lu g a r d e
( n o s o n co m b in a d o s co n ) lo s p e rm is o s e s p e cífica d o s e n lo s fich e ro s d e l s is t e m a o
d e u s u a rio . Lo s fich e ro s d e p o licía d e p ro g ra m a s e u s a n p a ra p ro b a r p ro g ra m a s o
p a ra d e s p le g a r e n u n a in t ra n e r a p p le t s y a p lica cio n e s .

Instalar el Fichero de Policía

S it u a m o s e l fich e ro d e p o licía e n n u e s t ro d ire ct o rio h o m e y lo lla m a m o s


ja v a . p o lic y . Cu a n d o e l a p p le t in t e n t e re a liza r u n a a cció n q u e re q u ie ra u n fich e ro
d e p o licía co n u n p e rm is o , s e ca rg a e l fich e ro d e p o licía d e s d e e s t e d ire ct o rio y
p e rm a n e ce e n e fe ct o h a s t a q u e s a lg a m o s d e l n a ve g a d o r y lo a rra n q u e m o s d e
n u e vo .
S i u n a p p le t in t e n t a re a liza r u n a o p e ra ció n s in lo s p e rm is o s co rre ct o s , s a lé
d is cre t a m e n t e s in la n za r n in g ú n e rro r d e l a p p le t o d e l n a ve g a d o r.

Cambiar la Posición o el Nombre

Po d e m o s ca m b ia r e l n o m b re o la lo ca liza ció n d e l fich e ro d e p o licía d e u s u a rio o d e l


s is t e m a p o r d e d e ct o . Ed it a m o s lo s fich e ro s
jd k 1 . 2 \ jre \ lib \ s e c u rit y \ ja v a . s e c u rit y o jre 1 . 2 \ lib \ s e c u rit y \ ja v a . s e c u rit y y
a ñ a d im o s u n a t e rce ra e n t ra d a e s p e cifica n d o e l n o m b re y la lo ca liza ció n d e l fich e ro
d e p o licía a lt e rn a t ivo .

[Link].1=file:${[Link]}\lib\security\[Link]
[Link].2=file:${[Link]}\[Link]
[Link].3=file:\<mypolicyfile path and name>

N o t a : En m á q u in a s Win d o ws / NT, p o d ría m o s s it u a r e l fich e ro d e p o licía


e n e l d ire ct o rio C:\ W in n t \ P ro file s \ < u s e rid > \ ja v a . p o lic y .

Ejecutar el Applet Administration


Co p ia m o s e l a rch ivo JAR co n e l a p p le t Ad m in is t ra t io n y e l fich e ro d e p o licía a s u
lo ca liza ció n fin a l. En e s t e e je m p lo , e s t a lo ca liza ció n e s e l d ire t o rio
\ h o m e \ z e ld a \ p u b lic _ h t m l. Lu e g o e xt ra e m o s e l fich e ro cla s s d e l a p p le t y e l
fich e ro d e p o licía d e l fich e ro JAR:

cp [Link] \home\zelda\public_html
jar xf [Link]
La e xt ra cció n s it ú a e l fich e ro d e p o licía b a jo p u b lic _ h t m l y cre a u n d ire ct o rio
a d m in b a jo e l d ire ct o rio p u b lic _ h t m l co n e l fich e ro cla s s d e l a p p le t d e n t ro .
Re n o m b ra m o s e l fich e ro d e p o licía d e l d ire ct o rio p u b lic _ h t m l co m o . ja v a . p o lic y y
lo co p ia m o s e n n u e s t ro d ire ct o rio h o m e .
En e l d ire ct o rio p u b lic _ h t m l, cre a m o s u n fich e ro HTML q u e in vo q u e a l a p p le t
Ad m in is t ra t io n . No s d e b e m o s a s e g u ra r d e in clu ir e l d ire ct o rio a d m in cu a n d o
e s p e cifiq u e m o s la o p ció n COD E d e l a p p le t . Ob s e rva m o s q u e cu a n d o u s a m o s Ja va
Plu g - In , n o p o d e m o s h a ce r q u e e l n a ve g a d o r ca rg e e l fich e ro cla s s d e s d e e l fich e ro
JAR.

<HTML>
<BODY>
<APPLET CODE=admin/[Link]
WIDTH=550
HEIGHT=150>
</APPLET>
</BODY>
</HTML>
Arra n ca m o s e l HTML Co n ve rt e r.

java HTMLConverter
En e l in t e rfa ce g rá fico d e u s u a rio d e l HTML Co n ve rt e r g ra p h ica l, s e le ccio n a m o s
On e File :, e s p e cifica n d o e l p a t h a l fich e ro a d m in . h t m l, y p u ls a m o s e l b o t ó n
Co n v e rt .

¿Cómo Funciona?
En m á q u in a s Win d o ws , e l Ja va Plu g - In e n cu e n t ra e l Ja va Ru n t im e En viro n m e n t
( JRE) e je cu t a n d o e l fich e ro d e co n t ro l OLE p e rs o n a liza d o b e a n s . o c x in s t a la d o p o r
d e fe ct o e n e l d ire ct o rio d e l n a ve g a d o r we b \ P ro g ra m File s \ Ja v a S o ft \ 1 . 2 \ b in .
El co n t ro l OLE e xa m in a e l re g is t ro d e Win d o ws p a ra b u s ca r la cla ve d e l Ja va
Plu g - In y u s a e l va lo r a s o cia d o co n e s a cla ve p a ra e n co n t ra r e l JRE in s t a la d o .
S i e n co n t ra m o s q u e s e ca rg a u n JRE e rró n e o , u s a m o s re g e d it p a ra ch e q u e a r e l
va lo r d e l re g is t t ro d e Ja va Plu g - In p a ra e l u s u a rio a ct u a l. S i e l JRE n o e s t á
in s t a la d o , e l co n t ro l ch e q u e a lo s va lo re s Ja va Plu g - in p a ra la
HKEY_ LOCAL_ MACHI N E. De b e ría m o s ve r u n va lo r p a ra Ja v a Ru n t im e
En v iro n m e n t b a jo S o ft w a re \ Ja v a S o ft .
De s p u é s d e co m p le t a r la co n ve rs ió n , ca rg a m o s e l fich e ro a d m in . h t m l e n n u e s t ro
n a ve g a o r We b .

Oz it o
Más Tópicos de Seguridad
Es t e ca p ít u lo p re s e n t a d o s t ó p ico s d e s e g u rid a d e s a d icio n a le s q u e p o d ría m o s
e n co n t ra r in t e re s a n t e s .
● Ap p le t s Firm a d o s

● Es crib ir u n Co n t ro l d e S e g u rid a d

¿Tienes Prisa?
Es t a t a b la t ie n e e n la ce s d ire ct o s a lo s t ó p ico s e s p e cífico s .
Tó p ic o S e c c ió n
Ap p le t s Firm a d o s ● Eje m p lo d e Ap p le t Firm a d o
● De s a rro lla d o r d e In t ra n e t
● Us u a rio Fin a l
● Eje cu t a r u n a Ap lica ció n co n u n Fich e ro d e Po licía
● Ap p le t s Firm a d o s e n JDK 1 . 1
Es crib ir u n Co n t ro la d o r d e ● El Pro g ra m a File IO
S e g u rid a d ● El Pro g ra m a Pa s s wo rd S e cu rit yMa n a g e r
● Eje cu t a r e l Pro g ra m a File IO
● In fo rm a ció n d e Re fe re n cia

Oz it o
Applets Firmados
S e p e u d e d e fin ir u n fich e ro d e p o licía p a ra re q u e rir u n a firm a d e t o d o s lo s a p p le t s o
a p lica cio n e s q u e in t e n t e n e je cu t a rs e co n e l fich e ro d e p o licía . La firm a e s u n a
fo rm a d e ve rifica r q u e e l a p p le t o la a p lica ció n vie n e n d e u n a fu e n t e fia b le y q u e
p u e d e s e r cre ía d a p a ra e je cu t a rs e co n lo s p e rm is o s co n ce d id o s p o r e l fich e ro d e
p o licía .
S i u n fich e ro d e p o licía re q u ie re u n a firm a , u n a p p le t o u n a a p lica ció n p u e d e n
o b t e n e r e l a cce s o co n ce d id o p o r e l fich e ro d e p o licía s ó lo s i t ie n e n la firm a co rre ct a .
S i e l a p p le t o la a p lica ció n t ie n e n u n a firm a e rró n e a o n o t ie n e n firm a , n o
o b t e n d rá n e l a cce s o a l fich e ro .
Es t a s e cció n m u e s t ra u n e je m p lo d e firm a d e u n a a p p le t , ve rifica ció n d e e s a firm a ,
y e je cu ció n d e l a p p le t co n u n fich e ro d e p o licía .
● Eje m p lo Ap p le t Firm a d o

● De s a rro lla d o r d e In t ra n e t
● Us u a rio Fin a l
● Eje cu t a r la Ap lica ció n co n u n Fich e ro d e Po licía
● Ap p le t s Firm a d o s e n JDK 1 . 1

Ejemplo del Applet Firmado


El fich e ro d e p o licía p a ra co n ce d e r a cce s o s p u e d e co n fig u ra rs e p a ra q u e re q u ie ra o
n o u n a firm a . S i s e re q u ie re u n a firm a , e l a p p le t t ie n e q u e e s t á r e n vu e lt o e n u n
fich e ro JAR a n t e s d e p o d e r s e r firm a d o . Es t e e je m p lo m u e s t ra có m o firm a r y
co n ce d e r lo s p e rm is o s a u n a p p le t p a ra q u e p u e d a cre a r u n fich e ro d e m o . in i e n e l
d ire ct o rio Ho m e d e l u s u a rio cu a n d o s e e je cu t a e n e l Ap p le t Vie we r.
Es t o s fich e ro s s o n lo s u s a d o s e n e l e je m p lo . Po d e m o s co p ia rlo s o cre a rlo s e n
n u e s t ro d ire ct o rio d e t ra b a jo .
● El fich e ro S ig n e d Ap p le t De m o . ja va q u e co n t ie n e e l có d ig o d e l a p p le t .

● Writ e . jp fich e ro d e p o licía q u e co n ce d e lo s a cce s o s a l d ire ct o rio h o m e d e l


u s u a rio .
● Un a e t iq u e t a Ap p le t e m b e b id a e n u n fich e ro S ig n e d Ap p le t . h t m l:

<applet code="[Link]"
archive="[Link]"
width=400 height=400>
<param name=file value="/etc/inet/hosts">
</applet>
No rm a lm e n t e u n a p p le t s e e n vu lve y s e firm a m e d ia n t e u n d e s a rro lla d o r d e
in t ra n e t y e s m a n e ja d o p o r e l u s u a rio fin a l q u e ve rifica la firm a y e je cu t a e l a p p le t .
En e s t e e je m p lo , e l d e s a rro lla d o r d e in t ra n e t p e rfo rm a lo s p a s o s 1 a l 5 , y e l u s u a rio
fin a l re a liza lo p a s o s d e l 6 a l 8 . Pa ra m a n t e n e r la s co s a s s e n cilla s t o d o s lo s p a s o s
o cu rre n e n e l m is m o d ire ct o rio .
1 . Co m p ila r e l Ap p le t .
2 . Cre a r e l Fich e ro JAR.
3 . Ge n e ra r la s Cla ve s .
4 . Firm a r e l Fich e ro JAR.
5 . Exp o rt a r e l Ce rt ifica d o d e Cla ve Pú b lica .
6 . Im p o rt a r e l Ce rt ifica d o co m o Ce rt ifica d o Ve rd a d e ro .
7 . Cre a r e l Fich e ro d e Po licía .
8 . Eje cu t a r e l Ap p le t .
Desarrollador de Intranet
El d e s a rro lla d o r d e in t ra n e t , e n vu e lve e l e je cu t a b le d e l a p p le t e n u n fich e ro JAR, lo
firm a y e xp o rt a e l ce rt ifica d o d e la cla ve p ú b lica .

1: Compilar el Applet

En s u d ire ct o rio d e t ra b a jo e l d e s a rro lla d o r d e in t ra n e t , u s a e l co m a n d o ja v a c p a ra


co m p ila r la cla s e S ig n e d Ap p le t D e m o . ja v a . La s a lid a d e l co m a n d o ja v a c e s e l
S ig n e d Ap p le t D e m o . c la s s .
ja v a c S ig n e d Ap p le t D e m o . ja v a

2: Crear el Fichero JAR

El d e s a rro lla d o r d e in t ra n e t a lm a ce n a e l fich e ro S ig n e d Ap p le t D e m o . c la s s


co m p ila d o e n u n fich e ro JAR. La o p ció n - c v f d e l co m a n d o ja r cre a u n n u e vo
a rch ivo ( c) , u s a n d o m o d o ve rb o s o ( v) , y e s p e cifica e l n o m b re d e l fich e ro a rch iva d o
( f) . El n o m b re d e l fich e ro e s S ig n e d Ap p le t . ja r.
ja r c v f S ig n e d Ap p le t . ja r S ig n e d Ap p le t D e m o . c la s s

3: Generar las Claves

Un fich e ro JAR s e firm a co n la cla ve p riva d a d e l cre a d o r d e l fich e ro JAR y la firm a


e s ve rifica d a p o r e l re ce p t o r d e l fich e ro JAR co n e l cla ve p ú b lica d e la p a re ja . El
ce rt ifica d o e s u n a s e n t e n cia d e l p ro p ie t a rio d e la cla ve p riva d a in d ica n d o q u e la
cla ve p ú b lica d e la p a re ja t ie n e u n a va lo r p a rt icu la r p a ra q u e la p e rs o n a q u e la e s t á
u s a n d o p u e d e e s t a r s e g u ra d e q u e e s a u t é n t ica . La s cla ve s p ú b lica y p riva d a d e b e n
e xis t ir e n e l a lm a ce n d e ca lve s a n t e s d e q u e s e p u e d e u s a r ja rs ig n e r p a ra firm a r o
ve rifica r la firm a d e u n fich e ro JAR.
El d e s a rro lla d o r cre a u n b a s e d e d a t o s k e y s t o re lla m a d a c o m p s t o re q u e t ie n e
u n a e n t ra d a p a ra ca d a p a re ja d e cla ve s re cie n t e m e n t e g e n e ra d a s co n la cla ve
p ú b lica e n u n ce rt ifica d o u s a n d o e l co m a n d o k e y t o o l.
En s u d ire ct o rio d e t ra b a jo , e l d e s a rro lla d o r cre a u n a b a s e d e d a t o s ke ys t o re y
g e n e ra la s cla ve s :

keytool -genkey -alias signFiles -keystore compstore


-keypass kpi135 -dname "cn=jones"
-storepass ab987c
Es t e co m a n d o k e y t o o l - g e n k e y in vo ca u n a p a re ja d e cla ve s q u e e s t á n
id e n t ifica d a s co n e l Alia s s ig n File s . S u b s e cu e n t e s lla m a d a s a l co m a n d o ke yt o o l q u e
u s a rá n e s t e a lia s y la p a s s wo rd ( - k e y p a s s k p i1 3 5 ) p a ra a cce d e r a la cla ve p riva d a
e n e l p a r g e n e ra d o .
La p a re ja d e cla ve s g e n e ra d a s s e a lm a ce n a e n u n b a s e d e d a t o s ke ys t o re lla m a d a
co m p s t o re ( - k e y s t o re c o m p s t o re ) e n e l d ire ct o rio a ct u a l y a cce d id a co n la
p a s s wo rd d e l co m p s t o re ( - s t o re p a s s a b 9 8 7 c ) .
La o p ció n - d n a m e "c n = jo n e s " e s p e cifica u n n o m b re d is t in g u id o X. 5 0 0 co n u n
va lo r d e n o m b re co m ú n ( cn ) . X. 5 0 0 Dis t in g u is h e d Na m e s id e n t ifica e n t id a d e s p a ra
ce rt ifica d o s X. 5 0 9 . En e s t e e je m p lo , e l d e s a rro lla d o r u s a s u ú lt im o n o m b re , Jo n e s ,
p a ra e l n o m b re co m ú n . Po d ría h a b e r u s a d o cu a lq u ie r o t ro n o m b re p a ra e s t e
p ro p ó s it o .
Po d e m o s ve r t o d o s la s o p cio n e s y p a rá m e t ro s d e ke t o o l t e cle a n d o :
k e y t o o l - h e lp

4: Firmar el Fichero JAR

JAR S ig n e r e s u n a h e rra m ie n t a d e la lín e a d e co m a n d o s p a ra firm a r y ve rifica r la


firm a d e fich e ro s JAR. En s u d ire ct o rio d e t ra b a jo , e l d e s a rro lla d o u s a ja rs ig n e r
p a ra firm a r u n a co p ia d e l fich e ro S ig n e d Ap p le t . ja r.

jarsigner -keystore compstore -storepass ab987c


-keypass kpi135
-signedjar
[Link] [Link] signFiles
La s o p cio n e s - s t o re p a s s a b 9 8 7 c y - k e y s t o re c o m p s t o re e s p e cifica n la b a s e d e
d a t o s ke ys t o re y p a s s wo rd d o n d e s e a lm a ce n a la cla ve p riva d a p ra firm a r e l fich e ro
JAR. La o p ció n - k e y p a s s k p i1 3 5 e s la p a s s wo rd d e la cla ve p riva d a ,
S S ig n e d Ap p le t . ja r e s e l n o m b re d e l fich e ro JAR firm a d o , y s ig n File s e s e l a lia s
d e la cla ve p riva d a . ja rs ig n e r e xt ra e e l ce rt ifica d o d e s d e la b a s e d e d a t o s cu ya
e n t ra d a e s s ig n File s y lo a d ju n t a a la firm a d e l fich e ro JAR firm a d o .

5: Exportar el Certificado de la Clave Pública

El ce rt ifica d o d e la cla ve p ú b lica s e e n vía co n e l fich e ro JAR a l u s u a rio fin a l q u e


u s a rá e l a p p le t . Es t a p e rs o n a u s a e l ce rt ifica d o p a ra a u t e n t ifica r la firm a d e l fich e ro
JAR. Un ce rt ifica d o s e e n vía e xp o rt a n d o lo d e s d e la b a s e d e d a t o s c o m p s t o re .
En s u d ire ct o rio d e t ra b a jo , e l d e s a rro lla d o r u s a ke yt o o l p a ra co p ia r e l ce rt ifica d o
d e s d e c o m p s t o re a u n fich e ro lla m a d o Co m p a n y Ce r. c e r d e e s t a fo rm a :

keytool -export -keystore compstore -storepass ab987c


-alias signFiles -file [Link]
Co m o e l ú lt im o p a s o , e l d e s a rro lla d o r co lo ca e l fich e ro JAR y e l ce rt ifica d o e n u n
d ire ct o rio d e d is t rib u ció n o e n u n a p á g in a we b .
Usuario Final
El u s u a rio fin a l d e s ca rg a e l fich e ro JAR d e s d e e l d ire ct o rio d e d is t rib u ció n , im p o rt a
e l ce rt ifica d o , cre a u n fich e ro d e p o licía co n ce d ie n d o lo s a cce s o s a l a p p le t , y
e je cu t a e l a p p le t .

6: Importar el Certificado como Certificado Verdadero

El u s u a rio d e s ca rg a S S ig n e d Ap p le t . ja r y Co m p a n y Ce r. c e r a s u d ire ct o rio h o m e .


Ah o ra d e b e cre a r u n a b a s e d e d a t o s ke ys t o re ( ra y s t o re ) e im p o rt a r e l ce rt ifica d o
e n e lla u s a n d o e l a p lia s c o m p a n y . El u s u a rio u s a k e y t o o l e n s u d ire ct o rio h o m e
p a ra h a ce r e s t o :

keytool -import -alias company -file


[Link] -keystore
raystore -storepass abcdefgh

7: Crear el Fichero de Policía

El fich e ro d e p o licía co n ce d e a l fich e ro S S ig n e d Ap p le t . ja r firm a d o p o r e l a lia s


c o m p a n y p e rm is o p a ra cre a r d e m o . in i ( y n o o t ro fich e ro ) e n e l d ire ct o rio h o m e
d e l u s u a rio .
El u s u a rio cre a e l fich e ro d e p o licía e n s u d ire ct o rio h o m e u s a n d o p o lic y t o o l o u n
e d it o r AS CII.

keystore "/home/ray/raystore";

// A sample policy file that lets a program


// create [Link] in user's home directory
// Satya N Dodda

grant SignedBy "company" {


permission [Link]
"[Link]", "read";
permission [Link]
"${[Link]}/[Link]", "write";
};

8: Ejecutar el Applet en el AppletViewer

Ap p le t Vie we r co n e ct a co n d o cu m e n t o s HTML y lo s re cu rs o s e s p e cifica d o s e n la


lla m a d a a a p p le t v ie w e r, y m u e s t ra e l a p p le t e n s u p ro p ia ve n t a n a . Pa ra e je cu t a r
e l e je m p lo , e l u s u a rio co p ia e l fich e ro JAR firm a d o y e l fich e ro HTML e n
/ h o m e / a URL/ p u b lic _ h t m l y lla m a a l Ap p le t vie we r d e s d e s u d ire ct o rio ra íz d e
e s t a fo rm a :
appletviewer -[Link]=[Link]
[Link]
N o t a : S e t e cle a t o d o e n u n a lín e a y s e p o n e u n e s p a cio e n b la n co
d e s p u é s d e W rit e . jp
La o p ció n - J- D ja v a . s e c u rit y . p o lic y = W rit e . jp le d ice a l Ap p le t Vie we r q u e e je cu t e
e l a p p le t re fe re n cia d o e n e l fich e ro S ig n e d Ap p le t . h t m l co n e l fich e ro d e p o licía
W rit e . jp .
N o t a : El fich e ro d e p o licía p u e d e a lm a ce n a rs e e n e l s e rvid o r y
e s p e cifica rs e e n la in vo ca ció n a l a p p le t v ie w e r co m o u n a URL.

Ejecutar una Aplicación con un Fichero de Policía


Es t a in vo ca ció n d e a p lica ció n re s t rin g e My P ro g ra m a u n e n t o rn o ce ra d o d e la
m is m a fo rm a e n q u e s e re s t rin g e n lo s a p p le t , p e ro p e rm it e lo s a cce s o s
e s p e cifica d o s e n e l fich e ro d e p o licía p o lfile .

java -[Link]
-[Link]=polfile MyProgram

Applets Firmados en JDK 1.1


Lo s a p p le t s firm a d o s d e l JDK 1 . 1 p u e d e n a cce s e r a re cu rs o s d e l s is t e m a lo ca l s i
é s t e e s t á co n fig u ra d o p a ra p e rm it irlo . Pu e d e s ve r la p á g in a s e je m p lo s d e Ap p le t s
Firm a d o s d e l JDK 1 . 1 p a ra m á s d e t a lle s .

Oz it o
Escribir un Controlador de Seguridad
Un co n t ro la d o r d e s e g u rid a d e s u n o b je t o d e la Má q u in a Virt u a l Ja va TM ( JVM) q u e
im p le m e n t a u n p o licía d e s e g u rid a d . Po r d e fe ct o , la p la t a fo rm a Ja va 2 ®
p ro p o rcio n a u n co n t ro la d o r d e s e g u rid a d q u e d e s a ct iva t o d o s lo s a cce s o s a lo s
re cu rs o s d e l s is t e m a lo ca l m e n o s lo s a cce s o s d e le ct u ra a l d ire ct o rio y s u s
s u b d ire ct o rio s d ó n d e e s in vo ca d o e l p ro g ra m a .
Po d e m o s e xt e n d e r e l co n t ro la d o r d e s e g u rid a d p o r d e fe ct o p a ra im p le m e n t a r
ve rifica cio n e s y a p ro va cio n e s p e rs o n a liza d a s p a ra a p p le t s y a p lica cio n e s , p e ro la
im p le m e n t a ció n d e b e in clu ir có d ig o d e ve rifica ció n d e a cce s o s a p ro p ia d o p a ra ca d a
m é t o d o c h e c k XXX q u e s o b re e s crib a m o s . S i n o in clu im o s e s t e có d ig o , n o s u ce d e rá
n in g u n ch e q u e o d e ve rifica ció n , y n u e s t ro p ro g ra m a e s cin d irá e l fich e ro d e p o licía
d e l s is t e m a .
Es t a s e cció n u s a u n a a p lica ció n d e e je m p lo p a ra e xp lica r có m o e s crib ir u n
co n t ro la d o r d e s e g u rid a d p e rs o n a liza d o a n t e s d e le e r y e s crib ir lo s fich e ro s
e s p e cifica d o s . La im p le m e n t a ció n in clu ye có d ig o d e ve rifica ció n d e a cce s o s p o r e s o
u n a ve z q u e e l u s u a rio p a s a e l ch e q u e o d e p a s s wo rd , t o d a vía n e ce s it a q u e e l
fich e ro t e n g a p e rm is o s d e le ct u ra y e s crit u a e n s u fich e ro d e p o licía .
El e je m p lo co n s is t e e n la a p lica ció n File I O, y e l p ro g ra m a
P a s s w o rd S e c u rit y Ma n a g e r q u e p ro p o rcio n a la im p le m e n t a ció n d e l co n t ro la d o r
d e s e g u rid a d p e rs o n a liza d o .
● El p ro g ra m a File IO

● El p ro g ra m a Pa s s wo rd S e cu rit yMa n a g e r
● Eje cu t a r e l p ro g ra m a File IO
● In fo rm a ció n d e Re fe re n cia

El programa FileIO
El p ro g ra m a File IO m u e s t ra u n s e n cillo in t e rfa ce d e u s u a rio q u e p id e a l u s u a rio q u e
in t ro d u zca a lg ú n t e xt o . Cu a n d o e l u s a rio p u ls a e l b o t ó n Clic k Me , e l t e xt o s e g ra b a
e n u n fich e ro e n e l d ire ct o rio h o m e d e l u s u a rio , y s e a b re y s e le e u n s e g u n d o
fich e ro . El t e xt o le íd o d e l s e g u n d o fich e ro s e m u e s t ra a l u s u a rio .
An t e s d e Pu ls a r e l b o t ó n De s p u é s d e Pu ls a r e l b o t ó n

El co n t ro la d o r d e s e g u rid a d p e rs o n a liza d o p a ra e s t e p ro g ra m a le p u d e a l u s u a rio


fin a l q u e in t ro d u zca u n a p a s s wo rd a n t e s d e p e rm it ir q u e File I O e s crib a o le a t e xt o
d e s d e u n fich e ro . El m é t o d o m a in d e File I O cre a u n co n t ro la d o r d e s e g u rid a d
p e rs o n a liza d o lla m a n d o P a s s w o rd S e c u rit y Ma n a g e r.

public static void main(String[] args){


BufferedReader buffy = new BufferedReader(
new InputStreamReader([Link]));
try {
[Link](
new PasswordSecurityManager("pwd", buffy));
} catch (SecurityException se) {
[Link]("SecurityManager already set!");
}

La Clases PasswordSecurityManager
La cla s e Pa s s wo rd S e cu rit yMa n a g e r d e cla ra d o s va ria b le s d e e je m p la r p riva d a s , q u e
s o n in icia liza d a s p o r e l co n s t ru ct o r cu a n d o s e in s t a la e l co n t ro la d o r d e s e g u rid a d
p e rs o n a lzia d o . La va ria b le d e e je m p la r p a s s w o rd co n t ie n e e l p a s s wo rd re a l, y la
va ria b le d e e je m p la r b u ffy e s u n b u ffe r d e e n t ra d a q u e a lm a ce n a la p a s s wo rd d e
e n t ra d a d e l u s u a rio fin a l.

public class PasswordSecurityManager


extends SecurityManager{

private String password;


private BufferedReader buffy;

public PasswordSecurityManager(String p,
BufferedReader b){
super();
[Link] = p;
[Link] = b;
}
El m é t o d o a c c e s s OK le p id e u n a p a s s wo rd a l u s u a rio fin a l, ve rifica la p a s s wo rd , y
d e vu e lve t ru e s i e l p a s s wo rd e s co rre ct o y fa ls e s i n o lo e s .

private boolean accessOK() {


int c;
String response;

[Link]("Password, please:");
try {
response = [Link]();
if ([Link](password))
return true;
else
return false;
} catch (IOException e) {
return false;
}
}

Verificar Accesos

La cla s e p a d re S e c u rit y Ma n a g e r p ro p o rcio n a m é t o d o s p a ra ve rifica r a cce s o s d e


le ct u ra y e s crit u ra a fich e ro s d e l s is t e m a . Lo s m é t o d o c h e c k Re a d y c h e c k W rit e
t ie n e n u n a ve rs ió n q u e a ce p t a u n S t rin g y o t ra ve rs ió n q u e a ce p t a u n d e s crip t o r
d e fice ro .
Es t e e je m p lo s ó lo s o b re e s crie la s ve rs io n e s S t rin g p a ra m a n t e n e r e l e je m p lo
s e n cillo , y co m o e l p ro g ra m a File I O u s a a cce s o s a d ire ct o rio s y fich e ro s co m o
S t rin g s .

public void checkRead(String filename) {


if(([Link]([Link] + "home" +
[Link] + "monicap" +
[Link] + "[Link]"))){
if(!accessOK()){
[Link](filename);
throw new SecurityException("No Way!");
} else {
FilePermission perm = new FilePermission(
[Link] + "home" +
[Link] + "monicap" +
[Link] + "[Link]", "read");
checkPermission(perm);
}
}
}
public void checkWrite(String filename) {
if(([Link]([Link] + "home" +
[Link] + "monicap" +
[Link] + "[Link]"))){
if(!accessOK()){
[Link](filename);
throw new SecurityException("No Way!");
} else {
FilePermission perm = new FilePermission(
[Link] + "home" +
[Link] + "monicap" +
[Link] + "[Link]" ,
"write");
checkPermission(perm);
}
}
}
}
El m é rt o d o c h e c k W rit e e s lla m a d o a n t e s d e e s crib ir la e n t ra d a d e l u s u a rio e n e l
fich e ro d e s a lid a . Es t o e s p o rq u e la cla s e File Ou t p u t S t re a m lla m a p rim e ro a
S e c u rit y Ma n a g e r. c h e c k W rit e .
La im p le m e n t a ció n p e rs o n a liza d a p a ra S e c u rit y Ma n a g e r. c h e c k W rit e ch e q u e a e l
p a t h n a m e / h o m e / m o n ic a p / t e x t . t x t , s i e s t ru e le p id e a l u s u a rio u n a p a s s wo rd .
S i la p a s s wo rd e s co rre ct a , e l m é t o d o c h e c k W rit e re a liza e l ch e q u e o d e l a cce s o
cre a n d o u n e je m p la r d e l p e rm is o re q u e rid o y p a s a n d o lo a l m é t o d o
S e c u rit y Ma n a g e r. c h e c k P e rm is s io n . Es t e ch e q u e o s u ce d e rá s i e l co n t ro la d o r d e
s e g u ird a d e n cu e n t ra u n fich e ro d e s e g u rid a d d e s is t e m a m d e u s u a rio o d e
p ro g ra m a co n e l p e rm is o e s p e cifica d o .
Un a ve z co m p le t a d a la o p e ra ció n d e e s crit u ra , a l u s u a rio fin a l s e le p id e la
p a s s wo rd d o s ve ce s m á s . La p rim e ra ve z p a ra le e r e l d ire ct o rio / h o m e / m o n ic a p ,
y la s e g u n d a ve z p a ra le e r e l fich e ro t e x t 2 . t x t . S e re a liza u n ch e q u e o d e a cce s o
a n t e s d e q u e t e n g a lu g a r la o p e ra ció n d e le ct u ra .

Fichero de Policía

Aq u ñ i e s t ñ a e l fich e ro d e p o licía q u e n e ce s it a e l p ro g ra m a File I O p a ra la s


o p e ra cio n e s d e le ct u ra y e s crit u ra . Ta m b ié n co n ce d e r p e rm is o a l co n t ro la d o r d e
s e g u rid a d p e rs o n a liza d o p a ra a cce d e r a la co la d e e ve n t o s e n re p re s e n t a ció n d e la
a p lica ció n y m o s t ra r la ve n t a n a d e la a p lica ció n s i n in g ú n a vis o .

grant {
permission [Link]
"${[Link]}/[Link]", "write";
permission [Link]
"[Link]", "read";
permission [Link]
"${[Link]}/[Link]", "read";
permission [Link]
"accessEventQueue";
permission [Link]
"showWindowWithoutWarningBanner";
};

Ejecutar el programa FileIO

Aq u í e s t á có m o e je cu t a r e l p ro g ra m a File I O co n e l fich e ro d e p o licía :

java -[Link]=polfile FileIO

Información de Referencia
El Ap é n d ice A: S e g u rid a d y Pe rm is o s d e s crib e lo s p e rm is o s d is p o n ib le s y e xp lica la s
co n s e cu e n cia s d e co n ce d e r p e rm is o s . Un a fo rm a d e u s a r e s t a e s in fo rm a ció n e s
p a ra a yu d a rn o s a lim it a r lo s p e rm is o s co n ce d id o s a u n a p p le t o a p lcia ció n p o d ría n
n e ce s it a r s e r e je cu t a d o s s a t is fa ct o ria m e n t e . Ot ra fo rm a d e u s a r e s t a in fo rm a ció n
e s e d u ca rn o s e n la fo rm a e n u n p e rm is o p a rt icu la r p u e d e s e r e xp lo t a d o p o r có d ig o
m a ilicio s o .
El Ap é n d ice B: Cla s e s , Mé t o d o s y Pe rm is o s p ro p o rcio n a lis t a d e m é t o d o s d e la
p la t a fo rm a Ja va 2 q u e e s t á n im p le m e n t a d o s p a ra ch e q u e o s d e s e g u rid a d , lo s
p e rm is o s q u e ca d a u n o re q u ie re , y e l m é t o d o ja v a . s e c u rit y . S e c u rit y Ma n a g e r
lla m a d o p a ra re a liza r e l ch e q u e o d e a cce s o s .
Po d e m o s u s a r e s t a re fe re n cia p a ra e s crib ir im p le m e n t a cio n e s d e n u e s t ro p ro p io
co n t ro la d o r d e s e g u rid a d o cu n d o im p le m e n t a m o s m é t o d o s a b s t a ct o s q u e re a liza n
t a re a s re la cio n a d a s co n la s e g u rid a d .
El Ap é n d id e C: Mé t o d o s d e l S e cu rit yMa n a g e r lis t a lo s ch e q u e o s d e p e rm is o s p a ra
lo s m é t o d o d e S e c u rit y Ma n a g e r. ¡

Oz it o
Apéndice A: Seguridad y Permisos
To d o s lo s a p p le t s y cu a lq u ie r a p lica cio n in vo ca d a co n u n co n t ro la d o r d e s e g u rid a d
d e b e co n ce d e r p e rm is o s e xp lícit o s p a ra a cce d e r lo s re cu rs o s lo ca le s d e l s is t e m a
a p a e rt e d e l a cce s o d e le ct u ra e n e l d ire ct o rio y s u b d ire ct o rio s d e s d e d o n d e s e
in vo có e l p ro g ra m a . La p la t a fo rm a Ja va TM p ro p o rcio n a p e rm is o s p a ra p e rm it ir
va rio s n ive le s d e a cce s o s a d ife re n t e s t ip o s d e in fo rm a ció n lo ca l.
Co m o lo s p e rm is o s p e rm it e n a u n a p p le t o u n a a p lica ció n s o b re e s crib ir e l p o licía d e
s e g u rid a d p o r d e fe ct o , d e b e ría m o s s e r m u y cu id a d o s o s cu a n d o a s ig n e m o s
p e rm is o s p a ra n o cre a r u n a a n t ra d a a l có d ig o m a licio s o p a ra q u e a t a q u e n u e s t ro
s is t e m a .
Es t e a p é n d ice d e s crib e lo s p e rm is o s d is p o n ib le s y e xp lica có m o ca d a p e rm is o
p u e d e cre a r u n a e n t ra d a p a ra u n a t a q u e d e có d ig o m a licio s o . Un a fo rm a d e u s a r
e s t a in fo rm a ció n e s a yu d a rn o s a lim it a r lo s p e rm is o s d a d o s a u n a p p le t o u n a
a p lica ció n a s ó lo lo s n e ce s a rio s p a ra s u e je cu ció n . Ot ra fo rm a d e u s a r e s t a
in fo rm a ció n e s p a ra a p re n d e r n o s o t ro s m is m o s la s fo rm a s e n q u e u n p e rm is i
p a rt icu la r p u e d e s e r e xp lo t a d o p o r có d ig o m a licio s o .
Co m o co n s e jo , n u n ca cre a s e n u n a p p le t o u n a a p lica ció n d e s co n o cid o s . S ie m p re
ch e q u e a e l có d ig o cu id a d o s a m e n t e co n la in fo rm a ció n d e e s t e a p é n d ice p a ra
a s e g u ra rt e d e q u e n o o fre ce s p e rm is o s a co d ig o m a licio s q u e ca u s e s e rio s
p ro b le m a s e n e l s is t e m a lo ca l.
● In t ro d u cció n

● Co n o ce r q u é Pe rm is o s
● AllPe rm is s io n
● AWTPe rm is s io n
● File Pe rm is s io n
● Ne t Pe rm is s io n
● Pro p e rt yPe rm is s io n
● Re fle ct Pe rm is s io n
● Ru n t im e Pe rm is s io n
● S e cu rit yPe rm is s io n
● S e ria liza b le Pe rm is s io n
● S o cke t Pe rm is s io n
Introducción
Lo s p e rm is o s s e le co n ce d e n a u n p ro g ra m a co n u n fich e o d e p o licía . Un fich e ro d e
p o licía co n t e in e p e rm is o s p a ra a cce s o s e s p e cífico s . Un p e rm is o co n s t a d e u n
n o m b re d e p e rm is o , u n a fu e n t e , y e n a lg u n o s ca s o s , u n a lis t a d e a ccio n e s
s e p a ra d a s p o r co m a s .
Po r e je m p lo , la s ig u ie n t e e n t ra d a d e fich e ro d e p o licía e s p e cifica u n p e rm is o
ja v a . io . File P e rm is s io n q u e co n ce d e a cce s o d e re a d ( la a cció n ) a la fu e n t e
$ { u s e r. h o m e } / t e x t 2 . t x t .

grant {
permission [Link]
"${[Link]}/[Link]", "read";
};
Ha y u n fich e ro d e p o licía d e la in s t a la ció n d e la p la t a fo rm a Ja va ( S is t e m a ) y
o p cio n a lm e n t e u n fich e ro d e p o licía p o r ca d a u s u a rio . El fich e ro d e p o licía d e l
s is t e m a e s t á e n { ja v a . h o m e } / lib / s e c u rit y / ja v a . p o lic y , y e l fich e ro d e p o licía
d e u s u a rio e s t á e n ca d a d ire ct o rio h o m e d e lo s u s u a rio s . Lo s fich e ro s d e p o licía d e
s is t e m a y d e u s u a rio s e co m b in a n . Po r e s o p o r e je m p lo , p o d ría h a b e r u n fich e ro d e
p o licía co n m u y p o co s p e rm is o s co n ce d id o s a t o d o s lo s u s u a rio s d e l s is t e m a , y u n
fich e ro d e p o licía in d ivid u a l co n ce d ie n d o p e rm is o s a d icio n a le s a cie rt o s u s u a rio s .
Pa ra e je cu t a r u n a a p lica ció n co n e l co n t ro la d o r d e s e g u rid a d y u n fich e ro d e p o licía
lla m a d o p o lfile e n e l d ire ct o rio h o m e d e l u s u a rio , t e cle a m o s :

java -[Link]
-[Link]=polfile FileIO
Pa ra e je cu t a r u n a p p le t e n e l a p lle t vie we r co n u n fich e ro d e p o licía lla m a n d o
p o lfile e n e l d ire ct o rio h o m e d e l u s u a rio , t e cle a m o s :

appletviewer
-[Link]=polfile [Link]
Cu a n d o e je cu t a m o s u n a p p le t e n u n n a ve g a d o r, e s t e b u s ca lo s fich e ro s d e p o licía
d e u s u a rio y d e l s is t e m a p a ra e n co n t ra r lo s p e rm is o s q u e n e ce s it a e l a p p le t p a ra
a cce d e r a lo s re cu rs o s d e l s is t e m a lo ca l e n re p re s e n t a ció n d e l u s u a rio q u e d e s ca rg ó
e l a p p le t .

Conocer qué Permisos


Cu a n d o e je cu t a m o s u n a p p le t o in vo ca m o s u n a a p lica ció n co n u n co n t ro la d o r d e
s e g u rid a d q u e n e ce s it a p e rm is o s , o b t e n d re m o s u n s e g u im ie n t o d e p ila s i n o h e m o s
p ro p o rcio n a d o u n fich e ro d e p o licía co n t o d o s lo s p e rm is o s n e ce s a rio s . El
s e g u im ie n t o d e p ila co n t ie n e la in fo rm a ció n q u e n e ce s it a m o s p a ra a ñ a d ir lo s
p e rm is o s a l fich e ro d e p o licía q u e ca u s ó e l s e g u im ie n t o d e p ila . S i e l p ro g ra m a
n e ce s it a p e rm is o s a d icio n a le s , s e g u ire m o s o b t e n ie n d o e l s e g u im ie n t o d e p ila h a s t a
q u e s e a ñ a d a n t o d o s lo s p e rm is o s re q u e rid o s a l fich e ro d e p o licía . El ú n ico
in co n ve n ie n t e d e e s t a a p ro xim a ció n e s q u e t e n e m o s q u e p ro b a r ca d a p o s b ie l p a t h
d e có d ig o d e n u e s t ra a p lica ció n .
Ot ra fo rm a d e d e t e rm in a r q u é p e rm is o s n e ce s it a n u e s t ro p ro g ra m a e s vis it a r
Ap é n d ice B: Mé t o d o s y Pe rm is o s . Es t e a p é n d ice n o s cu e n t a q u é m é t o d o s d e la
p la t a fo rm a Ja va 2 t ie n e n im p e d id a la e je cu ció n s in lo s p e rm is o s lis t a d o s . La
in fo rm a ció n d e l Ap é n d ice B t a m b ié n e s ú t il p a ra lo s d e s a rro lla d o re s q u e q u ie ra n
e s crib ir s u p ro p io co n t ro la d o r d e s e g u rid a d p a ra p e rs o n a liza r la s ve rifica cio n e s y
a p ro va cio n e s n e ce s a ria s e n u n p ro g ra m a .
Aq u í t e n e m o s u n p e q u e ñ o e je m p lo q u e n o s m u e s t ra co m o t ra d u cir e l p rim e r p a r d e
lín e a s d e l s e g u im ie n t o d e p ila e n u n a e n t ra d a d e l fich e ro d e p o licí. La p rim e ra lín e a
n o s d ice q u e e l a cce s o e s t á d e n e g a d o . Es t o s ig n ifica q u e e l s e g u im ie n t o d e p ila fu e
g e n e ra d o p o rq u e e l p ro g ra m a in t e n t ó a cce d e r a re cu rs o s d e l s is t e m a s in e l p e rm is o
a p ro p ia d o . La s e g u n d a lín e a s ig n ifica q u e n e ce s it a m o s u n
ja v a . n e t . S o c k e t P e rm is s io n q u e le d e p ro g ra m a p e rm is o p a ra c o n n e c t y p a ra
re s o lv e e l n o m b re d e h o s t p a ra la d ire cció n ( IP) 1 2 9 . 1 4 4 . 1 7 6 . 1 7 6 , p u e rt o 1 5 2 1 .

[Link]: access denied


([Link]
[Link]:1521 connect,resolve)
Pa ra vo lve r e s t o e n u n a e n t ra d a d e l fich e ro d e p o licía , lis t a m o s e l n o m b re d e l
p e rm is o , u n a fu e n t e , u u n a lis t a d e a ccio n e s d o n d e ja v a . n e t . S o c k e t P e rm is s io n
e s e l n o m b re d e l p e rm is o , 1 2 9 . 1 4 4 . 1 7 6 . 1 7 6 :1 5 2 1 e s la fu e n t e , y
c o n n e c t , re s o lv e e s la lis t a d e a ccio n e s :

grant {
permission [Link]
"[Link]:1521", "connect,resolve";
};

AllPermission
ja v a . s e c u rit y . AllP e rm is s io n e s p e cifica t o d o s lo s p e rm is o s e n e l s is t e m a p a ra
t o d o s lo s p o s ib le s fu e n t e s y a ccio n e s . Es t e p e rm is o s ó lo d e b e ría u s a rs e p a ra
p ru e b a s ya q u e co n ce d e p e rm is o p a ra e je cu t a r co n t o d a s la s re s t riccio n e s d e
s e g u rid a d d e s a ct iva d a s , co m o s i n o h u b ie ra co n t ro la d o r d e s e g u rid a d .

grant {
permission [Link];
};
AWTPermission
ja v a . a w t . AW TP e rm is s io n co n ce d e p e rm is o s a la s s ig u ie n t e s fu e n t e s AWT. La s
p o s ib le s fu e n t e s s e lis t a n p o r n o m b re s in lis t a d e a ccio n e s .

grant {
permission [Link]
"accessClipboard";
permission [Link]
"accessEventQueue";
permission [Link]
"showWindowWithoutWarningBanner";
};
a c c e s s Clip b o a rd : Es t a fu e n t e co n ce d e p e rm is o p a ra p o n e r in fo rm a ció n y p a ra
re cu p e ra rla d e s d e e l p o rt a p a p e le s d e l AWT. Co n ce d e r e s t e p e rm is o p u e d e p e rm it ir
a có d ig o m a licio s o q u e co m p a rt a in fo rm a cio n p o t e n cia lm e n t e s e n s ib le o
co n fid e n cia l.
a c c e s s Ev e n t Qu e u e : Es t a fu e n t e co n ce d e p e rm is o p a ra a cce d e r a la co la d e
e ve n t o s d e l AWT. Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a có d ig o m a ilicio s o q u e
o b s e rve y e lim in e e ve n t o s d e l s is t e m a , y p o n g a e ve n t o s fa ls o s q u e p o d ría n ca u s a r
q u e la a p lica ció n o e l a p p le r re a liza rá n a ccio n e s m a licio s a s .
lis t e n To AllAW TEv e n t s : Es t a fu e n t e co n ce d e p e rm is o p a ra e s cu vh a r t o d o s lo s
e ve n t o s AWT a t ra vé s d e l s is t e m a . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a có d ig o
m a licio s le a y e xp lo t e e n t ra d a s co n fid e n cia le s d e l u s u a rio co m o la s p a s s wo rd s .
Ca d a o ye n t e d e e ve n t o AWT e s lla m a d o d e s d e d e n t ro d e l co n t e xt o
Ev e n t D is p a t c h Th re a d d e la co la d e e ve n t o s , p o r e s o s i t a m b ié n e s t á a ct iva d o e l
p e rm is o a c c e s s Ev e n t Qu e u e , có d ig o m a licio s o p o d ría m o d ifica r e l co n t e n id o d e la
co la d e e ve n t o s d e l AWT a t ra vé s d e l s is t e m a , lo q u e p o d ría ca u s a r q u e e l a p p le t o
la a p lica ció n re a liza rá n a ccio n e s m a licio s a s .
re a d D is p la y P ix e ls : Es t a fu e n t e co n ce d e p e rm is o p a ra le e r p ixe ls d e s d e la
p a n t a lla . Co n d e d e r e s t e p e rm is o p o d ría p e rm it ir a in t e rfa ce s co m o
ja v a . a w t . Co m p o s it e p e rm it a n e xa m in a r lo s p ixe ls d e la p a n t a lla y fis g o n e e la s
a ct ivid a d e s d e l u s u a rio .
s h o w W in d o w W it h o u t W a rn in g Ba n n e r: Es t a fu e n e co n ce d e p e rm is o p a ra
m o s t ra r u n a ve n t a n a s in m o s t ra r e l a vis o d e q u e la ve n t a n a fu e cre a d a p o r u n
a p p le t . S in e s t e a vis o , u n a p p le t p o d ría m o s t ra r ve n t a n a s s i q u e e l u s u a rio s u p ie ra
q u e p e rt e n e ce n a l a p p le t . Es t o p o d ría s e r u n p ro b le m a e n e n t o rn o s d ó n d e e l
u s u a rio t o m a d e cis io n e s s e n s ib le s d e s e g u rid a d b á s a n d o s e e n a q u ié n p e rt e n e ce la
ve n t a n a s i a u n a p p le t o a u n a a p lica ció n . Po r e je m p lo , d e s a ct iva r e s t e a vis o p o d ría
s ig n ifica r q u e e l u s u a rio in t ro d u je t a in fo rm a ció n s e n s ile co m o e l n o m b re d e u s u a rio
y la p a s s wo rd .
FilePermission
ja v a . io . File P e rm is s io n co n ce d e p e rm is o p a ra a cce d e r a u n fich e ro o d ire ct o rio r.
La fu e n t e s co n s is t e n e n e l p a t h n a m e y u n a lis t a d e a ccio n e s s e p a ra d a s p o r co m a s .
Es t e fich e ro d e p o licía co n ce d e p e rm is o s d e le ct u ra , e s crit u ra , b o rra d o y e je cu ció n
p a ra t o d o s lo s fich e ro s .

grant {
permission [Link]
"<<ALL FILES>>", "read, write, delete, execute";
};
Es t e fich e ro d e p o licía co n ce d e p e rm is o d e le ct u ra y e s crit u ra s o b re t e x t . t x t e n e l
d ire ct o rio h o m e d e l u s u a rio .

grant {
permission [Link]
"${[Link]}/[Link]", "read, write";
};
Po d e m o s u s a r lo s s ig u ie n t e co m o d in e s p a ra e s p e cifica r a l p a t h n a m e d e la fu e n t e :
● Un p a t h n a m e q u e t e rm in e e n / * , d o n d e / * e s e l ca rá ct e r s e p a ra d o r d e
fich e ro s s ig n ifica u n d ire ct o rio y t o d o s lo s fich e ro s co n t e n id o s e n e s e
d ire ct o rio .
● Un p a t h n a m e q u e t e rm in e co n / - in d ica u n d ire ct o rio , y re cu rs iva m e n t e ,
t o d o s lo s fich e ro s y s u b d ire ct o rio s in clu id o s e n e s e d ire ct o rio
● Un p a t h n a m e q u e co n s is t a e n u n s ó lo a s t e ris co ( * ) in d ica t o d o s lo s fich e ro s
d e l d ire ct o rio a ct u a l.
● Un p a t h n a m e q u e co n s is t a e n u n s ó lo g u ió n ( - ) in d ica t o d o s lo s fich e ro s d e l
d ire ct o rio a ct u a l, y re cu rs iva m e n t e , t o d o s lo s fich e ro s y s u b d ire ct o rio s
co n t e n id o s e n e l d ire ct o rio a ct u a l.
La s a ccio n e s s o n e s p e cifica d a s e n u n a lis t a d e p a la b ra s cla ve s e p a ra d a s p o r co m a s
q u e t ie n e n e l s ig u ie n t e s ig n ifica d o :
● re a d : Pe rm is o p a ra le e r u n fich e ro o d ire ct o rio .

● writ e : Pe rm is o p a ra e s crib ir o cre a r u n fich e ro o d ire ct o rio .

● e xe cu t e : Pe rm is o p a ra e je cu t a r o fich e o o b u s ca r u n d ire ct o rio .

● d e le t e : Pe rm is o p a ra b o rra r u n fich e ro o d ire ct o rio .

Cu a n d o co n ce d a m o s p e rm is o s d e fich e ro s , s ie m p re d e b e m o s p e n s a r e n la s
im p lica cio n e s d e co n ce d e r p e rm is o s d e le ct u ra y e s p e cia lm e n t e d e e s crit u ra a
va rio s fich e ro s y d ire ct o rio s . El p e rm is o < < ALL FI LES > > co n a cció n d e e s crit u ra
e s e s p e cia lm e n t e p e lig ro s o p o rq u e co n ce d e p e rm is o p a ra e s crib ir e n t o d o e l
s is t e m a d e fich e ro s . Es t o s ig n ifica q u e e l s is t e m a b in a rio p u e d e s e r re e m p la za d o , lo
q u e in clu ye e l e n t o rn o d e e je cu ció n d e la m á q u in a virt u a l Ja va .
NetPermission
ja v a . n e t . N e t P e rm is s io n co n ce d e p e rm is o s a va ria s fu e n t e s d e re d . La s p o s ib le
fu e n t e s s e lis t a n p o r e l n o m b re s in lis t a d e a ccio n e s .

grant {
permission [Link]
"setDefaultAuthenticator";
permission [Link]
"requestPasswordAuthentication";
};
s e t D e fa u lt Au t h e n t ic a t o r: Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r la fo rm a
e n q u e in fo rm a ció n d e a u t e n t ifica ció n e s re cu p e ra d cu a n d o u n p ro xy o u n s e rvid o r
HTTP p id e n a u t e n t ifica ció n . Co n ce d e re s t e p e rm is o p o d ría s ig n ifica r q u e có d ig o
m a ilicio s o p u e d e s e le ccin a r u n a u t e n t ifica d o r q u e m o n it o rice y ro b e la e n t ra d a d e
a u t e n t ifica ció n d e l u s u a rio co m o s i re cu p e ra r la in fo rm a ció n d e s d e e l u s u a rio .
re q u e s t P a s s w o rd Au t h e n t ic a t io n : Es t a fu e n t e co n ce d e p e rm is o p a ra p e d ir a l
a u t e n t ifica d o r re g is t ra d o co n e l s is t e m a u n a p a s s wo rd . Co n ce d e r e s t e p e rm is o
p o d ría s ig n ifica r q u e có d ig o p re cia d o p o d ría ro b a r la p a s s wo rd .
s p e c ify S t re a m Ha n d le r: Es t a fu e n t e co n ce d e p e rm is o p a ra e s p e cifica r u n
m a n e ja d o r d e s t ra m cu a n d o s e co n s t ru ye u n a URL. Co n ce d e r e s t e p e rm is o p o d ría
s ig n ifica r q u e có d ig o m a licio s o p o d ría cre a r u n a URLK co n re cu rs o s a lo s q u e
n o rm a lm e n t e n o t e n d ría a cce s o , o e s p e cifica r u n co n t ro la d o r d e s t re a m p a ra
o b t e n e r lo s b yt e s re a le s d e s d e a lg u n re a l a l q u e t e n g a a cce s o . Es t o s ig n ifica q u e e l
có d ig o m a licio s p o d ría e m b a u ca r a l s is t e m a p a ra cre a r u n a cla s e
Pro t e ct io n Do m a in / Co d e S o u rce in clu s o a u n q u e la cla s e re a lm e n t e n o ve n g a d e e s a
lo ca liza ció n .

PropertyPermission
ja v a . u t il. P ro p e rt y P e rm is s io n co n ce d e a cce s o a la s p ro p ie d a d e s d e l s is t e m a . La
cla s e ja v a . u t il. P ro p e rt ie s re p re s e t n a s e le ccio n e s p e rs is t e n t e s co m o la lo ca liza ció n
d e l d ire ct o rio d e in s t a la ció n , e l n o m b re d e u s u a rio o e l d ire ct o rio h o m e d e l u s u a rio .

grant {
permission [Link]
"[Link]", "read";
permission [Link]
"[Link]", "write";
permission [Link]
"[Link]", "read, write";
};
La lis t a d e fu e n t e s co n t ie n e e l n o m b re d e la p ro p ie d a d , p o r e je m p lo , ja v a . h o m e o
o s . n a m e . La co n ve n ció n d e n o m b re s p a ra p ro p ie d a d e s s ig u e la co n ve n ció n d e
n o m b re s h e re d it a rio s , e in clu ye co m o d in e s . Un a s t e ris co a l fin a l d e l n o m b re d e
p ro p ie d a d , d e s p u é s d e u n p u n t o ( . ) , o e n s o lit a rio , s ig n ifica u n co m o d in . Po r
e je m p lo , ja v a . * o * s o n vá lid o s , p e ro * ja v a o a * b n o lo s o n .
La s a ccio n e s s e e s p e cifica n e n u n a lis t ra d e p a la b ra s cla ve s s e p a ra d a s p o r co m a s ,
q u e t ie n e n e s t e s ig n ifica d o :
● re a d : Pe rm is o p a ra le e r ( o b t e n e r) u n a p ro p ie d a d .

● writ e : Pe rm is o p a ra e s crib ir ( s e le ccio n a r) u n a p ro p ie d a d .

Co n ce d e r p e rm is o s a p ro p ie d a d e s p u e d e d e ja r n u e s t ro s is t e m a a b ie rt o a la
in t ru s ió n . Po r e je m p lo , co n ce d e r p e rm is o p a ra a cce d e r a la p ro p ie d a d ja v a . h o m e
h a ce vu ln e ra b le a a t a q u e s e l d ire ct o rio d e la in s t a la ció n , y co n ce d e r p e rm is o d e
a cce s o a la s p ro p ie d a d e s u s e r. n a m e y u s e r. h o m e p o d ría re ve la r e l n o m b re d e
cu e n t a d e l u s u a rio y e l d ire ct o rio h o m e .

ReflectPermission
ja v a . la n g . re fle c t . Re fle c t P e rm is s io n co n ce d e p e rm is o p a ra va ria s o p e ra cio n e s
re fle ct iva s . La s p o s ib le s fu e n t e s s e lis t a n p o r e l n o m b re s in lis t a d e a ccio n e s .

grant {
permission [Link]
"suppressAccessChecks";
};
s u p p re s s Ac c e s s Ch e c k s : Es t a fu e n t e co n ce d e p e rm is o p a ra a cce d e r a lo s ca m p o s
e in vo ca r m é t o d o s d e u n a cla s e . Es t o in clu ye ca m p o s y m é t o d o s p ú b lico s ,
p ro t e g id o s y p riva d o s . Co n ce d e r e s t e p e rm is o p id ría re ve la r in fo rm a ció n
co n fid e n cia l y p o n e r m é t o d o s im p o rt a n t e s a l a lca n ce d e l có d ig o m a licio s o .

RuntimePermission
ja v a . la n g . Ru n t im e P e rm is s io n co n ce d e p e rm is o a va ria s fu e n t e s d e l e n t o rn o d e
e je cu ció n , co m o e l ca rg a d o r d e cla s e s , la m á q u in a virt u a l Ja va y lo s t h re a d s . La s
p o s ib le s fu e n t e s s e lis t a n p o r e l n o m b re s in lis t a d e a ccio n e s .

grant {
permission [Link]
"createClassLoader";
permission [Link]
"getClassLoader";
permission [Link]
"exitVM";
permission [Link]
"setFactory";
permission [Link]
"setIO";
permission [Link]
"modifyThread";
permission [Link]
"modifyThreadGroup";
permission [Link]
"getProtectionDomain";
permission [Link]
"setProtectionDomain";
permission [Link]
"readFileDescriptor";
permission [Link]
"writeFileDescriptor";
permission [Link]
"loadLibrary.<library name>";
permission [Link]
"accessClassInPackage.<package name>";
permission [Link]
"defineClassInPackage.<package name>";
permission [Link]
"accessDeclaredMembers.<class name>";
permission [Link]
"queuePrintJob";
};
La s co n ve n cio n e s d e n o m b ra d o p a ra la fu e n t e s ig u e la co n ve n ció n d e n o m b re s
h e re d it a rio s , e in clu ye co m o d in e s . Un a s t e ris co a l fin a l d e l n o m b re d e p ro p ie d a d ,
d e s p u é s d e u n p u n t o ( . ) , o e n s o lit a rio , s ig n ifica u n co m o d in . Po r e je m p lo ,
lo a d Lib ra ry . * o * s o n vá lid o s , p e ro * lo a d Lib ra ry o a * b n o lo s o n .
c re a t e Cla s s Lo a d e r: Es t a fu e n t e co n ce d e p e rm is o p a ra cre a r u n ca rg a d o r d e
cla s e s . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a u n a a p lica ció n m a licio s a q u e
e je m p la rize s u p ro p io ca rg a d o r d e cla s e s y ca rg e cla s e s p e lig ro s a s e n e l s is t e m a .
Un a ve z ca rg a d o , e l ca rg a d o r d e cla s e s p o d ría s it u a r e s a s cla s e s b a jo cu a lq u ie r
d o m in io p ro e g id o d á n d o le s t o t a l co n t ro l s o b re e s e d o m in io .
g e t Cla s s Lo a d e r: Es t a fu e n e co n ce d e p e rm is o p a ra re cu p e ra r e l ca rg a d o r d e
cla s e s p a ra la cla s e lla m a n t e . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir q u e có d ig o
m a licio s o o b t u vie re e l ca rg a d o r d e cla s e s p a ra u n a cla s e p a rt icu la r y ca rg a r cla s e s
a d icio n a le s .
s e t Co n t e x t Cla s s Lo a d e r: Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r e l
co n t e xt o d e l ca rg a d o r d e cla s e s u s a d o p o r u n t h re a d . El có d ig o d e l s is t e m a y la s
e xt e n s io n e s u s a n e s t e co n t e xt o p a ra b u s ca r re cu rs o s q u e p o d ría n n o e xis t ir e n e l
ca rg a d o r d e cla s e s d e l s is t e m a . Co n ce d e r e s t e p e rm is o p e rm it e ca m b ia r e l co n t e xt o
d e l ca rg a d o r d e cla s e s u s a d o p a ra u n t h re a d p a rt icu la r, in clu ye n d o lo s t h re a d s d e l
s is t e m a . Es t o p o d ría ca u s a r p ro b le m a s s i e l co n t e xt o d e l ca rg a d o r d e cla s e s t ie n e
có d ig o m a licio s o .
s e t S e c u rit y Ma n a g e r: Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r o re e m p la za r
e l co n t ro la d o r d e s e g u rid a d . El co n t ro la d o r d e s e g u rid a d e s u n a cla s e q u e p e rm it e a
la a p lica cio n e s im p le m e n t a r u n p o licía d e s e g u rid a d . Co n ce d e r e s t e p e rm is o p o d ría
p e rm it ir a l có d ig o m a ilicio s o in s t a la r u n co n t ro la d o r m e n o s re s t rict ivo , y p o r lo
t a n t o , e vit a r lo s ch e q u e o s a lo s q u e s e fo rza d o e l co n t ro la d o r d e s e g u rid a d o rig in a l.
c re a t e S e c u rit y Ma n a g e r: Es t a fu e n t e co n ce d e p e rm is o p a ra cre a r u n n u e vo
co n t ro la d o r d e s e g u rid a d . Co n ce d e r e s t e p e rm is o p o d ría d a rle a l có d ig o m a licio s o
a cce s o a m é t o d o p ro t e g id o s q ie p o d ría n re ve la r in fo rm a ció n s o b re o t ra s cla s e s o la
p ila d e e je cu ció n .
e x it VM: Es t a fu e n t e co n ce d e p e rm is o p a ra p a ra r la m á q u in a virt u a l Ja va .
Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir q u e có d ig o m a licio s o a m o n t a r u n a t a q u e d e
d e n e g a ció n d e s e rvicio fo rza n d o a u t o m á t ica m e n t e a q u e s e p a re la JVM.
s e t Fa c t o ry : Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio a n r u n a fá b rica d e s o cke t
u s a d a p o r la s cla s e s S e rv e rS o c k e t o S o c k e t , o la fá b rica d e m a n e ja d o re s d e
s t re a m s u s a d a p o r la cla s e URL. Co n ce d e r e s t e p e rm is o p e rm it e a l có d ig o
s e le ccio n a r la im p le m e n t a ció n a ct u a l p a ra la fa ct o ría d e s o cke t , s e rve r s o cke t ,
s t re a m h a n d le r, o Re m o t e Me t h o d In vo ca t io n ( RMI) . Un a t a ca n t e p o d ría
s e le ccio n a r u n a im p le m e n t a ció n q u e m a n e ja ra lo s s t re a m s d e d a t o s .
s e t I O: Es t a fu e n t e co n ce d e p e rm is o p a ra ca m b ia r lo s va lo re s d e lo s s t re a m s
S y s t e m . o u t , S y s t e m . in , S y s t e m . e rr. Co n ce d e r e s t e p e rm is o p o d ría p e m rit ir a u n
a t a n ca n t e ca m b ia r e l S y s t e m . in p a ra ro b a r la e n t ra d a d e l u s u a rio , o s e le ccio n a r
S y s t e m . e rr a u n s t re a m d e s a lid a n u ll, lo q u e p o d ría o cu lt a r cu a lq u ie r e rro r
e n via d o a S y s t e m . e rr.
m o d ify Th re a d : Es t a fu e n t e co n ce d e p e rm is o p a ra m o d ica r lo s t h re a d s m e d ia n t e
lla m a d a s a lo s m é t o d o s s t o p , s u s p e n d , re s u m e , s e t P rio rit y , y s e t N a m e d e la
cla s e Th re a d . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a u n a t a n ca n t e a rra n ca r o
s u s p e n d e r cu a lq u ie r t re a d e e l s is t e m a .
s t o p Th re a d : Es t a fu e n t e co n ce d e p e rm is o p a ra p a ra r t h re a d s . Co n ce d e r e s t e
p e rm is o s p e rm t ie a l có d ig o q u e p a re cu a lq u ie r t h re a d e n e l s is t e m a p ro p o rcio n a n d o
e l có d ig o q u e ya t ie n e p e rm is o p a ra a cce d e r a e s e t h re a d , EL có d ig o m a licio s o
p o d ría co rro m p e r e l s is t e m a e lim in a d o t h re a d s e xis t e n t e s .
m o d ify Th re a d Gro u p : Es t a fu e n t e co n ce d e p e rm is o p a ra m o d ifica r t h re a d s
m e d ia n t e lla m a d a s a lo s m é t o d o s d e s t ro y , re s u m e , s e t D a e m o n ,
s e t m a x P rio rit y , s t o p , y s u s p e n d d e la cla s e Th re a d Gro u p . Co n ce d e r e s t e
p e rm is o p o d ría p e rm it ir a l a t a n ca n t e q u e cre e u n g ru p o d e t h re a d a s y s e le ccio n a r
s u p rio rid a d d e e je cu ció n .
g e t P ro t e c t io n D o m a in Es t a fu e n t e co n ce d e p e rm is o p a ra re cu p e ra r e l e je m p la r
P ro t e c t io n D o m a in p a ra u n a cla s e . Co n ce d e r e s t e p e rm is o p e m it e a l có d ig o
o b t e n e r in fo rm a ció n d e p o licía p a ra e s e có d ig o fu e n t e . Mie n t ra s q u e la o b t e n ció n
d e la in fo rm a ció n d e p o licía n o co m p ro m e t e la s e g u rid a d d e l s is t e m a , s i q u e le
o fre ce in fo rm a ció n a d icio n a l a l a t a ca n t e co m o lo s n o m b re s d e fich e ro s lo ca le s , p o r
e je m p lo .
re a d File D e s c rip t o r: Es t a fu e n t e co n ce d e p e rm is o p a ra le e r d e s crip t o re s d e
fich e ro s . Co n ce d e r e s t e p e rm is o p e rm it e a l có d ig o le e r e l fich e ro p a rt icu la r
a s o cia d o co n e l d e s crip t o r d e fich e ro , q u e e s p e lig ro s o s i e l fich e ro co n t ie n e d a t o s
co n fid e n cia le s .
w rit e File D e s c rip t o r: Es t a fu e n t e co n ce d e p e rm is o p a ra e s crib ir d e s crip t o re s d e
fich e ro s . Co n ce d e r e s t e p e rm is o p e rm it e a l có d ig o e s crib ir e l fich e ro a s o cia d o co n
e l d e s crip t o r d e fich e ro , lo q u e e s p e lig ro s o s i e l d e s crip t o r a p u n t a a u n fich e ro
lo ca l.
lo a d Lib ra ry . { lib ra ry n a m e } : Es t e fich e ro co n ce d e p e rm is o p a ra e n la za r
d in á m ica m e n t e la lib re ría e s p e cifica d a . Co n ce d e r e s t e p e rm is o p o d ría s e r p e lig ro s o
p o rq u e la a rq u it e ct u ra d e s e g u rid a d n o e s t á d is e ñ a d a y n o s e e xt ie n d e p a ra la s
cla s e s n a t iva s ca rg a d a s m e d ia n t e e l m é t o d o ja v a . la n g . S y s t e m . lo a d Lib ra ry .
a c c e s s Cla s s I n P a c k a g e . { p a c k a g e n a m e } Es t a fu e n t e co n ce d e p e rm is o p a ra
a cce d e r a l p a q u e t e e s p e cifica d o m e d ia n t e e l m é t o d o lo a d Cla s s d e l ca rg a d o r d e la
cla s e cu a n d o e l ca rg a d o r d e la cla s e lla m a a l m é t o d o
S e c u rit y Ma n a g e r. c h e c k P a c k a g e Ac e s s s . Co n ce d e r e s t e p e rm is o le d a a l có d ig o
a cce s o a la s cla s e s d e p a q u e t e s a lo s q u e n o rm a lm e n t e n o t ie n e a cce s o . El có d ig o
m a ilicio s o p o d ría u s a r e s t a s cla s e s p a ra a yu d a rs e e n s u in t e n t o d e co m p ro m e t e r la
s e g u rid a d d e l s is t e m a .
d e fin e Cla s s I n P a c k a g e . { p a c k a g e n a m e } : Es t a fu e n t e co n ce d e p e rm is o p a ra
d e fin ir la s cla s e s d e l p a q u e t e e s p e cifica d o m e d ia n t e u n m é t o d o d e fin e Cla s s d e l
ca rg a d o r d e cla s e s cu a n d o e l ca rg a d o r lla m a a l m é t o d o
S e c u rit y Ma n a g e r. c h e c k P a c k a g e D e fin it io n . Co n ce d e r e s t e p e rm is o p e rm it e a l
có d ig o d e fin ir u n a cla s e e n u n p a q u e t e p a rt icu la r, lo q u e p o d ría s e r p e lig ro s o
p o rq u e e l có d ig o m a licio s o co n e s t e p e rm is o p o d ría d e fin ir cla s e s p e lig ro s a s e n
p a q u e t e s ve rd a d e ro s co m o ja v a . s e c u rit y o ja v a . la n g , p o r e je m p lo .
a c c e s s D e c la re d Me m b e rs : Es t a fu e n t e co n ce d e p e rm is o p a ra a cce d e r a m ie m b ro s
d e cla ra d o s d e u n a cla s e . Co n ce d e r e s t e p e rm is o p e rm it e a l có d ig o s o licit a r u n a
cla s e p o r s u s ca m p o s y m é t o d o s p ú b lico s , p ro t e g id o s , p o r d e fe ct o ( p a q u e t e ) y
p riva d o s . Au n q u e e l có d ig o p o d ría t e n e r a cce s o a lo s n o m b re s d e lo s ca m p o s y
m é t o d o s p riva d o s y p ro t e g id o s , n o p o d rá a cce d e r a s u s d a t o s y n o p o d rá in vo ca r
n in g ú n m é t o d o p riva d o . A p e s a r d e e s t o , e l có d ig o m a licio s o p o d ría u s a r e s t a
in fo rm a ció n p a ra m e jo ra r s u a t a q u e . Ad e m á s , e l có d ig o m a licio s p o d ría in vo ca r
m é t o d o s p ú b lico s o a cce d e r a ca m p o s p ú b lico s d e la cla s e , lo q u e p o d ría s e r
p e lig ro s o .
q u e u e P rin t Jo b : Es t a fu e n t e co n ce d e p e rm is o p a ra in icia liza r u n a p e t ició n d e
t ra b a jo d e im p re s ió n . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a l có d ig o q e im p rim a
in fo rm a ció n s e n s ib le e n u n a im p re s o ra o q u e g a s t e p a p e l m a licio s a m e n t e .

SecurityPermission
ja v a . s e c u rit y . S e c u rit y P e rm is s io n co n ce d e r p e rm is o h a va rio s p a rá m e t ro s d e
co n fig u ra ció n d e s e g u rid a d . La s fu e n t e s p o s ib le s s e lis t a n p o r e l n o m b re s in lis t a d e
a ccio n e s . Lo s p e rm is o s d e s e g u rid a d a ct u a lm e n t e s e a p lica n a m é t o d o lla m a d o s
s o b re lo s s ig u ie n t e s o b je t o s :
● ja v a . s e c u rit y . P o lic y , q u e re p re s e n t a la p o licía d e s e g u rid a d d e l s is t e m a p a ra
a p lica cio n e s .
● ja v a . s e c u rit y . S e c u rit y , q u e ce n t ra liza t o d a s la s p ro p ie d a d e s d e s e g u rid a d y
m é t o d o s co m u n e s . Ma n e ja p ro ve e d o re s .
● ja v a . s e c u rit y . P ro v id e r, q u e re p e s e n t a u n a im p le m e n t a ció n d e co s a s co m o
a lg o rit m o s d e s e g u rid a d ( DS A, RS A, MD5 , o r S HA- 1 ) y g e n e ra ció n d e cla ve s .
● ja v a . s e c u rit y . S ig n e r, q u e m a n e ja cla ve s p riva d a s . Au n q u e , S ig n e r e s t á
o b s o le t o , lo s p e rm is o s re la cio n a d o s e s t á n d is p o n ib le s p o r ra zo n e s d e
co m p a t ib ilid a d .
● ja v a . s e c u rit y . I d e n t it y , q u e m a n e ja o b je t o s d e l m u n d o re a l co m o s o n
p e rs o n a s , co m p a ñ ia s , y o rg a n iza cio n e s , cu ya s id e n t id a d e s p u e d e n s e r
a u t e n t ifica d a s u s a n d o s u s cla ve s p ú b lica s .

grant {
permission [Link]
"getPolicy";
permission [Link]
"setPolicy";
permission [Link]
"[Link]";
permission [Link]
"[Link]";
permission [Link]
"[Link]";
permission [Link]
"[Link]";
permission [Link]
"setSystemScope";
permission [Link]
"setIdentityPublicKey";
permission [Link]
"setIdentityInfo";
permission [Link]
"addIdentityCertificate";
permission [Link]
"removeIdentityCertificate";
permission [Link]
"[Link]";
permission [Link]
"putProviderProperty.<provider name>";
permission [Link]
"[Link]";
permission [Link]
"getSignerPrivateKey";
permission [Link]
"setSignerKeyPair";
};
g e t P o lic y : Es t a fu e n t e co n ce d e p e rm is o p a ra re cu p e ra r e l p o licía d e s e g u rid a d d e l
s is t e m a . Co n ce d e r e s t e p p e rm is o re ve la q u é p e rm is is s e b e ría n co n ce d e rs e a u n a
a p lica ció n o u n a p p le t d a d o s . Mie n t ra s q u e la re ve la ció n d e l p o licía n o co m p ro m e t e
la s e g u rid a d d e l s is t e m a , p ro p o rcio n a a l có d ig o m a licio s in fo rm a ció n a d icio n a l q u e
p o d ría u s a r p a ra u n m e jo r a t a q u e .
s e t P o lic y : Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r e l p o licía d e s e g u rid a d
d e l s is t e m a . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a l có d ig o m a licio s o q u e s e
co n ce d a a s í m is m o t o d o s lo s p e rm is o p a ra m o n t a r u n a t a q u e a l s is t e m a .
g e t P ro p e rt y . { k e y } : Es t a fu e n t e co n ce d e p e rm is o p a ra re cu p e ra r la p ro p ie d a d d e
s e g u rid a d e s p e cifica d a m e d ia n t e { k e y } . De p e n d ie n d o d e la cla ve p a rt icu la r p a ra e l
q u e s e co n ce d e e l a cce s o , e l có d ig o p o d ría t e n e r a cce d o a u n a lis t a d e p ro ve e d o re s
d e s e g u rid a d y la lo ca liza ció n d e la s p o licía s d e s e g u rid a d d e l s is t e m a y d e u s u a rio .
Mie n t ra s q u e la re ve la ció n d e e s t a in fo rm a ció n n o co m p ro m e t e la s e g u rid a d d e l
s is t e m a , s i p ro p o rcio n a in fo rm a ció n a d icio n a l q u e p o d ría u s a r p a ra u n m e jo r
a ta que .
s e t P ro p e rt y . { k e y } : Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r la p ro p ie d a d
d e s e g u rid a d e s p e cifica d a p o r { k e y } . Es t o p o d ría in clu ir la s e le cció n d e u n
p ro ve e d o r d e s e g u rid a d o d e fin ir la lo ca liza ció n d e l p o licía d e s e g u rid a d d e l
s is t e m a . El có d ig o m a licio s o p o d ría u s a r u n p ro ve e d o r m a lig n o q u e ro b a rá
in fo rm a ció n co n fid e n cia l co m o la s cla ve s p riva d a s . Ad e m á s , e l có d ig o m a licio s o
p o d ría s e le ccio n a r co n lo s p e rm is o s s e le ccio n a r la lo ca liza ció n d e l p o licía d e
s e g u rid a d d e l s is t e m a q u e p o d ría a p u n t a r a u n p o licía d e s e g u rid a d q u e co n ce d a a l
a t a n ca n t e t o d o s lo s p e rm is o s n e ce s a rio s q u e re q u ie ra p a ra m o n t a r e l a t a q u e a l
s is t e m a .
in s e rt P ro v id e r. { p ro v id e r n a m e } : Es t a fu e n t e co n ce d e p e rm is o p a ra a ñ a d ir u n
n u e vo p ro ve e d o r d e s e g u rid a d e s p e cifica d o p o r { p ro v id e r n a m e } . Co n ce d e r e s t e
p e rm is o p e rm it e la in t ro d u cció n u n p ro ve e d o r p o s ib le m e n t e m a licio s o q u e p o d ría
d e s u b rir co s a s co m o la s cla ve s p ro va d a s q u e s e le s p a s a . Es t o e s p o s ib le p o rq u e e l
o b je t o S e c u rit y , q u e m a n e ja t o d o s lo s p ro ve e d o re s in s t a la d o re , n o ch e q u e
re a lm e n t e la in t e g rid a d o la a u t e n t icid a d d e u n p ro ve e d o r a n t e s d e a d ju n t a rlo .
re m o v e P ro v id e r. { p ro v id e r n a m e } : Es t a fu e n t e co n ce d e p e rm is o p a ra e lim in a r
u n p ro ve e d o r d e s e g u rid a d e s p e cifica d o p o r { p ro v id e r n a m e } . Co n ce d e r e s t e
p e rm is o p o d ría ca m b ia r e l co m p o rt a m ie t n o o d e s a ct iva r la e je cu ció n d e p a rt e s d e l
p ro g ra m a . S i u n p ro ve e d o r s o licit a d o p o r e l p ro g ra m a h a s id o e lim in a d o , la
e je cu ció n p o d ría fa lla r.
s e t S y s t e m S c o p e : Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r e l á m b it o d e
id e n t id a d d e l s is t e m a . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir a l a t a ca n t e co n fig u ra r
e l á m b it o d e s e g u rid a d d e l s is t e m a co n ce rt ifica d o s q u e n o d e b e ría n s e r cre id o s .
Es t o p o d ría co n ce d e r a l có d ig o firm a d o cu yo s p rivile g io s ce rt ifica d o s p o d ría n s e r
d e n e g a d o s p o r e l á m b it o d e id e n t id a d o rig in a l.
s e t I d e n t it y P u b lic Ke y : Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r la cla ve
p ú b lica d e u n o b je t o I d e n t it y . S i la id e n t id a d s e m a rca co m o t ru s t e d , p e rm it e a l
a t a ca n t e in t ro d u cir s u p ro p ia cla ve p ú b lica q u e n o e s ve rd a d e ra m e d ia n t e e l á m b it o
d e id e n t id a d d e l s is t e m a . Es t o p o d ría co n ce d e r a l có d ig o firm a d o p rivile g io s d e
cla ve p ú b lica q u e d e o t ra fo rm a s e ría n d e n e g a d o s .
S e t I d e n t it y I n fo : Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r u n s t rin g d e
in fo rm a ció n g e n e ra l p a ra u n o b je t o I d e n t it y . Co n ce d e r e s t e p e rm is o p e rm it e a l
a t a n ca t e s e le ccio n a r u n a d e s crip ció n g e n e ra l p a ra u n a id e n t id a d . Ha cié n d o lo
p o d ría m o s e m b a u ca r a la s a p lica cio n e s a u s a r u n a id e n t id a d d ife re n t e q u e e vit e a
la s a p lica cio e n s e n co n t ra r u n a id e n t id a s p a rt icu la r.
a d d I d e n t it y Ce rt ific a t e : Es t a fu e n t e co n ce d e p e rm is o p a ra a ñ a d ir u n ce rt ifica d o
p a ra u n o b je t o I d e n t it y . Co n ce d e r e s t e p e rm is o p e rm it e a lo s a t a ca n t e s
s e le ccio n a r u n ce rt ifica d o p a ra u n a cla ve p ú b lica d e id e n t id a d h a cie n d o q u e la cla ve
p ú b lica s e a ve rd a d e ra a u n a a u d ie n cia m a yo r d e la o rig in a l.
re m o v e I d e n t it y Ce rt ific a t e : Es t a fu e n t e co n ce d e p e rm is o p a ra e lim in a r u n
ce rt ifica d o d e u n o b je t o I d e n t it y . Co n ce d e r e s t e p e rm is o p e rm it e a l a t a ca n t e
e lim in a r u n ce rt ifica d o p a ra la cla ve p ú b lica d e u n a id e n t id a d . Es t o p o d ría s e r
p e lig ro s o p o rq u e u n a cla ve p ú b lica p o d ría s e r co n s id e ra d a co m o m e n o s ve rd a d e ra
d e lo q u e p o d ría s e r.
p rin t I d e n t it y : Es t a fu e n t e co n ce d e p e rm is o p a ra im p rim ir e l n o m b re d e u n
p rin icp a l e l á m b it o e n q u e s e u s a e l p rin cip a l, y cu a n d o e l p rin cip a l e s co n s id e ra d o
co m o v e rd a d e ro e n e s t e á m b it o . El á m b it o im p re s o p o d ría s e r u n n o m b re d e
fich e ro , e n cu yo ca s o p o d ría ro b a r in fo rm a ció n d e l s is t e m a lo ca l. Po r e je m p lo , a q u í
h a y u n e je m p lo d e im p re s ió n d e u n n o m b re d e id e n t id a d ca ro l, q u e e s t á m a rca d o
co m o ve rd a d e ro e n la b a s e d e d a t o s d e id e n t id a d d e l u s a rio :

carol[/home/luehe/[Link]][not trusted].
c le a rP ro v id e rP ro p e rt ie s . { p ro v id e r n a m e } Es t a fu e n t e co n ce d e p e rm is o p a ra
b o rra r u n o b je t o P ro v id e r p a ra q u e n o co n t e n g a m á s p ro p ie d a d e s u s a d a s p a ra
b u s ca r s e rvicio s im p le m e n t a d o s p o r e l p ro ve e d o r. Co n ce d e r e s t e p e rm is o d e s a ct iva
lo s s e rvicio s d e b ú s q u e d a im p le m e n t a d o s p o r e l p ro ve e d o r. Es t o p o d ría ca m b ia r e l
co m p o rt a m ie n t o o d e s a ct iva r la e je cu ció n d e o t ra s p a rt e s d e l p ro g ra m a q u e
n o rm a lm e n t e u t ilia rá e l Pro vid e r, co m o s e d e s crib e b a jo e l p e rm is o
re m o v e P ro v id e r. { p ro v id e r n a m e } d e a rrib a .
p u t P ro v id e rP ro p e rt y . { p ro v id e r n a m e } : Es t a fu e n t e co n ce d e p e rm is o p a ra
s e le ccio n a r p ro p ie d a d e s d e l p ro ve e d o r s e le ccio n a d o . Ca d a p ro p ie d a d d e l p ro ve e d o r
e s p e cifica e l n o m b re y la lo ca liza ció n d e u n s e rvicio p a rt icu la r im p le m e n t a d o p o r e l
p ro ve e d o r. Co n ce d e r e s t e p e rm is o p e rm it e a l có d ig o re e m p la za r la e s p e cifica ció n
d e s e rvicio co n o t ro co n u n a d ife re n t e im p le m e n t a ció n y p o d ría s e r p e lig ro s o s i la
n u e va im p le m e n t a ció n t ie n e có d ig o m a licio s o .
re m o v e P ro v id e rP ro p e rt y . { p ro v id e r n a m e } : Es t a fu e n t e co n ce d e p e rm is o p a ra
e lim in a r p ro p ie d a d e s d e l p ro ve e d o r e s p e cifica d o . Co n ce d e r e s t e p e rm is o d e s a ct iva
la b ú s q u e d a d e s e rvicio s im p le m e n t a d a p o r e l p ro ve e d o r h a cié n d o la in a cce s ib le .
Co n ce d e r e s t e p e rm is o a có d ig o m a licio s o p o d ría p e rm it irle ca m b ia r e l
co m p o rt a m ie n t o o d e s a ct iva r la e je cu ció n d e o t ra s p a rt e s d e l p ro g ra m a q u e
n o rm a lm e n t e p o d ría n u t iliza r e l o b je t o P ro v id e r, co m o s e d e s crib e e l p e rm is o b a jo
re m o v e P ro v id e r. { p ro v id e r n a m e } .
g e t S ig n e rP riv a t e Ke y : Es t a fu e n t e co n ce d e p e rm is o p a ra re cu p e ra r la cla ve
p riva d a d e u n o b je t o S ig n e r. La s ca lve s p riva d a s d e b e ría n s e r s ie m p re s e cre t a s .
Co n ce d e r e s t e p e rm is o p o d ría p e rm t ir a có d ig o m a licio s o u t iliza r la cla ve p riva d a
p a ra firm a r fich e ro s y re cla m a r q u e la firm a ve n g a d e l o b je t o S ig n e r.
s e t S ig n e rKe y P a ir: Es t a fu e n t e co n ce d e p e rm is o p a ra s e le ccio n a r la p a re ja d e
cla ve s p ú b lica y p riva d a p a ra u n o b je t o S ig n e r. Co n ce d e r e s t e p e m ris o p o d ría
p e rm it ir a l a t a ca n t e re e m p la za r la p a re ja d e cla ve s co n u n a p o s ib le y p e q u e ñ a
p a re ja d e cla ve s . Es t o t a m b ié n p o d ría p e rm it ir a u n a t a ca n t e e s cu ch a r u n a
co m u n ica ció n e n crip t a d a e n t re la fu e n t e y s u s p a re s . Lo s p a re s d e la fu e n t e
p o d ría n e n vo lve r la s e s ió n d e e n crip t a ció n b a jo la cla ve p ú b lica n e w , q u e p o d ría e l
a t a ca n t e ( q u e p o s e e la cla ve p riva d a co rre s p o n d ie n t e ) p a ra d e s e m p a q u e t a r la
cla ve d e s e s ió n y d e s e n crip t a r la co m u n ica ció n .

SerializablePermission
ja v a . io . S e ria liz a b le P e rm is s io n co n ce d e a cce s o a o p e ra cio n e s d e s e ria liza ció n .
La fu e n t e s p o s ib le s s e lis t a n p o r e l n o m b re y n o h a y lis t a d e a ccio n e s .

grant {
permission [Link]
"enableSubclassImplementation";
permission [Link]
"enableSubstitution";
};
e n a b le S u b c la s s I m p le m e n t a t io n : Es t a fu e n t e co n ce d e p e rm is o p a ra
im p le m e n t a r u n a s u b cla s e d e Ob je c t Ou t p u t S t re a m o Ob je c t I n p u t S t re a m p a ra
s o b re e s crib ir la s e ria liza ció n o d e s e ria liza ció n p o r d e fe ct o d e o b je t o s . Co n ce d e r
e s t e p e rm is o p o d ría p e rm it ir a l có d ig o u s a r e s t o p a ra s e ria liza r o d e s e ria liza r cla s e s
d e u n a fo rm a m a licio s a . Po r e je m p lo , d u ra n t e la s e ria liza ció n , e l có d ig o m a licio s o
p o d ría a lm a ce n a r ca m p o s p riva d o s co n fid e n cia le s d e u n a fo rm a fá cilm e n t e
a cce s ib le p a ra lo s a t a ca n t e s ; o d u ra n t e la d e s e ria liza ció n e l có d ig o m a licio s o p o d ría
d e s e ria liza r u n a cla s e co n t o d o s s u s ca m p o s p riva d o s p u e s t o s a ce ro .
e n a b le S u b s t it u t io n : Es t a fu e n t e co n ce d e p e rm is o p a ra s u s t it u ir u n o b je t o p o r
o t ro d u ra n t e la s e ria liza ció n d e s e ria liza ció n . Co n ce d e r e s t e p e rm is o p o d ría p e rm it ir
a có d ig o m a licio s o re e m p la za r e l o b je t o re a l co n o t ro q u e t e n g a d a t o s in co rre ct o s o
m a lig n o s .

SocketPermission
El p e rm is o ja v a . n e t . S o c k e t P e rm is s io n co n ce d e a cce s o a u n a re d m e d ia n t e
s o cke t s . La fu e n t e e s u n n o m b re d e h o s t y la d ire cció n d e l p u e rt o , y la a cció n e s
u n a lis t a q u e e s p e cifica la s fo rm a s d e co n e xió n co n e s e h o s t . La s co n e cio n e s
p o s ib le s s o n a c c e p t , c o n n e c t , lis t e n , y re s o lv e .
Es t a e n t ra d a d e fich e ro d e p o licía p e rm it e q u e u n a co n e xió n a ce p t e co n e xio n e s a l
p u e rt o 7 7 7 7 e n e l h o s t p u ffin . e n g . s u n . c o m .

grant {
permission [Link]
"[Link]",
"connect, accept";
};
Es t a e n t ra d a d e fich e ro d e p o licia p e rm it e a la co n e xió n , a ce p t a r co n e xio n e s p a ra
e s cu ch a r cu a lq u ie r p u e rt o e n t re e l 1 0 2 4 y e l 6 5 5 3 5 e n e l h o s t lo ca l.

grant {
permission [Link]
"localhost:1024-",
"accept, connect, listen";
};
El h o s t s e e xp re s a co n la s ig u ie n t e s in t a xis co m o u n n o m b re DNS , u n a d ire cció n IP
n u m é rica , o co m o lo c a lh o s t ( p a ra la m á q u in a lo ca l) . El co m o d in a s t e ris co ( * ) s e
p u e d e in clu ir u n a ve z e n u n a e s p e cifica ció n d e n o m b re DNS . S i s e in clu ye d e n e
e s t á r e n la p o s ició n m á s a la izq u ie rd a , co m o e n * . s u n . c o m .

host = (hostname | IPaddress)[:portrange]


portrange = portnumber | -portnumber |
portnumber-[portnumber]
El p u e rt o o ra n g o d e p u e rt o s e s o p cio n a l. Un a e s p e cifica ció n d e p u e rt o d e la fo rm a
N - , d o n d e N e s u n n ú m e ro d e p u e rt o , s ig n ifica t o d o s lo s p u e rt o s n u m e ra d o s N y
s u p e rio re s , m ie n t ra s q u e u n a e s p e cifica ció n d e la fo rm a - N in d ica t o d o s lo s p u e rt o s
n u m e ra d o s N e in fe rio re s .
La a cció n lis t e n e s s ó lo im p o rt a n t e cu a n d o s e u s a co n e l lo c a lh o s t , y re s o lv e
( re s u e lve la d ire cció n d e l s e rvicio h o s t / ip ) cu a n d o cu a lq u ie ra d e la s o t ra s o p cio o n e s
e s t á p re s e n t e .
Co n ce d e r p e rm is o a l có d ig o p a ra a ce p t a r o cre a r co n e xio n e s s o b re h o s t re m o t o s
p o d ría s e r p e lig ro s o p o rq u e có d ig o m a le vo le n t e p o d ría m á s fá cilm e n t e t ra n s fe rir y
co m p a rt ir d a t o s co n fid e n cia le s .
N o t a : En p la t a fo rm a s Un ix, s ó lo e l ra íz t ie n e p e rm is o p a ra a cce d e r a lo s
p u e rt o s in fe rio re s a 1 0 2 4 .

Oz it o
Apéndice B: Clases, Métodos y Permisos
Un g ra n n ú m e ro d e m é t o d o s d e la p la t a fo rm a Ja va TM 2 e s t a n im p le m e n t a d o s p a ra
ve rifica r p e rm is o s d e a cce s o . Es t o s ig n ifica q u e a n t e s d e e je cu t a rs e , ve rifica n s i a y
u n fich e ro d e p o licia d e s is t e m a , u s u a rio o p ro g ra m a co n lo s p e rm is o s re q u e rid o s
p a ra q u e co n t in u e la e je cu ció n . S i n o s e e n cu e n t ra n d ich o s p e rm is o s , la e je cu ció n
s e d e t ie n e co n u n a co n d ició n d e e rro r.
El có d ig o d e ve rifica ció n d e a cce s o p a s a lo s p e rm is o s re q u e rid o s a l co n t ro la d o r d e
s e g u rid a d , y e l co n t ro la d o r d e s e g u rid a d co m p ru e b a e s t o s p e rm is o s co n t ra lo s
p e rm is o s d e l fich e ro d e p o licía p a ra d e t e rm in a r lo s a cce s o s . Es t o s ig n ifica q u e lo s
m é t o d o s d e la p la t a fo rm a Ja va 2 e s t á n a s o cia d o s co n p e rm is o s e s p e cífico s , y lo s
p e rm is o s e s p e cífcio s e s t á n a s o cia d o s co n m é t o d o s e s p e cífico s d e l
ja v a . s e c u rit y . S e c u rit y Ma n a g e r.
Es t e a p é n d id e lis t a lo s m é t o d o s d e la p la t a fo rm a Ja va 2 , lo s p e rm is o s a s o cia d o s
co n ca d a m é t o d o , y e l m é t o d o ja v a . s e c u rit y . S e c u rit y Ma n a g e r lla m a d o p a ra
ve rifica r la e xis t e n cia d e e s t e p e rm is o . Ne ce s it a m o s e s t a in fo rm a ció n cu a n d o
im p le m e n t a m o s cie rt o s m é t o d o s a b s t ra ct o s o cre a m o s n u e s t ro p ro p io co n t ro la d o r
d e s e g u rid a d p a ra q u e p o d a m o s in clu ir có d ig o d e ve rifica ció n d e a cce s o p a ra
m a n t e n e r n u e s t ra s im p le m e n t a cio n e s e n lín e a co n la p o lít ica d e s e g u rid a d d e la
p la t a fo rm a Ja va 2 . S i n o in clu im o s có d ig o d e ve rifica ció n d e a cce s o , n u e s t ra s
im p le m e n t a cio n e s n o p a s a rá n lo s ch e q u e o s d e s e g u rid a d in t e rn o s d e la p la t a fo rm a
Ja va 2 .
● ja va . a wt . Gra p h ics 2 D

● ja va . a wt . To o lKit
● ja va . a wt . Win d o w
● ja va . b e a n s . Be a n s
● ja va . b e a n s . In t ro s p e ct o r
● ja va . b e a n s . Pro p e rt yEd it o rMa n a g e r
● ja va . io . File
● ja va . io . File Ou t p u t S t re a m
● ja va . io . Ob je ct In p u t S t re a m
● ja va . io . Ob je ct Ou t p u t S t re a m
● ja va . io . Ra n d o m Acce s s File
● ja va . la n g . Cla s s
● ja va . la n g . Cla s s Lo a d e r
● ja va . la n g . Ru n t im e
● ja va . la n g . S e cu rit yMa n a g e r
● ja va . la n g . S ys t e m
● ja va . la n g . Th re a d
● ja va . la n g . Th re a d Gro u p
● ja va . la n g . re fle ct . Acce s s ib le Ob je ct
● ja va . n e t . Au t h e n t ica t o r
● ja va . n e t . Da t a g ra m S o cke t
● ja va . n e t . Ht t p URLCo n n e ct io n
● ja va . n e t . In e t Ad d re s s
● ja va . n e t . Mu lt ica s t S o cke t
● ja va . n e t . S e rve rS o cke t
● ja va . n e t . S o cke t
● ja va . n e t . URL
● ja va . n e t . URLCo n n e ct io n
● ja va . n e t . URLCla s s Lo a d e r
● ja va . rm i. a ct iva t io n . Act iva t io n Gro u p
● ja va . rm i. s e rve r. RMIS o cke t Fa ct o ry
● ja va . s e cu rit y. Id e n t it y
● ja va . s e cu rit y. Id e n t it yS co p e
● ja va . s e cu rit y. Pe rm is s io n
● ja va . s e cu rit y. Po licy
● ja va . s e cu rit y. Pro vid e r
● ja va . s e cu rit y. S e cu re Cla s s Lo a d e r
● ja va . s e cu rit y. S e cu rit y
● ja va . s e cu rit y. S ig n e r
● ja va . u t il. Lo ca le
● ja va . u t il. Zip

[Link].Graphics2D

public abstract void setComposite(Composite comp)


[Link]
[Link] "readDisplayPixels"
El có d ig o d e ve rifica ció n d e a cce s o p a ra s e t Co m p o s it e d e b e ría lla m a r a
ja va . S e cu rit y. S e cu rit yMa n a g e r. ch e ckPe rm is s io n y p a s a rle ja va . a wt . AWTPe rm is s io n
"re a d Dis p la yPixe ls " cu a n d o e l co n t e xt o Gra p h ics 2 D d ib u je u n co m p o n e n t e e n la
p a n t a lla y e l co m p u e s t o e s u n o b je t o p e rs o n a liza d o e n ve z d e u n o b je t o
Alp h a Co m p o s it e .

[Link]

public void addAWTEventListener(


AWTEventListener listener,
long eventMask)
public void removeAWTEventListener(
AWTEventListener listener)
checkPermission
[Link] "listenToAllAWTEvents"
~~~~~~~~~

public abstract PrintJob getPrintJob(


Frame frame, String jobtitle,
Properties props)
checkPrintJobAccess
[Link] "queuePrintJob"
~~~~~~~~~

public abstract Clipboard


getSystemClipboard()
checkSystemClipboardAccess
[Link] "accessClipboard"
~~~~~~~~~

public final EventQueue


getSystemEventQueue()
checkAwtEventQueueAccess
[Link] "accessEventQueue"

[Link]

Window()
checkTopLevelWindow
[Link]
"showWindowWithoutWarningBanner"
[Link]

public static void setDesignTime(


boolean isDesignTime)
public static void setGuiAvailable(
boolean isGuiAvailable)
checkPropertiesAccess
[Link] "*", "read,write"

[Link]

public static synchronized void


setBeanInfoSearchPath(String path[])
checkPropertiesAccess
[Link] "*", "read,write"

[Link]

public static void registerEditor(


Class targetType,
Class editorClass)
public static synchronized void
setEditorSearchPath(String path[])
checkPropertiesAccess
[Link] "*", "read,write"

[Link]

public boolean delete()


public void deleteOnExit()
checkDelete(String)
[Link] "{name}", "delete"
~~~~~~~~~

public boolean exists()


public boolean canRead()
public boolean isFile()
public boolean isDirectory()
public boolean isHidden()
public long lastModified()
public long length()
public String[] list()
public String[] list(FilenameFilter filter)
public File[] listFiles()
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)
checkRead(String)
[Link] "{name}", "read"
~~~~~~~~~

public boolean canWrite()


public boolean createNewFile()
public static File createTempFile(
String prefix, String suffix)
public static File createTempFile(
String prefix, String suffix,
File directory)
public boolean mkdir()
public boolean mkdirs()
public boolean renameTo(File dest)
public boolean setLastModified(long time)
public boolean setReadOnly()
checkWrite(String)
[Link] "{name}", "write"

[Link]

FileInputStream(FileDescriptor fdObj)
checkRead(FileDescriptor)
[Link] "readFileDescriptor"
~~~~~~~~~

FileInputStream(String name)
FileInputStream(File file)
checkRead(String)
[Link] "{name}", "read"

[Link]

FileOutputStream(FileDescriptor fdObj)
checkWrite(FileDescriptor)
[Link] "writeFileDescriptor"
~~~~~~~~~
FileOutputStream(File file)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)
checkWrite(String)
[Link] "{name}", "write"

[Link]

protected final boolean


enableResolveObject(boolean enable);
checkPermission
[Link]
"enableSubstitution"
~~~~~~~~~

protected ObjectInputStream()
protected ObjectOutputStream()
checkPermission
[Link]
"enableSubclassImplementation"

[Link]

protected final boolean


enableReplaceObject(boolean enable)
checkPermission
[Link]
"enableSubstitution"

[Link]

RandomAccessFile(String name, String mode)


RandomAccessFile(File file, String mode)
checkRead(String)
[Link] "{name}", "read"
En a m b o s m é t o d o s e l m o d o e s r.
~~~~~~~~~

RandomAccessFile(String name, String mode)


checkRead(String) and checkWrite(String)
[Link] "{name}", "read,write"
En e s t e m é t o d o e l m o d o e s rw .
~~~~~~~~~

[Link]

public static Class forName(


String name, boolean initialize,
ClassLoader loader)
checkPermission
[Link]("getClassLoader")
El có d ig o d e ve rifica ció n d e a cce s o p a ra e s t e m é t o d o lla m a a c h e c k P e rm is s io n y
lo p a s a a ja v a . la n g . Ru n t im e P e rm is s io n ( "g e t Cla s s Lo a d e r") cu a n d o lo a d e r e s
n u ll y e l ca rg a d o r d e la cla s e lla m a n t e n o e s n u ll.
~~~~~~~~~

public Class[] getClasses()


checkMemberAccess(this, [Link])
[Link]
"accessDeclaredMembers"
[Link]
"accessClassInPackage.{pkgName}"
El có d ig o d e ve rifica ció n d e a cce s o p a ra e s t a cla s e y ca d a u n a d e s u s s u p e rcla s e s
lla m a a c h e c k Me m b e rAc c e s s ( t h is , Me m b e r. D ECLARED ) . S i la cla s e e s t á e n u n
p a q u e t e , c h e c k P a c k a g e Ac c e s s ( { p k g N a m e } ) t a m b ié n s e lla m a . Po r d e fe ct o ,
c h e c k Me m b e rAc c e s s n o re q u ie re p e rm is o s i e l ca rg a d o r d e cla s e d e e s t a cla s e e s
e l m is m o q u e e l d e la o t ra . De o t ra fo rm a re q u ie re
ja v a . la n g . Ru n t im e P e rm is s io n "a c c e s s D e c la re d Me m b e rs ". S i la cla s e e s t á e n
u n p a q u e t e , t a m b ié n s e re q u ie re ja v a . la n g . Ru n t im e P e rm is s io n
"a c c e s s Cla s s I n P a c k a g e . { p k g N a m e } ".
~~~~~~~~~

public ClassLoader getClassLoader()


checkPermission
[Link] "getClassLoader"
S i e l lla m a d o r d e la cla s e lla m a n t e e s n u ll, o s i e l s i e s e l m is m o q u e e l d e l
a n ce s t ro d e l ca rg a d o r d e la cla s e p a ra la cla s e cu yo ca rg a d o r d e cla s e e s t á s ie n d o
s o licit a d o , n o s e n e ce s it a p e rm is o . De o t ra fo rm a , s e n e ce s it a
ja v a . la n g . Ru n t im e P e rm is s io n "g e t Cla s s Lo a d e r".
~~~~~~~~~

public Class[] getDeclaredClasses()


public Field[] getDeclaredFields()
public Method[] getDeclaredMethods()
public Constructor[]
getDeclaredConstructors()
public Field getDeclaredField(
String name)
public Method getDeclaredMethod(...)
public Constructor
getDeclaredConstructor(...)
checkMemberAccess(this, [Link])
checkPackageAccess({pkgName})
[Link]
"accessDeclaredMembers
[Link]
"accessClassInPackage.{pkgName}
S i la cla s e e s t á e n u n p a q u e t e , e l có d ig o d e ve rifica ció n d e a cce s o d e b e ría lla m a r a
c h e c k P a c k a g e Ac c e s s ( { p k g N a m e } ) y p a s a rlo a ja v a . la n g . Ru n t im e P e rm is s io n
"a c c e s s Cla s s I n P a c k a g e . { p k g N a m e } ".
S i la cla s e n o e s t á e n u n p a q u e t e , e l có d ig o d e ve rifica ció n d e a cce s o p a ra e s t o s
m é t o d o s d e b e ría lla m a r a c h e c k Me m b e rAc c e s s ( t h is , Me m b e r. D ECLARED ) y
p a s a rlo a ja v a . la n g . Ru n t im e P e rm is s io n
"a c c e s s Cla s s I n P a c k a g e . { p k g N a m e } ".
~~~~~~~~~

public Field[] getFields()


public Method[] getMethods()
public Constructor[] getConstructors()
public Field getField(String name)
public Method getMethod(...)
public Constructor getConstructor(...)
checkMemberAccess(this, [Link])
checkPackageAccess({pkgName})
[Link]
"accessClassInPackage.{pkgName}"
S i la cla s e n o e s t á e n u n p a q u e t e , e l có d ig o d e ve rifica ció n d e a cce s o p a ra e s t o s
m é t o d o s lla m a a c h e c k Me m b e rAc c e s s ( t h is , Me m b e r. P UBLI C) , p e ro n o s e p a s a
n in g ú n p e rm is o .
S i la cla s e e s t á e n u n p a q u e t e , e l có d ig o d e ve rifica ció n d e a cce s o p a ra e s t o s
m é t o d o s d e b e ría lla m a r a c h e c k P a c k a g e Ac c e s s ( { p k g N a m e } ) y p a s a rle
c h e c k P a c k a g e Ac c e s s ( { p k g N a m e } ) .
~~~~~~~~~
public ProtectionDomain
getProtectionDomain()
checkPermission
[Link] "getProtectionDomain"

[Link]

ClassLoader()
ClassLoader(ClassLoader parent)
checkCreateClassLoader
[Link] "createClassLoader"
~~~~~~~~~

public static ClassLoader


getSystemClassLoader()
public ClassLoader getParent()
checkPermission
[Link] "getClassLoader"
S i e l ca rg a d o r d e cla s e s d e l lla m a n t e e s n u ll o e s e l m is m o q u e e l d e l a n ce s t ro d e l
ca rg a d o r d e cla s e s p a ra la cla s e cu yo ca rg a d o r e s t á s ie n d o s o licit a d o , n o s e
n e ce s it a p e rm is o . De o t ra fo rm a , s e re q u ie re ja v a . la n g . Ru n t im e P e rm is s io n
"g e t Cla s s Lo a d e r" .

[Link]

public Process exec(String command)


public Process exec(String command,
String envp[])
public Process exec(String cmdarray[])
public Process exec(String cmdarray[],
String envp[])
checkExec
[Link] "{command}", "execute"
~~~~~~~~~

public void exit(int status)


public static void
runFinalizersOnExit(boolean value)
checkExit(status) where status is 0 for
runFinalizersOnExit
[Link] "exitVM"
~~~~~~~~~
public void load(String lib)
public void loadLibrary(String lib)
checkLink({libName})
[Link]
"loadLibrary.{libName}"
En e s t o s m é t o d o s { lib N a m e } e s e l a rg u m e n t o lib , file n a m e o lib n a m e .

[Link]

<all methods>
checkPermission
See Security Manager Methods.

[Link]

public static void exit(int status)


public static void
runFinalizersOnExit(boolean value)
checkExit(status) where status is 0 for
runFinalizersOnExit
[Link] "exitVM"
~~~~~~~~~

public static void load(String filename)


public static void loadLibrary(
String libname)
checkLink({libName})
[Link]
"loadLibrary.{libName}"
En e s t o s m é t o d o s { lib N a m e } e s e l a rg u m e n t o lib , file n a m e o lib n a m e .
~~~~~~~~~

public static Properties getProperties()


public static void setProperties(Properties props)
checkPropertiesAccess
[Link] "*", "read,write"
~~~~~~~~~

public static String getProperty(String key)


public static String getProperty(String key,
String def)
checkPropertyAccess
[Link] "{key}", "read"
~~~~~~~~~

public static void setIn(InputStream in)


public static void setOut(PrintStream out)
public static void setErr(PrintStream err)
checkPermission
[Link] "setIO"
~~~~~~~~~

public static String setProperty(String key,


String value)
checkPermission
[Link] "{key}", "write"
~~~~~~~~~

public static synchronized void


setSecurityManager(SecurityManager s)
checkPermission
[Link] "setSecurityManager"

[Link]

public ClassLoader getContextClassLoader()


checkPermission
[Link] "getClassLoader"
S i e l ca rg a d o r d e cla s e s d e l lla m a n t e e s n u ll o e s e l m is m o q u e e l d e l a n ce s t ro d e l
ca rg a d o r d e cla s e s p a ra la cla s e cu yo ca rg a d o r e s t á s ie n d o s o licit a d o , n o s e
n e ce s it a p e rm is o . De o t ra fo rm a , s e re q u ie re ja v a . la n g . Ru n t im e P e rm is s io n
"g e t Cla s s Lo a d e r".
~~~~~~~~~

public void setContextClassLoader


(ClassLoader cl)
checkPermission
[Link]
"setContextClassLoader"
~~~~~~~~~

public final void checkAccess()


public
void interrupt()
public
final void suspend()
public
final void resume()
public
final void setPriority
(int newPriority)
public final void setName(String name)
public final void setDaemon(boolean on)
checkAccess(this)
[Link] "modifyThread"
~~~~~~~~~

public static int


enumerate(Thread tarray[])
checkAccess({threadGroup})
[Link] "modifyThreadGroup"
~~~~~~~~~

public final void stop()


checkAccess(this).
checkPermission
[Link] "modifyThread"
[Link] "stopThread"
El có d ig o d e ve rifica ció n d e a cce s o s d e b e ría lla m a r a c h e c k Ac c e s s y p a s a rlo a
ja v a . la n g . Ru n t im e P e rm is s io n "m o d ify Th re a d ", a m e n o s q u e t h re a d a ct u l
in t e n t e p a ra r o t ro t h re a d d is t in t o a s í m is m o . En e s t e ca s o , e l có d ig o d e ve rifica ció n
d e a cce s o d e b e ría lla m a t a c h e c k P e rm is s io n y p a s a rlo a
ja v a . la n g . Ru n t im e P e rm is s io n "s t o p Th re a d ".
~~~~~~~~~

public final synchronized void


stop(Throwable obj)
checkAccess(this).
checkPermission
[Link] "modifyThread"
[Link] "stopThread"
El có d ig o d e ve rifica ció n d e a cce s o s d e b e ría lla m a r a c h e c k Ac c e s s y p a s a rlo a
ja v a . la n g . Ru n t im e P e rm is s io n "m o d ify Th re a d ", a m e n o s q u e t h re a d a ct u l
in t e n t e p a ra r o t ro t h re a d d is t in t o a s í m is m o . En e s t e ca s o , e l có d ig o d e ve rifica ció n
d e a cce s o d e b e ría lla m a t a c h e c k P e rm is s io n y p a s a rlo a
ja v a . la n g . Ru n t im e P e rm is s io n "s t o p Th re a d ".
~~~~~~~~~

Thread()
Thread(Runnable target)
Thread(String name)
Thread(Runnable target, String name)
checkAccess({parentThreadGroup})
[Link] "modifyThreadGroup"
~~~~~~~~~

Thread(ThreadGroup group, ...)


checkAccess(this) for ThreadGroup methods, or
checkAccess(group) for Thread methods
[Link] "modifyThreadGroup"

[Link]

public final void checkAccess()


public int enumerate(Thread list[])
public int enumerate(Thread list[],
boolean recurse)
public int enumerate(ThreadGroup list[])
public int enumerate(ThreadGroup list[],
boolean recurse)
public final ThreadGroup getParent()
public final void
setDaemon(boolean daemon)
public final void setMaxPriority(int pri)
public final void suspend()
public final void resume()
public final void destroy()
checkAccess(this) for ThreadGroup methods, or
checkAccess(group) for Thread methods
[Link] "modifyThreadGroup"
~~~~~~~~~

ThreadGroup(String name)
ThreadGroup(ThreadGroup parent,
String name)
checkAccess({parentThreadGroup})
[Link] "modifyThreadGroup"
~~~~~~~~~

public final void interrupt()


checkAccess(this)
[Link] "modifyThreadGroup"
[Link] "modifyThread"
El có d ig o d e ve rifica ció n d e a cce s o s p a ra e s t e m é t o d o t a m b ié n re q u ie re
ja v a . la n g . Ru n t im e P e rm is s io n "m o d ify Th re a d " p o rq u e e l m é t o d o
ja v a . la n g . Th re a d in t e rru p t ( ) s e lla m a p a ra ca d a t h re a d e n e l g ru p o d e t h re a d s y
t o d o s s u s s u b g ru p o s .
~~~~~~~~~

public final void stop()


checkAccess(this)
[Link] "modifyThreadGroup"
[Link] "modifyThread"
[Link] "stopThread"
El có d ig o d e ve rifica ció n d e a cce s o s p a ra e s t e m é t o d o t a m b ié n re q u ie re
ja v a . la n g . Ru n t im e P e rm is s io n "m o d ify Th re a d " p o rq u e e l m é t o d o
ja v a . la n g . Th re a d in t e rru p t ( ) s e lla m a p a ra ca d a t h re a d e n e l g ru p o d e t h re a d s y
t o d o s s u s s u b g ru p o s .

[Link]

public static void setAccessible(...)


public void setAccessible(...)
checkPermission
[Link]
"suppressAccessChecks"

[Link]

public static PasswordAuthentication


requestPasswordAuthentication(InetAddress addr,
int port,
String protocol,
String prompt,
String scheme)
checkPermission
[Link]
"requestPasswordAuthentication"
~~~~~~~~~

public static void


setDefault(Authenticator a)
checkPermission
[Link] "setDefaultAuthenticator"
[Link]

public void send(DatagramPacket p)


checkMulticast([Link]())
checkConnect([Link]().getHostAddress(),
[Link]())
[Link]((
[Link]()).getHostAddress(),
"accept,connect")
[Link] "{host}","resolve"
El có d ig o d e ve rifica ció n d e a cce s o p a ra s e n d lla m a a c h e c k Mu lt ic a s t e n lo s
s ig u ie n t e s ca s o s :

if ([Link]().isMulticastAddress()) {
[Link](
([Link]()).getHostAddress(),
"accept,connect")
}
El có d ig o d e ve rifica ció n d e a cce s o p a ra s e n d lla m a a c h e c k Co n n e c t e n lo s
s ig u ie n t e s ca s o s :

else {
port = [Link]();
host = [Link]().getHostAddress();
if (port == -1) [Link]
"{host}","resolve";
else [Link]
"{host}:{port}","connect"
}
~~~~~~~~~

public InetAddress getLocalAddress()


checkConnect({host}, -1)
[Link] "{host}", "resolve"
~~~~~~~~~

DatagramSocket(...)
checkListen({port})
El có d ig o d e ve rifica ció n d e a cce s o p a ra e s t e m é t o d o lla m a a c h e c k Lis t e n y le
p a s a p e rm is o s d e s o cke t s d e e s t a fo rm a :
if (port == 0)
[Link] "localhost:1024-",
"listen";
else
[Link] "localhost:{port}",
"listen"
~~~~~~~~~

public synchronized void receive(DatagramPacket p)


checkAccept({host}, {port})
[Link] "{host}:{port}",
"accept"

[Link]

public static void setFollowRedirects(boolean set)


checkSetFactory
[Link] "setFactory"

[Link]

public String getHostName()


public static InetAddress[]
getAllByName(String host)
public static InetAddress getLocalHost()
checkConnect({host}, -1)
[Link] "{host}", "resolve"

[Link]

public void joinGroup(InetAddress mcastaddr)


public void leaveGroup(InetAddress mcastaddr)
checkMulticast(InetAddress)
[Link](
[Link](),
"accept,connect")
~~~~~~~~~

public synchronized void


send(DatagramPacket p, byte ttl)
checkMulticast([Link](), ttl)
checkConnect([Link]().getHostAddress(),
[Link]())
[Link]((
[Link]()).getHostAddress(),
"accept,connect")
[Link] "{host}","resolve"
El có d ig o d e ve rifica ció n d e a cce s o p a ra s e n d lla m a a c h e c k Mu lt ic a s t e n lo s
s ig u ie n t e s ca s o s :

if ([Link]().isMulticastAddress()) {
[Link](
([Link]()).getHostAddress(),
"accept,connect")
}
El có d ig o d e ve rifica ció n d e a cce s o p a ra e s t e m é t o d o lla m a a c h e c k Co n n e c t e n lo s
s ig u ie n t e s ca s o s :

else {
port = [Link]();
host = [Link]().getHostAddress();
if (port == -1) [Link]
"{host}","resolve"
else [Link]
"{host}:{port}","connect"
}
~~~~~~~~~

MulticastSocket(...)
checkListen({port})
El có d ig o d e ve rifica ció n d e a cce s o p a ra e s t e m é t o d o lla m a a c h e c k Lis t e n e n lo s
s ig u ie n t e s ca s o s :

if (port == 0)
[Link]
"localhost:1024-", "listen";
else
[Link]
"localhost:{port}","listen"

[Link]

ServerSocket(...)
checkListen({port})
El có d ig o d e ve rifica ció n d e a cce s o p a ra e s t e m é t o d o lla m a a c h e c k Lis t e n e n lo s
s ig u ie n t e s ca s o s :

if (port == 0)
[Link]
"localhost:1024-","listen";
else
[Link]
"localhost:{port}","listen"
~~~~~~~~~

public Socket accept()


protected final void implAccept(Socket s)
checkAccept({host}, {port})
[Link]
"{host}:{port}", "accept"
~~~~~~~~~

public static synchronized void


setSocketFactory(...)
checkSetFactory
[Link] "setFactory"

[Link]

public static synchronized void


setSocketImplFactory(...)
checkSetFactory
[Link] "setFactory"
~~~~~~~~~

Socket(...)
checkConnect({host}, {port})
[Link]
"{host}:{port}", "connect"

[Link]

public static synchronized void


setURLStreamHandlerFactory(...)
checkSetFactory
[Link] "setFactory"
~~~~~~~~~

URL(...)
checkPermission
[Link] "specifyStreamHandler"

[Link]

public static synchronized void


setContentHandlerFactory(...)
public static void setFileNameMap(
FileNameMap map)
checkSetFactory
[Link] "setFactory"

[Link]

URLClassLoader(...)
checkCreateClassLoader
[Link] "createClassLoader"

[Link]

public static synchronized ActivationGroup


createGroup(...)
public static synchronized void setSystem(
ActivationSystem system)
checkSetFactory
[Link] "setFactory"

[Link]

public synchronized static void setSocketFactory(...)


checkSetFactory
[Link] "setFactory"

[Link]

public void addCertificate(...)


checkSecurityAccess("addIdentityCertificate")
[Link]
"addIdentityCertificate"
~~~~~~~~~

public void removeCertificate(...)


checkSecurityAccess("removeIdentityCertificate")
[Link]
"removeIdentityCertificate"
~~~~~~~~~

public void setInfo(String info)


checkSecurityAccess("setIdentityInfo")
[Link]
"setIdentityInfo"
~~~~~~~~~

public void setPublicKey(PublicKey key)


checkSecurityAccess("setIdentityPublicKey")
[Link]
"setIdentityPublicKey"
~~~~~~~~~

public String toString(...)


checkSecurityAccess("printIdentity")
[Link]
"printIdentity"

[Link]

protected static void setSystemScope()


checkSecurityAccess("setSystemScope")
[Link]
"setSystemScope"

[Link]

public void checkGuard(Object object)


checkPermission(this)
Es t e o b je t o Pe rm is s io n e s e l p e rm is o ch e q u e a d o .
[Link]

public static Policy getPolicy()


checkPermission
[Link] "getPolicy"
~~~~~~~~~

public static void setPolicy(Policy policy);


checkPermission
[Link] "setPolicy"
~~~~~~~~~

[Link]

public synchronized void clear()


checkSecurityAccess("clearProviderProperties."
+{name})
[Link]
"clearProviderProperties.{name}"
En e s t e m é t o d o n a m e e s e l n o m b re d e l p ro ve e d o r.
~~~~~~~~~

public synchronized Object put(Object key,


Object value)
checkSecurityAccess("putProviderProperty."
+{name})
[Link]
"putProviderProperty.{name}"
En e s t e m é t o d o n a m e e s e l n o m b re d e l p ro ve e d o r.
~~~~~~~~~

public synchronized Object remove(Object key)


checkSecurityAccess("removeProviderProperty."
+{name})
[Link]
"removeProviderProperty.{name}"
En e s t e m é t o d o n a m e e s e l n o m b re d e l p ro ve e d o r.
[Link]

SecureClassLoader(...)
checkCreateClassLoader
[Link] "createClassLoader"

[Link]

public static void getProperty(String key)


checkPermission
[Link] "getProperty.{key}"
~~~~~~~~~

public static int addProvider(Provider provider)


public static int insertProviderAt(
Provider provider,
int position);
checkSecurityAccess("insertProvider."
+[Link]())
[Link]
"insertProvider.{name}"
~~~~~~~~~

public static void removeProvider(String name)


checkSecurityAccess("removeProvider."+name)
[Link] "removeProvider.{name}"
~~~~~~~~~

public static void setProperty( String key,


String datum)
checkSecurityAccess("setProperty."+key)
[Link]
"setProperty.{key}"

[Link]

public PrivateKey getPrivateKey()


checkSecurityAccess("getSignerPrivateKey")
[Link]
"getSignerPrivateKey"
~~~~~~~~~
public final void setKeyPair(KeyPair pair)
checkSecurityAccess("setSignerKeypair")
[Link]
"setSignerKeypair"

[Link]

public static synchronized void setDefault(


Locale newLocale)
checkPermission
[Link]
"[Link]","write"

[Link]

ZipFile(String name)
checkRead
[Link] "{name}","read"

Oz it o
Apéndice C: Métodos del Controlador de Seguridad
Es t a t a b la lis t a lo s p e rm is o s ch e q u e a d o s m e d ia n t e la s im p le m e n t a cio n e s d e lo s
m é t o d o s d e ja v a . la n g . S e c u rit y Ma n a g e r. Ca d a m é t o d o d e ch e q u e o lla m a a l
m é t o d o S e c u rit y Ma n a g e r. c h e c k P e rm is s io n co n e l p e rm is o in d ica d o , e xce p t o
p a ra lo s p e rm is o s c h e c k Co n n e c t y c h e c k Re a d q u e t o m a n u n a rg u m e n t o d e
co n t e xt o . Lo s m é t o d o s c h e c k Co n n e c t y c h e c k Re a d e s p e ra n q u e e l co n t e xt o s e a
u n Ac c e s s Co n t ro lCo n t e x t y lla m a n a l m é t o d o c h e c k P e rm is s io n d e l p e rm is o co n
e l p e rm is o e s p e cifica d o .

public void checkAccept(String host, int port);


[Link] "{host}:{port}", "accept";

public void checkAccess(Thread g);


[Link] "modifyThread");

public void checkAccess(ThreadGroup g);


[Link] "modifyThreadGroup");

public void checkAwtEventQueueAccess();


[Link] "accessEventQueue";

public void checkConnect(String host, int port);


if (port == -1)
[Link] "{host}","resolve";
else
[Link] "{host}:{port}","connect";

public void checkConnect(String host, int port,


Object context);
if (port == -1)
[Link] "{host}","resolve";
else
[Link] "{host}:{port}","connect";

public void checkCreateClassLoader();


[Link] "createClassLoader";

public void checkDelete(String file);


[Link] "{file}", "delete";

public void checkExec(String cmd);


if (cmd is an absolute path)
[Link] "{cmd}", "execute";
else
[Link] "-", "execute";

public void checkExit(int status);


[Link] "exitVM");

public void checkLink(String lib);


[Link] "loadLibrary.{lib}";

public void checkListen(int port);


if (port == 0)
[Link] "localhost:1024-","listen";
else
[Link] "localhost:{port}","listen";

public void checkMemberAccess(Class clazz, int which);


if (which != [Link]) {
if (currentClassLoader() != [Link]()) {
checkPermission(
new [Link](
"accessDeclaredMembers"));
}
}

public void checkMulticast(InetAddress maddr);


[Link](
[Link](),"accept,connect");

public void checkMulticast(InetAddress maddr, byte ttl);


[Link](
[Link](),"accept,connect");

public void checkPackageAccess(String pkg);


[Link]
"accessClassInPackage.{pkg}";

public void checkPackageDefinition(String pkg);


[Link]
"defineClassInPackage.{pkg}";

public void checkPrintJobAccess();


[Link] "queuePrintJob";

public void checkPropertiesAccess();


[Link] "*", "read,write";
public void checkPropertyAccess(String key);
[Link] "{key}", "read,write";

public void checkRead(FileDescriptor fd);


[Link] "readFileDescriptor";

public void checkRead(String file);


[Link] "{file}", "read";

public void checkRead(String file, Object context);


[Link] "{file}", "read";

public void checkSecurityAccess(String action);


[Link] "{action}";

public void checkSetFactory();


[Link] "setFactory";

public void checkSystemClipboardAccess();


[Link] "accessClipboard";

public boolean checkTopLevelWindow(Object window);


[Link] "showWindowWithoutWarningBanner";

public void checkWrite(FileDescriptor fd);


[Link] "writeFileDescriptor";

public void checkWrite(String file);


[Link] "{file}", "write";

public SecurityManager();
[Link] "createSecurityManager";

Oz it o
Epílogo...
Esta sección no forma parte del tutor original de
Sun.
Po d e ís e n co n t ra r la ve rs ió n o rig in a l e n In g lé s d e e s t e "Cu rs o s o b re
P ro g ra m a c ió n Av a n z a d a e n Ja v a 2 " e n la s p á g in a s d e Tra in in g s On Lin e d e la
p ro p ia S u n Micro S ys t e m .

Lo s n o m b re s d e lo s a u t o re s d e la ve rs ió n o rig in a l s o n :
● Ca lv in Au s t in

● Mo n ic a P a w la n

● To n y S q u ie r co m o a u t o r in vit a d o .

Oz it o

También podría gustarte