Programacion Avanzada en Java
Programacion Avanzada en Java
Java TM
Í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
● 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
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 .
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 .
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 .
● 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.
● Nú m e ro d e l ít e m e n la s u b a s t a .
● 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
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
● 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
Diagrama de Actividad
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 ?
● 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 .
Servicio de Búsqueda
Comunicación de Datos
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 .
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 í.
● 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 .
Aq u í e s t á la t a b la AUCTI ON I TEMS .
● 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 .
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.
● 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 .
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 .
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 .
[Link]=theuser;
[Link]=password;
[Link]=emailaddress;
[Link]=creditcard;
[Link]=0;
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 .
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 .
(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
<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
[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 .
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 .
Enumeration enum=null;
try{
//Create Home interface for AuctionItemBean
AuctionItemHome home = (AuctionItemHome)
[Link]("auctionitems");
[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.
(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
[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 .
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 .
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 .
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 ?
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 .
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
try{
Context jndiCtx = new InitialContext(p);
RegistrationHome rhome =
(RegistrationHome) [Link]("registration");
RegistrationPK rpk=new RegistrationPK();
[Link]=seller;
Registration newseller=[Link](rpk);
if((newseller == null) ||
()) {
return(Auction.INVALID_USER);
}
//Call to afterBegin
[Link](-0.50);
}catch(Exception e){
[Link]("insert problem="+e);
success=false;
return Auction.INVALID_ITEM;
}
//Call to beforeCompletion
//Call to afterCompletion
(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
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 :
try{
Context ectx = new InitialContext(p);
RegistrationHome rhome = (
RegistrationHome)[Link]("registration");
RegistrationPK rpk=new RegistrationPK();
[Link]=seller;
Registration newseller=
[Link](rpk);
if((newseller == null)||
()) {
return(Auction.INVALID_USER);
}
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 .
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 .
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 .
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 .
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 .
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
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)
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.
CORBA RegistrationServer
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];
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 ,
CORBA SellerBean
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 :
Servidor IOR
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 :
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 :
Servidor IIOP
Ciente IIOP
[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
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) .
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 .
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.
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
[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
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]
Unix:
export CLASSPATH=""
rmiregistry &
Win32:
unset CLASSPATH
start rmiregistry
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 .
Colocar Datos
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 .
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));
}
if(pk == null) {
throw new FinderException ();
}
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 .
[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].*;
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].*;
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].*;
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];
try{
RegistrationHome regRef = (
RegistrationHome)[Link](
"//[Link]/registration2");
RegistrationPK rpk= new RegistrationPK();
[Link](seller);
Registration newseller = (
Registration)[Link](rpk);
if((newseller == null) ||
()) {
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;
}
}
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
Referencia Rápida
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.
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 .
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 .
exception CreateException {
};
interface RegistrationHome {
RegistrationPK create(
in string theuser,
in string password,
in string emailaddress,
in string creditcard)
raises (CreateException);
}
● 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 í.
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.
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;
};
exception CreateException {
};
exception FinderException {
};
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);
};
};
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();
[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] 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", "");
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 .
java [Link]
-ORBservice NameService
iiop://localhost:1060/DefaultNamingContext
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);
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 .
//[Link]
private void auditAccounts(ServletOutputStream out,
HttpServletRequest request) throws IOException{
// ...
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 .
[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 :
//[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 .
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 ) .
[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 .
String updateString =
"INSERT INTO dba VALUES (some text)";
int count = [Link](updateString);
Setencias Prepared
[Link](1, anotherEmailAddress);
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]();
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 :
● 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 .
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
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;
int itemnumber=400456;
byte[] imageBytes;
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 :
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.
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 :
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 :
[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 = ?");
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]();
● 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.
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 .
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;
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 .
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 .
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 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 )
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 .
Recuperar un Cookie
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 .
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 .
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 .
package auction;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
[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]();
}
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;
}
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;
}
<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].*;
[Link]("text/html");
PrintWriter out = [Link]();
if ([Link]().equals("POST")
&& [Link]().startsWith(
"multipart/form-data")) {
String boundary =
[Link]().substring(
index+9);
ServletInputStream instream =
[Link]();
byte[] tmpbuffer = new byte[8192];
int length=0;
String inputLine=null;
boolean moreData=true;
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
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");
}
Cargar la Librería
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 .
/*
* 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.
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 .
Gnu C/Linux:
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 ó :
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
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 :
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"
jobjectArray ret;
int i;
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 :
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 .
static{
[Link]("nativelib");
}
#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++) {
for (j=0; j<3 ; j++) {
localArrayCopy[i][j]=
localArrayCopy[i][j]*localMatrix[i];
}
}
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 .
static {
[Link]("dbmaplib");
}
#include <jni.h>
#include <xbase/xbase.h>
#include "CallDB.h"
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 í:
Llamar a Métodos
// [Link]
public class ArrayHandler {
private String arrayResults[];
int arraySize=-1;
static{
[Link]("nativelib");
}
#include <jni.h>
#include <iostream.h>
#include "ArrayHandler.h"
jobjectArray ret;
int i;
jclass cls;
jmethodID mid;
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"
jobjectArray ret;
int i;
jint arraysize;
jclass cls;
jmethodID mid;
jfieldID fid;
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 :
jobjectArray ret;
int i;
jint arraysize;
int asize;
jclass cls, tmpcls;
jmethodID mid;
jfieldID fid;
ret=(jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));
//Process array
// ...
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 .
#include <jni.h>
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);
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;
[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);
}
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;
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
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 :
JContentPane
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 :
GlassPane
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
package auction;
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link].*;
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 :
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();
}
}
});
CustomButtonEditor customEdit=new
CustomButtonEditor(frame);
[Link](3).setCellEditor(
customEdit);
[Link]([Link]());
JTableHeader fixedHeader=
[Link]();
[Link](Component.TOP_ALIGNMENT);
[Link](fixedHeader);
[Link]([Link](
new Dimension(2, 0)));
[Link](new Dimension(400, 40));
[Link](headers, "North");
[Link](scrollBar, "South");
[Link](headerPanel);
[Link](
new Dimension(300,180));
[Link](
new Dimension(100,180));
[Link](
new Dimension(100,180));
[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);
[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);
}
Modelo JList
public SimpleList() {
JList list;
DefaultListModel deflist;
deflist= new DefaultListModel();
[Link]("element 1");
[Link]("element 2");
list = new JList(deflist);
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].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
public SimpleSearchTree() {
String[] treelabels = { "All Auctions",
"Closed Auction",
"Open Auctions" };
Integer[] closedItems = { new Integer(500144),
new Integer(500146),
new Integer(500147) };
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]);
DefaultTreeModel model=new
DefaultTreeModel(nodes[0]);
tree = new JTree(model);
Component comp =
[Link](
table,value,isSelected,hasFocus,
row,column);
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 :
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());
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();
}
});
}
((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;
}
}
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
❍ Prin t a b le
● 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
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 :
public MyButton() {
super("MyButton");
}
Graphics2D g2 = (Graphics2D) g;
public MyButton() {
super("MyButton");
}
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 .
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 .
/* 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
Ejemplo
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 .
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 Report() {
frame = new JFrame("Sales Report");
[Link](new WindowAdapter() {
public void windowClosing(WindowEvent e) {
[Link](0);}});
[Link]("print me!");
[Link]().add(
[Link],printButton);
[Link](
frame).setDoubleBufferingEnabled(false);
[Link](true);
}
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);
[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;
}
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
¿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
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 í:
public TestRuntime () {
String dprop=[Link]("debug");
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 {
if ([Link]) { // These
[Link]("Debug message"); // are
} // removed
}
[Link]().dumpStack();
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 :
javac -g src/java/lang/[Link]
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
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 :
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
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
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 .
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
Finalizar la Sesión
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:
Unix:
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 .
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
main[1] clear
Current breakpoints set:
SimpleJdbTest:10
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 .
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
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 .
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
Antes:
Depués:
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.
Agent password=3yg23k
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 .
//[Link]
import [Link].*;
import [Link].*;
import [Link].*;
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
);
}
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
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
"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].*;
MyDialog(Frame parent) {
super(parent, "My Dialog", true);
Button okButton = new Button("OK");
[Link](this);
add(okButton);
pack();
}
MyDialog myDialog;
boolean firstTime = true;
void showDialogs() {
[Link]();
}
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 :
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 .
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
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
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
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
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 .
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 .
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 .
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 .
_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 .
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 .
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.
[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 .
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 .
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 .
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 .
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
Métodos en Línea
int counter=0;
public void method1() {
for(int i=0;i<1000;i++)
addCount();
[Link]("counter="+counter);
}
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 {
for(int i=0;i<5000;i++ ) {
[Link]();
}
[Link]("Time taken="+
([Link]()-time));
}
}
Java Hotspot
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.
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 .
javac [Link]
java -[Link]=NONE MyClass
o
javac [Link]
java -[Link]="" MyClass
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
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 :
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 :
Instances of [Link]
class [Link]
[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 .
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 :
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
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
$ 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 :
Plataforma Windows95/98/NT
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 DBCache() {
cache = new HashMap();
}
● 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 é .
import [Link].*;
import [Link].*;
class myFile {
long lastmodified;
String contents;
Map cache;
LinkedList mrulist;
int cachesize;
try {
BufferedReader br=new BufferedReader(
new FileReader(f));
String line;
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
● 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 .
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.
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
● 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
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
● 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
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
● a u ct io n . De p lo ym e n t De s crip t o r. t xt
● 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
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
● a u ct io n . De p lo ym e n t De s crip t o r. t xt
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]
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]
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
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
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 :
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 &
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 .
[Link].1=
file:${[Link]}/lib/security/[Link]
[Link].2=file:${[Link]}/.[Link]
[Link].3=file:/<mypolicyfile path and name>
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 ?
● Ja va Plu g - In HTML Co n ve rt e r
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 .
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.
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 .
[Link].1=file:${[Link]}\lib\security\[Link]
[Link].2=file:${[Link]}\[Link]
[Link].3=file:\<mypolicyfile path and name>
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
<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
keystore "/home/ray/raystore";
java -[Link]
-[Link]=polfile MyProgram
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
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 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 .
[Link]("Password, please:");
try {
response = [Link]();
if ([Link](password))
return true;
else
return false;
} catch (IOException e) {
return false;
}
}
Verificar Accesos
Fichero de Policía
grant {
permission [Link]
"${[Link]}/[Link]", "write";
permission [Link]
"[Link]", "read";
permission [Link]
"${[Link]}/[Link]", "read";
permission [Link]
"accessEventQueue";
permission [Link]
"showWindowWithoutWarningBanner";
};
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 .
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 .
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 .
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 .
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
[Link]
[Link]
Window()
checkTopLevelWindow
[Link]
"showWindowWithoutWarningBanner"
[Link]
[Link]
[Link]
[Link]
[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 ObjectInputStream()
protected ObjectOutputStream()
checkPermission
[Link]
"enableSubclassImplementation"
[Link]
[Link]
[Link]
[Link]
ClassLoader()
ClassLoader(ClassLoader parent)
checkCreateClassLoader
[Link] "createClassLoader"
~~~~~~~~~
[Link]
[Link]
<all methods>
checkPermission
See Security Manager Methods.
[Link]
[Link]
Thread()
Thread(Runnable target)
Thread(String name)
Thread(Runnable target, String name)
checkAccess({parentThreadGroup})
[Link] "modifyThreadGroup"
~~~~~~~~~
[Link]
ThreadGroup(String name)
ThreadGroup(ThreadGroup parent,
String name)
checkAccess({parentThreadGroup})
[Link] "modifyThreadGroup"
~~~~~~~~~
[Link]
[Link]
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"
}
~~~~~~~~~
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"
~~~~~~~~~
[Link]
[Link]
[Link]
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"
~~~~~~~~~
[Link]
Socket(...)
checkConnect({host}, {port})
[Link]
"{host}:{port}", "connect"
[Link]
URL(...)
checkPermission
[Link] "specifyStreamHandler"
[Link]
[Link]
URLClassLoader(...)
checkCreateClassLoader
[Link] "createClassLoader"
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
SecureClassLoader(...)
checkCreateClassLoader
[Link] "createClassLoader"
[Link]
[Link]
[Link]
[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 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