Sie sind auf Seite 1von 140

Plataforma de aplicaciones

empresariales JBoss 6.3


Gua de migracin

Para uso con la plataforma de aplicaciones empresariales JBoss 6 de Red


Hat

Servicios de contenido de clientes de Red Hat Equipo JBoss EAP

Plataforma de aplicaciones empresariales JBoss 6.3 Gua de migracin

Para uso con la plataforma de aplicaciones empresariales JBoss 6 de Red


Hat
Servicio s de co ntenido de clientes de Red Hat Equipo JBo ss EAP

Legal Notice
Co pyright 20 14 Red Hat, Inc..
This do cument is licensed by Red Hat under the Creative Co mmo ns Attributio n-ShareAlike 3.0
Unpo rted License. If yo u distribute this do cument, o r a mo dified versio n o f it, yo u must pro vide
attributio n to Red Hat, Inc. and pro vide a link to the o riginal. If the do cument is mo dified, all Red
Hat trademarks must be remo ved.
Red Hat, as the licenso r o f this do cument, waives the right to enfo rce, and agrees no t to assert,
Sectio n 4 d o f CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shado wman lo go , JBo ss, MetaMatrix, Fedo ra, the Infinity
Lo go , and RHCE are trademarks o f Red Hat, Inc., registered in the United States and o ther
co untries.
Linux is the registered trademark o f Linus To rvalds in the United States and o ther co untries.
Java is a registered trademark o f Oracle and/o r its affiliates.
XFS is a trademark o f Silico n Graphics Internatio nal Co rp. o r its subsidiaries in the United
States and/o r o ther co untries.
MySQL is a registered trademark o f MySQL AB in the United States, the Euro pean Unio n and
o ther co untries.
No de.js is an o fficial trademark o f Jo yent. Red Hat So ftware Co llectio ns is no t fo rmally
related to o r endo rsed by the o fficial Jo yent No de.js o pen so urce o r co mmercial pro ject.
The OpenStack Wo rd Mark and OpenStack Lo go are either registered trademarks/service
marks o r trademarks/service marks o f the OpenStack Fo undatio n, in the United States and o ther
co untries and are used with the OpenStack Fo undatio n's permissio n. We are no t affiliated with,
endo rsed o r spo nso red by the OpenStack Fo undatio n, o r the OpenStack co mmunity.
All o ther trademarks are the pro perty o f their respective o wners.

Abstract
Este libro es una gua para migrar su aplicaci n de versio nes previas de la platafo rma de
aplicacio nes empresariales JBo ss de Red Hat.

T able of Cont ent s

T able of Contents
.Prefacio
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. . . . . . . . . .
1. Co nvenc io nes d el Do c umento
4
1.1. Co nvenc io nes tip o g rfic as
4
1.2. Co nvenc io nes d el d o c umento
5
1.3. No tas y Ad vertenc ias
6
2 . C mo o b tener ayud a y hac er s us c o mentario s
6
2 .1. Nec es ita ayud a?
6
2 .2. Nec es itamo s s us c o mentario s !
7
. .apt
C
. . . ulo
...1
. .. .Int
. . roduccin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8. . . . . . . . . .
1.1. Platafo rma d e ap lic ac io nes emp res ariales JBo s s 6 d e Red Hat
8
1.2. So b re la g ua d e mig rac i n
8
. .apt
C
. . . ulo
...2
. .. .Preparacin
. . . . . . . . . . .para
. . . .la
. .migracin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9. . . . . . . . . .
2 .1. Prep arac i n p ara la mig rac i n
2 .2. Revis i n d e lo nuevo y d iferente en JBo s s EAP 6
2 .3. Revis i n d e la lis ta d e func io nalid ad es no s o p o rtad as y ya no utiliz ad as

9
10
11

. .apt
C
. . . ulo
. . . 3.
. . Migre
. . . . . .su
. . aplicacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. 2. . . . . . . . . .
3 .1. Camb io s req uerid o s p o r la mayo ra d e las ap lic ac io nes
12
3 .1.1. Revis i n d e lo s c amb io s req uerid o s p o r la mayo ra d e las ap lic ac io nes
12
3 .1.2. Camb io s en la c arg a d e c las es
12
3 .1.2.1. Ac tualiz ac i n d e la ap lic ac i n d eb id o a c amb io s en la c arg a d e c las es
12
3 .1.2.2. Dep end enc ias d e m d ulo s
12
3 .1.2.3. Ac tualiz ar las d ep end enc ias d e la ap lic ac i n d eb id o a lo s c amb io s en la c arg a d e
c las es
13
3 .1.3. Camb io s d el arc hivo d e c o nfig urac i n
14
3 .1.3.1. Crear o mo d ific ar arc hivo s q ue c o ntro lan la c arg a d e c las es en JBo s s EAP 6
14
3 .1.3.2. jb o s s -d ep lo yment-s truc ture.xml
18
3 .1.3.3. Emp ac ar rec urs o s p ara el nuevo s is tema mo d ular d e c arg a d e c las es
18
3 .1.3.4. Camb iar la ub ic ac i n d e las p ro p ied ad es Res o urc eBund le
18
3 .1.3.5. Crear un m d ulo p ers o naliz ad o
19
3 .1.4. Camb io s d e inic io d e s es i n
20
3 .1.4.1. Mo d ific ar las d ep end enc ias d e reg is tro s
20
3 .1.4.2. Ac tualiz ac i n d el c d ig o d e ap lic ac i n p ara marc o s d e trab ajo d e reg is tro s d e
terc ero s
21
3 .1.4.3. Mo d ific ar el c d ig o p ara utiliz ar el nuevo marc o d e trab ajo d e inic io d e s es i n JBo s s
23
3 .1.5. Camb io s en el emp aq ue d e ap lic ac io nes
24
3 .1.5.1. Mo d ific ac i n d el emp aq ue d e EARs y WARs
24
3 .1.6 . Camb io s d e c o nfig urac i n d el ad ap tad o r d e rec urs o s y fuentes d e d ato s
25
3 .1.6 .1. Ac tualiz ac i n d e la ap lic ac i n d eb id o a c amb io s en la c o nfig urac i n
25
3 .1.6 .2. Ac tualiz ac i n d e la c o nfig urac i n d e la fuente d e d ato s
25
3 .1.6 .3. Ins talac i n y c o nfig urac i n d el c o ntro lad o r JDBC
26
3 .1.6 .4. Co nfig urac i n d e la fuente d e d ato s p ara Hib ernate o JPA
31
3 .1.6 .5. Ac tualiz ac i n d e la c o nfig urac i n d el ad ap tad o r d e rec urs o s
31
3 .1.7. Camb io s d e s eg urid ad
33
3 .1.7.1. Co nfig urac i n d e lo s c amb io s d e s eg urid ad d e la ap lic ac i n
33
3 .1.7.2. Ac tualiz ac i n d e ap lic ac io nes q ue us an Pic ketLink STS y Web Servic es
34
3 .1.8 . Camb io s d e JNDI
35
3 .1.8 .1. Ac tualiz ac i n d e lo s no mb res d e es p ac io s d e no mb res JNDI d e la ap lic ac i n
35
3 .1.8 .2. No mb res JNDI EJB p o rttiles
35
3 .1.8 .3. Revis i n d e las reg las d el es p ac io d e no mb res d e JNDI
36

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin


3 .1.8 .3. Revis i n d e las reg las d el es p ac io d e no mb res d e JNDI

36

3 .1.8 .4. Mo d ifiq ue la ap lic ac i n a s eg uir las nuevas reg las d e lo s es p ac io s d e no mb re JNDI
3 .1.8 .5. Ejemp lo s d e es p ac io s d e no mb res JNDI en lanz amiento s anterio res y la manera en
q ue s e es p ec ific an en JBo s s EAP 6
3 .2. Camb io s d ep end ientes d e la arq uitec tura d e s u ap lic ac i n y c o mp o nentes

37
38
38

3 .2.1. Revis i n d e lo s c amb io s d ep end iend o d e la arq uitec tura y c o mp o nentes d e s u ap lic ac i n
3 .2.2. Camb io s d e JPA y Hib ernate
40 39
3 .2.2.1. Ac tualiz ar ap lic ac io nes q ue utiliz an Hib ernate y/o JPA
3 .2.2.2. Co nfig urac i n d e c amb io s p ara las ap lic ac io nes q ue us an Hib ernate y JPA
3 .2.2.3. Pro p ied ad es d e la unid ad d e p ers is tenc ia
3 .2.2.4. Ac tualiz ac i n d e s u ap lic ac i n Hib ernate 3 p ara utiliz ar Hib ernate 4
3 .2.2.5. Pres ervar el c o mp o rtamiento exis tente d el valo r auto g enerad o d e la id entid ad d e
Hib ernate
3 .2.2.6 . Mig rac i n d e s u ap lic ac i n Hib ernate 3.3.x a Hib ernate 4.x
3 .2.2.7. Mig rac i n d e s u ap lic ac i n Hib ernate 3.5.x a Hib ernate 4.x
3 .2.2.8 . Mo d ific ac i n d e las p ro p ied ad es d e p ers is tenc ia p ara las ap lic ac io nes Hib ernate y
Seam mig rad as q ue ejec utan en un ento rno c o n c ls ters
3 .2.2.9 . Ac tualiz ac i n d e s u ap lic ac i n p ara q ue c ump la c o n lo s req uerimiento s d e la
es p ec ific ac i n JPA 2.0

40
40
41
43

3 .2.2.10 . Reemp lac e el c ac h d e s eg und o nivel JPA/Hib ernate c o n Infinis p an


3 .2.2.11. Pro p ied ad es c ac h d e Hib ernate

47
49

44
44
45
46
47

.2.2.12. Mig rac i n a Hib ernate Valid ato r 4


3
3 .2.3. Camb io s JSF
3 .2.3.1. Hab iltar ap lic ac io nes p ara utiliz ar vers io nes anterio res d e JSF

50
51
51

3 .2.4. Camb io s d e lo s s ervic io s web


3 .2.4.1. Camb io s d e lo s s ervic io s web

52
52

3 .2.5. Camb io s JAX-RS y RESTEas y


3 .2.5.1. Co nfig ure lo s c amb io s d e JAX-RS y RESTEas y

55
55

3 .2.6 . Camb io s en el d o minio d e s eg urid ad LDAP


3 .2.6 .1. Co nfig urac i n d e lo s c amb io s d el d o minio d e s eg urid ad LDAP

56
56

3 .2.7. Camb io s d e Ho rnetQ


57
3 .2.7.1. Ho rnetQ y NFS
57
3 .2.7.2. Co nfig urac i n d e un p uente JMS p ara mig rar mens ajes JMS exis tentes a JBo s s EAP 6
3 .2.7.3. Creac i n d e un p uente JMS
58 58
3 .2.7.4. Mig re s u ap lic ac i n p ara us ar Ho rnetQ c o mo p ro veed o r JMS
3 .2.7.5. Co nfig urac i n d e la mens ajera c o n Ho rnetQ
3 .2.8 . Camb io s d el us o d e c ls ters
3 .2.8 .1. Realiz ar c amb io s a s u ap lic ac i n p ara us o d e c ls ters
3 .2.8 .2. Imp lementac i n d e un Sing leto n HA

63
64
64
64
70

3 .2.9 . Camb io s en la imp lementac i n d e es tilo d e s ervic io


76
3 .2.9 .1. Ac tualiz ac i n d e ap lic ac io nes q ue utiliz an las imp lementac io nes d e es tilo d el s ervic io
76
3 .2.10 . Camb io s d e invo c ac io nes remo tas
76
3 .2.10 .1. Mig rac i n d e ap lic ac io nes imp lementad as d e JBo s s EAP 5 q ue realiz an invo c ac io nes
remo tas en JBo s s EAP 6
76
3 .2.10 .2. Invo c ac i n d e un b ean d e s es i n remo tamente us and o JNDI
79
3 .2.10 .3. Referenc ia d e no mb rad o JNDI EJB
81

3 .2.11. Camb io s d e EJB 2.x


3 .2.11.1. Ac tualiz ac i n d e ap lic ac io nes q ue utiliz an EJB 2.x

82
82

3 .2.12. Camb io s en JBo s s AO P


3 .2.12.1. Ac tualiz ac i n d e ap lic ac io nes q ue utiliz an JBo s s AO P

89
89

3 .2.13. Mig rac i n d e ap lic ac io nes Seam 2.2


3 .2.13.1. Mig rac i n d e arc hivad o res Seam 2.2 a JBo s s EAP 6

90
90

3 .2.13.2. Pro b lemas d e mig rac i n d el arc hivad o r Seam 2.2


3 .2.14. Mig rac i n d e ap lic ac io nes Sp ring

94
97

T able of Cont ent s


3 .2.14. Mig rac i n d e ap lic ac io nes Sp ring
3 .2.14.1. Mig rac i n d e ap lic ac io nes Sp ring

97
97

3 .2.15. O tro s c amb io s q ue afec tan la mig rac i n


3 .2.15.1. Familiarc es e c o n o tro s c amb io s q ue p ued an afec tar s u mig rac i n

97
97

3 .2.15.2. Camb io d el no mb re d el p ug -in d e Maven


3 .2.15.3. Mo d ific ac i n d e ap lic ac io nes c lientes

97
97

. .apt
C
. . . ulo
...4
. .. .Herramient
. . . . . . . . . as
. . .y. consejos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9. 8. . . . . . . . . .
4 .1. Rec urs o s d e ayud a c o n la mig rac i n
98
4 .1.1. Rec urs o s p ara ayud arle en s u mig rac i n
4 .1.2. Familiariz ac i n c o n las herramientas q ue le ayud an c o n la mig rac i n
4 .1.3. Us o d e Tattletale p ara enc o ntrar d ep end enc ias d e ap lic ac io nes

98
98
98

4 .1.4. Des c arg a e ins talac i n d e Tattletale


4 .1.5. Creac i n y revis i n d el rep o rte Tattletale

99
99

4 .1.6 . Us o d e la herramienta Iro nJac amar p ara mig rar c o nfig urac io nes d el ad ap atad o r d e
rec urs o s y la fuente d e d ato s

10 0

4 .1.7. Des c arg a e ins talac i n d e la herramienta d e mig rac i n Iro nJac amar
10 0
4 .1.8 . Us e la herramienta d e mig rac i n Iro nJac amar p ara c o nvertir un arc hivo d e c o nfig urac i n d e
la fuente d e d ato s
10 1
4 .1.9 . Us o d e la herramienta d e mig rac i n Iro nJac amar p ara c o nvertir un arc hivo d e c o nfig urac i n
d el ad ap tad o r d e rec urs o s
10 3
4 .2. Pro b lemas d e mig rac i n d e d ep urac i n
10 8
4 .2.1. Dep urar y res o lver p ro b lemas d e mig rac i n
4 .2.2. Dep urar y res o lver Clas s No tFo und Exc ep tio ns y No Clas s DefFo und Erro rs

10 8
10 8

4 .2.3. Bs q ued a d e la d ep end enc ia d el m d ulo JBo s s


4 .2.4. Bus c ar la JAR en la ins talac i n anterio r

10 8
10 9

4 .2.5. Dep urar y res o lver Clas s Cas tExc ep tio ns


4 .2.6 . Dep urar y res o lver Dup lic ateServic eExc ep tio ns

110
111

4 .2.7. Dep urar y res o lver erro res d e la p g ina d e d ep urac i n d e JBo s s Seam
4 .3. Revis e la mig rac i n d e las ap lic ac io nes d e ejemp lo
4 .3.1. Revis e la mig rac i n d e las ap lic ac io nes d e ejemp lo
4 .3.2. Mig rac i n d el ejemp lo Seam 2.2 JPA a JBo s s EAP 6
4 .3.3. Mig rac i n d el ejemp lo d e res ervas Seam 2.2 a JBo s s EAP 6

111
113
113
113
115

4 .3.4. Mig rac i n d el arc hivad o r d e res ervas d e Seam 2.2 a JBo s s EAP 6 : ins truc c io nes p as o p o r
p as o
118
4 .3.5. Co ns truc c i n e imp lementac i n d e JBo s s EAP vers i n 5.X d e la ap lic ac i n d e res ervas
Seam 2.2
119
4 .3.6 . Dep urac i n y res o luc i n d e erro res y exc ep c io nes d e imp lementac i n d el arc hivad o r d e
res ervas Seam 2.2
120
4 .3.7. Dep urac i n y res o luc i n d e erro res y exc ep c io nes en tiemp o d e ejec uc i n d el arc hivad o r
d e res ervas Seam 2.2
129
4 .3.8 . Revis i n d e un res umen d e lo s c amb io s realiz ad o s al mig rar la ap lic ac i n d e res ervas
Seam 2.2
133
. . . . orial
Hist
. . . . de
. . . revisiones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. 36
...........

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Prefacio
1. Convenciones del Document o
Este manual utiliza varias convenciones para resaltar algunas palabras y frases y llamar la
atencin sobre ciertas partes especficas de informacin.

1.1. Convenciones t ipogrficas


Se utilizan cuatro convenciones tipogrficas para llamar la atencin sobre palabras o frases
especficas. D ichas convenciones y las circunstancias en que se aplican son las siguientes:
Neg ri ta mo no espaci ad o
Utilizado para resaltar la entrada del sistema, incluyendo los comandos de shell, nombres de
archivos y rutas. Tambin sirve para resaltar teclas y combinaciones de teclas. Por ejemplo:
Para ver el contenido del archivo my_next_bestsel l i ng _no vel en su directorio
actual de trabajo, escriba el comando cat my_next_bestsel l i ng _no vel en el
intrprete de comandos de shell y pulse Enter para ejecutar el comando.
El ejemplo anterior incluye un nombre de archivo, un comando de shell y una tecla . Todo se
presenta en negrita-monoespaciado y distinguible gracias al contexto.
Las combinaciones de teclas se pueden distinguir de las individuales con el signo ms que conecta
cada partee de la combinacin de tecla. Por ejemplo:
Pulse Enter para ejecutar el comando.
Pulse C trl +Al t+F2 para pasar a una terminal virtual.
El primer ejemplo resalta una tecla particular a pulsar. El segundo ejemplo, resalta una combinacin
de teclas: un set de tres teclas pulsadas simultneamente.
Si se discute el cdigo fuente, los nombres de las clase, los mtodos, las funciones, los nombres de
variables y valores de retorno mencionados dentro de un prrafo sern presentados en Neg ri tamo no espaci ad o . Por ejemplo:
Las clases de archivo relacionadas incluyen fi l ename para sistema de archivos,
fi l e para archivos y d i r para directorios. Cada clase tiene su propio conjunto
asociado de permisos.
N eg rit a p ro p o rcio n al
Esta denota palabras o frases encontradas en un sistema, incluyendo nombres de aplicacin, texto
de cuadro de dilogo, botones etiquetados, etiquetas de cajilla de verificacin y botn de radio;
ttulos de men y ttulos del submen. Por ejemplo:
Seleccione Sist ema Pref eren cias R at n desde la barra del men principal
para lanzar Pref eren cias d e rat n . En la pestaa de Bo to nes, seleccione la
cajilla de rat n d e mano i zq ui erd a y luego haga clic en C errar para cambiar
el botn principal del ratn de la izquierda a la derecha (adecuando el ratn para la
mano izquierda).
Para insertar un carcter especial en un archivo g ed it , seleccione Ap licacio n es
Acceso rio s Map a d e caract eres de la barra del men. Luego, seleccione
B sq u ed a B u scar de la barra del men de Map a d e caract eres, escriba el

Prefacio

nombre del carcter en el campo de Bsq ued a y haga clic en Si g ui ente. El


carcter que busc ser resaltado en la T abl a d e caracteres. Haga doble clic en
ese carcter resaltado para colocarlo en el campo de T exto a co pi ar y luego
haga clic en el botn C o pi ar. Ahora regrese al documento y elija Mo d if icar
Peg ar de la barra de men de g ed it .
El texto anterior incluye nombres de aplicacin; nombres y elementos del men de todo el sistema;
nombres de men de aplicaciones especficas y botones y texto hallados dentro de una interfaz
grfica de usuario, todos presentados en negrita proporcional y distinguibles por contexto.
Itlicas-negrita monoespaciado o Itlicas-negrita proporcional
Ya sea negrita monoespaciado o negrita proporcional, la adicin de itlicas indica texto
reemplazable o variable. Las itlicas denotan texto que usted no escribe literalmente o texto
mostrado que cambia dependiendo de la circunstancia. Por ejemplo:
Para conectar a una mquina remota utilizando ssh, teclee ssh nombre de
usuario@ dominio.nombre en un intrprete de comandos de shell. Si la mquina
remota es exampl e. co m y su nombre de usuario en esa mquina es john, teclee
ssh jo hn@ exampl e. co m.
El comando mo unt -o remo unt file-system remonta el sistema de archivo
llamado. Por ejemplo, para volver a montar el sistema de archivo /ho me, el comando
es mo unt -o remo unt /ho me.
Para ver la versin de un paquete actualmente instalado, utilice el comando rpm -q
paquete. ste entregar el resultado siguiente: paquete-versin-lanzamiento.
Observe que las palabras resaltadas en itlicas nombre de usuario, dominio.nombre, sistema de
archivo, paquete, versin y lanzamiento. Cada palabra es un marcador de posicin, ya sea de texto
a ingresar cuando se ejecuta un comando o para un texto ejecutado por el sistema.
Aparte del uso estndar para presentar el ttulo de un trabajo, las itlicas denotan el primer uso de
un trmino nuevo e importante. Por ejemplo:
Publican es un sistema de publicacin de DocBook.

1.2. Convenciones del document o


Los mensajes de salida de la terminal o fragmentos de cdigo fuente se distinguen visualmente del
texto circundante.
Los mensajes de salida enviados a una terminal se muestran en ro mano mo no espaci ad o y se
presentan as:
books
books_tests

Desktop
Desktop1

documentation drafts mss


downloads
images notes

photos
scripts

stuff
svgs

svn

Los listados de cdigo fuente tambin se muestran en ro mano mo no espaci ad o , pero se


presentan y resaltan de la siguiente manera:
static int kvm_vm_ioctl_deassign_device(struct kvm *kvm,

struct kvm_assigned_pci_dev *assigned_dev)

int r = 0;

struct kvm_assigned_dev_kernel *match;

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

mutex_lock(& kvm->lock);

match = kvm_find_assigned_dev(& kvm->arch.assigned_dev_head,


assigned_dev->assigned_dev_id);
if (!match) {
printk(KERN_INFO "%s: device hasn't been assigned

before, "

"so cannot be deassigned\n", __func__);


r = -EINVAL;
goto out;

kvm_deassign_device(kvm, match);

kvm_free_assigned_device(kvm, match);
o ut:

mutex_unlock(& kvm->lock);
return r;

1.3. Not as y Advert encias


Finalmente, utilizamos tres estilos visuales para llamar la atencin sobre la informacin que de otro
modo se podra pasar por alto.

Nota
Una nota es una sugerencia, atajo o enfoque alternativo para una tarea determinada. Ignorar
una nota no debera tener consecuencias negativas, pero podra perderse de algunos trucos
que pueden facilitarle las cosas.

Importante
Los cuadros con el ttulo de importante dan detalles de cosas que se pueden pasar por alto
fcilmente: cambios de configuracin nicamente aplicables a la sesin actual, o servicios
que necesitan reiniciarse antes de que se aplique una actualizacin. Ignorar estos cuadros
no ocasionar prdida de datos, pero puede causar enfado y frustracin.

Aviso
Las advertencias no deben ignorarse. Ignorarlas muy probablemente ocasionar prdida de
datos.

2. Cmo obt ener ayuda y hacer sus coment arios


2.1. Necesit a ayuda?

Prefacio

Si encuentra dificultades con alguno de los procedimientos descritos en este documento, visite el
Portal del cliente de Red Hat en http://access.redhat.com. A travs del portal del cliente, usted podr:
buscar o navegar a travs de la base de artculos de soporte tcnico sobre productos de Red
Hat.
enviar un caso de soporte a Servicios de Soporte Global de Red Hat (GSS)
acceder a otra documentacin del producto.
Red Hat alberga una lista grande de correos electrnicos para discutir sobre software de Red Hat y
tecnologa. Encontrar un listado de las listas de correo disponibles al pblico en
https://www.redhat.com/mailman/listinfo. Haga clic en el nombre de la lista a la que quiera
suscribirse o para acceder a los archivos de listados.

2.2. Necesit amos sus coment arios!


Si encuentra un error tipogrfico en este manual o si ha pensado que hay alguna manera de
mejorar este manual, nos gustara escuchar sus sugerencias. Por favor complete un reporte en
Bugzilla: http://bugzilla.redhat.com/ relacionando el producto Plat af o rma d e ap licacio n es
emp resariales JB o ss.
Cuando enve un reporte de error no olvide mencionar el identificador' del manual: Migration_Guide
Si tiene alguna sugerencia para mejorar la documentacin, trate de ser tan especfico como sea
posible. Si ha encontrado algn error, por favor incluya el nmero de la seccin y parte del texto
que lo rodea para que sea ms fcil ubicarlo.

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Captulo 1. Introduccin
1.1. Plat aforma de aplicaciones empresariales JBoss 6 de Red Hat
Red Hat JBoss Enterprise Application Platform 6 (JBoss EAP 6) es una plataforma middleware
construida con base en estndares libres y cumple con los requerimientos de la especificacin Java
empresarial edicin 6. Integra JBoss Application Server 7 con clsters de alta disponibilidad,
mensajera, cach distribuido y otras tecnologas.
JBoss EAP 6 incluye una nueva estructura modular que permite la habilitacin de servicio solo
cuando se requiere, mejorando la velocidad de arranque.
La consola de administracin y la interfaz de lnea de comandos de administracin hacen
innecesario la modificacin de archivos de configuracin XML y agregan la habilidad para utilizar
scripts y automatizar tareas.
Adems, JBoss EAP 6 incluye APIs y marcos de trabajo de desarrollo para desarrollar rpidamente
aplicaciones Java EE seguras y escalables.
Reportar un error

1.2. Sobre la gua de migracin


JBoss EAP 6 es una implementacin poderosa, liviana y rpida de la especificacin de la edicin
empresarial de Java 6. La arquitectura se construye en el contenedor de servicios modular y habilita
servicios cuando se necesita cuando su aplicacin los requiere. D ebido a esta nueva arquitectura,
es posible que las aplicaciones que ejecutan en JBoss EAP 5 puedan necesitar modificaciones para
ejecutar en JBoss EAP 6.
El propsito de esta gua es el documentar los cambios que se requieren para ejecutar e
implementar de manera exitosa aplicaciones JBoss EAP 5.1 en JBoss EAP 6. Proporciona
informacin sobre la manera de resolver problemas de implementacin y ejecucin y cmo prevenir
cambios en el comportamiento de la aplicacin. Este es el primer paso hacia la nueva plataforma.
Una vez que la aplicacin se implemente y ejecute de manera exitosa, se pueden realizar planes
para actualizar componentes individuales para utilizar las nuevas funcionalidades de JBoss EAP 6.
Reportar un error

Capt ulo 2 . Preparacin para la migracin

Captulo 2. Preparacin para la migracin


2.1. Preparacin para la migracin
Ya que el servidor de aplicaciones est estructurado de manera diferente que en versiones
anteriores, es posible que quiera planear e investigar antes de tratar de migrar su aplicacin.
1. R evisi n d e lo n u evo y d if eren t e en JB o ss EAP 6
En este lanzamiento se cambiaron un nmero de cosas que pueden tener impacto en la
implementacin de las aplicaciones de JBoss EAP 6. D ichos cambios incluyen cambios a la
estructura del directorio de archivos, scripts, la configuracin de implementacin, la carga
de clases y las bsquedas JND I. Consulte Seccin 2.2, Revisin de lo nuevo y diferente en
JBoss EAP 6 para ver mayores detalles.
2. R evisi n d e la d o cu men t aci n d e in icio rp id o
Asegrese de revisar el captulo titulado Empiece a desarrollar aplicaciones en la Gua de
desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Contiene informacin importante sobre lo siguiente:
Java EE 6
El nuevo sistema modular de carga de clases
Cambios en la estructura de archivos
D escarga e instalacin de JBoss EAP 6
Cmo descargar e instalar JBoss D eveloper Studio
Cmo configurar Maven para su entorno de desarrollo
Cmo descargar y ejecutar las aplicaciones de ejemplo de inicio rpido que se envan
junto con el producto.
3. Ap ren d a a u t iliz ar d ep en d en cias JB o ss EAP 6 D ep en d en cies en su p ro yect o
Maven
Asegrese de revisar el captulo titulado Maven Guide in the Development Guide para JBoss
EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/. La
seccin Manage Project Dependencies contiene informacin importante sobre cmo configurar
su proyecto para utilizar arterfactos JBoss EAP Bill of Material (BOM).
4. An lisis y co mp ren si n d e su ap licaci n
Cada aplicacin es nica y debe comprender de manera completa los componentes y
arquitectura de la aplicacin existente antes de intentar migrar.

Importante
Antes de realizar modificaciones a su aplicacin asegrese de crear una copia de seguridad.

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Reportar un error

2.2. Revisin de lo nuevo y diferent e en JBoss EAP 6


In t ro d u cci n
La siguiente es una lista de diferencias importantes en JBoss EAP 6 del lanzamiento anterior.
C arg a d e clases co n b ase en m d u lo s
En JBoss EAP 5, la arquitectura de carga de clases era jerrquica. En JBoss EAP 6, la
carga de clases se basa en mdulos JBoss. Esto ofrece un verdadero aislamiento de
aplicaciones, esconde clases de implementacin del servidor y slo carga las clases que
su aplicacin necesita. La carga de clases es simultnea para un mejor rendimiento. Las
aplicaciones escritas para JBoss EAP 5 se deben modificar para especificar las
dependencias de mdulos y en algunos casos, reempacar archivadores. Para mayor
informacin, consulte la Carga de clases y mdulos en la Gua de desarrollo para JBoss EAP
6 en https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
G est i n d e d o min io s
En JBoss EAP 6, el servidor se puede ejecutar como un servidor autnomo en un dominio
administrado. En un dominio administrado puede configurar grupos enteros de servidores
a la vez, manteniendo las configuraciones sincronizadas a travs de toda la red de
servidores. Aunque esto no debe tener impacto en las aplicaciones construidas para
lanzamientos anteriores, esto puede simplificar la administracin de implementaciones en
mltiples servidores. Para mayor informacin, consulte la seccin sobre Dominios
administrados en la Gua de administracin y configuracin para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
C o n f ig u raci n d e imp lemen t aci n
Servid o res au t n o mo s y d o min io s ad min ist rad o s
JBoss EAP 5 utilizaba una configuracin de implementacin basada en perfiles.
Estos perfiles se encontraban en el directorio EAP_HOME/server/. Con
frecuencia las aplicaciones tenan mltiples archivos de configuracin para
seguridad, bases de datos, adaptadores de recursos y otras configuraciones. En
JBoss EAP 6, la configuracin de implementacin se realiza utilizando un
archivo. Este archivo se utiliza para configurar todos los servicios y subsistemas
utilizados para la implementacin. Un servidor autnomo se configura usando el
archivo EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml . Para
los servidores ejecutando en un dominio adminstrado, el servidor se configura
usando el archivo EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml . La
informacin que se encuentra en los mltiples archivos de configuracin de
JBoss EAP 5 se deben migrar al nuevo archivo nico de configuracin
O rd en d e imp lemen t acio n es
JBoss EAP 6 utiliza una inicializacin rpida y simultnea para la
implementacin, lo cual mejora el rendimiento y la eficiencia. En la mayora de los
casos, el servidor de aplicaciones puede determinar automticamente las
dependencias por adelantado y seleccione la estrategia de implementacin ms
eficiente. Sin embargo, las aplicaciones JBoss EAP 5 que consisten de mltiples
mdulos implementados como EARs y que utilizan las bsquedas JND I en lugar
de la inyeccin CD I o entradas de referencias de recursos pueden requerir
cambios en la configuracin.

10

Capt ulo 2 . Preparacin para la migracin

Est ru ct u ra d el d irect o rio y scrip t s


Como se mencion anteriormente, JBoss EAP 6 ya no utiliza una configuracin de
implementacin basada en perfiles as que no hay un directorio EAP_HOME/server/. Los
archivos de configuracin para servidores autnomos ahora se encuentran en el
directorio EAP_HOME/stand al o ne/co nfi g urati o n/ y las implementaciones se
encuentran en el directorio EAP_HOME/stand al o ne/d epl o yments/. Para los servidores
ejecutando en un dominio administrado, los archivos de configuracin se encuentran en el
directorio EAP_HOME/d o mai n/co nfi g urati o n/.
En JBoss EAP 5, el script Linux EAP_HOME/bi n/run. sh o el script Windows
EAP_HOME/bi n/run. bat se utilizaba para iniciar el servidor. En JBoss EAP 6, el script de
arranque del servidor depende de la manera en que ejecuta su servidor. El script Linux
EAP_HOME/bi n/stand al o ne. sh o el script Windows
EAP_HOME/bi n/stand al o ne. bat se utiliza para iniciar un servidor autnomo. El script
Linux EAP_HOME/bi n/d o mai n. sh o el script Windows EAP_HOME/bi n/d o mai n. bat se
utiliza para iniciar un dominio administrado.
B sq u ed as JN D I
JBoss EAP 6 ahora utiliza espacios de nombres JND I porttiles estandarizados. Las
aplicaciones escritas para JBoss EAP 5 que usan las bsquedas JND I se deben cambiar
para que sigan la nueva convencin de espacios de nombres JND I estndar. Para mayor
informacin sobre la sintaxis de nombrado JND I consulte Seccin 3.1.8.2, Nombres JND I
EJB porttiles .
Para mayor informacin consulte Funcionalidades nuevas y con cambios en JBoss EAP 6 en la Gua de
desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar un error

2.3. Revisin de la list a de funcionalidades no soport adas y ya no


ut iliz adas
Antes de migrar su aplicacin, debe tener en cuenta que algunas funcionalidades que estaban
disponibles en lanzamientos previos de JBoss EAP puede que ya no se soporten o ya no se utilicen.
Para ver una lista completa consulte la seccin de Funcionalidades no soportadas de las Notas de
lanzamiento para JBoss EAP 6 que se encuentra en el portal del cliente
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar un error

11

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Captulo 3. Migre su aplicacin


3.1. Cambios requeridos por la mayora de las aplicaciones
3.1.1. Revisin de los cambios requeridos por la mayora de las aplicaciones
Los cambios en la configuracin y carga de clases en JBoss EAP 6 tendrn impacto en casi todas
las aplicaciones. JBoss EAP 6 tambin utiliza la nueva sintaxis estndar de nombrado JND I porttil.
Estos cambios tendrn impacto en la mayora de las aplicaciones as que le sugerimos que revise la
siguiente informacin primero cuando migre su aplicacin.
1. Seccin 3.1.2.1, Actualizacin de la aplicacin debido a cambios en la carga de clases
2. Seccin 3.1.6.1, Actualizacin de la aplicacin debido a cambios en la configuracin
3. Seccin 3.1.8.1, Actualizacin de los nombres de espacios de nombres JND I de la
aplicacin
Reportar un error

3.1.2. Cambios en la carga de clases


3.1 .2 .1 . Act ualizaci n de la aplicaci n de bido a cam bio s e n la carga de clase s
La carga modular de clases es un cambio importante en JBoss EAP 6 y tendr impacto en casi
todas las aplicaciones. Revise la siguiente informacin primero al migrar su aplicacin.
1. Primero mire el empaque de su aplicacin y sus dependencias. Para mayores detalles
consulte: Seccin 3.1.2.3, Actualizar las dependencias de la aplicacin debido a los
cambios en la carga de clases
2. Si su aplicacin realiza registros entonces necesita especificar las dependencias correctas
de los mdulos. Para obtener mayor informacin consulte: Seccin 3.1.4.1, Modificar las
dependencias de registros
3. D ebido a los cambios en la carga modular de clases es posible que tenga que cambiar la
estructura de empaque de su EAR o WAR. Para obtener mayor informacin consulte:
Seccin 3.1.5.1, Modificacin del empaque de EARs y WARs
Reportar un error

3.1 .2 .2 . De pe nde ncias de m dulo s


R esu men
Un mdulo solo puede acceder sus propias clases y las clases de cualquier mdulo en el que tenga
una dependencia explcita o implcita.
Pro ced imien t o 3.1. D ep en d en cias d e m d u lo s
1. D ep en d en cias imp lcit as
Los implementadores dentro del servidor implcitamente agregan de manera automtica
algunas dependencias de mdulos utilizadas comnmente como javax. api y sun. jd k.
Esto hace que las clases sean visibles para la implementacin en el tiempo de ejecucin y

12

Capt ulo 3. Migre su aplicacin

libera al desarrollador de la tarea de agregar explcitamente las dependencias. Para obtener


detalles sobre la manera en que estas dependencias implcitas se agregan, consulte
Dependencias de mdulos implcitos en el captulo titulado Carga de clases y mdulos en la Gua
de desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
2. D ep en d en cias exp lcit as
Para otras clases, los mdulos se deben especificar explcitamente o de otra manera las
dependencias que faltan generan errores en la implementacin o en el tiempo de ejecucin.
Si una dependencia falta entonces ver rastros de C l assNo tFo und Excepti o ns o
No C l assD efFo und Erro rs en el registro del servidor. Si ms de un mdulo carga la misma
JAR o un mdulo carga una clase que extienda una clase cargada por un mdulo diferente
podr ver los rastros de C l assC astExcepti o ns en el registro del servidor. Para
especificar dependencias de manera explcita, modifique el MANIFEST . MF o cree un archivo
descriptor de implementacin jbo ss-d epl o yment-structure. xml especfico para
JBoss. Para mayor informacin sobre dependencias de mdulos consulte la Sinopsis de
carga de clases y mdulos en el captulo titulado Carga de clases y mdulos en la Gua de
desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar un error

3.1 .2 .3. Act ualizar las de pe nde ncias de la aplicaci n de bido a lo s cam bio s e n la
carga de clase s
R esu men
La carga de clases en JBoss EAP 6 es bastante diferente de las versiones anteriores de JBoss EAP.
La carga de clases ahora se basa en el proyecto JBoss Modules. En lugar de un solo cargador de
clases jerrquico que carga todas las JARs en una ruta de clases plana, cada biblioteca se
convierte en un mdulo que slo enlaza con los mdulos exactos de los que depende. Las
implementaciones en JBoss EAP 6 tambin son mdulos y no tienen acceso a las clases definidas
en JARs en el servidor de aplicaciones a menos de que se defina una dependencia explcita en esas
clases. Algunas dependencias de mdulos definidas por el servidor de aplicaciones se configuran
de manera automtica. Por ejemplo, si est implementando una aplicacin Java EE, se agrega una
dependencia en la API Java EE a su mdulo de manera automtica o implcita. Para ver una lista
completa de las dependencias que se agregan automticamente por parte del servidor consulte la
seccin Implicit Module Dependencies en el captulo titulado Carga de clases y mdulos en la Gua de
desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
T areas
Cuando migre su aplicacin a JBoss EAP 6, es posible que necesite realizar una o ms de las
siguientes tareas debido a los cambios en la carga modular de clases:
Seccin 3.1.2.2, D ependencias de mdulos
Seccin 4.1.3, Uso de Tattletale para encontrar dependencias de aplicaciones
Seccin 3.1.3.1, Crear o modificar archivos que controlan la carga de clases en JBoss EAP 6
Seccin 3.1.3.3, Empacar recursos para el nuevo sistema modular de carga de clases
Reportar un error

13

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

3.1.3. Cambios del archivo de configuracin


3.1 .3.1 . Cre ar o m o dificar archivo s que co nt ro lan la carga de clase s e n JBo ss EAP 6
R esu men
D ebido al cambio en JBoss EAP 6 para utilizar la carga de clases modular es posible que necesite
crear o modificar uno o ms archivos para agregar dependencias o para prevenir la carga de
dependencias de manera automtica. Para mayor informacin en la carga de clases y la
precedencia de carga de clases consulte el captulo titulado Carga de clases y mdulos en la Gua de
desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Los siguientes archivos se utilizan para controlar la carga de clases en JBoss EAP 6.
jb o ss- web .xml
Si defini un elemento <cl ass-l o ad i ng > en el archivo jbo ss-web. xml entonces tiene
que borrarlo. El comportamiento que esto generaba en JBoss EAP 5 ahora es el
comportamiento predeterminado de la carga de clases en JBoss EAP 6 as que ya no es
necesario. Si no borra este elemento entonces ver un ParseError y una
XMLStreamException en su registro del servidor.
Esto es un ejemplo de un elemento <cl ass-l o ad i ng > en el archivo jbo ss-web. xml
que se ha comentado.

< !DOCTYPE jboss-web PUBLIC

"-//JBoss//DTD Web Application 4.2//EN"

"http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
< jboss-web>
< !-
<class-loading java2ClassLoadingCompliance="false">

<loader-repository>

seam.jboss.org:loader=MyApplication

<loader-repositoryconfig>java2ParentDelegation=false</loader-repository-config>

</loader-repository>

</class-loading>
-->
</jboss-web>
MAN IFEST .MF
Man u almen t e mo d if icad o
D ependiendo de los componentes o mdulos que su aplicacin utilice es posible
que necesite agregar una o ms dependencias a este archivo. Las puede agregar
como entradas D epend enci es o C l ass-P ath.
El siguiente es un ejemplo de MANIFEST . MF modificado por un desarrollador:
M anifest-Version: 1.0
D ependencies: org.jboss.logmanager
C lass-Path: OrderManagerEJB.jar

14

Capt ulo 3. Migre su aplicacin

Si modifica este archivo, asegrese de incluir un caracter de nueva lnea al final


del archivo.
G en erad o u san d o Maven
Si usa Maven necesita modificar su archivo po m. xml para generar las
dependencias para el archivo MANIFEST . MF. Si su aplicacin usa EJB 3.0 es
posible que tenga una seccin en el archivo po m. xml que se vea as:

< plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-ejb-plugin</artifactId>

<configuration>

<ejbVersion>3.0</ejbVersion>

</configuration>
< /plugin>
Si el cdigo EJB 3.0 usa o rg . apache. co mmo ns. l o g necesita esa
dependencia en el archivo MANIFEST . MF. Para generar esa dependencia
agregue el elemento <pl ug i n> al archivo po m. xml as:

< plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-ejb-plugin</artifactId>

<configuration>

<ejbVersion>3.0</ejbVersion>

<archive>

<manifestFile>src/main/resources/METAINF/MANIFEST.MF</manifestFile>

</archive>

</configuration>
< /plugin>
En el ejemplo anterior el archivo src/mai n/reso urces/MET AINF/MANIFEST . MF solo necesita contener la entrada de la dependencia:

D ependencies: org.apache.commons.logging
Maven generar el archivo MANIFEST . MF completo:

M anifest-Version: 1.0
D ependencies: org.apache.commons.logging
jb o ss- d ep lo ymen t - st ru ct u re.xml
Este archivo es un descriptor de implementacin especfico de JBoss que se puede utilizar
para controlar la carga de clases de una manera detallada. Como el MANIFEST . MF, este
archivo se puede utilizar para agregar dependencias. Tambin puede prevenir el agregar
dependencias automticas, definir mdulos adicionales, cambiar el comportamiento de
cargas de clases aisladas de una implementacin EAR y agregar races de recursos
adicionales a un mdulo.

15

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

El siguiente es un ejemplo de un archivo jbo ss-d epl o yment-structure. xml que


agrega una dependencia para el mdulo JSF 1.2 y previene la carga automtica del
mdulo JSF 2.0.

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="com.sun.jsf-impl" slot="1.2" export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>
Para mayor informacin sobre este archivo consulte: Seccin 3.1.3.2, jboss-deploymentstructure.xml .
ap p licat io n .xml
En versiones anteriores de JBoss EAP, usted controlaba el orden de las implementaciones
dentro de un EAR usando el archivo jbo ss-app. xml . Esto ya no funciona as. La
especificacin Java EE6 proporciona el elemento <i ni ti al i ze-i n-o rd er> en el
appl i cati o n. xml el cual permite controlar el orden en que los mdulos Java EE se
implementan dentro de un EAR.
En la mayora de los casos no necesita especificar el orden de la implementacin. Si su
aplicacin usa inyecciones de dependencias y referencias de recursos para referirse a
componentes en mdulos externos, en la mayora de los casos el elemento
<i ni ti al i ze-i n-o rd er> no se requiere ya que el servidor de aplicaciones puede
determinar implcitamente la manera correcta y ptima de ordenar los componentes.
Vamos a asumir que tiene una aplicacin que contiene un myBeans. jar y una
myApp. war empacados dentro de un myApp. ear. Un servlet en el myApp. war usa una
anotacin @ EJB para inyectar un bean desde myBeans. jar. En este caso, el servidor de
aplicaciones tiene el conocimiento apropiado para asegurarse de que el componente EJB
est disponible antes de que se inicie el servlet y no tenga que utilizar el elemento
<i ni ti al i ze-i n-o rd er>.
Sin embargo, si ese servlet usa referencias remotas del estilo de bsqueda JND I de legado
como las siguientes para acceder al bean es posible que necesite especificar el orden de
los mdulos.

i nit() {
Context ctx = new InitialContext();
ctx.lookup("TheBeanInMyBeansModule");

16

Capt ulo 3. Migre su aplicacin

}
En este caso, el servidor no puede determinar que el componente EJB se encuentra en la
myBeans. jar y necesita reforzar que los componentes en la myBeans. jar sean
inicializados antes que los componentes en myApp. war. Para lograr esto, configure el
elemento <i ni ti al i ze-i n-o rd er> como true y especifique el orden de los mdulos
myBeans. jar y myApp. war en el archivo appl i cati o n. xml .
El siguientes es un ejemplo que usa el elemento <i ni ti al i ze-i n-o rd er> para
controlar el orden de la implementacin. La myBeans. jar se implementa antes que el
archivo myApp. war.

< application xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="6"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/application_6.xsd">

<application-name>myApp</application-name>

<initialize-in-order>true</initialize-in-order>

<module>

<ejb>myBeans.jar</ejb>

</module>

<module>

<web>

<web-uri>myApp.war</web-uri>

<context-root>myApp</context-root>

</web>

</module>
< /application>
El esquema para el archivo appl i cati o n. xml se puede encontrar en
http://java.sun.com/xml/ns/javaee/application_6.xsd.

Nota
D ebe tener en cuenta que la configuracin del elemento <i ni ti al i ze-i no rd er> como true demora la implementacin. Es preferible definir dependencias
apropiadas usando las inyecciones de dependencias o referencias de recursos ya
que le da al contenedor mayor flexibilidad optimizando las implementaciones.
jb o ss- ejb 3.xml
El descriptor de implementacin jbo ss-ejb3. xml reemplaza el descriptor de
implementacin jbo ss. xml para sobreescribir y agregar a las funcionalidades
proporcionadas por el descriptor de implementacinejb-jar. xml de la edicin
empresarial Java (EE). El nuevo archivo es incompatible con jbo ss. xml y el jbo ss. xml
ahora se ignora en las implementaciones.
lo g in - co n f ig .xml
El archivo l o g i n-co nfi g . xml ya no se utiliza para la configuracin de la seguridad.
La seguridad ahora se configura en el elemento <securi ty-d o mai n> en el archivo de

17

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

configuracin del servidor. Para un servidor autnomo, este es el archivo


stand al o ne/co nfi g urati o n/stand al o ne. xml . Si est ejecutando su servidor en un
dominio administrado, este es el archivo d o mai n/co nfi g urati o n/d o mai n. xml .
Reportar un error

3.1 .3.2 . jbo ss-de plo ym e nt -st ruct ure .xm l


jbo ss-d epl o yment-structure. xml es un nuevo descriptor de implementacin opcional para
JBoss EAP 6. Este descriptor de implementacin proporciona control sobre la carga de clases en la
implementacin.
El esquema XML para este descriptor de implementacin se encuentra en
EAP_HOME/d o cs/schema/jbo ss-d epl o yment-structure-1_2. xsd
Reportar un error

3.1 .3.3. Em pacar re curso s para e l nue vo sist e m a m o dular de carga de clase s
R esu men
En versiones anteriores de JBoss EAP, todos los recursos dentro del directorio WEB-INF/ se
agregaron a la ruta de clase WAR. En JBoss EAP 6, los artefactos de la aplicacin web solo se
cargan desde los directorios WEB-INF/cl asses y WEB-INF/l i b. Si no se empacan los artefactos
de la aplicacin en los lugares especificados se pueden generar C l assNo tFo und Excepti o n,
No C l assD efErro r u otros errores en tiempo de ejecucin.
Para resolver estos errores de carga de clases debe modificar la estructura su archivador de
aplicaciones o definir un mdulo personalizado.
Mo d if icar el emp aq u e d e recu rso s
Para hacer los recursos disponibles solo para la aplicacin tiene que poner juntos los
archivos de propiedades u otros artefactos con la WAR movindolos al directorio WEBINF/cl asses/ o WEB-INF/l i b/. Este enfoque se describe en ms detalles aqu:
Seccin 3.1.3.4, Cambiar la ubicacin de las propiedades ResourceBundle
C rear u n m d u lo p erso n aliz ad o
Si quiere hacer disponibles recursos personalizados para todas las aplicaciones
ejecutando en el servidor de JBoss EAP 6 tiene que crear un mdulo personalizado. Este
enfoque se describe en ms detalle aqu: Seccin 3.1.3.5, Crear un mdulo
personalizado
Reportar un error

3.1 .3.4 . Cam biar la ubicaci n de las pro pie dade s Re so urce Bundle
R esu men
En versiones anteriores de JBoss EAP, el directorio EAP_HOME/server/SERVER_NAME/co nf/ se
encontraba en la ruta de clase y disponible para la aplicacin. Para hacer las propiedades
disponibles para la ruta de clase de la aplicacin en JBoss EAP 6, debe empacarlas dentro de su
aplicacin.
Pro ced imien t o 3.2. C amb iar la u b icaci n d e las p ro p ied ad es R eso u rceB u n d le

18

Capt ulo 3. Migre su aplicacin

1. Si est implementando un archivador WAR tiene que empacar esas propiedades en la


carpeta WEB-INF/cl asses/ del WAR.
2. Si quiere que esas propiedades sean accequibles para todos los componentes en un EAR
entonces debe empacarlos en la raz de una JAR y luego poner la JAR en la carpeta l i b/
del EAR.
Reportar un error

3.1 .3.5 . Cre ar un m dulo pe rso nalizado


El siguiente procedimiento describe la manera de crear un mdulo personalizado con el fin de hacer
disponibles los archivos de propiedades y otros recursos para todas las aplicaciones ejecutando
en el servidor de JBoss EAP.
Pro ced imien t o 3.3. C rear u n m d u lo p erso n aliz ad o
1. Crear y poblar la estructura del directorio mo d ul e/.
a. Crear una estructura de directorio bajo el directorio EAP_HOME/mo d ul e para que
contenga los archivos y JARs. Por ejemplo:
$ cd EAP_HOME/mo d ul es/
$ mkd i r -p myo rg -co nf/mai n/pro perti es
b. Mueva el archivo de propiedades al directorio EAP_HOME/mo d ul es/myo rg co nf/mai n/pro perti es/ que cre en el paso anterior.
c. Cree un archivo mo d ul e. xml en el directorio EAP_HOME/mo d ul es/myo rg co nf/mai n/ conteniendo el siguiente XML:

< module xmlns="urn:jboss:module:1.1" name="myorg-conf">

<resources>

<resource-root path="properties"/>

</resources>
< /module>
2. Modifique el subsistema ee en el archivo de configuracin del servidor. Puede utilizar el CLI
JBoss o puede modificar manualmente el archivo.
A. Siga estos pasos para modificar el archivo de configuracin usando el CLI JBoss.
a. Inicie el servidor y conctese al CLI de administracin.
A. Para Linux, ingrese lo siguiente en la lnea de comandos:
$ EAP_HOME/bin/jboss-cli.sh --connect
B. Para Windows, ingrese lo siguiente en la lnea de comandos:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
D ebe ver la siguiente respuesta:
Conectado a un controlador autnomo en localhost:9999

19

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

b. Para crear el elemento myo rg -co nf <global-modules> en el subsistema ee


escriba lo siguiente en la lnea de comandos:
/subsystem=ee:write-attribute(name=global-modules, value=
[{"name"=>"myorg-conf","slot"=>"main"}])
D ebe ver el siguiente resultado:
{"outcome" => "success"}
B. Siga estos pasos si prefiere modificar manualmente el archivo de configuracin del
servidor.
a. D etenga el servidor y abra el archivo de configuracin del servidor en un editor
de texto. Si est ejecutando un servidor autnomo este es el archivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml o el archivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml si est ejecutando un
dominio administrado.
b. Identifique el subsistema ee y agregue el mdulo global para myo rg -co nf. El
siguiente es un ejemplo del elemento subsistema ee modificado para incluir el
elemento myo rg -co nf:

< subsystem xmlns="urn:jboss:domain:ee:1.0" >

<global-modules>

<module name="myorg-conf" slot="main" />

</global-modules>
< /subsystem>
3. Asumiendo que copi un archivo llamado my. pro perti es en la ubicacin correcta del
mdulo ahora puede cargar archivos de propiedades usando cdigo similar al siguiente:

T hread.currentThread().getContextClassLoader().getResource("my.prop
erties");
Reportar un error

3.1.4 . Cambios de inicio de sesin


3.1 .4 .1 . Mo dificar las de pe nde ncias de re gist ro s
R esu men
JBoss LogManager soporta fachadas para todos los marcos de trabajo de registros de manera que
pueda mantener su cdigo actual de registro o mover a la nueva infraestructura de registro de
JBoss. Independiente de su decision, debido a los cambios de carga de clases modulares
probablemente necesita modificar su aplicacin para agregar las dependencias requeridas.
Pro ced imien t o 3.4 . Act u aliz aci n d el c d ig o d e reg ist ro s d e la ap licaci n

20

Capt ulo 3. Migre su aplicacin

1. Seccin 3.1.4.2, Actualizacin del cdigo de aplicacin para marcos de trabajo de registros
de terceros
2. Seccin 3.1.4.3, Modificar el cdigo para utilizar el nuevo marco de trabajo de inicio de
sesin JBoss
Reportar un error

3.1 .4 .2 . Act ualizaci n de l c digo de aplicaci n para m arco s de t rabajo de re gist ro s


de t e rce ro s
R esu men
En JBoss EAP 6, las dependencias de registros para marcos de trabajo de terceros como Apache
Commons Logging, Apache log4j, SLF4J y Java Logging se agregan por defecto. En la mayora de
los casos es preferible utilizar el marco de trabajo de registro que el contenedor JBoss EAP
proporciona. Sin embargo, si requiere funcionalidades especificas proporcionadas por un marco de
trabajo de terceros, debe excluir el mdulo JBoss EAP correspondiente de su implementacin. Note
que aunque su implementacin utiliza el marco de trabajo de registro de terceros, los registros del
servidor continan utilizando la configuracin del subsistema de registro de JBoss EAP.
Los siguientes procedimientos demuestran cmo excluir el mdulo JBoss EAP 6
o rg . apache. l o g 4 j de su implementacin. El primer procedimiento funciona en cualquier
lanzamiento de JBoss EAP 6. El segundo procedimiento aplica solamente a JBoss EAP 6.3 o
posteriores.
Pro ced imien t o 3.5. C o n f ig u raci n d e JB o ss EAP 6 p ara u t iliz ar u n arch ivo
lo g 4 j.p ro p ert ies o lo g 4 j.xml
Este procedimiento funciona para todas las versiones de JBoss EAP 6.

Nota
Ya que este mtodo utiliza un archivo de configuracin log4j ya no podr cambiar la
configuracin de registro log4j en la ejecucin.
1. Cree un jbo ss-d epl o yment-structure. xml con el siguiente contenido:

< jboss-deployment-structure>

<deployment>

<!-- Exclusions allow you to prevent the server from


automatically adding some dependencies -->

<exclusions>

<module name="org.apache.log4j" />

</exclusions>

</deployment>
< /jboss-deployment-structure>
2. Ponga el archivo jbo ss-d epl o yment-structure. xml en el directorio MET A-INF/ o en el
directorio WEB-INF/ si est implementando un WAR o en el directorio MET A-INF/ si est
implementando un EAR. Si su implementacin incluye implementaciones dependientes hijas
tambin debe excluir el mdulo para cada subimplementacin.

21

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

3. Incluya el archivo l o g 4 j. pro perti es o l o g 4 j. xml en el directorio l i b/ de su EAR o el


directorio WEB-INF/cl asses/ de su implementacin WAR. Si prefiere poner el archivo en el
directorio l i b/ de su WAR, debe especificar la ruta <reso urce-ro o t> en el archivo
jbo ss-d epl o yment-structure. xml .

< jboss-deployment-structure>

<deployment>

<!-- Exclusions allow you to prevent the server from


automatically adding some dependencies -->

<exclusions>

<module name="org.apache.log4j" />

</exclusions>

<resources>

<resource-root path="lib" />

</resources>

</deployment>
< /jboss-deployment-structure>
4. Inicie el servidor JBoss EAP 6 con el siguiente argumento de tiempo de ejecucin para
prevenir que se presente una C l assC astExcepti o n en la consola cuando implementa la
aplicacin:
-Dorg.jboss.as.logging.per-deployment=false
5. Implemente su aplicacin.
Pro ced imien t o 3.6 . C o n f ig u raci n d e las d ep en d en cias d e reg ist ro p ara JB o ss EAP 6 .3
o p o st erio res
En JBoss EAP 6.3 y posteriores puede utilizar el nuevo atributo del sistema de registro ad d l o g g i ng -api -d epend enci es para excluir dependencias del marco de trabajo de registro de
terceros. Los siguientes pasos demuestran cmo modificar este atributo de registro en un servidor
autnomo JBoss EAP.
1. Inicie el servidor JBoss EAP 6 con el siguiente argumento de tiempo de ejecucin para
prevenir que se presente una C l assC astExcepti o n en la consola cuando implementa la
aplicacin:
-Dorg.jboss.as.logging.per-deployment=false
2. Abra una terminal y conctese al CLI de administracin.
A. Para Linux, ingrese lo siguiente en la lnea de comandos:
$ EAP_HOME/bin/jboss-cli.sh --connect
B. Para Windows, ingrese lo siguiente en la lnea de comandos:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
3. Modifique el atributo ad d -l o g g i ng -api -d epend enci es en el subsistema de registro.
Este atributo controla si el contenedor debe agregar dependencias implcitas API de registro
a sus implementaciones.

22

Capt ulo 3. Migre su aplicacin

Si se configura como true, el cual es el valor predeterminado entonces se agregan todas


las dependencias API de registro implcitas.
Si se configura como fal se entonces las dependencias no se agregan a sus
implementaciones.
Para excluir las dependencias del marco de trabajo de registro de terceros debe establecer
este atributo como fal se utilizando el siguiente comando:
/subsystem= l o g g i ng : wri te-attri bute(name= ad d -l o g g i ng -api d epend enci es, val ue= fal se)
Este comando agrega el elemento <ad d -l o g g i ng -api -d epend enci es> al subsistema
l o g g i ng del archivo de configuracin stand al o ne. xml .

< subsystem xmlns="urn:jboss:domain:logging:1.4">

<add-logging-api-dependencies value="false"/>

....
< /subsystem>
4. Implemente su aplicacin.
Reportar un error

3.1 .4 .3. Mo dificar e l c digo para ut ilizar e l nue vo m arco de t rabajo de inicio de
se si n JBo ss
R esu men
Para utilizar el nuevo marco de trabajo, cambie sus importaciones y su cdigo as:
Pro ced imien t o 3.7. Mo d if icar el c d ig o y las d ep en d en cias p ara u t iliz ar el marco d e
t rab ajo d e in icio d e sesi n JB o ss
1. C amb ie su s imp o rt acio n es y su c d ig o d e in icio d e sesi n
El siguiente es un ejemplo del cdigo que utiliza el nuevo marco de trabajo de inicio de
sesin JBoss:

i mport org.jboss.logging.Level;
i mport org.jboss.logging.Logger;
p rivate static final Logger logger =
Logger.getLogger(MyClass.class.toString());
i f(logger.isTraceEnabled()) {

logger.tracef("Starting...", subsystem);

}
2. Ag reg u e la d ep en d en cia d e in icio d e sesi n
La JAR que contiene las clases de inicio de sesin de JBoss se encuentra en el mdulo
llamado o rg . jbo ss. l o g g i ng . Su archivo MANIFEST -MF se debe ver as:

23

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Manifest-Version: 1.0
Dependencies: org.jboss.logging
Para mayor informacin sobre cmo encontrar la dependencia del mdulo consulte
Seccin 3.1.2.3, Actualizar las dependencias de la aplicacin debido a los cambios en la
carga de clases and Seccin 4.2.1, D epurar y resolver problemas de migracin .
Reportar un error

3.1.5. Cambios en el empaque de aplicaciones


3.1 .5 .1 . Mo dificaci n de l e m paque de EARs y WARs
R esu men
Cuando migra su aplicacin puede que tenga que cambiar la estructura del empaque de su EAR o
WAR debido al cambio en la carga modular de clases. Las dependencias de mdulos se cargan en
este orden especfico:
1. D ependencias del sistema
2. D ependencias del usuario
3. Recursos locales
4. D ependencias de inter-implementacin
Pro ced imien t o 3.8. Mo d if icaci n d el emp aq u e d e arch ivad o res
1. Emp aq u e d e u n WAR
Un WAR es un solo mdulo y todas las clases en el WAR se cargan con el mismo cargador
de clases. Esto significa que las clases empacadas en el directorio WEB-INF/l i b/ se tratan
de igual manera que las clases en el directorio WEB-INF/cl asses.
2. Emp aq u e d e u n EAR
Un EAR consiste de mltiples mdulos. El directorio EAR /l i b/ es un solo mdulo y toda
subimplementacin EJB jar o WAR dentro del EAR es un mdulo separado. Las clases no
tienen acceso a las clases en otros mdulos dentro del EAR a menos de que se hayan
definido dependencias explcitas. Las subimplementaciones siempre tienen una
dependencia automtica en el mdulo padre el cual les proporciona acceso a las clases en
el directorio EAR /l i b/. Sin embargo, las subimplementaciones no siempre tienen una
dependencia automtica para permitirles el acceso entre ellas. Este comportamiento se
controla configurando el elemento <ear-subd epl o yments-i so l ated > en la
configuracin del subsistema ee as:

< subsystem xmlns="urn:jboss:domain:ee:1.0" >


<ear-subdeployments-isolated>false</ear-subdeployments-isolated>
< /subsystem>
Por defecto esto se configura como falso, lo cual permite que las subimplementaciones vean
las clases que pertenecen a otras subimplementaciones dentro del EAR.

24

Capt ulo 3. Migre su aplicacin

Para mayor informacin sobre la carga de clases consulte el captulo titulado Mdulos y
carga de clases en la Gua de desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar un error

3.1.6. Cambios de configuracin del adapt ador de recursos y fuent es de


dat os
3.1 .6 .1 . Act ualizaci n de la aplicaci n de bido a cam bio s e n la co nfiguraci n
En JBoss EAP 5, los servicios y subsistemas se configuraban en muchos archivos diferentes. En
JBoss EAP 6, la configuracin se realiza principalmente en un archivo. Si su aplicacin usa uno de
las siguientes recursos o servicios es posible que necesite cambios en la configuracin.
1. Si su aplicacin usa una fuente de datos consulte: Seccin 3.1.6.2, Actualizacin de la
configuracin de la fuente de datos .
2. Si su aplicacin usa JPA y actualmente une las JARs Hibernate consulte lo siguiente para
ver sus opciones de migracin: Seccin 3.1.6.4, Configuracin de la fuente de datos para
Hibernate o JPA .
3. Si su aplicacin usa un adaptador de recursos consulte: Seccin 3.1.6.5, Actualizacin de
la configuracin del adaptador de recursos .
4. Revise lo siguiente para obtener mayor informacin sobre cmo configurar los cambios para
la seguridad bsica: Seccin 3.1.7.1, Configuracin de los cambios de seguridad de la
aplicacin .
Reportar un error

3.1 .6 .2 . Act ualizaci n de la co nfiguraci n de la fue nt e de dat o s


R esu men
En versiones anteriores de JBoss EAP, la configuracin de la fuente de datos JCA se defina en un
archivo con el sufijo *-d s. xml . Luego este archivo se implementaba en el directorio d epl o y/ del
servidor o se empacaba con la aplicacin. El controlador JD BC se copiaba al directorio
server/l i b/ o se empacaba en el directorio WEB-INF/l i b/ de la aplicacin. Mientras que este
mtodo de configuracin de una fuente de datos todava se soporta para el desarrollo, no se
recomienda para produccin ya que no se soporta por las herramientas de administrativas y de
gestin de JBoss.
En JBoss EAP 6, la fuente de datos se configura en el archivo de configuracin del servidor. Si la
instancia de JBoss EAP 6 est ejecutando en un dominio administrado, la fuente de datos se
configura en el archivo d o mai n/co nfi g urati o n/d o mai n. xml . Si la instancia de JBoss EAP 6
est ejecutando como un servidor autnomo, la fuente de datos est configurada en el
stand al o ne/co nfi g urati o n/stand al o ne. xml fi l e. Las fuentes de datos configuradas de
esta manera se pueden administrar y controlar usando las interfaces de administracin JBoss,
incluyendo la consola de administracin web y la interfaz de la lnea de comandos (CLI). Estas
herramientas facilitan el administrar las implementaciones y configurar mltiples servidores
ejecutando en un dominio administrado.
La siguiente seccin describe la manera de modificar la configuracin de su fuente de datos de
manera que se pueda administrar y soportar por medio de las herramientas de administracin
disponibles.

25

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Mig rar a u n a co n f ig u raci n ad min ist rab le d e la f u en t e d e d at o s p ara JB o ss EAP 6


Un controlador que cumple con los requerimientos de JD BC 4.0 se puede instalar como una
implementacin o como un mdulo ncleo. Un controlador que cumple con los requerimientos de
JD BC 4.0 contiene un archivo MET A-INF/servi ces/java. sq l . D ri ver que especifica el nombre
de la clase del controlador. Un controlador que no cumpla con los requerimientos de JD BC 4.0
requiere pasos adicionales. Para mayores detalles sobre cmo hacer que un controlador cumpla
con los requerimientos de JD BC 4.0 y cmo actualizar su configuracin actual de la fuente de datos
con una que sea administrada por la consola de administracin web y CLI, consulte
Seccin 3.1.6.3, Instalacin y configuracin del controlador JD BC .
Si su aplicacin usa Hibernate o JPA, puede que requiera cambios adicionales. Consulte
Seccin 3.1.6.4, Configuracin de la fuente de datos para Hibernate o JPA para obtener mayor
informacin.
U se la h erramien t a d e mig raci n Iro n Jacamar p ara co n vert ir lo s d at o s d e co n f ig u raci n
Puede utilizar la herramienta IronJacamar para migrar las configuraciones del adaptador de
recursos y la fuente de datos. Esta herramienta convierte los archivos de configuracin de estilo *d s. xml al formato esperado por JBoss EAP 6. Para mayor informacin, consulte: Seccin 4.1.6,
Uso de la herramienta IronJacamar para migrar configuraciones del adapatador de recursos y la
fuente de datos .
Reportar un error

3.1 .6 .3. Inst alaci n y co nfiguraci n de l co nt ro lado r JDBC


R esu men
El controlador JD BC se puede instalar en el contenedor en una de las siguientes dos maneras:
Como una implementacin
Como un mdulo ncleo
Los pros y los contras de cada enfoque se pueden ver a continuacin.
En JBoss EAP 6, la fuente de datos se configura en el archivo de configuracin del servidor. Si la
instancia de JBoss EAP 6 est ejecutando en un dominio administrado, la fuente de datos se
configura en el archivo d o mai n/co nfi g urati o n/d o mai n. xml . Si la instancia de JBoss EAP 6
est ejecutando como un servidor autnomo entonces la fuente de datos se configura en el archivo
stand al o ne/co nfi g urati o n/stand al o ne. xml . Puede encontrar informacin de referencia
del esquema, el cual es el mismo para ambos modos, en el directorio d o c/ de la instalacin de
JBoss EAP 6. Para esta explicacin vamos a asumir que el servidor est ejecutando como un
servidor autnomo y la fuente de datos se configura en el archivo stand al o ne. xml .
Pro ced imien t o 3.9 . In st alaci n y co n f ig u raci n d el co n t ro lad o r JD B C
1. In st ale el co n t ro lad o r JD B C .
a. In st ale el co n t ro lad o r JD B C co mo imp lemen t aci n .
Esta es la manera recomendada de instalar el controlador. Cuando el controlador
JD BC se instala como una implementacin, se implementa como una JAR normal. Si
la instancia de JBoss EAP 6 est ejecutando como un servidor autnomo, copie la
JAR que cumple con los requerimientos de JD BC 4.0 en el directorio

26

Capt ulo 3. Migre su aplicacin

EAP_HOME/stand al o ne/d epl o yments/. Para un dominio administrado tiene que


utilizar la consola de administracin o el CLI de administracin para implementar la
JAR en los grupos de servidores.
El siguiente es un ejemplo de un controlador MySQL JD BC instalado como una
implementacin en un servidor autnomo:
$cp mysql-connector-java-5.1.15.jar
EAP_HOME/stand al o ne/d epl o yments/
Cualquier controlador que cumple con los requerimientos de JD BC 4.0 es reconocido
automticamente y se instala en el sistema por nombre y versin. Una JAR que
cumple con los requerimientos de JD BC 4.0 contiene un archivo de texto llamado
MET A-INF/servi ces/java. sq l . D ri ver, el cual especifica los nombres de las
clases controladoras. Si el controlador no cumple con los requerimientos de JD BC
4.0 entonces se puede hacer que se implemente de una de las siguientes maneras:
Cree y agregue un archivo java. sq l . D ri ver a la JAR bajo la ruta MET AINF/servi ces/. Este archivo debe contener el nombre de la clase del
controlador, por ejemplo:
co m. mysq l . jd bc. D ri ver
Cree un archivo java. sq l . D ri ver en el directorio de implementaciones. Para
una instancia de JBoss EAP 6 ejecutando como un servidor autnomo, el archivo
se debe poner aqu: EAP_HOME/stand al o ne/d epl o yments/MET AINF/servi ces/java. sq l . D ri ver. Si el servidor est en un dominio
administrado entonces debe utilizar la consola de administracin o el CLI de
administracin para implementar el archivo.
Las ventajas de este enfoque son:
Este es el mtodo ms fcil ya que no hay necesidad de definir un mdulo.
Cuando el servidor est ejecutando en un dominio administrado, las
implementaciones que usan este enfoque se propagan de manera automtica en
todos los servidores en el dominio. Esto significa que el administrador no necesita
distribuir el controlador JAR manualmente.
Las desventajas de este enfoque son:
Si el controlador JD BC consiste de mas de una JAR, por ejemplo el controlador
JAR ms una licencia JAR dependiente o una JAR de localizacin, no puede
instalar el controlador como una implementacin. Tiene que instalar el
controlador JD BC como un mdulo ncleo.
Si el controlador no cumple con los requerimientos de JD BC 4.0 entonces se debe
crear un archivo que contenga los nombres de las clases controladoras y tiene
que ser importado en la JAR o superpuesto en el directorio d epl o yments/.
b. In st alaci n d el co n t ro lad o r JD B C co mo m d u lo cen t ral .
Para instalar un controlador JD BC como un mdulo ncleo, tiene que crear una
estructura de ruta de archivos bajo el directorio EAP_HOME/mo d ul es/. Esta
estructura contiene la JAR del controlador JD BC, las JARS de localizacin o las
licencias adicionales del vendedor y un archivo mo d ul e. xml para definir el
mdulo.

27

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

A. In st ale el co n t ro lad o r MySQ L JD B C co mo m d u lo n cleo


i. Cree la estructura del directorio
EAP_HOME/mo d ul es/co m/mysq l /mai n/
ii. En el subdirectorio mai n/, cree un archivo mo d ul e. xml que contenga la
siguiente definicin de mdulo para el controlador MySQL JD BC:

< ?xml version="1.0" encoding="UTF-8"?>


< module xmlns="urn:jboss:module:1.0"
name="com.mysql">
< resources>

<resource-root path="mysql-connector-java5.1.15.jar"/>
< /resources>
< dependencies>

<module name="javax.api"/>
< /dependencies>
< /module>
El nombre del mdulo, " com.mysql" , coincide con la estructura del
directorio para este mdulo. El elemento <d epend enci es> se usa para
especificar las dependencias de este mdulo en otros mdulos. En este
caso, tal como los es con todas las fuentes de datos JD BC, depende de
las APIs JD BC Java que se definen en otro mdulo llamado javax. api .
Ese mdulo se encuentra bajo el directorio
mo d ul es/system/l ayers/base/javax/api /mai n/.

Nota
Asegrese de NO tener un espacio al principio del archivo
mo d ul e. xml de otra manera obtendr un error " New
missing/unsatisfied dependencies" para este controlador.
iii. Copie la JAR del controlador MySQL JD BC en el directorio
EAP_HOME/mo d ul es/co m/mysq l /mai n/:
$ cp mysql-connector-java-5.1.15.jar
EAP_HOME/mo d ul es/co m/mysq l /mai n/
B. In st alaci n d el co n t ro lad o r IB M D B 2 JD B C y la JAR licen cia co mo u n
m d u lo n cleo .
Este ejemplo se proporciona slo para demostrar la manera de implementar
controladores que requieren JARs adems de la JAR del controlador JD BC.
i. Cree la estructura del directorio
EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/.
ii. En el subdirectorio mai n/, cree un archivo mo d ul e. xml que contenga la
siguiente definicin de mdulo para el controlador IBM D B2 JD BC y
licencia:

28

Capt ulo 3. Migre su aplicacin

< ?xml version="1.0" encoding="UTF-8"?>


< module xmlns="urn:jboss:module:1.1"
name="com.ibm.db2">
<resources>

<resource-root path="db2jcc.jar"/>

<resource-root path="db2jcc_license_cisuz.jar"/>
</resources>
<dependencies>

<module name="javax.api"/>

<module name="javax.transaction.api"/>
</dependencies>
< /module>

Nota
Asegrese de NO tener un espacio al principio del archivo
mo d ul e. xml de otra manera obtendr un error " New
missing/unsatisfied dependencies" para este controlador.
iii. Copie el controlador JD BC y la JAR de lincencia en el directorio
EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/.
$ cp db2jcc.jar EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/
$ cp db2jcc_license_cisuz.jar
EAP_HOME/mo d ul es/co m/i bm/d b2/mai n/
Las ventajas de este enfoque son:
Este es el nico enfoque que funciona cuando el controlador JD BC consiste de
ms de una JAR.
Con este enfoque, los controladores que no cumplen con los requerimientos de
JD BC 4.0 se pueden instalar sin modificar la JAR del controlador o creando una
superposicin de archivos.
Las desventajas de este enfoque son:
Es ms dificil configurar un mdulo.
El mdulo se debe copiar manualmente en todos los servidores ejecutando en un
dominio administrado.
2. C o n f ig u re la f u en t e d e d at o s.
a. Ag reg u e el co n t ro lad o r d e la b ase d e d at o s.
Agregar el elemento <d ri ver> al elemento <d ri vers> del mismo archivo.
Nuevamente esto contiene alguna de la misma informacin de la fuente de datos que
se defini previamente en el archivo *-d s. xml .
Primero determine si la JAR controladora cumple con los requerimientos de JD BC
4.0. Una JAR que cumple con los requerimientos de JD BC 4.0 contiene un archivo
MET A-INF/servi ces/java. sq l . D ri ver que especifica el nombre de la clase

29

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

controladora. El servidor usa este archivo para encontrar el nombre de las clases
controladoras en la JAR. Un controlador que cumpla con los requerimientos de
JD BC 4.0 no requiere un elemento <d ri ver-cl ass> ya que ya se especifica en la
JAR. Este es un ejemplo del elemento controlador para un controlador MySQL que
cumple con los requerimientos de JD BC 4.0:

< driver name="mysql-connector-java-5.1.15.jar"


module="com.mysql"/>
Un controlador que no cumple con los requerimientos de JD BC 4.0 requiere un
atributo <d ri ver-cl ass> para identificar la clase del controlador ya que no hay un
archivo MET A-INF/servi ces/java. sq l . D ri ver que especifique el nombre de la
clase controladora. Este es un ejemplo del elemento controlador para el controlador
que no cumpla con los requerimientos de JD BC 4.0:

< driver name="mysql-connector-java-5.1.15.jar"


module="com.mysql">
< driver-class>com.mysql.jdbc.Driver</driver-class></driver>
b. C reaci n d e la f u en t e d e d at o s.
Cree un elemento <d ataso urce> en la seccin <d ataso urces> del archivo
stand al o ne. xml . Este archivo contiene mucha de las misma informacin de la
fuente de datos que se defini anteriormente en el archivo *-d s. xml .

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin
del servidor para que su cambio persista al reiniciar el servidor.
El siguiente es un ejemplo de un elemento de la fuente de datos MySQL en el archivo
stand al o ne. xml :

< datasource jndi-name="java:/YourDatasourceName" poolname="YourDatasourceName">


<connectionurl>jdbc:mysql://localhost:3306/YourApplicationURL</connectio
n-url>
<driver>mysql-connector-java-5.1.15.jar</driver>
<transactionisolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>

<min-pool-size>100</min-pool-size>

<max-pool-size>200</max-pool-size>
</pool>
<security>

<user-name>USERID</user-name>

<password>PASSWORD</password>
</security>
<statement>

30

Capt ulo 3. Migre su aplicacin

<prepared-statement-cache-size>100</prepared-statementcache-size>

<share-prepared-statements/>
</statement>
< /datasource>
3. Act u aliz aci n d e las ref eren cias JN D I en el c d ig o d e la ap licaci n .
D ebe reemplazar los nombres de las bsquedas JND I que estn desactualizados en el
cdigo fuente de la aplicacin para utilizar los nuevos nombres de la fuente de datos
estndar JND I que haya definido. Para obtener mayor informacin, consulte:
Seccin 3.1.8.4, Modifique la aplicacin a seguir las nuevas reglas de los espacios de
nombre JND I .
Tambin debe reemplazar cualquier anotacin @ R eso urce existente que acceda la fuente
de datos para utilizar el nuevo nombre JND I. Por ejemplo:

@ Resource(name = "java:/YourDatasourceName").
Reportar un error

3.1 .6 .4 . Co nfiguraci n de la fue nt e de dat o s para Hibe rnat e o JPA


Si su aplicacin usa JPA y actualmente agrupa las JARs de Hibernate es posible que quiera utilizar
el Hibernate includo con JBoss EAP 6. Para utilizar esta versin de Hibernate tiene que borrar el
grupo anterior de Hibernate de su aplicacin.
Pro ced imien t o 3.10. B o rre el p aq u et e H ib ern at e
1. Borre las JARs Hibernate de sus carpetas de la biblioteca de su aplicacin.
2. Borre o comente el elemento <hi bernate. transacti o n. manag er_l o o kup_cl ass> en
su archivo persi stence. xml ya que este elemento no se necesita.
Reportar un error

3.1 .6 .5 . Act ualizaci n de la co nfiguraci n de l adapt ado r de re curso s


R esu men
En versiones anteriores del servidor de aplicaciones, la configuracin del adaptador de recursos se
defina en un archivo con el sufijo *-d s. xml . En JBoss EAP 6 se configura un adaptador de
recursos en el archivo de configuracin del servidor. Si est ejecutando en un dominio
administrado, el archivo de configuracin es el archivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml . Si est ejecutando como un servidor
autnomo configure el adaptador de recursos en el archivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml . Puede encontrar informacin de
referencia sobre el esquema, el cual es el mismo para ambos modos en: Schemas en el sitio web de
IronJacamar aqu: http://www.ironjacamar.org/documentation.html.

31

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin del servidor para
que su cambio persista al reiniciar el servidor.

D ef in ir el ad ap t ad o r d e recu rso s
La informacin del descriptor del adaptador de recursos se define bajo el siguiente elemento del
subsistema en el archivo de configuracin del servidor:
< subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
Utilizar un poco de la misma informacin que se definio previamente en el archivo del adaptador
de recursos *-d s. xml .
El siguiente es un ejemplo de un elemento del adaptador de recursos en el archivo de configuracin
del servidor:
< resource-adapters>
<resource-adapter>

<archive>multiple-full.rar</archive>

<config-property name="Name">ResourceAdapterValue</config-property>

<transaction-support>NoTransaction</transaction-support>

<connection-definitions>

<connection-definition

classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConn
ectionFactory1"

enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1"

pool-name="MultipleConnectionFactory1">

<config-property
name="Name">MultipleConnectionFactory1Value</config-property>

</connection-definition>

<connection-definition

classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConn
ectionFactory2"

enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2"

pool-name="MultipleConnectionFactory2">

<config-property
name="Name">MultipleConnectionFactory2Value</config-property>

</connection-definition>

</connection-definitions>

<admin-objects>

<admin-object

classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject
1Impl"

jndi-name="java:/eis/MultipleAdminObject1">

<config-property name="Name">MultipleAdminObject1Value</configproperty>

</admin-object>

<admin-object classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject

32

Capt ulo 3. Migre su aplicacin

2Impl"

jndi-name="java:/eis/MultipleAdminObject2">

<config-property name="Name">MultipleAdminObject2Value</configproperty>

</admin-object>

</admin-objects>
</resource-adapter>
< /resource-adapters>
Reportar un error

3.1.7. Cambios de seguridad


3.1 .7 .1 . Co nfiguraci n de lo s cam bio s de se guridad de la aplicaci n
C o n f ig u raci n d e la seg u rid ad p ara au t en t icaci n b sica
En las versiones anteriores de JBoss EAP, los archivos de propiedades que se encuentran en el
directorio EAP_HOME/server/SERVER_NAME/co nf/ estaban en la ruta de clase y
UsersR o l esLo g i nMo d ul e los poda encontrar fcilmente. En JBoss EAP 6, la estructura del
directorio ha cambiado. Los archivos de propiedades deben estar empacados dentro de la
aplicacin para que estn disponibles en la ruta de clases.

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin del servidor para
que su cambio persista al reiniciar el servidor.
Para configurar la seguridad para la autenticacin bsica, agregue un nuevo dominio de seguridad
bajo el securi ty-d o mai ns a los archivos de configuracin del servidor
stand al o ne/co nfi g urati o n/stand al o ne. xml o d o mai n/co nfi g urati o n/d o mai n. xml :
< security-domain name="example">

<authentication>

<login-module code="UsersRoles" flag="required">

<module-option name="usersProperties"

value="${jboss.server.config.dir}/exampleusers.properties"/>

<module-option name="rolesProperties"

value="${jboss.server.config.dir}/exampleroles.properties"/>

</login-module>

</authentication>
< /security-domain>
Si la instancia de JBoss EAP 6 est ejecutando como un servidor autnomo,
${jbo ss. server. co nfi g . d i r} se refiere al directorio
EAP_HOME/stand al o ne/co nfi g urati o n/. Si la instancia est ejecutando en un dominio
administrado, ${jbo ss. server. co nfi g . d i r} se refiere al directorio
EAP_HOME/d o mai n/co nfi g urati o n/.
Mo d if icaci n d e lo s n o mb res d el d o min io d e seg u rid ad

33

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

En JBoss EAP 6, los dominios de seguridad ya no usan el prefijo java: /jaas/ en sus nombres.
Para las aplicaciones web, tiene que borrar este prefijo de las configuraciones del dominio de
seguridad en el jbo ss-web. xml .
Para las aplicaciones empresariales tiene que borrar este prefijo de las configuraciones del
dominio de seguridad en el archivo jbo ss-ejb3. xml . Este archivo ha reemplazado el
jbo ss. xml en JBoss EAP 6.
Reportar un error

3.1 .7 .2 . Act ualizaci n de aplicacio ne s que usan Picke t Link ST S y We b Se rvice s


R esu men
Si su aplicacin JBoss EAP 6.1 usa PicketLink STS y Web services entonces es posible que tenga
que realizar cambios cuando migre a JBoss EAP 6.2 o posteriores. Un arreglo aplicado a JBoss
EAP para abordar CVE-2013-2133 refuerza los chequeos de autorizacin por parte del contenedor
antes de ejecutar cualquier controlador JAXWS adjunto a los puntos finales WS basados en EJB3.
Por lo tanto, algunas de las funcionalidades de PicketLink STS se pueden ver afectadas ya que el
PicketLink SAML2Hand l er establece un principal de seguridad para utilizarlo ms adelante en el
proceso. Es posible que encuentre una Nul l P o i nterExcepti o n en el registro del servidor ya que
el principal es NULL cuando el Hand l erAuthIntercepto r accede al SAML2Hand l er. Tiene que
desactivar este chequeo de seguridad para solucionar este problema.
Pro ced imien t o 3.11. D esact ivaci n d e ch eq u eo s ad icio n ales d e au t o riz aci n
Puede desactivar los chequeos adicionales de autorizacin y seguir utilizando las
implementaciones PicketLink existentes utilizando uno de los siguientes mtodos.
A. C o n f ig u raci n d e u n a p ro p ied ad a n ivel d el sist ema
Puede desactivar chequeos adicionales de autorizacin a nivel del servidor configurando el
valor de la propiedad del sistema o rg . jbo ss. ws. cxf. d i sabl eHand l erAuthC hecks
como true. Este mtodo afecta cualquier implementacin realizada en el servidor de
aplicaciones.
Para obtener mayor informacin sobre cmo configurar una propiedad del sistema consulte
la seccin titulada Configuracin de propiedades del sistema utilizando el CLI de administracin en
la Gua de configuracin y administracin para JBoss EAP.
B. C reaci n d e u n a p ro p ied ad en el arch ivo d escrip t o r d e servicio s web d e la
imp lemen t aci n
Puede desactivar chequeos adicionales de autorizacin a nivel de la implementacin
configurando el valor de la propiedad
o rg . jbo ss. ws. cxf. d i sabl eHand l erAuthC hecks como true en el archivo jbo sswebservi ces. xml . Este mtodo tiene impacto solo en la implementacin especifica.
a. Cree un archivo jbo ss-webservi ces. xml en el directorio MET A-INF/ de la
implementacin en la que quiere desactivar los chequeos adicionales de autorizacin.
b. Agregue el siguiente contenido:

< ?xml version="1.1" encoding="UTF-8"?>


< webservices xmlns="http://www.jboss.com/xml/ns/javaee"

34

Capt ulo 3. Migre su aplicacin

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.2"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee">
<property>

<name>org.jboss.ws.cxf.disableHandlerAuthChecks</name>

<value>true</value>
</property>
< /webservices>

Nota
El habilitar la propiedad o rg . jbo ss. ws. cxf. d i sabl eHand l erAuthC hecks hace el
sistema vulnerable a CVE-2013-2133. Si la aplicacin espera que se apliquen restricciones
de seguridad declaradas en mtodos EJB y no las aplica de manera independiente al
controlador JAX-WS entonces la propiedad no se debe habilitar. La propiedad solo se debe
utilizar para propsitos de compatibilidad retroactiva cuando se necesita evitar que dae la
aplicacin.
Reportar un error

3.1.8. Cambios de JNDI


3.1 .8 .1 . Act ualizaci n de lo s no m bre s de e spacio s de no m bre s JNDI de la aplicaci n
R esu men
EJB 3.1 introdujo un espacio de nombre JND I global estandarizado y una serie de espacios de
nombres relacionados que mapean a los variados mbitos de una aplicacin Java EE. Los nombres
EJB porttiles solo se enlazan a tres de ellos: java: g l o bal , java: mo d ul e y java: app. Las
aplicaciones con EJBs que usan JND I se deben cambiar para que sigan la nueva convencin de
espacios de nombre JND I estndarizada.
Pro ced imien t o 3.12. Mo d if icar b sq u ed as JN D I
1. Mayor informacin sobre Seccin 3.1.8.2, Nombres JND I EJB porttiles
2. Seccin 3.1.8.3, Revisin de las reglas del espacio de nombres de JND I
3. Seccin 3.1.8.4, Modifique la aplicacin a seguir las nuevas reglas de los espacios de
nombre JND I
Map eo s JN D I d e ejemp lo
Aqui puede encontrar ejemplos de espacios de nombres JND I en lanzamientos anteriores y la
manera en que se especifican en JBoss EAP 6: Seccin 3.1.8.5, Ejemplos de espacios de nombres
JND I en lanzamientos anteriores y la manera en que se especifican en JBoss EAP 6
Reportar un error

3.1 .8 .2 . No m bre s JNDI EJB po rt t ile s


R esu men

35

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

La especificacin Java EE 6 define cuatro espacios de nombres lgicos, cada uno con su propio
mbito, pero los nombres EJB porttiles solo se enlazan a tres de ellos. La siguiente tabla detalla
cundo y cmo utilizar cada espacio de nombre.
T ab la 3.1. Esp acio s d e n o mb res JN D I p o rt t iles
Esp acio d e n o mb re JN D I

D escrip ci n

java:global

Los nombres en este espacio de nombres son compartidos por


todas las aplicaciones implementadas en una instancia del
servidor de aplicaciones. Use los nombres en este espacio de
nombres para encontrar archivadores externos EJBs
implementados en el mismo servidor.
El siguiente es un ejemplo de un espacio de nombre java:global:
java: g l o bal /jbo ss-seam-bo o ki ng /jbo ss-seambo o ki ng -jar/Ho tel Bo o ki ng Acti o n

java:module

Los nombres en este espacio de nombre son compartidos por


todos los componentes en un mdulo, por ejemplo, todos los
beans empresariales en un solo mdulo EJB o todos los
componentes en un mdulo web.
El siguiente es un ejemplo de un espacio de nombres
java:module:
java: mo d ul e/Ho tel Bo o ki ng Acti o n! o rg . jbo ss. seam. e
xampl e. bo o ki ng . Ho tel Bo o ki ng

java:app

Los nombres en este espacio de nombres son compartidos por


todos los componentes en todos los mdulos en una sola
aplicacin. Por ejemplo,un archivo jar EJB y una WAR en el
mismo archivo EAR tendran acceso a los recursos en el espacio
de nombres java:app.
El siguiente es un ejemplo de un espacio de nombres java:app:
java: app/jbo ss-seam-bo o ki ng jar/Ho tel Bo o ki ng Acti o n

Puede encontrar mayor informacin sobre los contextos de nombrado JND I en la seccin EE.5.2.2,
" Application Component Environment Namespaces" en " JSR 316: JavaTM Platform, Enterprise
Edition (Java EE) Specification, v6" . Puede descargar la especificacin de aqu:
http://jcp.org/en/jsr/detail?id=316
Reportar un error

3.1 .8 .3. Re visi n de las re glas de l e spacio de no m bre s de JNDI


R esu men
JBoss EAP 6 ha mejorado en los nombres de espacio de nombres JND I no solo para brindar reglas
predecibles y consistentes para todo nombre enlazado en el servidor de aplicaciones sino tambin
para prevenir futuros problemas de compatibilidad. Esto significa que es posible que encuentre
problemas con los espacios de nombre actuales en su aplicacin si no siguen las nuevas reglas.
Lo s esp acio s d e n o mb res d eb en seg u ir est as reg las:

36

Capt ulo 3. Migre su aplicacin

1. Nombres relativos no calificados como D efaul tD S o jd bc/D efaul tD S deben ser


calificados relativos a java: co mp/env, java: mo d ul e/env o java: jbo ss/env,
dependiendo del contexto.
2. Nombres no calificados abso l ute como /jd bc/D efaul tD S deben ser calificados con
relacin a un nombre java: jbo ss/ro o t.
3. Nombres calificados abso l ute como java: /jd bc/D efaul tD S se deben calificar de la
misma manera que los nombres abso l ute no calificados anteriores.
4. El espacio de nombres especial java: jbo ss se comparte a travs de toda la instancia del
servidor AS.
5. Cualquier nombre rel ati ve con un prefijo java: debe estar en uno de los cinco espacios
de nombre: co mp, mo d ul e, app, g l o bal o el jbo ss propietario. Cualquier nombre que
inicie por java: xxx en donde xxx no coincida con ninguno de los cinco anteriores
generara un error de nombre invlido.
Reportar un error

3.1 .8 .4 . Mo difique la aplicaci n a se guir las nue vas re glas de lo s e spacio s de


no m bre JNDI
Este es un ejemplo de una bsqueda JND I en JBoss EAP 5.1. Este cdigo usualmente se
encuentra en un mtodo de inicializacin.

p rivate ProductManager productManager;


t ry {

context = new InitialContext();

productManager = (ProductManager)
context.lookup("OrderManagerApp/ProductManagerBean/local");
} catch(Exception lookupError) {

throw new ServletException("Unable to find the ProductManager


bean", lookupError);

}
Note que el nombre de bsqueda es O rd erManag erApp/P ro d uctManag erBean/l o cal .
El siguiente es un ejemplo de la manera en que la misma bsqueda se codificara en JBoss EAP
6 usando la inyeccin de dependencias.

@ EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.
ProductManager")
p rivate ProductManager productManager;
Los valores de la bsqueda ahora se definen como variables de miembros y usan el nuevo
espacio de nombre JND I porttil java: app
java: app/O rd erManag erEJB/P ro d uctManag erBean! servi ces. ejb. P ro d uctManag er.
Si prefiere no utilizar la inyeccin de dependencias entonces puede continuar creando el nuevo
InitialContext como se mostr anteriormente y modificar la bsqueda para utilizar el nuevo
espacio de nombre JND I.

37

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

p rivate ProductManager productManager;


t ry {

context = new InitialContext();

productManager = (ProductManager)
context.lookup("java:app/OrderManagerEJB/ProductManagerBean!services.e
jb.ProductManager");
} catch(Exception lookupError) {

throw new ServletException("Unable to find the ProductManager


bean", lookupError);

}
Reportar un error

3.1 .8 .5 . Eje m plo s de e spacio s de no m bre s JNDI e n lanzam ie nt o s ant e rio re s y la


m ane ra e n que se e spe cifican e n JBo ss EAP 6
T ab la 3.2. T ab la d e map eo d e esp acio s d e n o mb res JN D I
Esp acio s d e n o mb res en
JB o ss EAP 5.x

Esp acio s d e n o mb res en


JB o ss EAP 6

C o men t ario s ad icio n ales

OrderManagerApp/ProductMan java:module/ProductManagerB Enlace estndar Java EE 6.


agerBean/local
ean!services.ejb.ProductManag Con el mbito del mdulo
er
actual y solamente accesible
dentro del mismo mdulo.
OrderManagerApp/ProductMan java:app/OrderManagerEJB/Pr Enlace estndar Java EE 6.
agerBean/local
oductManagerBean!services.ej Con el mbito de la aplicacin
b.ProductManager
actual y solamente accesible
dentro de la misma aplicacin.
OrderManagerApp/ProductMan java:global/OrderManagerApp/ Enlace estndar Java EE 6.
agerBean/local
OrderManagerEJB/ProductMan Con el mbito del servidor de
agerBean!services.ejb.Product aplicaciones y accesible
Manager
globalmente.
java:comp/UserTransaction
java:comp/UserTransaction
El espacio de nombres tiene
como mbito el componente
actual. No es accesible para
hilos que no sean Java EE 6,
por ejemplo, hilos creados
directamente por su aplicacin.
java:comp/UserTransaction
java:jboss/UserTransaction
Globalmente accesible. selo
si java:comp/UserTransaction
no est disponible
java:/TransactionManager
java:jboss/TransactionManage
r
java:/TransactionSynchronizat java:jboss/TransactionSynchro
ionRegistry
nizationRegistry
Reportar un error

3.2. Cambios dependient es de la arquit ect ura de su aplicacin y


component es

38

Capt ulo 3. Migre su aplicacin

3.2.1. Revisin de los cambios dependiendo de la arquit ect ura y


component es de su aplicacin
Si su aplicacin usa una de las siguientes tecnologas o componentes es posible que necesite
realizar modificaciones en su aplicacin cuando migre a JBoss EAP 6.
H ib ern at e y JPA
Si su aplicacin usa Hibernate o JPA es posible que su aplicacin necesite algunas
modificaciones. Para mayor informacin consulte: Seccin 3.2.2.1, Actualizar
aplicaciones que utilizan Hibernate y/o JPA .
R EST
Si su aplicacin usa JAX-RS, debe estar conciente de que JBoss EAP 6 configura
automticamente RESTEasy as que ya no necesita configurarla usted mismo. Para mayor
informacin consulte: Seccin 3.2.5.1, Configure los cambios de JAX-RS y RESTEasy
LD AP
El dominio de seguridad LD AP est configurado de manera diferente en JBoss EAP 6. Si
su aplicacin usa LD AP consulte el siguiente tema para obtener mayor informacin:
Seccin 3.2.6.1, Configuracin de los cambios del dominio de seguridad LD AP .
Men sajera
JBoss Messaging ya no se incluye en JBoss EAP 6. Si su aplicacin usa JBoss
Messaging como proveedor de mensajera entonces necesita reemplazar el cdigo de
JBoss Messaging con el de HornetQ. El siguiente tema describe lo que necesita hacer:
Seccin 3.2.7.4, Migre su aplicacin para usar HornetQ como proveedor JMS .
U so d e cl st ers
La manera de habilitar el uso de clsters cambi en JBoss EAP 6. Para ver ms detalles,
consulte: Seccin 3.2.8.1, Realizar cambios a su aplicacin para uso de clsters .
Imp lemen t aci n d e est ilo d e servicio s
Aunque JBoss EAP 6 ya no usa descriptores de estilo de servicios, el contenedor soporta
estas implementaciones de estilo de servicios sin cambios en donde sea posible. Para
mayor informacin sobre la implementacin, consulte: Seccin 3.2.9.1, Actualizacin de
aplicaciones que utilizan las implementaciones de estilo del servicio
In vo caci n remo t a
Si su aplicacin realiza invocaciones remotas todava puede utilizar JND I para buscar un
proxy para su bean e invocar en ese proxy retornado. Para mayor informacin sobre la
sintaxis requerida y los cambios en los espacios de nombres, consulte: Seccin 3.2.10.1,
Migracin de aplicaciones implementadas de JBoss EAP 5 que realizan invocaciones
remotas en JBoss EAP 6 .
Seam 2.2
Si su aplicacin usa Seam 2.2, consulte el siguiente tema para ver los cambios que
necesita realizar: Seccin 3.2.13.1, Migracin de archivadores Seam 2.2 a JBoss EAP 6 .
Sp rin g
Si su aplicacin usa Spring, consulte: Seccin 3.2.14.1, Migracin de aplicaciones
Spring .

39

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

O t ro s camb io s q u e p u ed en t en er imp act o en su mig raci n


Para cambios adicionales en JBoss EAP 6 que pueden tener impacto en su aplicacin,
consulte: Seccin 3.2.15.1, Familiarcese con otros cambios que puedan afectar su
migracin .
Reportar un error

3.2.2. Cambios de JPA y Hibernat e


3.2 .2 .1 . Act ualizar aplicacio ne s que ut ilizan Hibe rnat e y/o JPA
R esu men
Si su aplicacin usa Hibernate o JPA lea las siguientes secciones y realice los cambios necesarios
para migrar a JBoss EAP 6.
Seccin 3.2.2.2, Configuracin de cambios para las aplicaciones que usan Hibernate y JPA
Seccin 3.2.2.4, Actualizacin de su aplicacin Hibernate 3 para utilizar Hibernate 4
Seccin 3.2.2.9, Actualizacin de su aplicacin para que cumpla con los requerimientos de la
especificacin JPA 2.0
Seccin 3.2.2.10, Reemplace el cach de segundo nivel JPA/Hibernate con Infinispan
Seccin 3.2.2.12, Migracin a Hibernate Validator 4
Reportar un error

3.2 .2 .2 . Co nfiguraci n de cam bio s para las aplicacio ne s que usan Hibe rnat e y JPA
R esu men
Si su aplicacin contiene un archivo persi stence. xml o si el cdigo usa las anotaciones
@ P ersi stenceC o ntext o @ P ersi stenceUni t, JBoss EAP 6 detecta esto durante la
implementacin y asume que la aplicacin usa JPA. Implcitamente agrega Hibernate 4 adems de
otras pocas dependencias a la ruta de clase de su aplicacin.
Si su aplicacin actualmente usa bibliotecas Hibernate 3, en la mayora de los casos podr cambiar
usando Hibernate 4 y ejecutar exitosamente. Sin embargo, si ve C l assNo tFo und Excepti o ns
cuando implementa su aplicacin, puede tratar de resolverlas usando uno de los siguientes
enfoques.

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 3.13. C o n f ig u re la ap licaci n

40

Capt ulo 3. Migre su aplicacin

1. C o p ie las JAR s H ib ern at e 3 req u erid as en su b ib lio t eca d e ap licacio n es.


Es posible que resuelva el problema copiando las JARs especficas de Hibernate 3 que
contengan las clases que faltan en el directorio l i b/ de la aplicacin o agregndolas a la
ruta de clases usando algn otro mtodo. En algunos casos esto puede generar
C l assC astExcepti o ns u otros problemas de carga de clases debido al uso mezclado de
las versiones de Hibernate. Si eso sucede entonces necesita usar el siguiente enfoque.
2. O rd n ele al servid o r el u t iliz ar s lamen t e b ib lio t ecas H ib ern at e 3.
JBoss EAP 6 le permite empacar las jars del proveedor de persistencia Hibernate 3.5 (o
posteriores) con la aplicacin. Para ordenarle al servidor que use solamente las bibliotecas
Hibernate 3 y excluir las bibliotecas Hibernate 4 necesita establecer el
jbo ss. as. jpa. pro vi d erMo d ul e como hi bernate3-bund l ed en el
persi stence. xml as:

< ?xml version="1.0" encoding="UTF-8"?>


< persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">

<persistence-unit name="plannerdatasource_pu">

<description>Hibernate 3 Persistence Unit.</description>

<jta-data-source>java:jboss/datasources/PlannerDS</jtadata-source>

<properties>

<property name="hibernate.show_sql" value="false" />

<property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />

</properties>

</persistence-unit>
< /persistence>
El implementador JPA (Java Persistence API) detectar la presencia de un proveedor de
persistencia en la aplicacin y usa las bibliotecas Hibernate 3. Para mayor informacin
sobre las propiedades de persistencia JPA, consulte Seccin 3.2.2.3, Propiedades de la
unidad de persistencia .
3. In h ab ilt ar el cach d e seg u n d o n ivel d e H ib ern at e
El cach de segundo nivel para Hibernate 3 no presenta el mismo comportamiento con
JBoss EAP 6 tal como lo hizo en lanzamientos anteriores. Si est utilizando el cach de
segundo nivel de Hibernate con su aplicacin, tiene que inhabilitarlo hasta que actualice a
Hibernate 4. Para inhabilitar el cach de segundo nivel configure el
<hi bernate. cache. use_seco nd _l evel _cache> como fal se en el archivo
persi stence. xml .
Reportar un error

3.2 .2 .3. Pro pie dade s de la unidad de pe rsist e ncia


Pro p ied ad es d e co n f ig u raci n d e H ib ern at e 4 .x
JBoss EAP 6 configura automticamente las siguientes propiedades de configuracin de Hibernate
4.x:
T ab la 3.3. Pro p ied ad es d e la u n id ad d e p ersist en cia d e H ib ern at e

41

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

N o mb re d e la
p ro p ied ad

Valo r
p red et ermin ad
o

Pro p sit o

hi bernate. i d .
new_g enerato r
_mappi ng s

true

Esta configuracin es relevante si usa


@ G enerated Val ue(AUT O ) para generar valores de
llaves de ndice nicos para nuevas entidades. Las
nuevas aplicaciones deben mantener el valor
predeterminado de true. Puede que las aplicaciones
existentes que utilizaron Hibernate 3.3.x necesiten
cambiarlo a fal se para continuar utilizando un objeto
de secuencia o un generador basado en tabla y mantener
una compatibilidad retroactiva. La aplicacin puede
sobreescribir este valor en el archivo persi stence. xml .
A continuacin encontrar mayor informacin sobre este
comportamiento.

hi bernate. tra
nsacti o n. jta.
pl atfo rm

hi bernate. ejb
. reso urce_sca
nner

hi bernate. tra
nsacti o n. mana
g er_l o o kup_cl
ass
hi bernate. ses
si o n_facto ry_
name

hi bernate. ses
si o n_facto ry_
name_i s_jnd i
hi bernate. ejb
. enti tymanag e
r_facto ry_nam
e

Instancia de la
interfaz
o rg . hi bernate
. servi ce. jta.
pl atfo rm. spi .
JtaP l atfo rm
Instancia de la
interaz
o rg . hi bernate
. ejb. packag i n
g . Scanner

Esta clase pasa el gestor de transacciones, la transaccin


del usuario y el registro de sincronizacin de
transacciones a Hibernate.

Esta clase sabe como utilizar el creador de ndices de la


anotacin de JBoss EAP 6 para brindar una
implementacin ms rpida.

Esta propiedad se borra si se encuentra en el


persistence.xml ya que podra crear conflicto con
hi bernate. transacti o n. jta. pl atfo rm
QUALIFIED_PERSI Esto est configurado con el nombre de la aplicacin +
STENCE_UNIT_N nombre de la unidad de persistencia. La aplicacin puede
AME
especificar un valor diferente, pero debe ser nico a travs
de todas las implementaciones de la aplicacin en la
instancia de JBoss EAP 6.
false
Este se configura solamente si la aplicacin no especific
un valor para el hi bernate. sessi o n_facto ry_name.
QUALIFIED_PERSI Esto est configurado con el nombre de la aplicacin +
STENCE_UNIT_N nombre de la unidad de persistencia. La aplicacin puede
AME
especificar un valor diferente, pero debe ser nico a travs
de todas las implementaciones de la aplicacin en la
instancia de JBoss EAP 6.

En Hibernate 4.x, si new_g enerato r_mappi ng s se configura como true:


@ G enerated Val ue(AUT O ) mapea a
o rg . hi bernate. i d . enhanced . Seq uenceStyl eG enerato r.
@ G enerated Val ue(T ABLE) mapea a o rg . hi bernate. i d . enhanced . T abl eG enerato r.
@ G enerated Val ue(SEQ UENC E) mapea a
o rg . hi bernate. i d . enhanced . Seq uenceStyl eG enerato r.

42

Capt ulo 3. Migre su aplicacin

En Hibernate 4.x, si new_g enerato r_mappi ng s se configura como fal se:


@ G enerated Val ue(AUT O ) mapea a Hibernate " native" .
@ G enerated Val ue(T ABLE) mapea a
o rg . hi bernate. i d . Mul ti pl eHi Lo P erT abl eG enerato r.
@ G enerated Val ue(SEQ UENC E) mapea a Hibernate " seqhilo" .
Para obtener mayor informacin sobre estas propiedades vaya a http://www.hibernate.org/docs y
revise la Hibernate 4.1 D eveloper Guide.
Pro p ied ad es d e p ersist en cia JPA
Las siguientes propiedades JPA se soportan en la definicin de la unidad de persistencia en el
archivo persi stence. xml :
T ab la 3.4 . Pro p ied ad es d e la u n id ad d e p ersist en cia JPA
N o mb re d e la
p ro p ied ad

Valo r
p red et ermin ad
o

Pro p sit o

jbo ss. as. jpa.


pro vi d erMo d ul
e

o rg . hi bernate

El nombre del mdulo proveedor de persistencia.


El valor debe ser hi bernate3-bund l ed si las JARs de
Hibernate 3 se encuentran en el archivador de la
aplicacin.
Si un proveedor de persistencia se empaca con la
aplicacin entonces este valor debe ser appl i cati o n.

jbo ss. as. jpa.


ad apterMo d ul e

o rg . jbo ss. as.


jpa. hi bernate
:4

El nombre de las clases de integracin que ayudan a


JBoss EAP 6 a funcionar con el proveedor de
persistencia.
Los valores vlidos actuales son:
o rg . jbo ss. as. jpa. hi bernate: 4 : Esto es para
las clases de integracin de Hibernate 4
o rg . jbo ss. as. jpa. hi bernate: 4 : Esto es para
las clases de integracin de Hibernate 3

Reportar un error

3.2 .2 .4 . Act ualizaci n de su aplicaci n Hibe rnat e 3 para ut ilizar Hibe rnat e 4
R esu men
Cuando actualiza su aplicacin para utilizar Hibernate 4, algunas actualizaciones son generales y
aplican sin importar la versin de Hibernate que actualmente la aplicacin utiliza. Para otras
actualizaciones tiene que determinar la versin que la aplicacin utiliza actualmente.
Pro ced imien t o 3.14 . Act u aliz aci n d e la ap licaci n p ara u t iliz ar H ib ern at e 4
1. El comportamiento predeterminado del generador de secuencias de autoincremento cambi
en JBoss EAP 6. Para mayor informacin, consulte Seccin 3.2.2.5, Preservar el
comportamiento existente del valor auto generado de la identidad de Hibernate .

43

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

2. D etermine la versin de Hibernate que la aplicacin utiliza actualmente y seleccione el


procedimiento de actualizacin correcto.
A. Seccin 3.2.2.6, Migracin de su aplicacin Hibernate 3.3.x a Hibernate 4.x
B. Seccin 3.2.2.7, Migracin de su aplicacin Hibernate 3.5.x a Hibernate 4.x
3. Consulte Seccin 3.2.2.8, Modificacin de las propiedades de persistencia para las
aplicaciones Hibernate y Seam migradas que ejecutan en un entorno con clsters si planea
ejecutar su aplicacin en un entorno con clsters.
Reportar un error

3.2 .2 .5 . Pre se rvar e l co m po rt am ie nt o e xist e nt e de l valo r aut o ge ne rado de la


ide nt idad de Hibe rnat e
Hibernate 3.5 introdujo una propiedad ncleo llamada
hi bernate. i d . new_g enerato r_mappi ng s que dirige la manera en que la identidad o las
columnas de secuencia se generan al utilizar @ G enerated Val ue. En JBoss EAP 6, el valor
predeterminado para esta propiedad se configura as:
Cuando implementa una aplicacin Hibernate nativa, el valor predeterminado es fal se.
Cuando implementa una aplicacin JPA, el valor predeterminado es true.
D irect rices p ara n u evas ap licacio n es
Las nuevas aplicaciones que usan la anotacin @ G enerated Val ue deben configurar el valor para
la propiedad hi bernate. i d . new_g enerato r_mappi ng s como true. Esta es la configuracin
preferida ya que es ms portbtil a travs de diferentes bases de datos. En la mayora de los casos
es ms eficiente y el algunos casos aborda la compatibilidad con la especificacin JPA 2.
Para las nuevas aplicaciones JPA, JBoss EAP 6 por defecto utiliza la propiedad
hi bernate. i d . new_g enerato r_mappi ng s como true y no se debe cambiar.
Para las nuevas aplicaciones Hibernate nativas, JBoss EAP 6 por defecto utiliza la propiedad
hi bernate. i d . new_g enerato r_mappi ng s como fal se. D ebe establecer esta propiedad
como true.
D irect rices p ara las ap licacio n es exist en t es d e JB o ss EAP 5
Las aplicaciones existentes que usan la anotacin @ G enerated Val ue deben asegurarse de
utilizar el mismo generador para crear valores de llaves primarias para nuevas entidades cuando la
aplicacin se migra a JBoss EAP 6.
Para las aplicaciones JPA existentes, JBoss EAP 6 por defecto utiliza la propiedad
hi bernate. i d . new_g enerato r_mappi ng s como true. D ebe configurar esta propiedad
como fal se en el archivo persi stence. xml .
Para aplicaciones nativas Hibernate, JBoss EAP 6 por defecto usa
hi bernate. i d . new_g enerato r_mappi ng s como fal se y no se debe cambiar.
Para mayor informacin sobre esta configuracin de propiedades consulte Seccin 3.2.2.3,
Propiedades de la unidad de persistencia .
Reportar un error

3.2 .2 .6 . Migraci n de su aplicaci n Hibe rnat e 3.3.x a Hibe rnat e 4 .x

44

Capt ulo 3. Migre su aplicacin

1. Map eo d e lo s t ip o s H ib ern at e text a JD BC LO NG VAR C HAR


En versiones de Hibernate anteriores a 3.5, el tipo text se mapeaba a JD BC C LO B. Se
agreg un nuevo tipo Hibernate, materi al i zed _cl o b, en Hibernate 4 para mapear
propiedades Stri ng Java a JD BC C LO B. Si su aplicacin tiene propiedades configuradas
como type= "text" que se planean mapear a JD BC C LO B, tiene que hacer una de las
siguientes:
a. Si su aplicacin usa archivos de mapeo hbm cambie la propiedad a
type= "materi al i zed _cl o b".
b. Si su aplicacin usa anotaciones, debe reemplazar @ T ype(type = "text") con
@ Lo b.
2. R evise el c d ig o p ara en co n t rar lo s camb io s en lo s t ip o s d e valo r ret o rn ad o s
Las proyeciones de criterios de agregacin numricos ahora retornan el mismo tipo de valor
que sus contrapartes HQL. Por lo tanto, los tipos de retorno de las siguientes proyecciones
en o rg . hi bernate. cri teri o n cambiaron.
a. D ebido a los cambios en C o untP ro jecti o n, P ro jecti o ns. ro wC o unt(),
P ro jecti o ns. co unt(pro pertyName) y
P ro jecti o ns. co untD i sti nct(pro pertyName), las proyecciones co unt y
co unt d i sti nct ahora retornan un valor Lo ng .
b. D ebido a los cambios en P ro jecti o ns. sum(pro pertyName), las proyecciones
sum ahora retornan un tipo de valor que depende del tipo de la propiedad.

Nota
Si no modifica el cdigo de su aplicacin se puede generar una
java. l ang . C l assC astExcepti o n.
i. Para las propiedades mapeadas como los tipos de nmeros enteros
primitivos, Long, Short o Integer se retorna una valor Long;
ii. Para las propiedades mapeadas como tipos de de punto flotante primitivo,
Float o D ouble se retorna un valor D ouble.
Reportar un error

3.2 .2 .7 . Migraci n de su aplicaci n Hibe rnat e 3.5 .x a Hibe rnat e 4 .x


1. Fusione AnnotationConfiguration en la configuracin.
Aunque Anno tati o nC o nfi g urati o n ya no se utiliza no debe afectar su migracin.
Si todava est usando un archivo hbm. xml debe tener en cuenta de que JBoss EAP 6
ahora usa o rg . hi bernate. cfg . EJB3Nami ng Strateg y en
Anno tati o nC o nfi g urati o n en lugar de la
o rg . hi bernate. cfg . D efaul tNami ng Strateg y que se utilizaba en lanzamientos
anteriores. Esto puede generar coincidencias equivocadas en los nombres. Si depende de
que la estrategia de nombrado use por defecto el nombre de una tabla de asociacin
(muchos-a-muchos y colecciones de elementos) entonces es posible que vea este problema.

45

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Para resolver este problema le puede decir a Hibernate que use la


o rg . hi bernate. cfg . D efaul tNami ng Strateg y de legado llamando
C o nfi g urati o n#setNami ng Strateg y y pasndole
o rg . hi bernate. cfg . D efaul tNami ng Strateg y#INST ANC E.
2. Modifique los espacios de nombres para que cumplan con los requerimientos de los nuevos
nombres de los archivos Hibernate D TD tal como se observa en la siguiente tabla.
T ab la 3.5. T ab la d e map eo d e esp acio s d e n o mb res D T D
Esp acio d e n o mb re D T D an t erio r

N u evo esp acio d e n o mb re D T D

http://hibernate.sourceforge.net/hibernateconfiguration-3.0.dtd
http://hibernate.sourceforge.net/hibernatemapping-3.0.dtd

http://www.hibernate.org/dtd/hibernateconfiguration-3.0.dtd
http://www.hibernate.org/dtd/hibernatemapping-3.0.dtd

3. Modificacin de las variables de entorno.


a. Si est usando Oracle y usando las propiedades materi al i zed _cl o b o
materi al i zed _bl o b entonces la variable global del entorno
hi bernate. jd bc. use_streams_fo r_bi nary se debe configurar como
verdadera.
b. Si est usando PostgreSQL y las propiedades C LO B or BLO B entonces la variable
global del entorno hi bernate. jd bc. use_streams_fo r_bi nary se debe
configurar como falsa.
Reportar un error

3.2 .2 .8 . Mo dificaci n de las pro pie dade s de pe rsist e ncia para las aplicacio ne s
Hibe rnat e y Se am m igradas que e je cut an e n un e nt o rno co n clst e rs
Si migra una aplicacin administrada por el contenedor JPA, las propiedades que tienen influencia
sobre la serializacin de contextos de persistencia se pasan de manera automtica al contenedor.
Sin embargo, debido a los cambios en Hibernate es posible que encuentre problemas de
serializacin si ejecuta su aplicacin Seam o Hibernate migradas en un entorno con clsters. Es
posible que vea mensajes en el registro de errores similares a los siguientes:
javax.ejb.EJBTransactionRolledbackException: JBAS010361: Failed to
deserialize
....
Caused by: java.io.InvalidObjectException: could not resolve session
factory during session deserialization
[uuid=8aa29e74373ce3a301373ce3a44b0000, name=null]
Para resolver estos errores, necesita modificar las propiedades en el archivo de configuracin. En la
mayora de los casos este es el archivo persi stence. xml . Para las aplicaciones nativas
Hibernate API, este es el archivo hi bernate. cfg . xml .
Pro ced imien t o 3.15. C o n f ig u re las p ro p ied ad es d e p ersist en cia p ara ejecu t ar en u n
en t o rn o co n cl st ers
1. Establezca el valor hi bernate. sessi o n_facto ry_name con un nombre nico. Este
nombre debe ser nico a travs de todas las implementaciones de la aplicacin en la
instancia de JBoss EAP 6. Por ejemplo:

46

Capt ulo 3. Migre su aplicacin

< property name="hibernate.session_factory_name" value="jboss-seambooking.ear_session_factory"/>


2. Establezca el valor hi bernate. ejb. enti tymanag er_facto ry_name con un nombre
nico. Este nombre debe ser nico a travs de todas las implementaciones de la aplicacin
en la instancia de JBoss EAP 6. Por ejemplo:

< property name="hibernate.ejb.entitymanager_factory_name"


value="seam-booking.ear_PersistenceUnitName"/>
Para mayor informacin sobre la configuracin de las propiedades de la unidad de persistencia
Hibernate JPA consulte Seccin 3.2.2.3, Propiedades de la unidad de persistencia .
Reportar un error

3.2 .2 .9 . Act ualizaci n de su aplicaci n para que cum pla co n lo s re que rim ie nt o s de
la e spe cificaci n JPA 2 .0
R esu men
La especificacin JPA 2.0 requiere que un contexto de persistencia no se pueda propagar por fuera
de una transaccin JTA. Si su aplicacin usa solo contextos de persistencia con mbitos de
transacciones entonces el comportamiento es el mismo en JBoss EAP 6 tal como lo era en versiones
anteriores del servidor de aplicaciones y no se requieren cambios. Sin embargo, si su aplicacin
usa un contexto de persistencia extendido (XPC) para permitir colas o agrupamiento de
modificaciones de datos, es posible que necesite realizar cambios a su aplicacin.
C o mp o rt amien t o d e p ro p ag aci n d el co n t ext o d e p ersist en cia
Si su aplicacin tiene un bean de sesin con estado, Bean1, que usa un contexto de persistencia
extendido y llama a un bean de sesin sin estado, Bean2, que usa un contexto de persistencia con
mbito de transacciones entonces puede esperar que el siguiente comportamiento tenga lugar:
Si Bean1 inicia una transaccin JTA y realiza la invocacin de mtodo Bean2 con la
transaccin JTA activa, el comportamiento en JBoss EAP 6 es el mismo que en lanzamientos
anteriores y no se necesita ningn cambio.
Si Bean1 no inicia una transaccin JTA y realiza la invocacin del mtodo Bean2, JBoss EAP
6 no propaga el contexto de persistencia extendido en Bean2. Este comportamiento es diferente
de lanzamientos anteriores los cuales si propagaban el contexto de persistencia extendido en
Bean2. Si su aplicacin espera que el contexto de persistencia extendido sea propagado al
bean con el gestor de entidades transaccional, necesita cambiar su aplicacin para que realice
la invocacin dentro de una transaccin JTA activa.
Reportar un error

3.2 .2 .1 0 . Re e m place e l cach de se gundo nive l JPA/Hibe rnat e co n Infinispan


R esu men
JBoss Cache se reemplaz con Infinispan para el cach de segundo nivel (2LC). Esto requiere un
cambio al archivo persi stence. xml . La sintaxis es un poco diferente dependiendo de si est
utilizando el cach de segundo nivel JPA o Hibernate. Estos ejemplos asumen que est utilizando
Hibernate.

47

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Este es un ejemplo de la manera en que se especificaron las propiedades para el cach de segundo
nivel en el archivo persi stence. xml en JBoss EAP 5.x.

< property name="hibernate.cache.region.factory_class"

value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/>
< property name="hibernate.cache.region.jbc2.cachefactory"
value="java:CacheManager"/>
< property name="hibernate.cache.use_second_level_cache" value="true"/>
< property name="hibernate.cache.region.jbc2.cfg.entity" value="mvccentity"/>
< property name="hibernate.cache.region_prefix" value="services"/>
Los siguientes pasos utilizarn este ejemplo para configurar Infinispan en JBoss EAP 6.
Pro ced imien t o 3.16 . Mo d if iq u e el arch ivo persi stence. xml p ara u sar In f in isp an
1. C o n f ig u re In f in isp an p ara u n a ap licaci n JPA en JB o ss EAP 6
Esta es la manera de especificar propiedades para lograr la misma configuracin para una
aplicacin JPA usando Infinispan en JBoss EAP 6:

< property name="hibernate.cache.use_second_level_cache"


value="true"/>
Adems necesita especificar un shared -cache-mo d e con el valor de ENABLE_SELEC T IVE
o ALL as:
A. ENABLE_SELEC T IVE es el valor predeterminado y recomendado. Significa que las
entidades ya no se ponen en el cach a menos de que las marque explcitamente como
para usar el cach.

< shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
B. ALL significa que las entidades siempre se ponen en el cach incluso si las marca para
no ponerlas en el cach.

< shared-cache-mode>ALL</shared-cache-mode>
2. C o n f ig u re In f in isp an p ara u n a ap licaci n H ib ern at e n at iva en JB o ss EAP 6
Esta es la manera de especificar la misma configuracin para una aplicacin nativa
Hibernate usando Infinispan con JBoss EAP 6:

< property name="hibernate.cache.region.factory_class"

value="org.jboss.as.jpa.hibernate4.infinispan.InfinispanRegionFacto
ry"/>

48

Capt ulo 3. Migre su aplicacin

< property name="hibernate.cache.infinispan.cachemanager"

value="java:jboss/infinispan/container/hibernate"/>
< property name="hibernate.transaction.manager_lookup_class"

value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
< property name="hibernate.cache.use_second_level_cache"
value="true"/>
Tambin tiene que agregar las siguientes dependencias al archivo MANIFEST . MF:
Manifest-Version: 1.0
Dependencies: org.infinispan, org.hibernate
Para mayor informacin sobre las propiedades de cach de Hibernate consulte: Seccin 3.2.2.11,
Propiedades cach de Hibernate .
Reportar un error

3.2 .2 .1 1 . Pro pie dade s cach de Hibe rnat e


T ab la 3.6 . Pro p ied ad es
N o mb re d e la p ro p ied ad

D escrip ci n

hi bernate. cache. reg i o n. facto ry_cl as


s
hi bernate. cache. use_mi ni mal _puts

El nombre de la clase de un C acheP ro vi d er


personalizado.
Boolean. Optimiza la operacin cach de
segundo nivel para minimizar las escrituras con
el costo de lecturas ms frecuentes. Esta
configuracin es ms til para los cachs en
clsters y en Hibernate3 est habilitado por
defecto para las implementaciones de cach en
clsters.
Boolean. Habilita el cach de solicitudes. Las
solicitudes individuales todava se tienen que
configurar para utilizar el cach.
Boolean. Utilizado para deshabilitar
completamente el cach de segundo nivel, el
cual est habilitado por defecto para las clases
que especifican un mapeo <cache>.
El nombre de clase de una interfaz
Q ueryC ache personalizada. El valor
predeterminado es el Stand ard Q ueryC ache
includo.
Un prefijo para utilizar para los nombres de
regiones cach de segundo nivel.
Boolean. Fuerza a Hibernate a almacenar datos
en el cach de segundo nivel en un formato ms
fcil de entender.

hi bernate. cache. use_q uery_cache

hi bernate. cache. use_seco nd _l evel _ca


che

hi bernate. cache. q uery_cache_facto ry

hi bernate. cache. reg i o n_prefi x


hi bernate. cache. use_structured _entri
es

49

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

N o mb re d e la p ro p ied ad

D escrip ci n

hi bernate. cache. d efaul t_cache_co ncur Configuracin utilizada para brindar el nombre
rency_strateg y
del
o rg . hi bernate. anno tati o ns. C acheC o nc
urrencyStrateg y predeterminado a utilizar
cuando se utiliza @ C acheabl e o @ C ache.
@ C ache(strateg y= ". . ") para sobreescribir
este valor predeterminado.
Reportar un error

3.2 .2 .1 2 . Migraci n a Hibe rnat e Validat o r 4


R esu men
Hibernate Validator 4.x es un cdigo base completamente nuevo que implementa JSR 303 - Bean
Validation. El proceso de migracin de Validator 3.x a 4.x es simple, pero hay unos pocos cambios
que tiene que realizar cuando migre su aplicacin.
Pro ced imien t o 3.17. Es p o sib le q u e t en g a q u e realiz ar u n a o ms d e las sig u ien t es
t areas
1. Acced er el Valid at o rFact o ry p red et ermin ad o
JBoss EAP 6 enlaza un ValidatorFactory predeterminado al contexto JND I bajo el nombre
java: co mp/Val i d ato rFacto ry.
2. C o mp ren d er la valid aci n d isp arad a d el ciclo d e vid a
Cuando se utiliza junto con Hibernate Core 4, Hibernate Core habilita automticamente la
validacin basada en el ciclo de vida.
a. La validacin ocurre en las operaciones de las entidades INSER T , UP D AT E y
D ELET E operations.
b. Puede configurar los grupos a validarse por tipo de evento usando las siguientes
propiedades:
javax. persi stence. val i d ati o n. g ro up. pre-persi st,
javax. persi stence. val i d ati o n. g ro up. pre-upd ate y
javax. persi stence. val i d ati o n. g ro up. pre-remo ve.
Los valores de estas propiedades son los nombres de las clases completamente
calificadas de los grupos a validar.
Los grupos de validacin son una nueva funcionalidad de la especificacin de la
validacin de beans. Si no quiere tomar ventaja de esta nueva funcionalidad, no
necesita realizar cambios cuando migre a Hibernate Validator 4.
c. Puede inhabilitar la validacin basada en el ciclo de vida configurando la propiedad
javax. persi stence. val i d ati o n. mo d e como no ne. Los otros valores vlidos
para esta propiedad son auto (predeterminado), cal l back y d d l .
3. C o n f ig u re su ap licaci n p ara u sar la valid aci n man u al

50

Capt ulo 3. Migre su aplicacin

a. Si quiere controlar manualmente la validacin, puede crear un validador de una de


las siguientes maneras:
Cree una instancia Val i d ato r de la Val i d ato rFacto ry usando el mtodo
g etVal i d ato r().
Las instancias del validador de inyeccin en su EJB, bean CD I o cualquier otro
recurso Java EE inyectable.
b. Puede utilizar el Val i d ato rC o ntext retornado por el
Val i d ato rFacto ry. usi ng C o ntext() para personalizar la instancia de su
validador. Usando esta API puede configurar un Messag eInterpo l ato r,
T raverabl eR eso l ver y C o nstrai ntVal i d ato rFacto ry personalizados. Estas
interfaces se especifican en la especificacin de la validacin del bean y son nuevas
para Hibernate Validator 4.
4. Mo d if iq u e el c d ig o p ara u t iliz ar las n u evas rest riccio n es d e valid aci n d el b ean
Las nuevas restricciones de validacin a nivel del bean requieren cambios en el cdigo
cuando migra a Hibernate Validator 4.
a. Para actualizar un Hibernate Validator 4, tiene que usar las restricciones en los
siguientes paquetes:
javax. val i d ati o n. co nstrai nts
o rg . hi bernate. val i d ato r. co nstrai nts
b. Todas las restricciones que existan en Hibernate Validator 3 todava estn
disponibles en Hibernate Validator 4. Para utilizarlas necesita importar la clase
especificada y en algunos casos, cambiar el nombre o tipo del parmetro de
restriccin.
5. U t iliz ar rest riccio n es p erso n aliz ad as
En Hibernate Validator 3, una restriccin personalizada necesitaba implementar la interfaz
o rg . hi bernate. val i d ato r. Val i d ato r. En Hibernate Validator 4, necesita implementar
la interfaz javax. val i d ati o n. C o nstrai ntVal i d ato r. Esta interfaz contiene los mismo
mtodos i ni ti al i ze() and i sVal i d () que la interfaz anterior, sin embargo, la firma del
mtodo cambi. Adems, la modificacin D D L ya no se soporta en Hibernate Validator 4.
Reportar un error

3.2.3. Cambios JSF


3.2 .3.1 . Habilt ar aplicacio ne s para ut ilizar ve rsio ne s ant e rio re s de JSF
R esu men
Si su aplicacin usa una versin ms antigua de JSF entonces no necesita actualizar a JSF 2.0. En
lugar puede crear un archivo jbo ss-d epl o yment-structure. xml para solicitar que JBoss EAP
6 use JSF 1.2 en lugar de JSF 2.0 con la implementacin de su aplicacin. Este descriptor de
implementacin especfico de JBoss se utiliza para controlar la carga de clases y se encuentra en el
directorio MET A-INF/ o WEB-INF/ de su WAR o en el directorio MET A-INF/ de su EAR.
El siguiente es un ejemplo de un archivo jbo ss-d epl o yment-structure. xml que agrega una
dependencia para el mdulo JSF 1.2 y excluye o previene la carga automtica del mdulo JSF 2.0.

51

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

< jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">

<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="com.sun.jsf-impl" slot="1.2" export="true"/>

</dependencies>

</deployment>

<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>

</sub-deployment>
< /jboss-deployment-structure>
Reportar un error

3.2.4 . Cambios de los servicios web


3.2 .4 .1 . Cam bio s de lo s se rvicio s we b
JBoss EAP 6 incluye soporte para implementar puntos finales de servicio web JAX-WS. Este soporte
lo brinda JBossWS. Para mayor informacin sobre los servicios web, consulte el captulo titulado
JAX-WS Web Services en la Development Guide para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
JBossWS 4 incluye los siguientes cambios que pueden tener impacto en su migracin.
C amb io s d el p ro yect o API JB o ssWS
SPI y los componentes comunes fueron refactorizados en JBossWS 4. La siguiente tabla
lista los cambios de empaque y API que pueden afectar la migracin de su aplicacin.
T ab la 3.7. Pro p ied ad es d el co n t ro lad o r d e reg ist ro d e t ama o

52

JAR
an t ig u a

Paq u et e an t ig u o

N u eva JAR

N u evo p aq u et e

JBossWS
SPI
JBossWS
SPI
JBossWS
SPI
JBossWS
SPI
JBossWS
SPI
JBossWS
SPI

org.jboss.wsf.spi.annotatio
n.*
org.jboss.wsf.spi.binding.*

JBossWS
API
JBossWS
API
JBossWS
API
JBossWS
API
JBossWS
API
JBossWS
API

org.jboss.ws.api.annotation
.*
org.jboss.ws.api.binding.*

org.jboss.wsf.spi.managem
ent.recording.*
org.jboss.wsf.spi.tools.*
org.jboss.wsf.spi.tools.ant.*
org.jboss.wsf.spi.tools.cmd.
*

org.jboss.ws.api.monitoring
.*
org.jboss.ws.api.tools.*
org.jboss.ws.tools.ant.*
org.jboss.ws.tools.cmd.*

Capt ulo 3. Migre su aplicacin

JAR
an t ig u a

Paq u et e an t ig u o

JBossWS
SPI
JBossWS
Common
JBossWS
Common
JBossWS
Common
JBossWS
Common
JBossWS
Native

org.jboss.wsf.spi.util.Servic
eLoader
org.jboss.wsf.common.*

N u eva JAR

JBossWS
API
JBossWS
API
org.jboss.wsf.common.hand JBossWS
ler.*
API
org.jboss.wsf.common.addr JBossWS
essing.*
API
org.jboss.wsf.common.D OM JBossWS
Utils
API
org.jboss.ws.annotation.En JBossWS
dpointConfig
API

N u evo p aq u et e
org.jboss.ws.api.util.Service
Loader
org.jboss.ws.common.*
org.jboss.ws.api.handler.*
org.jboss.ws.api.addressin
g.*
org.jboss.ws.api.util.D OMUt
ils
org.jboss.ws.api.annotation
.EndpointConfig

An o t aci n @ Web C o n t ext


En JBossWS 3.4.x, esta anotacin se empac como
o rg . jbo ss. wsf. spi . anno tati o n. WebC o ntext en el proyecto JBossWS SPI. En
JBossWS 4.0, esta anotacin se movi a
o rg . jbo ss. ws. api . anno tati o n. WebC o ntexten el proyecto JBossWS API. Si su
aplicacin incluye la dependencia obsoleta entonces tiene que reemplazar las
importaciones y las dependencias en su cdigo fuente de la aplicacin y compilarlo frente
a la nueva JAR JBossWS API.
Tambin hay un cambio en un atributo que no es retroactivo. El atributo Stri ng []
vi rtual Ho sts se cambi a Stri ng vi rtual Ho st. En JBoss EAP 6 se puede
especificar solo un host virtual por implementacin. Si mltiples webservices usan la
anotacin @ WebC o ntext entonces el valor virtualHost debe ser idntico para todos los
puntos finales definidos en el archivador de implementacin.
C o n f ig u raci n d el p u n t o f in al
JBossWS 4.0 proporciona integracin de la pila de servicios web JBoss con la mayora de
los mdulos del proyecto Apache CXF. La capa de integracin permite el uso de APIs de
servicios web estndares, incluyendo JAX-WS. Tambin permite el uso de funcionalidades
avanzadas de Apache CFX por encima del contenedor JBoss EAP 6 sin requirir una
configuracin compleja.
El subsistema webservi ce en la configuracin de dominio de JBoss EAP 6 incluye
configuraciones del punto final predefinidas. Tambin puede definir sus propias
configuraciones de punto final predefinidas. La anotacin
@ o rg . jbo ss. ws. api . anno tati o n. End po i ntC o nfi g se utiliza para hacer
referencia a una configuracin de punto final dada.
Para obtener mayor informacin sobre cmo configurar puntos finales de servicios web en
el servidor JBoss, consulte el captulo titulado JAX-WS Web Services en la Gua de
desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
D escrip t o r d e imp lemen t aci n jb o ss- web services.xml
JBossWS 4.0 introduce un nuevo descriptor de implementacin para configurar servicios
web. El archivo jbo ss-webservi ces. xml proporciona informacin adicional para la
implementacin dada y reemplaza parcialmente el archivo obsoleto jbo ss. xml .

53

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Para las implementaciones de servicios web EJB, la ubicacin esperada del archivo
descriptor jbo ss-webservi ces. xml es en el directorio MET A-INF/. Para los puntos
finales del servicio web EJB y POJO agrupados en un archivo WAR, la ubicacin esperada
del archivo jbo ss-webservi ces. xml es en el directorio WEB-INF/.
El siguiente es un ejemplo de un archivo descriptor jbo ss-webservi ces. xml y una
tabla describiendo los elementos.

< webservices>

<context-root>foo<context-root>

<config-name>Standard WSSecurity Endpoint</config-name>

<config-file>META-INF/custom.xml</config-file>

<property>

<name>prop.name</name>

<value>prop.value</value>

</property>

<port-component>

<ejb-name>TestService</ejb-name>

<port-component-name>TestServicePort</port-componentname>

<port-component-uri>/*</port-component-uri>

<auth-method>BASIC</auth-method>

<transport-guarantee>NONE</transport-guarantee>

<secure-wsdl-access>true</secure-wsdl-access>

</port-component>

<webservice-description>

<webservice-description-name>TestService</webservicedescription-name>

<wsdl-publish-location>file:///bar/foo.wsdl</wsdl-publishlocation>

</webservice-description>
< /webservices>
T ab la 3.8. D escrip ci n d el elemen t o d el arch ivo jb o ss- web service.xml
N o mb re d el elemen t o

D escrip ci n

context-root

Utilizado para personalizar la raz contexto de la


implementacin de los servicios web.
Utilizado para asociar la implementacin de un punto final
con la configuracin del punto final dado. Las
configuraciones del punto final se especifican en el
archivo de configuracin referenciado o en el subsistema
webservi ces de la configuracin del dominio.
Utilizado para configurar parejas de valores de nombres
de propiedades simples para configurar el
comportamiento de la pila de los servicios web.
Utilizado para personalizar la URI de destino del punto
final EJB o para configurar las propiedades relacionadas
con la seguridad.
Utilizado para personalizar o sobreescribir la ubicacin
publicada WSD L del servicio web.

config-name
config-file

propiedad

port-component

webservice-description

Reportar un error

54

Capt ulo 3. Migre su aplicacin

3.2.5. Cambios JAX-RS y REST Easy


3.2 .5 .1 . Co nfigure lo s cam bio s de JAX-RS y REST Easy
JBoss EAP 6 configura automticamente RESTEasy as que no necesita configurarlo. Por lo tanto,
debe borrar toda la configuracin RESTEasy existente de su archivo web. xml y reemplazarlo con
una de las siguientes opciones:
1. La subclase javax. ws. rs. co re. Appl i cati o n y use la anotacin
@ Appl i cati o nP ath.
Esta es la opcin ms fcil y no requiere ninguna configuracin xml. Simplemente cree una
subclase de javax. ws. rs. co re. Appl i cati o n en su aplicacin y antela con la ruta en
donde quiere poner disponibles sus clases JAX-RS. Por ejemplo:

@ ApplicationPath("/mypath")
p ublic class MyApplication extends Application {

}
En el ejemplo anterior, sus recursos JAX-RS estn disponibles en la ruta
/MY_WEB_APP_CONTEXT/mypath/.

Nota
Note que la ruta se debe especificar como /mypath no /mypath/*. No debe haber
espacios, barras oblicuas o asteriscos.
2. Cree una subclase de javax. ws. rs. co re. Appl i cati o n y use el archivo web. xml para
configurar el mapeo JAX-RS.
Si no desea usar la anotacin @ Appl i cati o nP ath entonces todava necesita crear la
subclase de javax. ws. rs. co re. Appl i cati o n. Luego puede configurar el mapeo JAXRS en el archivo web. xml . Por ejemplo:

p ublic class MyApplication extends Application {

}
< servlet-mapping>

<servlet-name>com.acme.MyApplication</servlet-name>

<url-pattern>/hello/*</url-pattern>
< /servlet-mapping>
En el ejemplo anterior, sus recursos JAX-RS estn disponibles en la ruta
/MY_WEB_APP_CONTEXT/hel l o .

Nota
Tambin puede utilizar este enfoque para sobreescribir una ruta de una aplicacin
que se configur usando la anotacin @ Appl i cati o nP ath.

55

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

3. Modifique el archivo web. xml .


Si no quiere crear subclases de Appl i cati o n entonces puede configurar el mapeo JAX-RS
en el archivo web. xml as:
< servlet-mapping>

<servlet-name>javax.ws.rs.core.Application</servlet-name>

<url-pattern>/hello/*</url-pattern>
< /servlet-mapping>
En el ejemplo anterior, sus recursos JAX-RS estn disponibles en la ruta
/MY_WEB_APP_CONTEXT/hel l o .

Nota
Cuando selecciona esta opcin solo necesita agregar el mapeo. No necesita agregar
el servlet correspondiente. El servidor es el responsable de agregar el servlet
correspondiente automticamente.
Reportar un error

3.2.6. Cambios en el dominio de seguridad LDAP


3.2 .6 .1 . Co nfiguraci n de lo s cam bio s de l do m inio de se guridad LDAP
En JBoss EAP 5, el dominio de seguridad LD AP se configur en un elemento <appl i cati o npo l i cy> en el archivo l o g i n-co nfi g . xml . En JBoss EAP 6, el dominio de seguridad LD AP se
configura en el elemento <securi ty-d o mai n> en el archivo de configuracin del servidor. Para un
servidor autnomo, este es el archivo stand al o ne/co nfi g urati o n/stand al o ne. xml . Si est
ejecutando su servidor en un dominio administrado, este es el archivo
d o mai n/co nfi g urati o n/d o mai n. xml .
El siguiente es un ejemplo de la configuracin del dominio de seguridad LD AP en el archivo
l o g i n-co nfi g . xml en JBoss EAP 5:
< application-policy name="mcp_ldap_domain">
<authentication>

<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule"
flag="required">

<module-option
name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</mod
ule-option>

<module-option
name="java.naming.security.authentication">simple</module-option>

....

</login-module>
</authentication>
< /application-policy>
Este es un ejemplo de la configuracin LD AP en el archivo de configuracin del servidor en JBoss
EAP 6:
< subsystem xmlns="urn:jboss:domain:security:1.2">

56

Capt ulo 3. Migre su aplicacin

<security-domains>
<security-domain name="mcp_ldap_domain" cache-type="default">

<authentication>

<login-module code="org.jboss.security.auth.spi.LdapLoginModule"
flag="required">

<module-option name="java.naming.factory.initial"
value="com.sun.jndi.ldap.LdapCtxFactory"/>

<module-option name="java.naming.security.authentication"
value="simple"/>

...

</login-module>

</authentication>

</security-domain>
</security-domains>
< /subsystem>

Nota
El analizador sintctico XML cambi en JBoss EAP 6. En JBoss EAP 5, se especificaba las
opciones del mdulo como contenido del elemento como esto:
< module-option
name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory
</module-option>
Ahoras las opciones del mdulo tienen que especificarse como atributos de elementos con
" value=" as:
< module-option name="java.naming.factory.initial"
value="com.sun.jndi.ldap.LdapCtxFactory"/>

Reportar un error

3.2.7. Cambios de Hornet Q


3.2 .7 .1 . Ho rne t Q y NFS
En la mayora de los casos, NFS no es un mtodo apropiado para almacenar datos JMS para uso
con HornetQ, al utilizar NIO como tipo de diario, debido a la manera en que funciona el mecanismo
de bloqueo sincrnico. Sin embargo, NFS se puede utilizar en ciertas circunstancias, slo en
servidores de Red Hat Enterprise Linux. Esto se debe a la implementacin NFS que Red Hat
Enterprise Linux utiliza.
La implementacin NFS de Red Hat Enterprise Linux soporta E/S directas (abriendo archivos con la
configuracin de etiquetas O_D IRECT) y la E/S asincrnica basada en el kernel. Con estas
funcionalidades presentes, es posible usar NFS como una opcin de almacenamiento compartido,
bajo reglas estrictas de configuracin:
El cach del cliente NFS Red Hat Enterprise Linux se debe deshabilitar.

57

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Importante
Se debe chequear el registro del servidor despus de iniciar JBoss EAP 6 6 para asegurarse
de que la biblioteca nativa carg de manera exitosa y que se est utilizando el tipo de diario
ASYNCIO. Si la biblioteca nativa no logra cargar, HornetQ fallar con el tipo de diario NIO y
esto se ver declarado en el registro del servidor.

Importante
La biblioteca nativa que implementa E/S asincrnicas requiere que l i bai o est instalado en
el sistema Red Hat Enterprise Linux en donde est ejecutando JBoss EAP 6.
Reportar un error

3.2 .7 .2 . Co nfiguraci n de un pue nt e JMS para m igrar m e nsaje s JMS e xist e nt e s a


JBo ss EAP 6
JBoss EAP 6 reemplaz JBoss Messaging con HornetQ como la implementacin JMS
predeterminada. La manera ms fcil de migrar mensajes JMS de un entorno a otro es usar un
puente JMS. La funcin de un puente JMS es consumir mensajes desde un destino JMS fuente y
enviarlos a un destino JMS objetivo. Puede configurar e implementar un puente JMS en un servidor
JBoss EAP 5.x o en JBoss EAP 6.1 o servidores posteriores.
Para obtener mayores detalles sobre cmo migrar los mensajes JMS de JBoss EAP 5.x a JBoss EAP
6.x, consulte: Seccin 3.2.7.3, Creacin de un puente JMS
Reportar un error

3.2 .7 .3. Cre aci n de un pue nt e JMS


R esu men
Un puente JMS consume mensajes desde un tema o cola JMS fuente y los enva al tema o cola JMS
destino, el cual usualmente se encuentra en un servidor diferente. Se puede utilizar como puente
para los mensajes entre cualquier servidor JMS en tanto cumplan con los requerimientos de JMS
1.1. Los recursos JMS de destino y fuente se buscan utilizando JND I y las clases clientes para la
bsqueda JND I se deben agrupan en un mdulo. Luego el nombre del mdulo se declara en la
configuracin del puente JMS.
Pro ced imien t o 3.18. C reaci n d e u n p u en t e JMS
Este procedimiento demuestra cmo configurar un puente JMS para migrar mensajes desde un
servidor JBoss EAP 5.x a un servidor JBoss EAP 6.
1. C o n f ig u raci n d el p u en t e en el servid o r JB o ss EAP 5.x f u en t e
Para evitar conflictos en las clases entre lanzamientos tiene que seguir estos pasos para
configurar el puente JMS en JBoss EAP 5.x. Los nombres del directorio SAR y el puente son
arbitrarios y se pueden cambiar si as lo prefiere.

58

Capt ulo 3. Migre su aplicacin

a. Cree un subdirectorio en el directorio de implementacin de JBoss EAP 5 a contener


el SAR, por ejemplo:
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/.
b. Cree un subdirectorio llamado MET A-INF en
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/.
c. Cree un archivo jbo ss-servi ce. xml en el diretcorio
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/MET A-INF/. D ebe
contener informacin similar al siguiente ejemplo:
< server>

<loader-repository>

com.example:archive=unique-archive-name

<loader-repositoryconfig>java2ParentDelegation=false</loader-repository-config>

</loader-repository>

<!-- JBoss EAP 6 JMS Provider -->


<mbean code="org.jboss.jms.jndi.JMSProviderLoader"
name="jboss.messaging:service=JMSProviderLoader,name=Enterpris
eApplicationPlatform6JMSProvider">

<attribute
name="ProviderName">EnterpriseApplicationPlatform6JMSProvider
</attribute>

<attribute
name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAd
apter</attribute>

<attribute
name="FactoryRef">jms/RemoteConnectionFactory</attribute>

<attribute
name="QueueFactoryRef">jms/RemoteConnectionFactory</attribute
>

<attribute
name="TopicFactoryRef">jms/RemoteConnectionFactory</attribute
>

<attribute name="Properties">

java.naming.factory.initial=org.jboss.naming.remote.client.In
itialContextFactory

java.naming.provider.url=remote://EnterpriseApplicationPlatfo
rm6host:4447

java.naming.security.principal=jbossuser

java.naming.security.credentials=jbosspass

</attribute>

</mbean>

<mbean code="org.jboss.jms.server.bridge.BridgeService"
name="jboss.jms:service=Bridge,name=MyBridgeName" xmbeandd="xmdesc/Bridge-xmbean.xml">

<depends optional-attributename="SourceProviderLoader">jboss.messaging:service=JMSProvide
rLoader,name=JMSProvider</depends>

<depends optional-attributename="TargetProviderLoader">jboss.messaging:service=JMSProvide

59

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

rLoader,name=EnterpriseApplicationPlatform6JMSProvider</depen
ds>

<attribute
name="SourceDestinationLookup">/queue/A</attribute>

<attribute
name="TargetDestinationLookup">jms/queue/test</attribute>

<attribute name="QualityOfServiceMode">1</attribute>

<attribute name="MaxBatchSize">1</attribute>

<attribute name="MaxBatchTime">-1</attribute>

<attribute
name="FailureRetryInterval">60000</attribute>

<attribute name="MaxRetries">-1</attribute>

<attribute
name="AddMessageIDInHeader">false</attribute>

<attribute name="TargetUsername">jbossuser</attribute>

<attribute name="TargetPassword">jbosspass</attribute>

</mbean>
< /server>

Nota
El elemento l o ad -repo si to ry est presente para asegurar que el SAR tiene
un cargador de clases aislado. Tambin note que la bsqueda JND I y el
puente " destino" incluyen credenciales de seguridad para el usuario
" jbossuser" con la contrasea " jbosspass" . Esto se debe a que JBoss EAP 6
est asegurado por defecto. El usuario llamado " jbossuser" con contrasea
" jbosspass" se cre en el Appl i cati o nR eal m con el rol g uest usando el
script EAP_HOME/bi n/ad d _user. sh.
d. Copie las siguientes JARs del directorio
EAP_HOME/mo d ul es/system/l ayers/base/ en el directorio
EAP5_HOME/server/PROFILE_NAME/d epl o y/myBri d g e. sar/. Reemplace cada
VERSION_NUMBER con el nmero de la versin en su distribucin de JBoss EAP 6.
o rg /ho rnetq /mai n/ho rnetq -co re-VERSION_NUMBER. jar
o rg /ho rnetq /mai n/ho rnetq -jms-VERSION_NUMBER. jar
o rg /jbo ss/ejb-cl i ent/mai n/jbo ss-ejb-cl i ent-VERSION_NUMBER. jar
o rg /jbo ss/l o g g i ng /mai n/jbo ss-l o g g i ng -VERSION_NUMBER. jar
o rg /jbo ss/l o g manag er/mai n/jbo ssl o g manag er-VERSION_NUMBER. jar
o rg /jbo ss/marshal l i ng /mai n/jbo ssmarshal l i ng -VERSION_NUMBER. jar
o rg /jbo ss/marshal l i ng /ri ver/mai n/jbo ss-marshal l i ng ri ver-VERSION_NUMBER. jar
o rg /jbo ss/remo te-nami ng /mai n/jbo ss-remo tenami ng -VERSION_NUMBER. jar
o rg /jbo ss/remo ti ng 3/mai n/jbo ss-remo ti ng -VERSION_NUMBER. jar

60

Capt ulo 3. Migre su aplicacin

o rg /jbo ss/sasl /mai n/jbo ss-sasl -VERSION_NUMBER. jar


o rg /jbo ss/netty/mai n/netty-VERSION_NUMBER. jar
o rg /jbo ss/remo ti ng 3/remo te-jmx/mai n/remo ti ng jmx-VERSION_NUMBER. jar
o rg /jbo ss/xni o /mai n/xni o -api -VERSION_NUMBER. jar
o rg /jbo ss/xni o /ni o /mai n. xni o -ni o -VERSION_NUMBER. jar

Nota
No copie simplemente EAP_HOME/bi n/cl i ent/jbo ss-cl i ent. jar ya que
las clases API javax entrarn en conflicto con las de JBoss EAP JBoss 5.x.

2. C o n f ig u raci n d el p u en t e en el servid o r JB o ss EAP 6 d est in o


En JBoss EAP 6.1 y posteriores, el puente JMS se puede utilizar para transferir mensajes de
cualquier servidor que cumpla con los requerimientos de JMS 1.1. Ya que los recursos JMS
destino y fuente se buscan usando JND I, las clases de bsqueda JND I del proveedor de
mensajera fuente o agente de mensajera se debe agrupar en un mdulo JBoss. Los
siguientes pasos utilizan el agente de mensajera ficticio 'MyCustomMQ' como ejemplo.
a. Cree el mdulo JBoss para el proveedor de mensajera.
i. Cree una estructura de directorio bajo
EAP_HOME/mo d ul es/system/l ayers/base/ para el nuevo mdulo. El
subdirectorio mai n/ tendr las JARs clientes y el archivo mo d ul e. xml . El
siguiente es un ejemplo de la estructura de directorio creada para el
proveedor de mensajera MyCustomMQ:
EAP_HOME/mo d ul es/system/l ayers/base/o rg /mycusto mmq /mai n/
ii. En el subdirectorio mai n/ cree un archivo mo d ul e. xml que contenga la
definicin del mdulo para el proveedor de mensajera. El siguiente es un
ejemplo del mo d ul e. xml creado para el proveedor de mensajera
MyCustomMQ.

< ?xml version="1.0" encoding="UTF-8"?>


< module xmlns="urn:jboss:module:1.1"
name="org.mycustommq">

<properties>

<property name="jboss.api" value="private"/>

</properties>

<resources>
<!-- Insert resources required to connect to
the source or target
-->

<resource-root path="mycustommq-1.2.3.jar" />

<resource-root path="mylogapi-0.0.1.jar" />

</resources>

<dependencies>
<!-- Add the dependencies required by JMS Bridge

61

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

code

-->
<module name="javax.api" />

<module name="javax.jms.api" />

<module name="javax.transaction.api"/>

<!-- Add a dependency on the org.hornetq module


since we send
-->

<!-- messages tothe HornetQ server embedded in


the local EAP instance -->

<module name="org.hornetq" />

</dependencies>
< /module>

iii. Copie las JARs del proveedor de mensajera requeridas para la bsqueda
JND I de los recursos fuente en el subdirectorio mai n/ del mdulo. La
estructura del directorio para el mdulo MyCustomMQ ahora se debe ver
como la siguiente.
modules/
`-- system
`-- layers
`-- base
`-- org
`-- mycustommq
`-- main
|-- mycustommq-1.2.3.jar
|-- mylogapi-0.0.1.jar
|-- module.xml
b. Configuracin del puente JMS en el subsistema messag i ng del servidor JBoss EAP
6.
i. Antes de empezar, detenga el servidor y relice una copia de seguridad de los
archivos de configuracin del servidor. Si est ejecutando un servidor
autnomo este es el archivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne-ful l -ha. xml .
Si est ejecutando un dominio administrado, realice una copia de seguridad
de los archivos EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml y
EAP_HOME/d o mai n/co nfi g urati o n/ho st. xml .
ii. Agregue el elemento jms-bri d g e al subsistema messag i ng en el archivo
de configuracin del servidor. Los elementos so urce y targ et proporcionan
los nombres de los recursos JMS utilizados para bsquedas JND I. Si se
especifican las credenciales user y passwo rd entonces se pasan como
argumentos cuando se crea una conexin JMS.
El siguiente es un ejemplo del elemento jms-bri d g e configurado para el
proveedor de mensajera MyCustomMQ:

< subsystem xmlns="urn:jboss:domain:messaging:1.3">

...

<jms-bridge name="myBridge" module="org.mycustommq">

<source>

<connection-factory name="ConnectionFactory"/>

<destination name="sourceQ"/>

<user>user1</user>

62

Capt ulo 3. Migre su aplicacin

<password>pwd1</password>
<context>

<property key="java.naming.factory.initial"
value="org.mycustommq.jndi.MyCustomMQInitialContextFact
ory"/>

<property key="java.naming.provider.url"
value="tcp://127.0.0.1:9292"/>

</context>

</source>

<target>

<connection-factory
name="java:/ConnectionFactory"/>

<destination name="/jms/targetQ"/>

</target>

<quality-of-service>DUPLICATES_OK</quality-ofservice>

<failure-retry-interval>500</failure-retryinterval>

<max-retries>1</max-retries>

<max-batch-size>500</max-batch-size>

<max-batch-time>500</max-batch-time>

<add-messageID-in-header>true</add-messageID-inheader>

</jms-bridge>
< /subsystem>

En el ejemplo anterior, las propiedades JND I se definen en el elemento


co ntext para la so urce. Si se omite el elemento co ntext como en el
ejemplo anterior targ et entonces los recursos JMS se buscan en la
instancia local.
Reportar un error

3.2 .7 .4 . Migre su aplicaci n para usar Ho rne t Q co m o pro ve e do r JMS


JBoss Messaging ya no se incluye en JBoss EAP 6. Si su aplicacin usa JBoss Messaging como
proveedor de mensajera entonces necesita reemplazar el cdigo de JBoss Messaging con el de
HornetQ.
Pro ced imien t o 3.19 . An t es d e in iciar
1. Apague el cliente y el servidor.
2. Realice una copia de seguridad de los datos de JBoss Messaging. Los datos del mensaje se
almacenan en tablas con el prefijo JBM_.
Pro ced imien t o 3.20. C amb ie su p ro veed o r a H o rn et Q
1. T ran sf eren cia d e co n f ig u racio n es
Transfiera las configuraciones existentes de JBoss Messaging a la configuracin de JBoss
EAP 6. Las siguientes configuraciones se pueden encontrar en los descriptores de
implementacin que se encuentran en el servidor de mensajera de JBoss:
Configuracin del servicio de fbricas de conexiones

63

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Esta configuracin describe las fbricas de conexiones JMS implementadas con el


servidor JBoss Messaging. JBoss Messaging configura las fbricas de conexiones en un
archivo llamado co nnecti o n-facto ri es-servi ce. xml , el cual se encuentra en el
directorio de implementacin del servidor de aplicaciones.
Configuracin de destino
Esta configuracin describe colas y temas JMS implementadas con el servidor JBoss
Messaging. Por defecto, JBoss Messaging configura destinos en un archivo llamado
d esti nati o ns-servi ce. xml , el cual se encuentra en el directorio de implementacin
del servidor de aplicaciones.
Configuracin del servicio de puente de mensajes
Esta configuracin incluye los servicios de puente implementados con el servidor JBoss
Messaging. Por defecto no se implementa ningn puente as que el nombre del archivo de
implementacin vara dependiendo de su instalacin JBoss Messaging.
2. Mo d if icaci n d e su c d ig o d e ap licaci n
Si el cdigo de la aplicacin usa JMS estndar, no se requieren cambios en el cdigo. Sin
embargo, si la aplicacin se estar conectando a un clster tiene que revisar
cuidadosamente la documentacin de HornetQ con relacin a la semntica de los clsters.
Los clsters estn por fuera del mbito de la especificacin JMS y HornetQ y JBoss
Messaging han tomado diferentes enfoques en sus respectivas implementaciones de la
funcionalidad de clsters.
Si la aplicacin usa funcionalidades especficas para JBoss Messaging, tiene que modificar
el cdigo para utilizar las funcionalidades equivalentes disponibles en HornetQ.
Para mayor informacin sobre cmo configurar la mensajera con HornetQ consulte
Seccin 3.2.7.5, Configuracin de la mensajera con HornetQ
3. Mig rar lo s men sajes exist en t es
Mueva los mensajes que estn en la base de datos JBoss Messaging al diario HornetQ
usando un puente JMS. Puede encontrar las instrucciones para configurar el puente JMS
aqu: Seccin 3.2.7.2, Configuracin de un puente JMS para migrar mensajes JMS
existentes a JBoss EAP 6 .
Reportar un error

3.2 .7 .5 . Co nfiguraci n de la m e nsaje ra co n Ho rne t Q


El mtodo recomendado de configuracin de la mensajera en JBoss EAP 6 se encuentra en la
consola de administracin o el CLI de administracin. Puede realizar cambios persistentes con
cualquiera de estas herramientas de administracin sin necesidad de modificar manualmente los
archivos de configuracin stand al o ne. xml o d o mai n. xml . Sin embargo, es til familiarizarse
con los componentes de mensajera de los archivos de configuracin predeterminados, en donde
los ejemplos de la documentacin que usan herramientas de administracin proporcionan partes
del archivo de configuracin de referencia.
Reportar un error

3.2.8. Cambios del uso de clst ers


3.2 .8 .1 . Re alizar cam bio s a su aplicaci n para uso de clst e rs

64

Capt ulo 3. Migre su aplicacin

1. In icie JB o ss EAP 6 co n el u so d e cl st ers h ab ilit ad o


Para habilitar el uso de clsters en JBoss EAP 5.x, necesitaba iniciar sus instancias del
servidor usando el perfil al l o alguna derivacin de este as:
$ EAP5_HOME/bi n/run. sh -c al l
En JBoss EAP 6, el mtodo para habilitar el clster depende de si los servidores son
autnomos o si estn ejecutando en un dominio administrado.
a. H ab ilit e el cl st er p ara lo s servid o res ejecu t an d o en u n d o min io
ad min ist rad o
Para habilitar el uso de clsters para los servidores iniciados usando el controlador
de dominio, actualice su d o mai n. xml y designe un grupo de servidores para
utilizar el perfil ha y el grupo de enlace de sockets ha-so ckets. Por ejemplo:
< server-groups>
<server-group name="main-server-group" profile="ha">

<jvm name="default">

<heap size="64m" max-size="512m"/>

</jvm>

<socket-binding-group ref="ha-sockets"/>
</server-group>
< /server-group>
b. H ab ilit aci n d el u so d e cl st ers p ara servid o res au t n o mo s
Para habilitar los clsters para los servidores autnomos inicie el servidor usando el
archivo de configuracin apropiado as:
$ EAP_HOME/bi n/stand al o ne. sh --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= UNIQUE_NODE_NAME
2. Esp ecif iq u e la d irecci n d e en lace
En JBoss EAP 5.x usualmente indicara la direccin de enlace utilizada para el uso de
clsters utilizando el argumento de la lnea de comandos -b as:
$ EAP5_HOME/bi n/run. sh -c al l -b 19 2. 16 8. 0 . 2
JBoss EAP 6 enlaza sockets a las direcciones IP e interfaces que se encuentran en los
elementos <i nterfaces> en los archivos stand al o ne. xml , d o mai n. xml y ho st. xml .
Las configuraciones estndar que se envan junto con JBoss EAP incluyen dos
configuraciones de interfaz:
< interfaces>

<interface name="management">

<inet-address
value="${jboss.bind.address.management:127.0.0.1}"/>

</interface>

65

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>

</interface>
< /interfaces>

Estas configuraciones de interfaz usan los valores de las propiedades del sistema
jbo ss. bi nd . ad d ress. manag ement y jbo ss. bi nd . ad d ress. Si estas propiedades del
sistema no se establecen entonces se utiliza el valor predeterminado 127. 0 . 0 . 1 para cada
valor.
Tambin puede especificar la direccin de enlace como un argumento de la lnea de
comandos cuando inicia el servidor o puede definirla explcitamente dentro del archivo de
configuracin del servidor JBoss EAP 6.
A. Especifique el argumento de enlace en la lnea de comandos cuando incia el servidor
autnomo JBoss EAP.
El siguiente es un ejemplo de cmo especificar la direccin de enlace en la lnea de
comandos para un servidor autnomo:
EAP_HOME/bi n/stand al o ne. sh -D jbo ss. bi nd . ad d ress= 127. 0 . 0 . 1

Nota
Tambin puede utilizar el argumento -b, el cual es un atajo para D jbo ss. bi nd . ad d ress= 127. 0 . 0 . 1:
EAP_HOME/bi n/stand al o ne. sh -b= 127. 0 . 0 . 1
El formato de la sintaxis de JBoss EAP 5 todava se soporta:
EAP_HOME/bi n/stand al o ne. sh -b 127. 0 . 0 . 1
Note que el argumento -b solo cambia la interfaz publ i c. No afecta la interfaz
manag ement.

B. Especifique la direccin de enlace en el archivo de configuracin del servidor.


Para los servidores ejecutando en un dominio administrado, especifique las direcciones
de enlace en el archivo d o mai n/co nfi g urati o n/ho st. xml . Para los servidores
autnomos especifique las direcciones de enlace en el archivo stand al o ne-ha. xml .
En el siguiente ejemplo, la interfaz publ i c se especifica como la interfaz predeterminada
para todos los sockets dentro del grupo de enlace de sockets ha-so ckets.
< interfaces>
<interface name="management">

<inet-address value="192.168.0.2"/>
</interface>

66

Capt ulo 3. Migre su aplicacin

<interface name="public">
<inet-address value="192.168.0.2"/>
</interface>
< /interfaces>

< socket-binding-groups>
<socket-binding-group name="ha-sockets" defaultinterface="public">

<!-- ... -->


</socket-binding-group>
< /socket-binding-groups>

Nota
Si especifica la direccin de enlace como un valor definido en lugar de una
propiedad del sistema en el archivo de configuracin entonces no puede
sobreescribirlo con un argumento de la lnea de comandos.

3. C o n f ig u re jvmR o ute p ara so p o rt ar mo d _jk y mo d _p ro xy


En JBoss EAP 5, el servidor web jvmR o ute se configuraba usando una propiedad en el
archivo server. xml . En JBoss EAP 6, el atributo jvmR o ute se configura en el subsistema
web del archivo de configuracin del servidor usando el atributo i nstance-i d as:

< subsystem xmlns="urn:jboss:domain:web:1.1" default-virtualserver="default-host" native="false" instance-id="


{JVM_ROUTE_SERVER}">
El {JVM_ROUTE_SERVER} anterior se debe reemplazar por el id del servidor jvmRoute server.
El i nstance-i d tambin se puede configurar usando la consola de administracin.
4. Esp ecif iq u e la d irecci n y p u ert o mu lt icast
En JBoss EAP 5.x puede especificar la direccin y puerto multicast utilizados para la
comunicacin interna del clster usando los argumentos de la lnea de comandos -u y -m
respectivamente, as:
$ EAP5_HOME/bi n/run. sh -c al l -u 228. 11. 11. 11 -m 4 56 88
En JBoss EAP 6, la direccin multicast y el puerto utilizado para la comunicacin intraclster se definen por medio del enlace de socket referenciado por la pila del protocolo
JGroups relevante as:
< subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">

<stack name="udp">

<transport type="UDP" socket-binding="jgroups-udp"/>

<!-- ... -->

</stack>
< /subsystem>

67

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

< socket-binding-groups>

<socket-binding-group name="ha-sockets" defaultinterface="public">

<!-- ... -->

<socket-binding name="jgroups-udp" port="55200" multicastaddress="228.11.11.11" multicast-port="45688"/>

<!-- ... -->

</socket-binding-group>
< /socket-binding-groups>
Si prefiere especificar la direccin multicast y el puerto en la lnea de comandos, puede
definir la direccin multicast y los puertos como propiedades del sistema y luego usar esas
propiedades en la lnea de comandos cuando inicie el servidor. En el siguiente ejemplo,
jbo ss. mcast. ad d r es el nombre de la variable para la direccin multicast y
jbo ss. mcast. po rt es el nombre de la variable para el puerto.

< socket-binding name="jgroups-udp" port="55200"


multicast-address="${jboss.mcast.addr:230.0.0.4}" multicastport="${jboss.mcast.port:45688}"/>
Luego puede iniciar su servidor utilizando los siguientes argumentos de la lnea de
comandos:
$ EAP_HOME/bi n/d o mai n. sh -D jbo ss. mcast. ad d r= 228. 11. 11. 11 D jbo ss. mcast. po rt= 4 56 88
5. U se u n a p ila o p cio n al d el p ro t o co lo
En JBoss EAP 5.x, puede manipular la pila predeterminada del protocolo utilizada para
todos los servicios de clster usando la propiedad del sistema
jbo ss. d efaul t. jg ro ups. stack.
$ EAP5_HOME/bi n/run. sh -c al l -D jbo ss. d efaul t. jg ro ups. stack= tcp
En JBoss EAP 6, la pila predeterminada del protocolo es definida por el subsistema JGroups
dentro de d o mai n. xml o stand al o ne-ha. xml :

< subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">

<stack name="udp">

<!-- ... -->

</stack>
< /subsystem>
6. R eemp laz ar la rep licaci n d e co mp a ero s
JBoss EAP 5.x utilizaba JBoss Cache Buddy Replication para eliminar la replicacin de
datos en todas las instancias en un clster.
En JBoss EAP 6, la replicacin de compaeros fue reemplazada por el cach distribudo de
Infinispan tambin conocido como el modo D IST . La distribucin es un modo de uso de
clsters poderoso, el cual le permite a Infinispan el escalar linearmente cuando se agregan

68

Capt ulo 3. Migre su aplicacin

mas servidores al clster. El siguiente es un ejemplo de cmo configurar el servidor para


utilizar el modo de cach D IST.
a. Abra una lnea de comandos e inicie el servidor con el perfil HA o Full Profile, por
ejemplo:
EAP_HOME/bin/standalone.sh -c standalone-ha.xml
b. Abra otra lnea de comandos y conctese al CLI de administracin.
A. Para Linux, ingrese lo siguiente en la lnea de comandos:
$ EAP_HOME/bin/jboss-cli.sh --connect
B. Para Windows, ingrese lo siguiente en la lnea de comandos:
C:\>EAP_HOME\bin\jboss-cli.bat --connect
D ebe ver la siguiente respuesta:
Conectado a un controlador autnomo en localhost:9999
c. Emita los siguientes comandos:
/subsystem=infinispan/cache-container=web/:writeattribute(name=default-cache,value=dist)
/subsystem=infinispan/cache-container=web/distributedcache=dist/:write-attribute(name=owners,value=3)
:reload
D ebe ver la siguiente respuesta despus de cada comando:
"outcome" => "success"
Estos comandos modifican el elemento d i st <d i stri buted -cache> en la
configuracin web <cache-co ntai ner> en el subsistema i nfi ni span del archivo
stand al o ne-ha. xml as:

< cache-container name="web" aliases="standard-session-cache"


default-cache="dist"
module="org.jboss.as.clustering.web.infinispan">

<transport lock-timeout="60000"/>

<replicated-cache name="repl" mode="ASYNC"


batching="true">

<file-store/>

</replicated-cache>

<replicated-cache name="sso" mode="SYNC"


batching="true"/>

<distributed-cache name="dist" owners="3" l1-lifespan="0"


mode="ASYNC" batching="true">

<file-store/>

</distributed-cache>
< /cache-container>

69

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Para mayor informacin consulte el captulo titulado Clsters en aplicaciones web en la


Gua de desarrollo para JBoss EAP 6 que se encuentra en el portal del cliente en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/
Reportar un error

3.2 .8 .2 . Im ple m e nt aci n de un Single t o n HA


R esu men
El siguiente procedimiento demuestra la manera de implementar un servicio envuelto con el
decorador SingletonService y utilizado como un servicio singleton a nivel de clster. El servicio
activa un temporizador programado, el cual se inicia una vez en el clster.
Pro ced imien t o 3.21. Imp lemen t aci n d e u n servicio Sin g let o n H A
1. Escrib a la ap licaci n d el servicio sin g let o n H A.
El siguiente es un ejemplo simple de un Servi ce envuelto con el decorador
Si ng l eto nServi ce para ser implementado como un servicio singleton. Puede encontrar
un ejemplo completo en la gua de inicio rpido de cl uster-ha-si ng l eto n que se enva
junto con Red Hat JBoss Enterprise Application Platform 6. Esta gua de inicio rpido
contiene todas las instrucciones para construir e implementar la aplicacin.
a. C rear u n servicio .
El siguiente listado es un ejemplo de un servicio:

p ackage
org.jboss.as.quickstarts.cluster.hasingleton.service.ejb;
i mport java.util.Date;
i mport java.util.concurrent.atomic.AtomicBoolean;
i mport javax.naming.InitialContext;
i mport javax.naming.NamingException;
i mport
i mport
i mport
i mport
i mport
i mport

org.jboss.logging.Logger;
org.jboss.msc.service.Service;
org.jboss.msc.service.ServiceName;
org.jboss.msc.service.StartContext;
org.jboss.msc.service.StartException;
org.jboss.msc.service.StopContext;

/ **
* @ author <a href="mailto:wfink@ redhat.com">Wolf-Dieter
Fink</a>
*/
p ublic class HATimerService implements Service<String> {

private static final Logger LOGGER =


Logger.getLogger(HATimerService.class);

public static final ServiceName SINGLETON_SERVICE_NAME =


ServiceName.JBOSS.append("quickstart", "ha", "singleton",

70

Capt ulo 3. Migre su aplicacin

"timer");

/**
* A flag whether the service is started.

*/

private final AtomicBoolean started = new


AtomicBoolean(false);

/**
* @ return the name of the server node

*/

public String getValue() throws IllegalStateException,


IllegalArgumentException {

LOGGER.infof("%s is %s at %s",
HATimerService.class.getSimpleName(), (started.get() ?
"started" : "not started"),
System.getProperty("jboss.node.name"));

return "";

public void start(StartContext arg0) throws


StartException {

if (!started.compareAndSet(false, true)) {

throw new StartException("The service is still


started!");

LOGGER.info("Start HASingleton timer service '" +


this.getClass().getName() + "'");

final String node =


System.getProperty("jboss.node.name");

try {

InitialContext ic = new InitialContext();

((Scheduler) ic.lookup("global/jboss-cluster-hasingletonservice/SchedulerBean!org.jboss.as.quickstarts.cluster.hasingl
eton.service.ejb.Scheduler")).initialize("HASingleton timer
@ " + node + " " + new Date());

} catch (NamingException e) {

throw new StartException("Could not initialize


timer", e);

public void stop(StopContext arg0) {


if (!started.compareAndSet(true, false)) {

LOGGER.warn("The service '" +


this.getClass().getName() + "' is not active!");

} else {

LOGGER.info("Stop HASingleton timer service '" +


this.getClass().getName() + "'");

try {

InitialContext ic = new InitialContext();

((Scheduler) ic.lookup("global/jboss-clusterha-singletonservice/SchedulerBean!org.jboss.as.quickstarts.cluster.hasingl

71

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

eton.service.ejb.Scheduler")).stop();

} catch (NamingException e) {

LOGGER.error("Could not stop timer", e);

}
b. C ree u n act ivad o r q u e in st ala el Servi ce co mo u n sin g let o n en cl st er.
El siguiente listado es un ejemplo de un activador Service que instala el
HAT i merServi ce como un servicio singleton en clster:

p ackage
org.jboss.as.quickstarts.cluster.hasingleton.service.ejb;
i mport
i mport
i mport
i mport
i mport
i mport

org.jboss.as.clustering.singleton.SingletonService;
org.jboss.logging.Logger;
org.jboss.msc.service.DelegatingServiceContainer;
org.jboss.msc.service.ServiceActivator;
org.jboss.msc.service.ServiceActivatorContext;
org.jboss.msc.service.ServiceController;

/ **
* Service activator that installs the HATimerService as a
clustered singleton service
* during deployment.
*
* @ author Paul Ferraro
*/
p ublic class HATimerServiceActivator implements
ServiceActivator {

private final Logger log =


Logger.getLogger(this.getClass());

@ Override
public void activate(ServiceActivatorContext context) {
log.info("HATimerService will be installed!");

HATimerService service = new HATimerService();

SingletonService<String> singleton = new


SingletonService<String>(service,
HATimerService.SINGLETON_SERVICE_NAME);

/*

* To pass a chain of election policies to the


singleton, for example,

* to tell JGroups to prefer running the singleton on


a node with a

* particular name, uncomment the following line:

*/

// singleton.setElectionPolicy(new
PreferredSingletonElectionPolicy(new
SimpleSingletonElectionPolicy(), new
NamePreference("node2/cluster")));

72

Capt ulo 3. Migre su aplicacin

singleton.build(new
DelegatingServiceContainer(context.getServiceTarget(),
context.getServiceRegistry()))

.setInitialMode(ServiceController.Mode.ACTIVE)

.install()

Nota
El cdigo ejemplo anterior usa una clase,
o rg . jbo ss. as. cl usteri ng . si ng l eto n. Si ng l eto nServi ce, que es
parte de la API privada JBoss EAP. Una API pblica se har disponible en el
lanzamiento EAP 7 y la clase privada ya no se utilizar, pero estas clases se
mantendrn y estarn disponibles durante el ciclo de lanzamiento de EAP 6.x.

c. C reaci n d e u n arch ivo ServiceAct ivat o r


Cree un archivo llamado o rg . jbo ss. msc. servi ce. Servi ceActi vato r en el
directorio reso urces/MET A-INF/servi ces/ de la aplicacin. Agregue una lnea
que contenga el nombre completamente calificado de la clase ServiceActivator
creada en el paso anterior.
o rg . jbo ss. as. q ui ckstarts. cl uster. hasi ng l eto n. servi ce. ejb. HA
T i merServi ceActi vato r
d. C ree u n b ean Sin g let o n q u e imp lemen t a u n t emp o riz ad o r a u t iliz arse
co mo t emp o riz ad o r sin g let o n a n ivel d e cl st er.
Este bean Singleton no debe tener una interfaz remota y no debe hacer referencia a
su interfaz local desde otro EJB en ninguna aplicacin. Esto evita una bsqueda por
parte de un cliente u otro componente y se asegura de que el SingletonService tenga
control total del Singleton.
i. C reaci n d e la in t erf az d el p ro g ramad o r

p ackage
org.jboss.as.quickstarts.cluster.hasingleton.service.ejb
;

/ **
* @ author <a href="mailto:wfink@ redhat.com">WolfDieter Fink</a>
*/
p ublic interface Scheduler {
void initialize(String info);

73

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

void stop();
}

ii. C rear el b ean Sin g let o n q u e imp lemen t a el t emp o riz ad o r sin g let o n
a n ivel d e cl st er.

p ackage
org.jboss.as.quickstarts.cluster.hasingleton.service.ejb
;
i mport
i mport
i mport
i mport
i mport
i mport
i mport

javax.annotation.Resource;
javax.ejb.ScheduleExpression;
javax.ejb.Singleton;
javax.ejb.Timeout;
javax.ejb.Timer;
javax.ejb.TimerConfig;
javax.ejb.TimerService;

i mport org.jboss.logging.Logger;

/ **
* A simple example to demonstrate a implementation of
a cluster-wide singleton timer.
*
* @ author <a href="mailto:wfink@ redhat.com">WolfDieter Fink</a>
*/
@ Singleton
p ublic class SchedulerBean implements Scheduler {

private static Logger LOGGER =


Logger.getLogger(SchedulerBean.class);

@ Resource

private TimerService timerService;

@ Timeout
public void scheduler(Timer timer) {

LOGGER.info("HASingletonTimer: Info=" +
timer.getInfo());

@ Override

public void initialize(String info) {

ScheduleExpression sexpr = new


ScheduleExpression();

// set schedule to every 10 seconds for


demonstration

sexpr.hour("*").minute("*").second("0/10");

// persistent must be false because the timer is


started by the HASingleton service

timerService.createCalendarTimer(sexpr, new
TimerConfig(info, false));

74

Capt ulo 3. Migre su aplicacin

@ Override
public void stop() {

LOGGER.info("Stop all existing HASingleton


timers");

for (Timer timer : timerService.getTimers()) {

LOGGER.trace("Stop HASingleton timer: " +


timer.getInfo());

timer.cancel();

2. In icie cad a in st an cia d e JB o ss EAP 6 co n el cl st er h ab ilit ad o .


Para habilitar el uso de clsters para servidores autnomos, inicie cada servidor con el perfil
HA utilizando un nodo nico y compensacin de puertos para cada instancia.
A. Para Linux use la siguiente sintaxis de comandos para iniciar los servidores:
EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml Djboss.node.name=UNIQUE_NODE_NAME -Djboss.socket.binding.portoffset=PORT_OFFSET

Ejemp lo 3.1. In icio d e m lt ip les servid o res au t n o mo s en Lin u x


$ EAP_HOME/bi n/stand al o ne. sh --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= no d e1
$ EAP_HOME/bi n/stand al o ne. sh --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= no d e2 -D jbo ss. so cket. bi nd i ng . po rto ffset= 10 0

B. Para Microsoft Windows use la siguiente sintaxis de comandos para iniciar los
servidores:
EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml Djboss.node.name=UNIQUE_NODE_NAME -Djboss.socket.binding.portoffset=PORT_OFFSET

Ejemp lo 3.2. In icio d e m lt ip les servid o res au t n o mo s en Micro so f t


Win d o ws
C : > EAP_HOME\bi n\stand al o ne. bat --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= no d e1
C : > EAP_HOME\bi n\stand al o ne. bat --server-co nfi g = stand al o neha. xml -D jbo ss. no d e. name= no d e2 -D jbo ss. so cket. bi nd i ng . po rto ffset= 10 0

75

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Nota
Si prefiere no utilizar argumentos de la lnea de comandos entonces puede configurar
el archivo stand al o ne-ha. xml para cada instancia de servidor para enlazar en
una interfaz por separado.

3. Imp lemen t e la ap licaci n en lo s servid o res


El siguiente comando Maven implementa la aplicacin en un servidor autnomo ejecutando
en los puertos predeterminados.
mvn cl ean i nstal l jbo ss-as: d epl o y
Para implementar en servidores adicionales, pase el nombre del servidor. Si es un host
diferente, pase el nombre del host y el nmero del puerto en la lnea de comandos:
mvn cl ean packag e jbo ss-as: d epl o y -D jbo ss-as. ho stname= l o cal ho st
-D jbo ss-as. po rt= 10 0 9 9
Consulte el inicio rpido cl uster-ha-si ng l eto n que se enva junto con JBoss EAP 6
para ver los detalles de la implementacin y configuracin de Maven.
Reportar un error

3.2.9. Cambios en la implement acin de est ilo de servicio


3.2 .9 .1 . Act ualizaci n de aplicacio ne s que ut ilizan las im ple m e nt acio ne s de e st ilo
de l se rvicio
R esu men
Aunque JBoss EAP 6 ya no usa descriptores del estilo del servicio, el contenedor soporta estas
implementaciones del estilo de servicio sin cambios en donde sea posible. Esto significa que si
utiliz descriptores de implementacin jbo ss-servi ce. xml o jbo ss-beans. xml en su
aplicacin JBoss EAP 5.x, deben ejecutar con muy pocas modificaciones o ninguna en JBoss EAP
6. Puede continuar empacando los archivos en el EAR o SAR o puede poner los archivos
directamente en el directorio de implementaciones. Si est ejecutando un servidor autnomo, el
directorio de implementaciones se encuentra aqu: EAP_HOME/stand al o ne/d epl o yments/. Si
est ejecutando un dominio administrado entonces debe utilizar la consola o el CLI para
implementar la aplicacin.
Reportar un error

3.2.10. Cambios de invocaciones remot as


3.2 .1 0 .1 . Migraci n de aplicacio ne s im ple m e nt adas de JBo ss EAP 5 que re alizan
invo cacio ne s re m o t as e n JBo ss EAP 6
R esu men

76

Capt ulo 3. Migre su aplicacin

En JBoss EAP 5, la interfaz remota EJB se enlazaba en JND I por defecto bajo el nombre
" ejbName/local" para las interfaces locales y " ejbName/remote" para las interfaces remotas. Luego la
aplicacin cliente buscaba el bean usando " ejbName/remote" .
En JBoss EAP 6, una nueva API cliente EJB especifica se introdujo para realizar la invocacin. Sin
embargo, si no quiere reescribir su cdigo para utilizar la nueva API entonces puede modificar el
cdigo existente para utilizar la ejb: BEAN_REFERENCE para acceso remoto a EJBs con la
siguiente sintaxis.
Para beans sin estado, la sintaxis ejb: BEAN_REFERENCE es:

e jb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fullyqualified-classname-of-the-remote-interface>
Para beans con estado la sintaxis ejb: BEAN_REFERENCE es:

e jb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fullyqualified-classname-of-the-remote-interface>?stateful
Los valores a sustituirse en la sintaxis anterior son:
<app-name> - el nombre de la aplicacin de las EJBs implementadas. Este es usualmente el
nombre ear sin el sufijo .ear, sin embargo, el nombre se puede sobreescribir en el archivo
application.xml. Si la aplicacin no se implementa como un .ear, este valor es una cadena vaca.
Asuma que este ejemplo no se implementaba como un EAR.
<mo d ul e-name> - el nombre del mdulo de las EJBs implementadas en el servidor. Este es
usualmente el nombre jar de la implementacin EJB sin el sufijo .jar, pero se puede sobreescribir
usando el ejb-jar.xml. En este ejemplo, asuma que las EJBs se implementaban en una jboss-ejbremote-app.jar as que el nombre del mdulo es jboss-ejb-remote-app.
<d i sti nct-name> - un nombre diferente opcional para la EJB. Este ejemplo no usa un nombre
diferente as que utiliza una cadena vaca.
<bean-name> - por defecto, es el nombre simple de la clase de la clase de la implementacin del
bean.
<ful l y-q ual i fi ed -cl assname-o f-the-remo te-i nterface> - el nombre de la clase
completamente calificada de la vista remota.
Act u aliz aci n d el c d ig o d el clien t e
Asuma que ha implementado los siguientes EJB sin estado en un servidor de JBoss EAP 6. Note que
expone una vista remota para el bean.

@ Stateless
@ Remote(RemoteCalculator.class)
p ublic class CalculatorBean implements RemoteCalculator {

@ Override
public int add(int a, int b) {
return a + b;
}

77

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

@ Override
public int subtract(int a, int b) {
return a - b;
}

En JBoss EAP 5, la bsqueda EJB del cliente y la invocacin se codificaba de manera similar a esto:

I nitialContext ctx = new InitialContext();


R emoteCalculator calculator = (RemoteCalculator)
ctx.lookup("CalculatorBean/remote");
i nt a = 204;
i nt b = 340;
i nt sum = calculator.add(a, b);
En JBoss EAP 6, usando la informacin descrita anteriormente, la bsqueda del cliente e invocacin
se codifica as:

final Hashtable jndiProperties = new Hashtable();


j ndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
final String appName = "";
final String moduleName = "jboss-ejb-remote-app";
final String distinctName = "";
final String beanName = CalculatorBean.class.getSimpleName();
final String viewClassName = RemoteCalculator.class.getName();
final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator)
context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName
+ "/" + beanName + "!" + viewClassName);

i nt a = 204;
i nt b = 340;
i nt sum = statelessRemoteCalculator.add(a, b);
Si su cliente est accediendo un EJB con estado debe agregar " ?stateful" al final de la bsqueda
del contexto as:

final RemoteCalculator statefulRemoteCalculator = (RemoteCalculator)


context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName
+ "/" + beanName + "!" + viewClassName + "?stateful")
Puede encontrar un ejemplo completo que funciona incluyendo el cdigo del servidor y del cliente
en los inicios rpidos. Para obtener mayor informacin consulte Review the Quickstart Tutorials en el
captulo titulado Inicie a desarrollar aplicaciones en la Gua de desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Para mayor informacin sobre invocaciones remotas utilizando JND I consulte Seccin 3.2.10.2,
Invocacin de un bean de sesin remotamente usando JND I .
Reportar un error

78

Capt ulo 3. Migre su aplicacin

3.2 .1 0 .2 . Invo caci n de un be an de se si n re m o t am e nt e usando JNDI


Esta tarea describe la manera de agregar soporte en un cliente remoto para la invocacin de beans
de sesin usando JND I. La tarea asume que el proyecto se est construyendo usando Maven.
El inicio rpido de ejb-remo te contiene proyectos Maven que demuestran esta funcionalidad. Los
inicios rpidos contienen proyectos para los beans de sesin a implementarse y el cliente remoto.
Los ejemplos de cdigo a continuacin se tomaron del proyecto del cliente remoto.
Esta tarea asume que los beans de sesin no requieren autenticacin.
Prerreq u isit o s
Antes de iniciar se deben satisfacer los siguientes prerequisitos:
Ya debe tener un proyecto Maven creado listo para utilizar.
Ya se agreg la configuracin para el repositorio Maven de JBoss EAP 6.
Los beans de sesin que quiere invocar ya estn implementados.
Los beans de sesin desplegados implementan las interfaces empresariales remotas.
Las interfaces remotas empresariales de los beans de sesin estn disponibles como una
dependencia Maven. Si las interfaces remotas empresariales solo estn disponibles como un
archivo JAR entonces se recomienda el agregar la JAR a su repositorio Maven como un objeto.
Consulte la documentacin de Maven con relacin a i nstal l : i nstal l -fi l e para obtener
indicaciones, http://maven.apache.org/plugins/maven-install-plugin/usage.html
Necesita saber el nombre de host y el puerto JND I del servidor que acta como host para los
beans de sesin.
Para invocar un bean de sesin de un cliente remoto primero debe configurar el proyecto
correctamente.
Pro ced imien t o 3.22. Ag reg aci n d e la co n f ig u raci n d el p ro yect o Maven p ara la
in vo caci n remo t a d e b ean s d e sesi n
1. Ag reg ar las d ep en d en cias req u erid as d el p ro yect o
El po m. xml para el proyecto se debe actualizar para incluir las dependencias necesarias.
2. Ag reg u e el arch ivo jbo ss-ejb-cl i ent. pro perti es
La API cliente EJB de JBoss espera encontrar un archivo en la raz del proyecto llamado
jbo ss-ejb-cl i ent. pro perti es que contiene la informacin de la conexin para el
servicio JND I. Agregue este archivo al directorio src/mai n/reso urces/ de su proyecto
con el siguiente contenido.
# In the following line, set SSL_ENABLED to true for SSL
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABL
ED=false
remote.connections=default
# Uncomment the following line to set SSL_STARTTLS to true for SSL
#
remote.connection.default.connect.options.org.xnio.Options.SSL_STAR
TTLS=true
remote.connection.default.host=localhost

79

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POL
ICY_NOANONYMOUS=false
# Add any of the following SASL options if required
#
remote.connection.default.connect.options.org.xnio.Options.SASL_POL
ICY_NOANONYMOUS=false
#
remote.connection.default.connect.options.org.xnio.Options.SASL_POL
ICY_NOPLAINTEXT=false
#
remote.connection.default.connect.options.org.xnio.Options.SASL_DIS
ALLOWED_MECHANISMS=JBOSS-LOCAL-USER
Cambie el nombre del host y el puerto para que coincida con su servidor. 4 4 4 7 es el nmero
de puerto predeterminado. Para una conexin segura configure la lnea SSL_ENABLED
como true y borre el comentario de la lnea SSL_ST AR T T LS. La interfaz remota en el
contenedor soporta las conexiones seguras y no seguras usando el mismo puerto.
3. Ag reg ar d ep en d en cias p ara las in t erf aces emp resariales remo t as
Agregar las dependencias Maven al po m. xml para las interfaces empresariales remotas de
los beans de sesin.
< dependency>

<groupId>org.jboss.as.quickstarts</groupId>

<artifactId>jboss-ejb-remote-server-side</artifactId>

<type>ejb-client</type>

<version>${project.version}</version>
< /dependency>
Ahora que el proyecto se configur correctamente, puede agregar el cdigo para acceder e invocar
los beans de sesin.
Pro ced imien t o 3.23. O b t en g a u n p ro xy b ean u san d o JN D I e in vo q u e mt o o d o s d el b ean
1. Man ejo d e las excep cio n es verif icad as
D os de los mtodos usados en el siguiente cdigo (Ini ti al C o ntext() y l o o kup())
tienen una excepcin verificada del tipo javax. nami ng . Nami ng Excepti o n. Estas
llamadas de mtodos pueden estar includas en un bloque try/catch que atrape
Nami ng Excepti o n o en un mtodo que se declare para presentar Nami ng Excepti o n. El
manual de inicio rpido ejb-remo te usa la segunda tcnica.
2. C ree u n co n t ext o JN D I
Un objeto del contexto JND I proporciona el mecanismo para solicitar recursos del servidor.
Cree un contexto JND I usando el siguiente cdigo:
final Hashtable jndiProperties = new Hashtable();
j ndiProperties.put(Context.URL_PKG_PREFIXES,
"org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);

80

Capt ulo 3. Migre su aplicacin

Las propiedades de conexin para el servicio JND I se leen del archivo jbo ss-ejbcl i ent. pro perti es.
3. U se el mt o d o lo o ku p ( ) d el co n t ext o JN D I p ara o b t en er u n p ro xy b ean
Invoque el mtodo l o o kup() del proxy bean y psele el nombre JND I del bean de sesin
que requiera. Esto retornar un objeto que se debe vaciar al tipo de la interfaz empresarial
remota que contiene los mtodos que quiere invocar.

final RemoteCalculator statelessRemoteCalculator =


(RemoteCalculator) context.lookup(

"ejb:/jboss-ejb-remote-server-side//CalculatorBean!" +

RemoteCalculator.class.getName());
Los nombres JND I de beans de sesin se definen utilizando una sintaxis especial. Para
mayor informacin consulte Seccin 3.2.10.3, Referencia de nombrado JND I EJB .
4. In vo caci n d e mt o d o s
Ahora que tiene un objeto bean proxy puede invocar cualquiera de los mtodos que se
encuentane en la interfaz empresarial remota.
i nt a = 204;
i nt b = 340;
S ystem.out.println("Adding " + a + " and " + b + " via the remote
stateless calculator deployed on the server");
i nt sum = statelessRemoteCalculator.add(a, b);
S ystem.out.println("Remote calculator returned sum = " + sum);
El bean proxy pasa la peticin de la invocacin del mtodo al bean de sesin en el servidor,
en donde se ejecuta. El resultado se retorna al bean proxy, el cual luego lo retorna al que
realiza la llamada. La comunicacin entre el bean proxy y el bean de sesin remoto es
transparente para el que realiza la llamada.
Ahora debe poder configurar un proyecto Maven para soportar la invocacin de beans de sesin en
un servidor remoto y escribir el cdigo para invocar los mtodos de los beans de sesin usando un
bean proxy recuperado del servidor usando JND I.
Reportar un error

3.2 .1 0 .3. Re fe re ncia de no m brado JNDI EJB


El nombre de bsqueda JND I para un bean de sesin tiene la sintaxis:
ejb:<appName>/<moduleName>/<distinctName>/<beanName>!<viewClassName>?
stateful
<appName>
Si el archivo JAR del bean de sesin se ha implementado dentro de un archivador
empresarial (EAR) entonces este es el nombre de ese EAR. Por defecto, el nombre de un
EAR es su nombre de archivo sin el sufijo . ear. El nombre de la aplicacin tambin se
puede sobreescribir en su archivo appl i cati o n. xml . Si el bean de sesin no se
implementa en un EAR entonces djelo en blanco.

81

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

<mo d ul eName>
El nombre del mdulo es el nombre del archivo JAR en donde est implementado el bean
de sesin. Por defecto, el nombre del archivo JAR es su nombre de archivo sin el sufijo
. jar. El nombre del mdulo tambin se puede sobreescribir en el archivo ejb-jar. xml
del JAR.
<d i sti nctName>
JBoss EAP 6 permite que cada implementacin especifique un nombre opcional diferente.
Si la implementacin no tiene un nombre diferente entonces djelo en blanco.
<beanName>
El nombre del bean es el nombre de la clase del bean de sesin que se va a invocar.
<vi ewC l assName>
El nombre de clase de vista es el nombre de clase completamente calificado de la interfaz
remota. Esto incluye el nombre del paquete de la interfaz.
?stateful
El sufijo ?stateful se requiere cuando el nombre JND I se refiere a un bean de sesin con
estado. No se incluye para otros tipos de beans.
Reportar un error

3.2.11. Cambios de EJB 2.x


3.2 .1 1 .1 . Act ualizaci n de aplicacio ne s que ut ilizan EJB 2 .x
JBoss EAP 6 se construy sobre estndares abiertos y cumple con los requerimientos de la
especificacin de la edicin empresarial de Java 6. Mientras que el servidor de aplicaciones
proporciona soporte para EJB 2.x, puede que ya no soporte funcionalidades que van ms all de la
especificacin. Tenga en mente que la especificacin Java EE 7 ha marcado EJB 2.x como opcional
as que se le recomienda con mucho nfasis que reescriba el cdigo de su aplicacin en la
especificacin EJB 3.x.
Si todava quiere migrar su cdigo EJB 2.x en la mayora de los casos necesitar realizar algunas
modificaciones para ejecutar en JBoss EAP 6. Este tema describe algunos de los cambios que
puede necesitar para ejecutar EJB 2.x en JBoss EAP 6.
C amb io s en la co n f ig u raci n req u erid o s p ara ejecu t ar EJB 2.x en JB o ss EAP 6
In iciar el servid o r co n el p erf il co mp let o
Los beans CMP (del ingls Container Managed Persistence) EJB 2.x requieren el perfil
completo de la edicin empresarial de Java 6. Este perfil contiene elementos de
configuracin que se necesitan para ejecutar CMP EJBs.
Este perfil de configuracin contiene el mdulo de extensin o rg . jbo ss. as. cmp:
< extensions>

...

<extension module="org.jboss.as.cmp"/>

...
< /extensions>

82

Capt ulo 3. Migre su aplicacin

Tambin contiene el subsistema cmp:


< profiles>

...

<subsystem xmlns="urn:jboss:domain:cmp:1.1"/>

...
< /profiles>
.
Para iniciar un servidor autnomo JBoss EAP 6 con el perfil completo pase el argumento c standalone-full.xml or -c standalone-full-ha.xml en la lnea de comandos
cuando inicie el servidor.
La co n f ig u raci n d e co n t en ed o r ya n o se so p o rt a
En versiones anteriores de JBoss EAP era posible configurar un contenedor diferente para
entidades CMP y otros beans y utilizarlo estableciendo referencias dentro del archivo
descriptor de implementacin de la aplicacin jbo ss. xml . Por ejemplo, haba diferentes
configuraciones para SLSB para poner los beans en sesiones en general.
En JBoss EAP 6.x, es posible utilizar beans de entidad EJB 2 con un contenedor estndar.
Sin embargo, ya no se soportan las diferentes configuraciones del contenedor. El enfoque
recomendado es migrar los beans de sesin con estado EJB2 (SFSB del ingls Stateful
Session Beans), los beans de sesin sin estado (SLSB ddel ingls Stateless Session
Beans), beans dirigidos por mensajes (MD B del ingls Message D riven Beans) a EJB 3 y
para la persistencia administrada por el contenedor (CMP del ingls Container-Managed
Persistence) y los beans de entidad de persistencia administrada por beans (BMP del
ingls Bean-Managed Persistence) utilizar la API de persistencia Java (JPA del ingls Java
Persistence API) de acuerdo con la especificacin EJB 3.
La configuracin predeterminada del contenedor en JBoss EAP 6 contiene varios cambios
para los beans EJB 2 CMP:
El bloqueo pesimista est activado por defecto. Esto puede generar puntos muertos.
El cdigo de deteccin de deadLock que se encontraba en la capa CMP en JBoss EAP
5.x ya no est en JBoss EAP 6.
En JBoss EAP 5.x, tambin era posible el personalizar el cach, el agrupamiento, co mmi to pti o ns y la pila de interceptores. En JBoss EAP 6, esto ya no es posible. Hay solo una
implementacin, la cual es similar a la poltica Instance P er T ransacti o n con
co mmi t-o pti o n C . Si migra una aplicacin que usa la configuracin del contenedor del
bean de entidades cmp2. x jd bc2 pm, el cual usa un administrador de persistencia
basado en JD BC compatible con CMP2.x , entonces tendr impacto en el rendimiento. Este
contenedor se optimiz para rendimiento. Se recomienda que migre estas entidades a EJB
3 antes de migrar la aplicacin.
C o n f ig u raci n d el in t ercep t o r d el lad o d el servid o r
JBoss EAP 6 soporta el Intercepto r Java EE estndar utilizando las anotaciones
@ Intercepto rs y @ Aro und Invo ke. Sin embargo, esto no permite la manipulacin por
fuera de la transaccin o la seguridad.
En versiones anteriores de JBoss EAP era posible modificar la pila de interceptores para
tener interceptores personalizados para cada invocacin EJB. Esto se utilizaba con
frecuencia para implementar seguridad personalizada o mecanismos de reintento antes de
chequeos de seguridad o chequeos de transacciones o creacin. JBoss EAP 6.1 introdujo

83

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

interceptores de contenedor para brindar una funcionalidad similar. Para mayor


informacin sobre interceptores de contenedor consulte el captulo titulado Interceptores de
contenedor en la Gua de desarrollo para JBoss EAP.
Otro enfoque para brindar ms control antes, durante o despus de la fase de guardado
de una transaccin siguiendo la especificacin Java EE es utilizar el registro de
sincronizacin de transacciones para agregar un escucha.
El recurso se puede recuperar usando uno de los siguientes mtodos:
Use el Ini ti al C o ntext
T ransactionSynchronizationRegistry tsr =
(TransactionSynchronizationRegistry)
new
InitialContext().lookup("java:jboss/TransactionSynchronizationR
egistry");
t sr.registerInterposedSynchronization(new MyTxCallback());
Use inyeccin
@ Resource(mappedName =
"java:comp/TransactionSynchronizationRegistry")
T ransactionSynchronizationRegistry tsr;
. ..
t sr.registerInterposedSynchronization(new MyTxCallback());
La rutina callback debe implementar la interfaz
javax. transacti o n. Synchro ni zati o n. Use el mtodo befo reC o mpl eti o n{} para
realizar cualquier chequeo antes de que la transaccin se guarde o se deshaga. Si este
mtodo presenta una R unti meExcepti o n entonces la transaccin se deshace y se le
informa al cliente con una EJBT ransacti o nR o l l ed backExcepti o n. En el caso de una
XA-Transaction, todos los recursos se desharn de acuerdo con el contrato XA. Tambin
es posible para la lgica empresarial habilitada el depender del estado de la transaccin
utilizando el mtodo afterC o mpl eti o n(i nt txStatus). Si este mtodo presenta una
R unti meExcepti o n entonces la transaccin permanece en el estado anterior ya sea con
lo cambios guardados o deshechos y no se le informa al cliente. Solo el administrador de
transacciones muestra una advertencia dentro del los archivos de registro del servidor.
C o n f ig u raci n d el lad o d el servid o r p ara in t ercep t o res d el lad o d el clien t e
En versiones anteriores de JBoss EAP era posible configurar los interceptores clientes
dentro de la configuracin del servidor y proporcionar solo las clases con el API cliente.
En JBoss EAP 6, esto ya no es posible ya que el Proxy cliente ya no se crea en el lado del
servidor ni se transmite al cliente despus de la bsqueda. Ahora el proxy se genera del
lado del cliente. Esta optimizacin evita una invocacin del servidor para la bsqueda y
carga de clases,
C o n f ig u raci n d el p o o l d e b ean s d e en t id ad es
En JBoss EAP 6 no se recomienda la configuracin del pool de beans de entidades. Ya
que se limita a la configuracin del elemento <stri ct-max-po o l > pueden tener lugar
puntos muertos y otros problemas si el pool es demasiado pequeo para cargar todas las
entidades en el grupo de resultados. Los beans de entidad no tienen mtodos largos del
ciclo de vida durante la inicializacin as que el crear la y el contenedor que lo rodea no es
ms lento que cuando se utiliza una instancia de bean de entidad en pool.

84

Capt ulo 3. Migre su aplicacin

R eemp lace el arch ivo d escrip t o r d e imp lemen t aci n jb o ss.xml


El descriptor de implementacin jbo ss-ejb3. xml reemplaza el archivo descriptor de
implementacin jbo ss. xml . Este archivo se utiliza para sobreescribir y agregar a las
funcionalidades proporcionadas por el descriptor de implementacinejb-jar. xml de la
edicin empresarial Java (EE). El nuevo archivo es incompatible con jbo ss. xml y el
jbo ss. xml ahora se ignora en las implementaciones.
Por ejemplo, en lanzamientos anteriores de JBoss EAP, si defina una <reso urce-ref>
en el archivo ejb-jar. xml necesitaba una definicin de recursos correspondiente para
el nombre JND I en el archivo jbo ss. xml . XD oclet automticamente generaba ambos
archivos descriptores de implementacin. En JBoss EAP 6, la informacin de mapeo JND I
ahora se define en el archivo jbo ss-ejb3. xml . Asuma que la fuente de datos se define
en el cdigo fuente Java as:
D ataSource ds1 = (DataSource) new
InitialContext().lookup("java:comp/env/jdbc/Resource1");
D ataSource ds2 = (DataSource) new
InitialContext().lookup("java:comp/env/jdbc/Resource2");
El ejb-jar. xml define las siguientes referencias de recursos.
< resource-ref >

<res-ref-name>jdbc/Resource1</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>
< /resource-ref>
< resource-ref >

<res-ref-name>java:comp/env/jdbc/Resource2</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>
< /resource-ref>
El archivo jbo ss-ejb3. jxml mapea los nombres JND I a las referencias usando la
siguiente sintaxis XML.
< resource-ref>

<res-ref-name>jdbc/Resource1</res-ref-name>

<jndi-name>java:jboss/datasources/ExampleDS</jndi-name>
< /resource-ref>
< resource-ref>

<res-ref-name>java:comp/env/jdbc/Resource2</res-ref-name>

<jndi-name>java:jboss/datasources/ExampleDS</jndi-name>
< /resource-ref>
Algunas de las opciones de configuracin que estaban disponibles en el archivo
jbo ss. xml JBoss EAP 5.x no se implementaron en JBoss EAP 6. La siguiente lista
describe algunos de los atributos utilizados comnmente en el archivo jbo ss. xml y si
hay una manera opcional de alcanzarlos en JBoss EAP 6.
El elemento metho d -attri bute se utilizaba para configurar mtodos de beans de
sesin y entidades individuales.
Las opciones de configuracin read -o nl y y i d empo tent no se llevaron a JBoss
EAP 6.

85

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

La opcin transacti o n-ti meo ut ahora se configura en el archivo jbo ssejb3. xml .
El atributo mi ssi ng -metho d -permi ssi o n-excl ud e-mo d e cambi el
comportamiento de los mtodos sin implementar metadatos de seguridad explcitos en
un bean asegurado. En JBoss EAP 6, la ausencia de una anotacin @ R o l esAl l o wed
se trata de manera similar a @ P ermi tAl l
C o n f ig u raci n d e map eo d el t ip o d e f u en t e d e d at o s
En versiones anteriores de JBoss EAP, era posible configurar el mapeo del tipo de fuente
de datos dentro del archivo de configuracin de la implementacin de la fuente de datos
*-d s. xml .
En JBoss EAP 6, esto se debe hacer ahora en el archivo descriptor de implementacin
jbo sscmp-jd bc. xml .
< defaults>

<datasource-mapping>mySQL</datasource-mapping>

<create-table>true</create-table>

....
< /defaults>
En versiones anteriores de JBoss EAP, el mapeo personalizado se realizaba en el archivo
stand ard jbo sscmp-jd bc. xml . Este archivo ya no est disponible y el mapeo ahora se
realiza en el archivo descriptor de implementacin jbo sscmp-jd bc. xml .
C amb io s ad icio n ales a la p ersist en cia ad min ist rad a p o r el co n t en ed o r y las relacio n es
ad min ist rad as p o r el co n t en ed o r
C amb io s en el it erad o r d e relacio n es ad min ist rad as p o r el co n t en ed o r y
co leccio n es
En lanzamientos anteriores de JBoss EAP, era posible para algunos contenedores, por
ejemplo el contenedor cmp2. x jd bc2 pm el iterar colecciones CMR (del ingls Container
Managed Relationship) y borrar o agregar relaciones. D ebido a que la configuracin del
contenedor no se soporta, esto ya no es posible en JBoss EAP 6. Para obtener mayor
informacin sobre cmo lograr esta misma funcionalidad en el cdigo de la aplicacin,
consulte EJB2.1 Localizador de entidades CMP con relaciones (CMR) retorna duplicados
en EAP6 en la seccin de Soluciones de la base de conocimiento de soporte del Portal de
clientes.
En t rad as d u p licad as d e relacio n es ad min ist rad as p o r el co n t en ed o r p ara
lo caliz ad o res
En versiones anteriores de JBoss EAP, era posible seleccionar diferentes contenedores
CMP que utilizaban diferentes estrategias de persistencia. El contenedor cmp2. x jd bc2
pm en JBoss EAP 5.x utilizaba SQ L-9 2 optimizado para generar sintaxis LEFT OUTER
JOIN optimizada para localizadores. D ebido a que JBoss EAP 6.x solo soporta el
contenedor estndar para CMP y CMR, la implementacin no contiene estas
optimizaciones. El localizador debe incluir la palabra clave D IST INC T en la declaracin
SELEC T para evitar un producto cartesiano en el grupo de resultados. Para obtener mayor
informacin consulte EJB2.1 Localizador para entidades CMP con relaciones (CMR)
retorna duplicados en EAP6 en la seccin de Soluciones de la base de conocimiento de
soporte del Portal de clientes.
C amb io en el b o rrad o p red et ermin ad o en cascad a p ara b ean s d e en t id ad C MP

86

Capt ulo 3. Migre su aplicacin

El valor predeterminado del borrado en cascada cambi a fal se. Esto puede generar
fallos de borrado en JBoss EAP 6. Si relaciones de entidades se marcan como cascad ed el ete debe establecer explcitamente el batch-cascad e-d el ete como true en el
archivo jbo sscmp-jd bc. xml . Para obtener mayor informacin consulte fallo en el
borrado en cascada para entidades EJB2 CMP despus de la migracin a EAP6 en la
seccin de Soluciones de la base de conocimiento de soporte del Portal de clientes.
Map eo s p erso n aliz ad o s C MP p ara camp o s p erso n aliz ad o s
Si utiliz las clases de mapeo de clientes tal como JD BC P arameterSetter,
JD BC R esul tSetR ead er y Mapper en su aplicacin JBoss EAP 5.x, es posible que vea la
java. l ang . C l assNo tFo und Excepti o n cuando implementa su aplicacin en JBoss
EAP 6. Esto se debe a que los nombres de paquetes para las interfaces se cambiaron de
o rg . jbo ss. ejb. pl ug i ns. cmp. jd bc. Mapper a
o rg . jbo ss. as. cmp. jd bc. Mapper. Para obtener mayor informacin consulte Cmo
utilizar el mapeo de campos para las clases personalizadas en una aplicacin EJB2 CMP
en EAP6 en la seccin de Soluciones de la base de conocimiento de soporte del Portal de
clientes.
G en eraci n d e llaves p rimarias u t iliz an d o co man d o s d e en t id ad
Si su aplicacin JBoss EAP 5 usa enti ty-co mmand s para generar llaves primarias, por
ejemplo Seq uence o Auto -i ncrement es posible que vea una
C l assNo tFo und Excepti o n para la clase JD BC O racl eSeq uenceC reateC o mmand
cuando migra su aplicacin a JBoss EAP 6. Esto se debe a que el paquete clase cambi
de o rg . jbo ss. ejb. pl ug i ns. cmp. jd bc a o rg . jbo ss. as. cmp. jd bc. keyg en. Si
utiliza esta clase en su aplicacin JBoss EAP 6 tambin debe agregar una dependencia en
el mdulo EAP _HO ME/mo d ul es/system/l ayers/base/o rg /jbo ss/as/cmp.
C amb io s en la ap licaci n
Mo d if iq u e el c d ig o p ara u t iliz ar las n u evas reg las d e esp acio d e n o mb res JN D I.
As como con EJB 3.0, tiene que utilizar el prefijo completo JND I con EJB 2.x. Para mayor
informacin sobre las nuevas reglas del espacio de nombre JND I y ejemplos del cdigo
consulte Seccin 3.1.8.1, Actualizacin de los nombres de espacios de nombres JND I de
la aplicacin .
Puede encontrar los ejemplos sobre cmo actualizar los espacios de nombres JND I de
lanzamientos anteriores aqu: Seccin 3.1.8.5, Ejemplos de espacios de nombres JND I en
lanzamientos anteriores y la manera en que se especifican en JBoss EAP 6 .
Mo d if iq u e el d escrip t o r d e arch ivo s jbo ss-web. xml
Modifique el <jnd i -name> para cada <ejb-ref> para utilizar el nuevo formato de
bsqueda completamente calificado JND I.
U se XD o clet p ara map ear el n o mb re JN D I N ame d e in t erf aces lo cales in t ern as
Con EJB 2 era muy comn el utilizar el patrn Lo cato r para buscar Beans. Si usted
utilizaba este patrn en su aplicacin, en lugar de modificar el cdigo de la aplicacin
code, puede utilizar XD oclet para generar un mapa para los nuevos nombres JND I.
Una anotacin XD oclet tpica se ve as:
@ ejb.bean name="UserAttribute" display-name="UserAttribute"
local-jndi-name="ejb21/UserAttributeEntity" view-type="local"
type="CMP" cmp-version="2.x" primkey-field="id"

87

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

El nombre JND I ejb21/UserAttri buteEnti ty en el ejemplo anterior ya no es vlido en


JBoss EAP 6. Puede mapear este nombre a un nombre JND I vlido utilizando el
subsistema nami ng en la configuracin del servidor y un parche para XD oclet.
Puede crear mapeos personalizados tal como se anota en el prrafo anterior titulado
Mapeos personalizados CMP para campos personalizados o puede modificar el cdigo tal
como se describe en el siguiente procedimiento.
Pro ced imien t o 3.24 . C amb ie el c d ig o g en erad o XD o clet y u se el su b sist ema d e
n o mb rad o
1. Extraiga la plantilla XD oclet l o o kup. xd t que se encuentra en ejb-mo d ul e. jar
y modifique l o o kup() en l o o kupHo me as:
p rivate static Object lookupHome(java.util.Hashtable
environment, String jndiName, Class narrowTo) throws
javax.naming.NamingException {

// Obtain initial context

javax.naming.InitialContext initialContext = new


javax.naming.InitialContext(environment);

try {

// Replace the existing lookup

// Object objRef = initialContext.lookup(jndiName);

// This is the new mapped lookup

Object objRef;

try {

// try JBoss EAP mapping

objRef =
initialContext.lookup("global/"+jndiName);

} catch(java.lang.Exception e) {

objRef = initialContext.lookup(jndiName);

// only narrow if necessary

if
(java.rmi.Remote.class.isAssignableFrom(narrowTo))

return
javax.rmi.PortableRemoteObject.narrow(objRef, narrowTo);

else

return objRef;

} finally {

initialContext.close();

}
2. Ejecute Ant, configurando el atributo plantilla para utilizar el l o o kup. xd t
modificado para la tarea ejbd o cl et.
3. Modifique el subsistema nami ng en el archivo de configuracin del servidor para
mapear el nombre JND I viejo al nuevo nombre JND I vlido.
< subsystem xmlns="urn:jboss:domain:naming:1.2">

<bindings>

<lookup name="java:global/ejb21/UserAttributeEntity"
lookup="java:global/ejb2CMP/ejb/UserAttribute!de.wfink.ejb21

88

Capt ulo 3. Migre su aplicacin

.cmp.cmr.UserAttributeLocalHome"/>

</bindings>

<remote-naming/>
< /subsystem>
R esu men d e arch ivo s o b so let o s
Los siguientes archivos ya no se soportan en JBoss EAP 6.
jb o ss.xml
El archivo descriptor de implementacin jbo ss. xml ya no se soporta y se ignora si se
incluye en el archivador implementado.
st an d ard jb o sscmp - jd b c.xml
El archivo de configuracin stand ard jbo sscmp-jd bc. xml ya no se soporta. Esta
informacin de configuracin ahora se incluye en el mdulo o rg . jbo ss. as. cmp y ya no
se puede personalizar.
st an d ard jb o ss.xml
El archivo de configuracin stand ard jbo ss. xml ya no se soporta. Esta informacin de
configuracin ahora se incluye en el archivo stand al o ne. xml al ejecutar un servidor
autnomo o el archivo d o mai n. xml en un dominio administrado.
Reportar un error

3.2.12. Cambios en JBoss AOP


3.2 .1 2 .1 . Act ualizaci n de aplicacio ne s que ut ilizan JBo ss AOP
JBoss AOP (Aspect Oriented Programming) ya no se incluye en JBoss EAP 6. En lanzamientos
anteriores, el contenedor EJB utilizaba JBoss AOP. Sin embargo, en JBoss EAP 6, el contenedor
EJB usa un nuevo mecanismo. Si su aplicacin usa JBoss AOP, necesita modificar el cdigo de su
aplicacin as.
R ef act o rice la ap licaci n
Las configuraciones EJB3 estndares que se realizaron anteriormente en el archivo ejb3i ntercepto rs-ao p. xml ahora se configuran en el archivo de configuracin del servidor. Para
un servidor autnomo, este es el archivo stand al o ne/co nfi g urati o n/stand al o neful l . xml . Si est ejecutando su servidor en un dominio administrado, este es el archivo
d o mai n/co nfi g urati o n/d o mai n. xml .
Los interceptores AOP del lado del servidor se deben modificar para utilizar el Intercepto r
Java EE estndar. Para obtener mayor informacin sobre interceptores contenedores y cmo
utilizar un interceptor del lado del cliente en una aplicacin, consulte el captulo titulado
Container Interceptors en la Development Guide para JBoss EAP 6 que se encuentra en el portal del
cliente en https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
U se b ib lio t ecas JB o ss AO P
Si no puede refactorizar el cdigo entonces puede obtener una copia de las bibliotecas JBoss
AOP y agruparlas con la aplicacin. Las bibliotecas AOP pueden funcionar en JBoss EAP 6,
pero no se implementan. Puede implementarlos manualmente usando el siguiente argumento de
la lnea de comandos cuando inicia el servidor: -D jbo ss. ao p. path= PATH_TO_AOP_CONFIG

89

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Nota
Aunque las bibliotecas JBoss AOP pueden funcionar en JBoss EAP 6, no es una
configuracin soportada.
Reportar un error

3.2.13. Migracin de aplicaciones Seam 2.2


3.2 .1 3.1 . Migraci n de archivado re s Se am 2 .2 a JBo ss EAP 6
Sin o p sis
Cuando migra una aplicacin Seam 2.2 necesita configurar la fuente de datos y especificar las
dependencias de los mdulos. Tambin necesita determinar si la aplicacin tiene alguna
dependencia en archivadores que no se envan junto con JBoss EAP 6 y copie las JARs
dependientes en el directorio l i b/ de la aplicacin.

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 3.25. Mig raci n d e arch ivad o res Seam 2.2
1. Act u aliz aci n d e la co n f ig u raci n d e la f u en t e d e d at o s
Algunos ejemplos de Seam 2.2 usan la fuente de datos JD BC predeterminada llamada
java: /Exampl eD S. Esta fuente de datos predeterminada cambi en JBoss EAP 6 a
java: jbo ss/d ataso urces/Exampl eD S. Si su aplicacin usa la base de datos del
ejemplo puede hacer una de las siguientes cosas:
Si quiere utilizar la base de datos del ejemplo que se enva junto con JBoss EAP 6,
modifique el archivo MET A-INF/persi stence. xml para reemplazar el elemento jtad ata-so urce existente con el nombre JND I de la fuente de datos de la base de datos:
< !-- <jta-data-source>java:/ExampleDS</jta-data-source> -->
< jta-data-source>java:jboss/datasources/ExampleDS</jta-datasource>
Si prefiere mantener su base de datos existente, puede agregar la definicin de la fuente
de datos al archivo EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml .

90

Capt ulo 3. Migre su aplicacin

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin del
servidor para que su cambio persista al reiniciar el servidor.
La siguiente definicin es una copia de la fuente de datos HSQL predeterminada definida
en JBoss EAP 6:

< datasource name="ExampleDS" jndi-name="java:/ExampleDS"


enabled="true" jta="true" use-java-context="true" useccm="true">

<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=1</connection-url>

<driver>h2</driver>

<security>

<user-name>sa</user-name>

<password>sa</password>

</security>
< /datasource>
Tambin puede agregar la definicin de la fuente de datos usando la interfaz de la lnea
de comandos del CLI de administracin. El siguiente es un ejemplo de la sintaxis que
tiene que utilizar para agregar una fuente de datos. La " \" al final de la lnea indica la
continuacin del comando en la siguiente lnea.
Ejemp lo 3.3. Ejemp lo d e la sin t axis p ara ag reg ar la d ef in ici n d e la f u en t e
d e d at o s
$ EAP_HOME/bin/jboss-cli --connect
[standalone@ localhost:9999 /] data-source add --name=ExampleDS
--jndi-name=java:/ExampleDS \
--connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 -driver-name=h2 \
--user-name=sa --password=sa

Para mayor informacin sobre cmo configurar una fuente de datos consulte
Seccin 3.1.6.2, Actualizacin de la configuracin de la fuente de datos .
2. Ag reg ar las d ep en d en cias req u erid as
Ya que las aplicaciones Seam 2.2 usan JSF 1.2, necesita agregar las dependencias para
los mdulos JSF 1.2 y excluir los mdulos JSF 2.0. Para lograr esto necesita crear un
archivo jbo ss-d epl o yment-structure. xml en el directorio MET A-INF/ del EAR que
contiene los siguientes datos:
< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="com.sun.jsf-impl" slot="1.2"

91

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>
Si su aplicacin usa marcos de trabajo de registro de terceros es necesario agregar esas
dependencias tal como se describe aqu: Seccin 3.1.4.1, Modificar las dependencias de
registros .
3. Si su ap licaci n u sa H ib ern at e 3.x, p rimero t rat e d e ejecu t ar la ap licaci n
u san d o las b ib lio t ecas H ib ern at e 4
Si su aplicacin no usa el contexto de persistencia administrada Seam, la bsqueda
Hibernate, validacin u otras funcionalidades que han cambiado con Hibernate 4, es posible
que pueda ejecutar con las bibliotecas Hibernate 4. Sin embargo, si ve
C l assNo tFo und Excepti o ns o C l assC astExcepti o ns que apuntan a las clases
Hibernate o ve errores similares al siguiente puede que necesite seguir las instrucciones en
el siguiente paso y modificar la aplicacin para utilizar bibliotecas Hibernate 3.3.
Caused by: java.lang.LinkageError: loader constraint
violation in interface itable initialization: when resolving method
"org.jboss.seam.persistence.HibernateSessionProxy.getSession(Lorg/hi
bernate/EntityMode;)Lorg/hibernate/Session;" the class loader
(instance of org/jboss/modules/ModuleClassLoader) of the current
class, org/jboss/seam/persistence/HibernateSessionProxy, and the
class loader (instance of org/jboss/modules/ModuleClassLoader) for
interface org/hibernate/Session have different Class objects for the
type org/hibernate/Session used in the signature
4. C o p ie lo s arch ivo s d ep en d ien t es d e f u era d e lo s marco s d e t rab ajo u o t ro s
lu g ares
Si su aplicacin usa Hibernate 3.x y no puede utilizar Hibernate 4 de manera exitosa con su
aplicacin, necesitar copiar las JARs Hibernate 3.x en el directorio /l i b y excluir el
mdulo Hibernate en la seccin de implementaciones del MET A-INF/jbo ss-d epl o ymentstructure. xml as:

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<exclusions>

92

Capt ulo 3. Migre su aplicacin

<module name="org.hibernate"/>
</exclusions>
<deployment>
< /jboss-deployment-structure>

Tiene que tomar pasos adicionales cuando agrupa Hibernate 3.x con su aplicacin. Para
mayor informacin, consulte Seccin 3.2.2.2, Configuracin de cambios para las
aplicaciones que usan Hibernate y JPA .
5. D ep u rar y reso lver erro res JN D I Seam 2.2
Cuando migra una aplicacin Seam 2.2 puede que vea errores
javax. nami ng . NameNo tFo und Excepti o n en el registro como el siguiente:
javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not
found in context ''
Si no quiere modificar las bsquedas JND I en el cdigo, puede modificar el archivo
co mpo nents. xml de la aplicacin de esta manera:
a. R eemp laz ar el elemen t o co re- in it exist en t e
Primero necesita reemplazar el elemento core-init existente as:
< !-- <core:init jndi-pattern="jboss-seam-booking/#
{ejbName}/local" debug="true" distributable="false"/>
< core:init debug="true" distributable="false"/>

-->

b. B u sq u e lo s men sajes IN FO d e en lace JN D I en el reg ist ro d el servid o r


Luego, busque los mensajes INFO de enlace JND I que se imprimen en el registro del
servidor cuando se implementa la aplicacin. Los mensajes de enlace JND I se deben
ver de manera similar a este:
INFO
org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploym
entUnitProcessor (MSC service thread 1-1) JNDI bindings for
session bean
named AuthenticatorAction in deployment unit subdeployment
"jboss-seam-booking.jar" of deployment "jboss-seambooking.ear" are as follows:
java:global/jboss-seam-booking/jboss-seambooking.jar/AuthenticatorAction!org.jboss.seam.example.bookin
g.Authenticator
java:app/jboss-seambooking.jar/AuthenticatorAction!org.jboss.seam.example.bookin
g.Authenticator
java:module/AuthenticatorAction!org.jboss.seam.example.bookin
g.Authenticator
java:global/jboss-seam-booking/jboss-seambooking.jar/AuthenticatorAction
java:app/jboss-seam-booking.jar/AuthenticatorAction
java:module/AuthenticatorAction

93

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

c. Ag reg ar elemen t o s d el co mp o n en t e
Para cada mensaje INFO de enlace JND I en el registro, agregue un elemento
co mpo nent que coincida en el archivo co mpo nents. xml :
< component
class="org.jboss.seam.example.booking.AuthenticatorAction"
jndi-name="java:app/jboss-seambooking.jar/AuthenticatorAction" />
Para mayor informacin sobre cmo depurar y resolver problemas de migracin consulte
Seccin 4.2.1, D epurar y resolver problemas de migracin .
Para ver una lista de problemas de migracin conocidos con los archivadores Seam 2
consulte Seccin 3.2.13.2, Problemas de migracin del archivador Seam 2.2 .
R esu lt ad o
El archivador Seam 2.2 implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error

3.2 .1 3.2 . Pro ble m as de m igraci n de l archivado r Se am 2 .2


Seam 2.2 D ro o ls y Java 7 n o so n co mp at ib les
Seam 2.2 D rools y Java 7 no son compatibles y fallan con un error que dice:
org.drools.RuntimeD roolsException: value '1.7' is not a valid language level.
Seam 2.2.5 f irmad o cg l i b. jar evit a q u e el ejemp lo Sp rin g f u n cio n e
Cuando el ejemplo Spring se ejecuta usando la cg l i b. jar firmada que se envi junto
con Seam 2.2.5 en JBoss EAP 5, falla debido a lo siguiente:
java.lang.SecurityException: class
"org.jboss.seam.example.spring.UserService$$EnhancerByCGLIB$$7d6c3
d12"'s signer information does not match signer information of
other classes in the same package
La solucin para este problema es remover la firma de la cg l i b. jar as:
zi p -d $SEAM_D IR /l i b/cg l i b. jar MET A-INF/JBO SSC O D \*
El ejemp lo Seamb ay f alla co n la No tLo g g ed InExcepti o n
La causa de este problema es que el encabezado del mensaje SOAP es nulo al procesar el
mensaje en el SOAPRequestHandler y como consecuencia el id de la conversacin no se
configura.
La solucin opcional para este problema es sobreescribir
o rg . jbo ss. seam. webservi ce. SO AP R eq uestHand l er. hand l eO utbo und tal como
se describe en https://issues.jboss.org/browse/JBPAPP-8376.
El ejemp lo Seamb ay f alla co n Unsuppo rted O perati o nExcepti o n: n o t ran sact io n
Este error es generado por cambios en el nombre JND I del UserTransaction en JBoss EAP
6.

94

Capt ulo 3. Migre su aplicacin

La solucin opcional para este problema es sobreescribir


o rg . jbo ss. seam. transacti o n. T ransacti o n. g etUserT ransacti o n, as described
in https://issues.jboss.org/browse/JBPAPP-8322.
El ejemp lo d e las t areas p resen t a u n a
o rg . jbo ss. resteasy. spi . Unhand l ed Excepti o n: U n ab le t o u n marsh all req u est
body
Este error es causado por la incompatibilidad entre seam-resteasy-2.2.5 includo en JBoss
EAP 5.1.2) y RESTEasy 2.3.1.GA includo en JBoss EAP 6.
La solucin para este problema es usar el jbo ss-d epl o yment-structure. xml para
excluir resteasy-jaxrs, resteasy-jettison-provider, y resteasy-jaxb-provider de la
implementacin principal y resteasy-jaxrs, resteasy-jettison-provider, resteasy-jaxbprovider y resteasy-yaml-provider del jbo ss-seam-tasks. war tal como se describe en
https://issues.jboss.org/browse/JBPAPP-8315. Luego es necesario incluir las bibliotecas
RESTEasy agrupadas con Seam 2.2 en el EAR.
Pu n t o mu ert o en t re o rg . jbo ss. seam. co re. Synchro ni zati o nIntercepto r y el
b lo q u eo EJB d e la in st an cia d el co mp o n en t e co n est ad o d u ran t e u n a p et ici n
AJAX
Se presenta una pgina de error con el mensaje " Caused by javax.servlet.ServletException
with message: " javax.el.ELException: /main.xhtml @36,71 value=" #{hotelSearch.pageSize}" :
org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized
component: hotelSearch" o uno similar.
El problema es que Seam 2 realiza su propio bloqueo por fuera del bean de sesin con
estado (SFSB) y con un mbito diferente. Esto significa que si un hilo accede un EJB dos
veces en la misma transaccin, despus de la primera invocacin tendr el bloqueo SFSB
pero no el bloqueo seam. Luego un segundo hilo podr adquirir el bloqueo seam, el cual
encontrar el bloqueo EJB y esperar. Cuando el primer hilo trata su segunda invocacin
se bloquear en el interceptor 2 seam y ser un punto muerto. En Java EE 5, las EJBs
presentaran una excepcin inmediatamente durante un acceso simultneo. Este
comportamiento cambi en Java EE 6.
La solucin para este problema es agregar @AccessTimeout(0) al EJB. Esto har que se
presente una C o ncurrentAccessExcepti o n cuando esta situacin tenga lugar.
El ejemp lo d e la o rd en d e creaci n d el D vd st o re f alla co n u n a
javax. ejb. EJBT ransacti o nR o l l ed backExcepti o n
El ejemplo dvdstore presenta el siguiente error:
JBAS011437: Found extended persistence context in SFSB invocation
call stack but that cannot be used because the transaction already
has a transactional context associated with it. This can be
avoided by changing application code, either eliminate the
extended persistence context or the transactional context. See
JPA spec 2.0 section 7.6.3.1.
Este problema se debe a los cambios en la especificacin JPA.
La solucin para este problema es cambiar el contexto de persistencia a transacti o nal
en las clases C hecko utActi o n y Sho wO rd ersActi o n y usar la operacin de
agrupamiento del administrador de entidades en los mtodos cancel O rd er y
d etai l O rd er.

95

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

El p ro veed o r JB o ss C ach e Seam C ach e n o se p u ed e u t iliz ar en JB o ss EAP 6


JBoss Cache no se soporta en JBoss EAP 6. Esto hace que el proveedor JBoss Cache
Seam Cache falle en una aplicacin Seam en el servidor de aplicaciones con una
java.lang.NoClassDefFoundError:
org/jboss/util/xml/JBossEntityResolver
.
Pro b lema d el au t o escan eo d e H ib ern at e 3.3.x p ara las en t id ad es JPA co n JB o ss
EAP 6
La solucin para este problema es listar todas las clases de entidades en el archivo
persistence.xml manualmente. Por ejemplo:

< ?xml version="1.0" encoding="UTF-8"?>


< persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="1.0">

<persistence-unit name="example_pu">

<description>Hibernate 3 Persistence Unit.</description>

<jta-data-source>java:jboss/datasources/ExampleDS</jtadata-source>

<properties>

<property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />

</properties>

<class>com.acme.Foo</class>

<class>com.acme.Bar</class>

</persistence-unit>
< /persistence>
El llamar a co mp o n en t es EJB Seam d esd e h ilo s q u e n o so n EJB g en era u n a
javax.n amin g .N ameN o t Fo u n d Excep t io n
Este problema se ha generado debido a los cambios en JBoss EAP 6 para implementar el
nuevo sistema de carga de clases modulares y para adoptar las nuevas convenciones de
espacios de nombre JND I estandarizadas. El espacio de nombre java: app est indicado
para los nombres compartidos por todos los componentes en una sola aplicacin. Los
hilos que no son EE, tal como los hilos asincrnicos Quartz tienen que utilizar el espacio
de nombre java: g l o bal , el cual es compartido por todas las aplicaciones
implementadas en una instancia del servidor de aplicaciones.
Si recibe una javax. nami ng . NameNo tFo und Excepti o n cuando trata de llamar a los
componentes EJB Seam desde mtodos asincrnicos Quartz tiene que modificar el archivo
co mpo nents. xml para utilizar el nombre JND I global, por ejemplo:

< component class="org.jboss.seam.example.quartz.MyBean" jndiname="java:global/seam-quartz/quartz-ejb/myBean"/>


Para mayor informacin sobre los cambios JND I consulte el siguiente tema:
Seccin 3.1.8.1, Actualizacin de los nombres de espacios de nombres JND I de la
aplicacin . Para mayor informacin sobre este tema especfico consulte BZ#948215 Seam2.3 javax.naming.NameNotFoundException trying to call EJB Seam components from quartz

96

Capt ulo 3. Migre su aplicacin

asynchronous methods en las 2.2.0 Release Notes para Red Hat JBoss Web Framework Kit en
el portal de clientes.
Reportar un error

3.2.14 . Migracin de aplicaciones Spring


3.2 .1 4 .1 . Migraci n de aplicacio ne s Spring
Puede encontrar informacin sobre la migracin de aplicaciones Spring en la documentacin
Red Hat JBoss Web Framework Kit que se encuentra en el Portal de clientes en
https://access.redhat.com/site/documentation/. Busque R ed Hat JBo ss Mi d d l eware luego haga
clic en el enlace Red Hat JBoss Web Framework Kit. Spring Installation Guide y Spring Developer Guide
estn disponibles en mltiples formatos.
Reportar un error

3.2.15. Ot ros cambios que afect an la migracin


3.2 .1 5 .1 . Fam iliarce se co n o t ro s cam bio s que pue dan afe ct ar su m igraci n
La siguiente es una lista de otros cambios en JBoss EAP 6 que pueden tener impacto al tratar de
migrar.
Seccin 3.2.15.2, Cambio del nombre del pug-in de Maven
Seccin 3.2.15.3, Modificacin de aplicaciones clientes
Reportar un error

3.2 .1 5 .2 . Cam bio de l no m bre de l pug-in de Mave n


El jbo ss-maven-pl ug i n no se ha actualizado y no funciona en JBoss EAP 6. Ahora tiene que
utilizar o rg . jbo ss. as. pl ug i ns: jbo ss-as-maven-pl ug i n para implementar en el directorio
correcto.
Reportar un error

3.2 .1 5 .3. Mo dificaci n de aplicacio ne s clie nt e s


Si planea migrar una aplicacin cliente que se conectar a JBoss EAP 6, debe tener en cuenta de
que el nombre y ubicacin de la JAR que agrupa las bibliotecas clientes ha cambiado. Esta JAR
ahora se llama jbo ss-cl i ent. jar y se encuentra en el directorio EAP_HOME/bi n/cl i ent/.
Reemplaza la EAP_HOME/cl i ent/jbo ssal l -cl i ent. jar y contiene todas las dependencias
requeridas para conectarse a JBoss EAP 6 desde un cliente remoto.
Reportar un error

97

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Captulo 4. Herramientas y consejos


4 .1. Recursos de ayuda con la migracin
4 .1.1. Recursos para ayudarle en su migracin
La siguiente es una lista de los recursos que pueden ayudarle al migrar una aplicacin a JBoss
EAP 6.
H erramien t as
Hay varias herramientas que ayudan a automatizar algunos de los cambios de la
configuracin. Para mayor informacin, consulte: Seccin 4.1.2, Familiarizacin con las
herramientas que le ayudan con la migracin .
C o n sejo s p ara la d ep u raci n
Para ver una lista de las causas ms comunes y la resolucin de problemas y errores que
puede encontrar cuando migra su aplicacin, consulte: Seccin 4.2.1, D epurar y resolver
problemas de migracin .
Mig racio n es d e ejemp lo
Para ver ejemplos de aplicaciones que se han migrado a JBoss EAP 6, consulte:
Seccin 4.3.1, Revise la migracin de las aplicaciones de ejemplo .
Reportar un error

4 .1.2. Familiariz acin con las herramient as que le ayudan con la migracin
R esu men
Hay algunas herramientas que le pueden ayudar en realizar su migracin. La siguiente es una lista
de estas herramientas junto con una descripcin de lo que hacen.
T at t let ale
Con el cambio a la carga de clases de manera modular, necesita encontrar y rectificar las
dependencias de aplicaciones. Tattletale le puede ayudar a identificar nombres de
mdulos dependientes y generar el XML de configuracin para su aplicacin.
Seccin 4.1.3, Uso de Tattletale para encontrar dependencias de aplicaciones
H erramien t a d e mig raci n Iro n Jacamar
En JBoss EAP 6, las fuentes de datos y los adaptadores de recursos ya no se configuran
en un archivo separado. Ahora se definen en el archivo de configuracin del servidor y
usan nuevos esquemas. La herramienta de migracin IronJacamar puede ayudar a
convertir la configuracin antigua al formato que JBoss EAP 6 espera.
Seccin 4.1.6, Uso de la herramienta IronJacamar para migrar configuraciones del
adapatador de recursos y la fuente de datos
Reportar un error

4 .1.3. Uso de T at t let ale para encont rar dependencias de aplicaciones

98

Capt ulo 4 . Herramient as y consejos

R esu men
D ebido a los cambios en la carga modular de clases en JBoss EAP 6, puede que encuentre rastros
C l assNo tFo und Excepti o n o C l assC astExcepti o n en el registro de JBoss cuando migre su
aplicacin. Para resolver estos errores, necesita encontrar las JARs que contienen las clases
especificadas por las excepciones.
Tattletale es una excelente herramienta de terceros que escanea de manera recursiva su aplicacin
y proporciona reportes detallados sobre su contenido. Tattletale 1.2.0.Beta2 o posterior contiene
soporte adicional para ayudar con la nueva carga de clases de mdulos JBoss utilizada en JBoss
EAP 6. El reporte " JBoss AS 7" de Tattletale se puede utilizar para identificar de manera automtica y
generar nombres de mdulos dependientes para incluir el archivo jbo ss-d epl o ymentstructure. xml de su aplicacin.
Pro ced imien t o 4 .1. In st ale y ejecu t e T at t let ale p ara b u scar d ep en d en cias d e
ap licacio n es
1. Seccin 4.1.4, D escarga e instalacin de Tattletale
2. Seccin 4.1.5, Creacin y revisin del reporte Tattletale

Nota
Tattletale es una herramienta de terceros y no se soporta como parte de JBoss EAP 6. Para
ver la documentacin actualizada sobre cmo instalar y usar Tattletale, vaya al sitio web de
Tattletale en http://www.jboss.org/tattletale.
Reportar un error

4 .1.4 . Descarga e inst alacin de T at t let ale


Pro ced imien t o 4 .2. D escarg a e in st alaci n d e T at t let ale
1. D escargue Tattletale versin 1.2.0.Beta2 o posteriores de
http://sourceforge.net/projects/jboss/files/JBoss% 20Tattletale.
2. D escomprima el archivo en el directorio que escoja.
3. Modifique el archivo T AT T LET ALE_HO ME/jbo ss-tattl etal e. pro perti es haciendo lo
siguiente:
a. Agregue ee6 y as7 a la propiedad pro fi l es.
profiles=java5, java6, ee6, as7
b. Borre el comentario de las propiedades scan y repo rts.
Reportar un error

4 .1.5. Creacin y revisin del report e T at t let ale


1. Cree el reporte Tattletale emitiendo el comando: java -jar
TATTLETALE_HOME/tattl etal e. jar APPLICATION_ARCHIVE OUTPUT_DIRECTORY

99

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Por ejemplo: java -jar tattl etal e-1. 2. 0 . Beta2/tattl etal e. jar
~ /appl i cati o ns/jbo ss-seam-bo o ki ng . ear ~ /o utput-resul ts/
2. En un navegador, abra el archivo OUTPUT_DIRECTORY/i nd ex. html y haga clic en " JBoss
AS 7" bajo la seccin " Reports" .
a. La columna a la izquierda lista los archivos que la aplicacin utiliza. Haga clic en el
enlace ARCHIVE_NAME para ver los detalles sobre el archivo tal como la ubicacin,
la informacin del manifesto y las clases que contiene.
b. El enlace jbo ss-d epl o yment-structure. xml en la columna a la derecha
muestra la manera de especificar la dependencia de mdulos para el archivo
nombrado en la columna izquierda. Haga clic en este enlace para ver la manera de
definir la informacin del mdulo de dependencias de implementacin para este
archivo.
Reportar un error

4 .1.6. Uso de la herramient a IronJacamar para migrar configuraciones del


adapat ador de recursos y la fuent e de dat os
R esu men
En versiones anteriores del servidor de aplicaciones, las fuentes de datos y los adaptadores de
recursos se configuraban y se implementaban usando un archivo con el sufijo *-d s. xml . La
distribucin IronJacamar 1.1 contiene una herramienta de migracin que se puede utilizar para
convertir estos archivos de configuracin en el formato que la JBoss EAP 6 espera. La herramienta
analiza sintcticamente el archivo de configuracin fuente del lanzamiento anterior y luego crea y
escribe la configuracin XML en un archivo de salida en el nuevo formato. Este XML luego se puede
copiar y pegar bajo el subsistema correcto en el archivo de configuracin del servidor de JBoss EAP
6. Esta herrmienta hace el mejor esfuerzo para convertir atributos y elementos antiguos al formato
nuevo, sin embargo, puede que sea necesario el realizar modificaciones adicionales al archivo
generado.
Pro ced imien t o 4 .3. In st alaci n y ejecu ci n d e la h erramien t a d e mig raci n Iro n Jacamar
1. Seccin 4.1.7, D escarga e instalacin de la herramienta de migracin IronJacamar
2. Seccin 4.1.8, Use la herramienta de migracin IronJacamar para convertir un archivo de
configuracin de la fuente de datos
3. Seccin 4.1.9, Uso de la herramienta de migracin IronJacamar para convertir un archivo
de configuracin del adaptador de recursos

Nota
La herramienta de migracin IronJacamar es una herramienta de terceros y no se soporta
como parte de JBoss EAP 6. Para mayor informacin sobre IronJacamar, vaya a
http://www.ironjacamar.org/. Para ver la documentacin actualizada sobre cmo instalar y
usar esta herramienta vaya a http://www.ironjacamar.org/documentation.html.
Reportar un error

4 .1.7. Descarga e inst alacin de la herramient a de migracin IronJacamar

100

Capt ulo 4 . Herramient as y consejos

Nota
La herramienta de migracin solo est disponible en la versin IronJacamar 1.1 o posteriores
y requiere Java 7 o posteriores.
1. D escargue la ltima distribucin de IronJacamar de aqu:
http://www.ironjacamar.org/download.html
2. D escomprima el archivo descargado en el directorio que escoja.
3. Busque el script convertidor en la distribucin IronJacamar.
El script Linux se encuentra aqu: IRONJACAMAR_HOME/d o c/as/co nverter. sh
El archivo de agrupacin Windows se encuentra aqu:
IRONJACAMAR_HOME/d o c/as/co nverter. bat
Reportar un error

4 .1.8. Use la herramient a de migracin IronJacamar para convert ir un archivo


de configuracin de la fuent e de dat os

Nota
El script convertidor IronJacamar requiere Java 7 o posteriores.

Pro ced imien t o 4 .4 . C o n vert ir u n arch ivo d e co n f ig u raci n d e la f u en t e d e d at o s


1. Abra una lnea de comandos y navegue al directorio IRONJACAMAR_HOME/d o c/as/.
2. Ejecute el script convertidor con el siguiente comando:
Para Linux: . /co nverter. sh -d s SOURCE_FILE TARGET_FILE
Para Microsoft Windows: . /co nverter. bat -d s SOURCE_FILE TARGET_FILE
El SOURCE_FILE es el atchivo -ds.xml de la fuente de datos del lanzamiento anterior. El
TARGET_FILE contiene la nueva configuracin.
Por ejemplo, para convertir el archivo de configuracin de la fuente de datos jbo ss-seambo o ki ng -d s. xml en el directorio actual escribira:
Para Linux: . /co nverter. sh -d s jbo ss-seam-bo o ki ng -d s. xml newd ataso urce-co nfi g . xml
Para Microsoft Windows: . /co nverter. bat -d s jbo ss-seam-bo o ki ng -d s. xml
new-d ataso urce-co nfi g . xml
Note que el parmetro para la conversin de la fuente de datos es -d s.
3. Copie el elemento <d ataso urce> del archivo de destino y pguelo en el archivo de
configuracin del servidor bajo el elemento <subsystem
xml ns= "urn: jbo ss: d o mai n: d ataso urces: 1. 1"><d ataso urces>.

101

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin del
servidor para que su cambio persista al reiniciar el servidor.
Si est ejecutando en un dominio administrado, copie el XML en el archivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml .
Si est ejecutando como un servidor autnomo, copie el XML en el archivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml .
4. Modifique el XML generado en el nuevo archivo de configuracin.
Este es un ejemplo del archivo de configuracin de la fuente de datos jbo ss-seambo o ki ng -d s. xml para el ejemplo de reservas de Seam 2.2 que se enva junto con JBoss
EAP 5.x:
< ?xml version="1.0" encoding="UTF-8"?>
< datasources>
<local-tx-datasource>

<jndi-name>bookingDatasource</jndi-name>

<connection-url>jdbc:hsqldb:.</connection-url>

<driver-class>org.hsqldb.jdbcDriver</driver-class>

<user-name>sa</user-name>

<password></password>
</local-tx-datasource>
< /datasources>
El siguiente es el archivo de configuracin que se gener ejecutando el script convertidor. El
archivo generado contiene u elemento <d ri ver-cl ass>. La manera preferida de definir la
clase controladora en JBoss EAP 6 es utilizar un elemento <d ri ver>. Este es el XML que
resulta en el archivo de configuracin de JBoss EAP 6 con modificaciones para borrar el
comentario del elemento <d ri ver-cl ass> y agregar el elemento correspondiente
<d ri ver>:
< subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>

<datasource enabled="true" jndiname="java:jboss/datasources/bookingDatasource" jta="true"

pool-name="bookingDatasource" use-ccm="true" use-javacontext="true">

<connection-url>jdbc:hsqldb:.</connection-url>

<!-- Comment out the following driver-class element

since it is not the preferred way to define this.

<driver-class>org.hsqldb.jdbcDriver</driver-class>
->

<!-- Specify the driver, which is defined later in the


datasource -->

<driver>h2<driver>

<transaction-isolation>TRANSACTION_NONE</transactionisolation>

<pool>

<prefill>false</prefill>

<use-strict-min>false</use-strict-min>

102

Capt ulo 4 . Herramient as y consejos

<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>

<security>

<user-name>sa</user-name>

<password/>

</security>

<validation>

<validate-on-match>false</validate-on-match>

<background-validation>false</background-validation>

<use-fast-fail>false</use-fast-fail>

</validation>

<timeout/>

<statement>

<track-statements>false</track-statements>

</statement>

</datasource>

<drivers>

<!-- The following driver element was not in the

XML target file. It was created manually. -->

<driver name="h2" module="com.h2database.h2">

<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xadatasource-class>

</driver>

</drivers>
</datasources>
< /subsystem>

Reportar un error

4 .1.9. Uso de la herramient a de migracin IronJacamar para convert ir un


archivo de configuracin del adapt ador de recursos

Nota
El script convertidor IronJacamar requiere Java 7 o posteriores.
1. Abra una lnea de comandos y navegue al directorio IRONJACAMAR_HOME/d o cs/as/.
2. Ejecute el script convertidor con el siguiente comando:
Para Linux: . /co nverter. sh -ra SOURCE_FILE TARGET_FILE
Para Microsoft Windows: . /co nverter. bat -ra SOURCE_FILE TARGET_FILE
El SOURCE_FILE es el archivo -ds.xml del adaptador de recursos del lanzamiento anterior. El
TARGET_FILE contiene la nueva configuracin.
Por ejemplo, para convertir el archivo de configuracin del adaptador de recursos
mttestad apter-d s. xml en el directorio actual escribira:
Para Linux: . /co nverter. sh -ra mttestad apter-d s. xml new-ad apterco nfi g . xml
Para Microsoft Windows: . /co nverter. bat -ra mttestad apter-d s. xml newad apter-co nfi g . xml

103

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Note que el parmetro para la conversin del adaptador de recursos es -ra.


3. Copie el elemento <reso urce-ad apters> del archivo de destino y pguelo en el archivo de
configuracin del servidor bajo el elemento <subsystem
xml ns= "urn: jbo ss: d o mai n: reso urce-ad apters: 1. 1">.

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin del
servidor para que su cambio persista al reiniciar el servidor.
Si est ejecutando en un dominio administrado, copie el XML en el archivo
EAP_HOME/d o mai n/co nfi g urati o n/d o mai n. xml .
Si est ejecutando como un servidor autnomo, copie el XML en el archivo
EAP_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml .
4. Modifique el XML generado en el nuevo archivo de configuracin.
Este es un ejemplo del archivo de configuracin del adaptador de recursos
mttestad apter-d s. xml de JBoss EAP 5.x TestSuite:
< ?xml version="1.0" encoding="UTF-8"?>
<!-==================================================================
== -->
<!-- ConnectionManager setup for jboss test adapter
-->
<!-- Build jmx-api (build/build.sh all) and view for config
documentation -->
<!-==================================================================
== -->
< connection-factories>
<tx-connection-factory>

<jndi-name>JBossTestCF</jndi-name>

<xa-transaction/>

<rar-name>jbosstestadapter.rar</rar-name>

<connectiondefinition>javax.resource.cci.ConnectionFactory</connectiondefinition>

<config-property name="IntegerProperty"
type="java.lang.Integer">2</config-property>

<config-property name="BooleanProperty"
type="java.lang.Boolean">false</config-property>

<config-property name="DoubleProperty"
type="java.lang.Double">5.5</config-property>

<config-property name="UrlProperty"
type="java.net.URL">http://www.jboss.org</config-property>

<config-property name="sleepInStart" type="long">200</configproperty>

<config-property name="sleepInStop" type="long">200</configproperty>


</tx-connection-factory>
<tx-connection-factory>

104

Capt ulo 4 . Herramient as y consejos

<jndi-name>JBossTestCF2</jndi-name>
<xa-transaction/>

<rar-name>jbosstestadapter.rar</rar-name>

<connectiondefinition>javax.resource.cci.ConnectionFactory</connectiondefinition>

<config-property name="IntegerProperty"
type="java.lang.Integer">2</config-property>

<config-property name="BooleanProperty"
type="java.lang.Boolean">false</config-property>

<config-property name="DoubleProperty"
type="java.lang.Double">5.5</config-property>

<config-property name="UrlProperty"
type="java.net.URL">http://www.jboss.org</config-property>

<config-property name="sleepInStart" type="long">200</configproperty>

<config-property name="sleepInStop" type="long">200</configproperty>


</tx-connection-factory>
<tx-connection-factory>

<jndi-name>JBossTestCFByTx</jndi-name>

<xa-transaction/>

<track-connection-by-tx>true</track-connection-by-tx>

<rar-name>jbosstestadapter.rar</rar-name>

<connectiondefinition>javax.resource.cci.ConnectionFactory</connectiondefinition>

<config-property name="IntegerProperty"
type="java.lang.Integer">2</config-property>

<config-property name="BooleanProperty"
type="java.lang.Boolean">false</config-property>

<config-property name="DoubleProperty"
type="java.lang.Double">5.5</config-property>

<config-property name="UrlProperty"
type="java.net.URL">http://www.jboss.org</config-property>

<config-property name="sleepInStart" type="long">200</configproperty>

<config-property name="sleepInStop" type="long">200</configproperty>


</tx-connection-factory>
< /connection-factories>

El siguiente es el archivo de configuracin que se gener ejecutando el script convertidor.


Reemplace el valor del atributo nombre-clase " FIXME_MCF_CLASS_NAME" en el XML
generado con el nombre de clase correcto de la fbrica de conexiones administrada, en este
caso, " org.jboss.test.jca.adapter.TestManagedConnectionFactory" . Este es el XML que
resulta en el archivo de configuracin de JBoss EAP 6 con modificaciones para el valor del
elemento <cl ass-name>:
< subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
<resource-adapters>

<resource-adapter>

<archive>jbosstestadapter.rar</archive>

<transaction-support>XATransaction</transaction-support>

<connection-definitions>
<!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the

105

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

correct class name


<connection-definition class-name="FIXME_MCF_CLASS_NAME"
enabled="true"

jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF"

use-ccm="true" use-java-context="true"> -->


<connection-definition

classname="org.jboss.test.jca.adapter.TestManagedConnectionFactory"

enabled="true"

jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF"

use-ccm="true" use-java-context="true">

<config-property name="IntegerProperty">2</config-property>

<config-property name="sleepInStart">200</config-property>

<config-property name="sleepInStop">200</config-property>

<config-property name="BooleanProperty">false</config-property>

<config-property
name="UrlProperty">http://www.jboss.org</config-property>

<config-property name="DoubleProperty">5.5</config-property>

<pool>

<prefill>false</prefill>

<use-strict-min>false</use-strict-min>

<flush-strategy>FailingConnectionOnly</flush-strategy>

</pool>

<security>

<application/>

</security>

<timeout/>

<validation>

<background-validation>false</background-validation>

<use-fast-fail>false</use-fast-fail>

</validation>
</connection-definition>

</connection-definitions>

</resource-adapter>

<resource-adapter>

<archive>jbosstestadapter.rar</archive>

<transaction-support>XATransaction</transaction-support>

<connection-definitions>
<!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the
correct class name

<connection-definition class-name="FIXME_MCF_CLASS_NAME"
enabled="true"

jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2"

use-ccm="true" use-java-context="true"> -->


<connection-definition

classname="org.jboss.test.jca.adapter.TestManagedConnectionFactory"

enabled="true"

jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2"

use-ccm="true" use-java-context="true">

<config-property name="IntegerProperty">2</config-property>

<config-property name="sleepInStart">200</config-property>

<config-property name="sleepInStop">200</config-property>

<config-property name="BooleanProperty">false</config-property>

<config-property
name="UrlProperty">http://www.jboss.org</config-property>

106

Capt ulo 4 . Herramient as y consejos

<config-property name="DoubleProperty">5.5</config-property>
<pool>

<prefill>false</prefill>

<use-strict-min>false</use-strict-min>

<flush-strategy>FailingConnectionOnly</flush-strategy>

</pool>

<security>

<application/>

</security>

<timeout/>

<validation>

<background-validation>false</background-validation>

<use-fast-fail>false</use-fast-fail>

</validation>
</connection-definition>

</connection-definitions>

</resource-adapter>

<resource-adapter>

<archive>jbosstestadapter.rar</archive>

<transaction-support>XATransaction</transaction-support>

<connection-definitions>
<!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the
correct class name
<connection-definition class-name="FIXME_MCF_CLASS_NAME"
enabled="true"

jndi-name="java:jboss/JBossTestCFByTx" poolname="JBossTestCFByTx"

use-ccm="true" use-java-context="true"> -->


<connection-definition

classname="org.jboss.test.jca.adapter.TestManagedConnectionFactory"

enabled="true"

jndi-name="java:jboss/JBossTestCFByTx" poolname="JBossTestCFByTx"

use-ccm="true" use-java-context="true">

<config-property name="IntegerProperty">2</config-property>

<config-property name="sleepInStart">200</config-property>

<config-property name="sleepInStop">200</config-property>

<config-property name="BooleanProperty">false</config-property>

<config-property
name="UrlProperty">http://www.jboss.org</config-property>

<config-property name="DoubleProperty">5.5</config-property>

<pool>

<prefill>false</prefill>

<use-strict-min>false</use-strict-min>

<flush-strategy>FailingConnectionOnly</flush-strategy>

</pool>

<security>

<application/>

</security>

<timeout/>

<validation>

<background-validation>false</background-validation>

<use-fast-fail>false</use-fast-fail>

</validation>
</connection-definition>

107

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

</connection-definitions>
</resource-adapter>
</resource-adapters>
< /subsystem>

Reportar un error

4 .2. Problemas de migracin de depuracin


4 .2.1. Depurar y resolver problemas de migracin
D ebido a la carga de clases, las reglas de nombrado JND I y otros cambios en el servidor de
aplicaciones, puede encontrar excepciones u otros errores si trata de implementar su aplicacin " tal
como viene" . A continuacin se describe la manera de resolver algunas de las excepciones y errores
ms comunes que puede encontrar.
Seccin 4.2.2, D epurar y resolver ClassNotFoundExceptions y NoClassD efFoundErrors
Seccin 4.2.5, D epurar y resolver ClassCastExceptions
Seccin 4.2.6, D epurar y resolver D uplicateServiceExceptions
Seccin 4.2.7, D epurar y resolver errores de la pgina de depuracin de JBoss Seam
Reportar un error

4 .2.2. Depurar y resolver ClassNot FoundExcept ions y


NoClassDefFoundErrors
R esu men
ClassNotFoundExceptions usualmente ocurren debido a una dependencia no resuelta. Esto
significa que tiene que definir explcitamente las dependencias en otros mdulos o copiar JARs de
fuentes externas.
1. Primero trate de encontrar la dependencia que falta. Esto se describe en ms detalle aqu:
Seccin 4.2.3, Bsqueda de la dependencia del mdulo JBoss
2. Si no hay un mdulo para la clase que falta entonces busque la JAR en la instalacin
anterior. Para obtener mayor informacin consulte Seccin 4.2.4, Buscar la JAR en la
instalacin anterior
Reportar un error

4 .2.3. Bsqueda de la dependencia del mdulo JBoss


Para resolver la dependencia, primero, trate de encontrar el mdulo que contiene la clase
especificada por la C l assNo tFo und Excepti o n mirando en el directorio
EAP_HOME/mo d ul es/system/l ayers/base/. Si encuentra un mdulo para la clase tiene que
agregar una dependencia a la entrada del manifiesto.
Por ejemplo, si ve este rastro ClassNotFoundException en el registro:
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.logging.Log

108

Capt ulo 4 . Herramient as y consejos

from [Module "deployment.TopicIndex.war:main" from Service Module


Loader]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:188)
Busque el mdulo JBoss que contiene esta clase haciendo lo siguiente:
Pro ced imien t o 4 .5. B sq u ed a d e la d ep en d en cia
1. Primero determine si hay un mdulo obvio para la clase.
a. Navegue al directorio EAP_HOME/mo d ul es/system/l ayers/base/ y busque la
clase que coincida con la ruta del mdulo en la C l assNo tFo und Excepti o n.
Encuentre la ruta del mdulo o rg /apache/co mmo ns/l o g g i ng /.
b. Abra el archivo
EAP_HOME/mo d ul es/system/l ayers/base/o rg /apache/co mmo ns/l o g g i ng
/mai n/mo d ul e. xml y busque el nombre del mdulo. En este caso es
" org.apache.commons.logging" .
c. Agregue el nombre del mdulo a las dependencias en el archivo MANIFEST . MF:
Manifest-Version: 1.0
Dependencies: org.apache.commons.logging
2. Si no hay una ruta de mdulo obvia para la clase, es posible que tenga que buscar la
dependencia en otro lugar.
a. Busque la clase nombrada por la C l assNo tFo und Excepti o n en el reporte
Tattletale.
b. Busque el mdulo que contiene la JAR en el directorio EAP_HOME/mo d ul es y
busque el nombre del mdulo tal como en el paso anterior.
Reportar un error

4 .2.4 . Buscar la JAR en la inst alacin ant erior


Si la clase no se encuentra en una JAR empacada en un mdulo definido por el servidor, busque la
JAR en su instalacin EAP5_HOME o en el directorio l i b/ de su servidor anterior.
Por ejemplo, si ve este rastro C l assNo tFo und Excepti o n en el registro:
Caused by: java.lang.NoClassDefFoundError:
org/hibernate/validator/ClassValidator at
java.lang.Class.getDeclaredMethods0(Native Method)
Busque la JAR que contiene esta clase haciendo lo siguiente:
1. Abra una terminal y navegue al directorio EAP5_HOME/.
2. Emita el comando:
g rep ' o rg . hi bernate. val i d ato r. C l assVal i d ato r' `fi nd . \-name
' *. jar' `

109

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

3. Puede que vea ms de un resultado. En este caso, el siguiente resultado es la JAR que
necesitamos:
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar
matches
4. Copie esta JAR al directorio l i b/ de la aplicacin.
Si encuentra que necesita un nmero ms grande de JARs, puede que sea ms fcil el definir
un mdulo para las clases. Para mayor informacin consulte Modules en el captulo titulado
Inicio rpido para desarrollar aplicaciones en la Gua de desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
5. Vuelva a construir y a implementar la aplicacin
Reportar un error

4 .2.5. Depurar y resolver ClassCast Except ions


ClassCastExceptions con frecuencia tienen lugar ya que una clase est siendo cargada por medio
de un cargador de clase diferente de la clase que extiende. Tambin pueden ser el resultado de la
misma clase existente en mltiples JARs.
1. Busque la aplicacin para encontrar todas las JAR(s) que contienen la clase nombrada por
la C l assC astExcepti o n. Si hay un mdulo definido para la clase, encuentre y borre las
JAR(s) duplicadas del WAR o EAR de la aplicacin.
2. Busque el mdulo JBoss que contiene la clase y defina explcitamente la dependencia en el
archivo MANIFEST . MF o en el archivo jbo ss-d epl o yment-structure. xml . Para mayor
informacin consulte Class Loading and Subdeployments en el captulo titulado Class Loading
and Modules en la Development Guide para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
3. Si no puede resolverlo usando los pasos anteriores, con frecuencia puede determinar la
causa del problema imprimiendo la informacin del cargador de clases en el registro. Por
ejemplo, puede ver la siguiente C l assC astExcepti o n en el registro:
java.lang.ClassCastException: com.example1.CustomClass1 cannot be
cast to com.example2.CustomClass2
a. En su cdigo imprima la informacin del cargador de clases para las clases
nombradas por la C l assC astExcepti o n para el registro, por ejemplo:

l ogger.info("Class loader for CustomClass1: " +

com.example1.CustomClass1.getClass().getClassLoader().toString
());
l ogger.info("Class loader for CustomClass2: " +

com.example2.CustomClass2.getClass().getClassLoader().toString
());
b. La informacin en el registro muestra qu mdulos estn cargando las clases y con
base en su aplicacin necesitar borrar o mover las JAR(s) que causan conflictos.

110

Capt ulo 4 . Herramient as y consejos

Reportar un error

4 .2.6. Depurar y resolver Duplicat eServiceExcept ions


Si obtiene una D uplicateServiceException para una subimplementacin de una JAR o un mensaje
que la aplicacin WAR ya se instal cuando implementa su EAR en JBoss EAP 6, se puede deber a
los cambios en la manera en que JBossWS maneja la implementacin.
El lanzamiento JBossWS 3.3.0 introdujo un nuevo algoritmo de mapeo de raz del contexto para
puntos finales basados en el servlet para permitirle que sea compatible con TCK6. Si el archivo EAR
de la aplicacin contiene una WAR y una JAR con el mismo nombre, JBossWS puede crear un
contexto WAR y un context web con el mismo nombre. El contexto web crea conflictos con el contexto
WAR y esto resulta en errores de implementacin. Resuelva los problemas de implementacin de una
de las siguientes maneras:
Renombre el archivo JAR con un nombre diferente del de la WAR as que los contextos web y
WAR son nicos.
Proporcione un elemento <co ntext-ro o t> en el archivo jbo ss-web. xml .
Proporcione un elemento <co ntext-ro o t> en el archivo jbo ss-webservi ces. xml .
Personalice el elemento <co ntext-ro o t> para la WAR en el archivo appl i cati o n. xml .
Reportar un error

4 .2.7. Depurar y resolver errores de la pgina de depuracin de JBoss Seam


D espus de que migre e implemente exitosamente su aplicacin puede encontrar un error en tiempo
de ejecucin que le redireccione a la pgina " JBoss Seam D ebug" . La URL para esta pgina es
" http://localhost:8080/APPLICATION_CONTEXT/debug.seam" . Esta pgina le permite ver e
inspeccionar los componentes Seam en cualquiera de los contextos Seam asociados con su sesin
actual.

Fig u ra 4 .1. Pg in a d e d ep u raci n JB o ss Seam

111

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Muy posiblemente la razn por la cual se le redirecciona a esta pgina es ya que Seam atrap una
excepcin que no se manej en el cdigo de la aplicacin. La causa raz de la excepcin
usualmente se encuentra en uno de los enlaces en la " pgina de depuracin JBoss Seam" .
1. Amplie la seccin C o mpo nent en la pgina y busque el componente
o rg . jbo ss. seam. caug htExcepti o n.
2. La causa y el rastro de la pila debe apuntarle a las dependencias que faltan.

Fig u ra 4 .2. In f o rmaci n d el co mp o n en t e o rg . jbo ss. seam. caug htExcepti o n


3. Use la tcnica descrita en Seccin 4.2.2, D epurar y resolver ClassNotFoundExceptions y
NoClassD efFoundErrors para resolver dependencias de mdulos.
En el ejemplo anterior la solucin ms simple es agregar o rg . sl f4 j al MANIFEST . MF
Manifest-Version: 1.0
Dependencies: org.slf4j
Otra opcin es agregar una dependencia para el mdulo al archivo jbo ss-d epl o ymentstructure. xml :
< jboss-deployment-structure>

<deployment>

<dependencies>

112

Capt ulo 4 . Herramient as y consejos

<module name="org.slf4j" />


</dependencies>

</deployment>
< /jboss-deployment-structure>

Reportar un error

4 .3. Revise la migracin de las aplicaciones de ejemplo


4 .3.1. Revise la migracin de las aplicaciones de ejemplo
Sin o p sis
La siguiente es una lista de las aplicaciones de ejemplo de JBoss EAP 5.x que se han migrado a
JBoss EAP 6. Para ver los detalles de lo que se cambi en una aplicacin en particular haga clic en
el enlace a continuacin.
Seccin 4.3.2, Migracin del ejemplo Seam 2.2 JPA a JBoss EAP 6
Seccin 4.3.3, Migracin del ejemplo de reservas Seam 2.2 a JBoss EAP 6
Seccin 4.3.4, Migracin del archivador de reservas de Seam 2.2 a JBoss EAP 6: instrucciones
paso por paso
Reportar un error

4 .3.2. Migracin del ejemplo Seam 2.2 JPA a JBoss EAP 6


R esu men
La siguiente lista de tareas resume los cambios necesarios para migrar exitosamente la aplicacin
de ejemplo de Seam 2.2 JPA a JBoss EAP 6. Esta aplicacin de ejemplo se puede encontrar en la
ltima distribucin de JBoss EAP 5 bajo EAP5.x_HOME/jbo ss-eap-5. x/seam/exampl es/jpa/

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 4 .6 . Mig raci n d el ejemp lo Seam 2.2 JPA


1. B o rre el arch ivo jb o ss- web .xml
Borre el archivo jbo ss-web. xml del directorio jbo ss-seam-jpa. war/WEB-INF/. La
carga de clases definida en el jbo ss-web. xml ahora es el comportamiento
predeterminado.
2. Mo d if iq u e el arch ivo jbo ss-seam-jpa. jar/MET A-INF/persi stence. xml as:

113

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

a. Remueva o borre el comentario de la propiedad


hi bernate. cache. pro vi d er_cl ass en el archivo jbo ss-seam-jpa. war/WEBINF/cl asses/MET A-INF/persi stence. xml :
< !-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->
b. Agregue la propiedad del mdulo proveedor al archivo jbo ss-seambo o ki ng . jar/MET A-INF/persi stence. xml :
< property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />
c. Cambie la propiedad jta-d ata-so urce para utilizar el nombre JND I de la fuente de
datos JD BC predeterminada:
< jta-data-source>java:jboss/datasources/ExampleDS</jta-datasource>
3. Ag reg ar d ep en d en cias Seam 2.2
Copie las siguientes JARs de la biblioteca de la distribucin Seam 2.2, SEAM_HO ME/l i b/,
en el directorio jbo ss-seam-jpa. war/WEB-INF/l i b/:
antlr.jar
slf4j-api.jar
slf4j-log4j12.jar
hibernate-entitymanager.jar
hibernate-core.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-validator.jar
4. C ree u n arch ivo jb o ss- d ep lo ymen t - st ru ct u re p ara ag reg ar las d ep en d en cias q u e
f alt an
Cree un archivo jbo ss-d epl o yment-structure. xml en la carpeta jbo ss-seamjpa. war/WEB-INF/ que contenga los siguientes datos:
< jboss-deployment-structure>

<deployment>

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

<module name="org.hibernate" slot="main"/>

</exclusions>

<dependencies>

<module name="org.apache.log4j" />

<module name="org.dom4j" />

114

Capt ulo 4 . Herramient as y consejos

<module name="org.apache.commons.logging" />


<module name="org.apache.commons.collections" />

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>

</deployment>
< /jboss-deployment-structure>

R esu lt ad o :
La aplicacin de ejemplo Seam 2.2 JPA implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error

4 .3.3. Migracin del ejemplo de reservas Seam 2.2 a JBoss EAP 6


R esu men
La migracin EAR de reservas Seam 2.2 es ms complicada que el ejemplo de Seam 2.2 JPA WAR.
La documentacin para la migracin del ejemplo Seam 2.2 JPA WAR se puede encontrar aqu:
Seccin 4.3.2, Migracin del ejemplo Seam 2.2 JPA a JBoss EAP 6 . Para migrar la aplicacin tiene
que hacer la siguiente:
1. Inicializar JSF 1.2 en lugar del JSF 2 predeterminado.
2. Agrupe versiones antiguas de las JARs Hibernate en lugar de utilizar las que se envan junto
con JBoss EAP 6.
3. Cambie los enlaces JND I para utilizar la nueva sintaxis porttil JND I Java EE 6.
Los primeros 2 pasos anteriores se realizaron en la migracin del ejemplo WAR JPA Seam 2.2. El
tercer paso es nuevo y es necesario ya que el EAR contiene EJBs.

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 4 .7. Mig raci n d el ejemp lo d e reservas Seam 2.2
1. C ree el arch ivo jbo ss-d epl o yment-structure. xml
Cree un nuevo archivo llamado jbo ss-d epl o yment-structure. xml en el jbo ss-seambo o ki ng . ear/MET A-INF/ y agregue el siguiente contenido:

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<dependencies>

115

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

<module name="javax.faces.api" slot="1.2" export="true"/>


<module name="com.sun.jsf-impl" slot="1.2"
export="true"/>

<module name="org.apache.log4j" export="true"/>

<module name="org.dom4j" export="true"/>

<module name="org.apache.commons.logging"
export="true"/>

<module name="org.apache.commons.collections"
export="true"/>

</dependencies>

<exclusions>

<module name="org.hibernate" slot="main"/>

</exclusions>

</deployment>
<sub-deployment name="jboss-seam-booking.war">
<exclusions>
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
</exclusions>
<dependencies>
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
</dependencies>
</sub-deployment>
</jboss-deployment-structure>

2. Mo d if iq u e el arch ivo jbo ss-seam-bo o ki ng . jar/MET A-INF/persi stence. xml as:


a. Omita o borre el comentario de la propiedad hibernate para la clase del proveedor
cache:
< !-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->
b. Agregue la propiedad del mdulo proveedor al archivo jbo ss-seambo o ki ng . jar/MET A-INF/persi stence. xml :
< property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />
c. Cambie la propiedad jta-d ata-so urce para utilizar el nombre JND I de la fuente de
datos JD BC predeterminada:
< jta-data-source>java:jboss/datasources/ExampleDS</jta-datasource>
3. C o p ie las JAR s d e la d ist rib u ci n Seam 2.2
Copie las siguientes JARs de la distribucin Seam 2.2 EAP5.x_HOME/jbo sseap5. x/seam/l i b/ en el directorio jbo ss-seam-bo o ki ng . ear/l i b.
antlr.jar
slf4j-api.jar

116

Capt ulo 4 . Herramient as y consejos

slf4j-log4j12.jar
hibernate-core.jar
hibernate-entitymanager.jar
hibernate-validator.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
4. C amb ie lo s n o mb res d e b sq u ed a JN D I
Cambie las cadenas de bsqueda JND I en el archivo jbo ss-seam-bo o ki ng . war/WEBINF/co mpo nents. xml . D ebido a las nuevas reglas porttiles JND I, JBoss EAP 6 ahora
enlaza EJBs usando reglas de sintaxis porttiles JND I y no puede utilizar el jndiPattern que
se utiliz en JBoss EAP 5. As se deben cambiar las cadenas de bsqueda JND I EJB de la
aplicacin para JBoss EAP 6:
java:global/jboss-seam-booking/jboss-seambooking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSe
arching
java:app/jboss-seambooking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSe
arching
java:module/HotelSearchingAction!org.jboss.seam.example.booking.Hot
elSearching
java:global/jboss-seam-booking/jboss-seambooking/HotelSearchingAction
java:app/jboss-seam-booking/HotelSearchingAction
java:module/HotelSearchingAction
Las cadenas de bsqueda JND I para las EJBs del marco de trabajo Seam 2.2 se debn
cambiar as:
java:global/jboss-seam-booking/jbossseam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchro
nizations
java:app/jbossseam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchro
nizations
java:module/EjbSynchronizations!org.jboss.seam.transaction.LocalEjb
Synchronizations
java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations
java:app/jboss-seam/EjbSynchronizations
java:module/EjbSynchronizations
Puede tomar cualquiera de los siguientes enfoques:
a. Ag reg ar elemen t o s d el co mp o n en t e
Puede agregar un jnd i -name para todo EJB al WEB-INF/co mpo nents. xml :

<component
class="org.jboss.seam.transaction.EjbSynchronizations" jndiname="java:app/jboss-seam/EjbSynchronizations"/>

<component
class="org.jboss.seam.async.TimerServiceDispatcher" jndi-

117

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

name="java:app/jboss-seam/TimerServiceDispatcher"/>

<component
class="org.jboss.seam.example.booking.AuthenticatorAction"
jndi-name="java:app/jboss-seam-booking/AuthenticatorAction"
/>

<component
class="org.jboss.seam.example.booking.BookingListAction"
jndi-name="java:app/jboss-seam-booking/BookingListAction" />

<component
class="org.jboss.seam.example.booking.RegisterAction" jndiname="java:app/jboss-seam-booking/RegisterAction" />

<component
class="org.jboss.seam.example.booking.HotelSearchingAction"
jndi-name="java:app/jboss-seam-booking/HotelSearchingAction"
/>

<component
class="org.jboss.seam.example.booking.HotelBookingAction"
jndi-name="java:app/jboss-seam-booking/HotelBookingAction" />

<component
class="org.jboss.seam.example.booking.ChangePasswordAction"
jndi-name="java:app/jboss-seam-booking/ChangePasswordAction"
/>
b. Puede modificar el cdigo agregando la anotacin @ JND IName(val ue= "")
especificando la ruta JND I. A continuacin puede ver un ejemplo del cdigo
cambiado del bean de sesin sin estado. Puede encontrar una descripcin detallada
de este proceso en la documentacin de referencia de Seam 2.2.

@ Stateless
@ Name("authenticator")
@ JndiName(value="java:app/jboss-seambooking/AuthenticatorAction")
p ublic class AuthenticatorAction

implements Authenticator

{
. ..

}
R esu lt ad o :
La aplicacin de reservas Seam 2.2 implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error

4 .3.4 . Migracin del archivador de reservas de Seam 2.2 a JBoss EAP 6:


inst rucciones paso por paso
Este es un manual paso por paso de cmo pasar un archivador de aplicaciones de reserva Seam
2.2 de JBoss EAP 5.X a JBoss EAP 6. Aunque hay mejores enfoques para migrar aplicaciones,
muchos desarrolladores estarn tentados a implementar el archivador de aplicaciones tal como
est, al servidor de JBoss EAP 6 para ver qu pasa. El propsito de este documento es mostrar los
tipos de problemas que puede encontrar cuando hace esto y la manera de depurar y resolver esos
problemas.

118

Capt ulo 4 . Herramient as y consejos

Para este ejemplo, la EAR de la aplicacin se implementa en el directorio


EAP6_HOME/stand al o ne/d epl o yments sin ningun cambio aparte de extraer los archivadores.
Esto le permite modificar fcilmente los archivos XML que se encuentran dentro de los archivadores
cuando encuentre y resuelva el problema.

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 4 .8. Mig raci n d e la ap licaci n


1. Seccin 4.3.5, Construccin e implementacin de JBoss EAP versin 5.X de la aplicacin
de reservas Seam 2.2
2. Seccin 4.3.6, D epuracin y resolucin de errores y excepciones de implementacin del
archivador de reservas Seam 2.2
3. Seccin 4.3.7, D epuracin y resolucin de errores y excepciones en tiempo de ejecucin del
archivador de reservas Seam 2.2
En este momento puede acceder de manera exitosa a la aplicacin en un navegador usando la URL
http://localhost:8080/seam-booking/. Inicie sesin como demo/demo y podr ver la pgina de
bienvenida de las reservas.
R evisi n d el resu men d e lo s camb io s
Seccin 4.3.8, Revisin de un resumen de los cambios realizados al migrar la aplicacin de
reservas Seam 2.2
Reportar un error

4 .3.5. Const ruccin e implement acin de JBoss EAP versin 5.X de la


aplicacin de reservas Seam 2.2
Antes de migrar esta aplicacin, necesita construir la aplicacin de reservas Seam 2.2 de JBoss
EAP 5.X, extraer el archivo y copiarlo a la carpeta de implementacin de JBoss EAP 6.
Pro ced imien t o 4 .9 . C o n st ru ir e imp lemen t ar el EAR
1. Construir el EAR:
$ cd /EAP5_HOME/jboss-eap5.x/seam/examples/booking
$ ANT_HOME/ant explode
Reemplace jboss-eap5.x con la versin de JBoss EAP desde donde est migrando
2. Copie el EAR al directorio de implementaciones EAP6_HOME:
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-

119

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

seam-booking.ear EAP6_HOME/standalone/deployments/
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jbossseam-booking.war EAP6_HOME/standalone/deployments/jboss-seam.ear
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jbossseam-booking.jar EAP6_HOME/standalone/deployments/jboss-seam.ear
3. Inicie el servidor de JBoss EAP 6 y revise el resgistro. Ver:
INFO [org.jboss.as.deployment] (DeploymentScanner-threads - 1)
Found jboss-seam-booking.ear in deployment directory.
To trigger deployment create a file called jboss-seambooking.ear.dodeploy
4. Cree un archivo vaco con el nombre jbo ss-seam-bo o ki ng . ear. d o d epl o y y cpielo
en el directorio EAP6_HOME/stand al o ne/d epl o yments. Necesita copiar este archivo en
el directorio de implementaciones muchas veces al migrar esta aplicacin as que
mantngalo en un lugar en donde lo pueda encontrar fcilmente. En el registro ahora debe
ver los siguientes mensajes, indicando que se est implementando:
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam-booking.ear"
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam-booking.jar"
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam.jar"
INFO [org.jboss.as.server.deployment] (MSC service
Starting deployment of "jboss-seam-booking.war"

thread 1-1)
thread 1-3)
thread 1-6)
thread 1-2)

En este momento se encuentra con su primer error de implementacin. En el siguiente paso,


se revisa cada problema y aprende a depurar y a resolverlos.
Para aprender cmo depurar y resolve problemas de implementacin haga clic aqu:
Seccin 4.3.6, D epuracin y resolucin de errores y excepciones de implementacin del
archivador de reservas Seam 2.2
Para regresar al tema anterior haga clic aqu: Seccin 4.3.4, Migracin del archivador de
reservas de Seam 2.2 a JBoss EAP 6: instrucciones paso por paso
Reportar un error

4 .3.6. Depuracin y resolucin de errores y excepciones de implement acin


del archivador de reservas Seam 2.2
En el paso anterior, Seccin 4.3.5, Construccin e implementacin de JBoss EAP versin 5.X de la
aplicacin de reservas Seam 2.2 construy la aplicacin de reservas Seam 2.2 de JBoss EAP 5.X y
la implement en la carpeta de implementacin de JBoss EAP 6. En este paso, depura y resuelve
cada cada error de implementacin que encuentre.

120

Capt ulo 4 . Herramient as y consejos

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 4 .10. D ep u raci n y reso lu ci n d e excep cio n es y erro res d e
imp lemen t aci n
1. Emita - java.lang.ClassNotFoundException: javax.faces.FacesException
Cuando implementa la aplicacin, el registro contiene el siguiente error:
ERROR \[org.jboss.msc.service.fail\] (MSC service thread 1-1)
MSC00001: Failed to start service jboss.deployment.subunit."jbossseam-booking.ear"."jboss-seam-booking.war".POST_MODULE:
org.jboss.msc.service.StartException in service
jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seambooking.war".POST_MODULE:
Failed to process phase POST_MODULE of subdeployment "jboss-seambooking.war" of deployment "jboss-seam-booking.ear"
(.. additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
javax.faces.FacesException from \[Module "deployment.jboss-seambooking.ear:main" from Service Module Loader\]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java
:191)
Lo q u e sig n if ica:
La ClassNotFoundException indica que falta una dependencia. En este caso, no puede
encontrar la clase javax. faces. FacesExcepti o n y necesita agregar la dependencia de
manera explcita.
Para reso lverlo :
Busque el nombre del mdulo para esa clase en el directorio
EAP6_HOME/mo d ul es/system/l ayers/base/ buscando una ruta que coincida con la
clase que falta. En este caso se encuentran dos mdulos que coinciden:
javax/faces/api/main
javax/faces/api/1.2
Ambos mdulos tienen el mismo nombre de mdulo: javax. faces. api pero uno en el
directorio principal es para JSF 2.0 y el que se encuentra en el directorio 1.2 es para JSF 1.2.
Si hubiera solo un mdulo disponibles entonces podra simplemente crear un archivo
MANIFEST . MF y agregar la dependencia del mdulo. Pero en este caso, quiere utilizar la

121

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

versin JSF 1.2 y no la versin 2.0 en main as que necesita especificar uno y excluir el otro.
Para lograr esto, cree un archivo jbo ss-d epl o yment-structure. xml en el directorio
MET A-INF/ del EAR que contiene los siguientes datos:

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>
En la seccin d epl o yment agregue la dependencia para la javax. faces. api para el
mdulo JSF 1.2. Tambin agregue la dependencia para el mdulo JSF 1.2 en la seccin de
subimplementacin para la WAR y excluya el mdulo para JSF 2.0.
Vuelva a implementar la aplicacin borrando el archivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y
creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
2. Emita - java.lang.ClassNotFoundException: org.apache.commons.logging.Log
Cuando implementa la aplicacin, el registro contiene el siguiente error:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8)
MSC00001: Failed to start service jboss.deployment.unit."jbossseam-booking.ear".INSTALL:
org.jboss.msc.service.StartException in service
jboss.deployment.unit."jboss-seam-booking.ear".INSTALL:
Failed to process phase INSTALL of deployment "jboss-seambooking.ear"
(.. additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.logging.Log from [Module "deployment.jboss-seambooking.ear.jboss-seam-booking.war:main" from Service Module
Loader]
Lo q u e sig n if ica:
La C l assNo tFo und Excepti o n indica que falta una dependencia. En este caso, no puede
encontrar la clase o rg . apache. co mmo ns. l o g g i ng . Lo g y necesita agregar la
dependencia de manera explcita.
Para reso lverlo :

122

Capt ulo 4 . Herramient as y consejos

Busque el nombre del mdulo para esa clase en el directorio


EAP6_HOME/mo d ul es/system/l ayers/base/ buscando una ruta que coincida con la
clase que falta. En este caso, encuentra un mdulo que coincide con la ruta
o rg /apache/co mmo ns/l o g g i ng /. El nombre del mdulo es
org.apache.commons.logging .
Modifique el archivo jbo ss-d epl o yment-structure. xml para agregar la dependencia
del mdulo a la seccin de implementacin del archivo.

< module name="org.apache.commons.logging" export="true"/>


El jbo ss-d epl o yment-structure. xml ahora se debe ver as:

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="org.apache.commons.logging" export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>
Vuelva a implementar la aplicacin borrando el archivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y
creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
3. Emita - java.lang.ClassNotFoundException: org.dom4j.D ocumentException
Cuando implementa la aplicacin, el registro contiene el siguiente error:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defaulthost].[/seam-booking]] (MSC service thread 1-3) Exception sending
context initialized event to listener instance of class
org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError:
org/dom4j/DocumentException
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.dom4j.DocumentException from [Module "deployment.jboss-seambooking.ear.jboss-seam.jar:main" from Service Module Loader]
Lo q u e sig n if ica:

123

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

La C l assNo tFo und Excepti o n indica que falta una dependencia. En este caso, no puede
encontrar la clase o rg . d o m4 j. D o cumentExcepti o n.
Para reso lverlo :
Busque el nombre del mdulo en el directorio
EAP6_HOME/mo d ul es/system/l ayers/base/ buscando la
o rg /d o m4 j/D o cumentExcepti o n. El nombre del mdulo es org.dom4j . Modifique el
archivo jbo ss-d epl o yment-structure. xml para agregar la dependencia del mdulo a
la seccin de implementacin del archivo.

< module name="org.dom4j" export="true"/>


El archivo jbo ss-d epl o yment-structure. xml ahora se debe ver as:

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="org.apache.commons.logging" export="true"/>

<module name="org.dom4j" export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>
Vuelva a implementar la aplicacin borrando el archivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y
creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
4. Emita - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue
Cuando implementa la aplicacin, el registro contiene el siguiente error:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defaulthost].[/seam-booking]] (MSC service thread 1-6) Exception sending
context initialized event to listener instance of class
org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException:
Could not create Component:
org.jboss.seam.international.statusMessages
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.hibernate.validator.InvalidValue from [Module
"deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from
Service Module Loader]

124

Capt ulo 4 . Herramient as y consejos

Lo q u e sig n if ica:
La C l assNo tFo und Excepti o n indica que falta una dependencia. En este caso, no puede
encontrar la clase o rg . hi bernate. val i d ato r. Inval i d Val ue.
Para reso lverlo :
Hay un mdulo org.hibernate.validator , pero la JAR no contiene la clase
o rg . hi bernate. val i d ato r. Inval i d Val ue as que el agregar la dependencia del
mdulo no resuelve este problema. En este caso, la JAR que contiene la clase era parte de la
implementacin JBoss EAP 5.X. Busque la JAR que contiene la clase que falta en el
directorio EAP5_HOME/seam/lib/. Para lograr esto, abra una consola y escriba lo
siguiente:
$ cd EAP5_HOME/seam/lib
$ grep 'org.hibernate.validator.InvalidValue' `find . -name
'*.jar'`
El resultado muestra:
$ Binary file ./hibernate-validator.jar matches
$ Binary file ./test/hibernate-all.jar matches
En este caso, copie la hi bernate-val i d ato r. jar al directorio jbo ss-seambo o ki ng . ear/l i b/:
$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seambooking.ear/lib
Vuelva a implementar la aplicacin borrando el archivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y
creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
5. Emita - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactory
Cuando implementa la aplicacin, el registro contiene el siguiente error:
INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC
service thread 1-7) Unsanitized stacktrace from failed start...:
com.sun.faces.config.ConfigurationException: Factory
'javax.faces.application.ApplicationFactory' was not configured
properly.
at
com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactorie
sExist(FactoryConfigProcessor.java:296) [jsf-impl-2.0.4-b09jbossorg-4.jar:2.0.4-b09-jbossorg-4]
(... additional logs removed ...)
Caused by: javax.faces.FacesException:
org.jboss.seam.jsf.SeamApplicationFactory
at
javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.ja
va:606) [jsf-api-1.2_13.jar:1.2_13-b01-FCS]
(... additional logs removed ...)

125

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

at
com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactorie
sExist(FactoryConfigProcessor.java:294) [jsf-impl-2.0.4-b09jbossorg-4.jar:2.0.4-b09-jbossorg-4]
... 11 more
Caused by: java.lang.InstantiationException:
org.jboss.seam.jsf.SeamApplicationFactory
at java.lang.Class.newInstance0(Class.java:340) [:1.6.0_25]
at java.lang.Class.newInstance(Class.java:308) [:1.6.0_25]
at
javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.ja
va:604) [jsf-api-1.2_13.jar:1.2_13-b01-FCS]
... 16 more
Lo q u e sig n if ica:
La co m. sun. faces. co nfi g . C o nfi g urati o nExcepti o n y la
java. l ang . Instanti ati o nExcepti o n indican un problema de dependencias. En este
caso, la causa no es tan obvia.
Para reso lverlo :
Necesita encontrar el mdulo que contiene las clases co m. sun. faces. Aunque no hay un
mdulo co m. sun. faces, hay dos mdulos co m. sun. jsf-i mpl . Una revisin rpida de
la jsf-i mpl -1. 2_13. jar en el directorio 1.2 muestra que contiene las clases
co m. sun. faces. Tal como lo hizo con javax. faces. FacesExcepti o n
C l assNo tFo und Excepti o n, debe utilizar la versin JSF 1.2 y no la versin JSF 2.0 en
main, as que necesita especificar una y excluir la otra. Necesita modificar el jbo ssd epl o yment-structure. xml para agregar la dependencia del mdulo a la seccin de
implementacin del archivo. Tambin tiene que agregarla a la subimplementacin WAR y
excluir el mdulo JSF 2.0. El archivo se debe ver as:
< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="com.sun.jsf-impl" slot="1.2"


export="true"/>

<module name="org.apache.commons.logging" export="true"/>

<module name="org.dom4j" export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>
Vuelva a implementar la aplicacin borrando el archivo

126

Capt ulo 4 . Herramient as y consejos

EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y


creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
6. Emita - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack
Cuando implementa la aplicacin, el registro contiene el siguiente error:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[defaulthost].[/seam-booking]] (MSC service thread 1-1) Exception sending
context initialized event to listener instance of class
com.sun.faces.config.ConfigureListener: java.lang.RuntimeException:
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED!
org.apache.commons.collections.ArrayStack from [Module
"deployment.jboss-seam-booking.ear:main" from Service Module
Loader]
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.collections.ArrayStack from [Module
"deployment.jboss-seam-booking.ear:main" from Service Module
Loader]
Lo q u e sig n if ica:
La C l assNo tFo und Excepti o n indica que falta una dependencia. En este caso, no puede
encontrar la clase o rg . apache. co mmo ns. co l l ecti o ns. ArrayStack.
Para reso lverlo :
Busque el nombre del mdulo en el directorio
EAP6_HOME/mo d ul es/system/l ayers/base/ buscando la ruta
o rg /apache/co mmo ns/co l l ecti o ns. El nombre del mdulo es
org.apache.commons.collections . Modifique el jbo ss-d epl o yment-structure. xml
para agregar la dependencia del mdulo a la seccin de implementacin del archivo.
< module name="org.apache.commons.collections" export="true"/>
El archivo jbo ss-d epl o yment-structure. xml ahora se debe ver as:
< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">
<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="com.sun.jsf-impl" slot="1.2"


export="true"/>

<module name="org.apache.commons.logging" export="true"/>

<module name="org.dom4j" export="true"/>

<module name="org.apache.commons.collections"
export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

127

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

</exclusions>
<dependencies>

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>

Vuelva a implementar la aplicacin borrando el archivo


EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y
creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
7. Emita - servicios con dependencias no disponibles/que faltan
Cuando implementa la aplicacin, el registro contiene el siguiente error:
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2)
{"Composite operation failed and was rolled back. Steps that
failed:" => {"Operation step-2" => {"Services with
missing/unavailable dependencies" =>
["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seambooking.jar\".component.AuthenticatorAction.START missing [
jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.book
ing.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jbossseam-booking.ear\".\"jboss-seambooking.jar\".component.HotelSearchingAction.START missing [
jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.boo
king.HotelSearchingAction/em\" ]","
(... additional logs removed ...)
"jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seambooking.jar\".component.BookingListAction.START missing [
jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".BookingListAction.\"env/org.jboss.seam.example.bookin
g.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seambooking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [
jboss.naming.context.java.bookingDatasource ]"]}}}
Lo q u e sig n if ica:
Cuando obtenga un error Services with missing/unavailable dependencies , vea el texto
dentro de los parntesis despus de missing . En este caso puede ver:
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jbossseambooking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.book
ing.AuthenticatorAction/em\" ]
El /em indica un problema de fuente de datos y gestor de entidades.
Para reso lverlo :
En JBoss EAP 6, la configuracin de la fuente de datos cambi y es necesario definirla en el
archivo EAP6_HOME/stand al o ne/co nfi g urati o n/stand al o ne. xml . Ya que JBoss

128

Capt ulo 4 . Herramient as y consejos

EAP 6 se enva junto con una base de datos de ejemplo que ya est definida en el archivo
stand al o ne. xml , modifique el archivo persi stence. xml para utilizar esa base de datos
de ejemplo en esta aplicacin. Al ver en el archivo stand al o ne. xml puede ver que el
jnd i -name para la base de datos de ejemplo es
java: jbo ss/d ataso urces/Exampl eD S. Modifique el archivo jbo ss-seambo o ki ng . jar/MET A-INF/persi stence. xml para comentar el elemento existente jtad ata-so urce y reemplazarlo as:
< !-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
< jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Vuelva a implementar la aplicacin borrando el archivo
EAP6_HOME/stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y
creando un archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo
directorio.
8. En este momento la aplicacin se implementa sin errores, pero cuando accede la URL
http://localhost:8080/seam-booking/ en un navegador e intenta " Account Login" , obtiene un
error en tiempo de ejecucin The page isn't redirecting properly . En el siguiente paso,
aprender a depurar y resolver errores en tiempo de ejecucin.
Para aprender cmo depurar y resolver problemas de tiempo de ejecucin haga clic aqu:
Seccin 4.3.7, D epuracin y resolucin de errores y excepciones en tiempo de ejecucin del
archivador de reservas Seam 2.2
Para regresar al tema anterior haga clic aqu: Seccin 4.3.4, Migracin del archivador de
reservas de Seam 2.2 a JBoss EAP 6: instrucciones paso por paso
Reportar un error

4 .3.7. Depuracin y resolucin de errores y excepciones en t iempo de


ejecucin del archivador de reservas Seam 2.2
En el paso anterior, Seccin 4.3.6, D epuracin y resolucin de errores y excepciones de
implementacin del archivador de reservas Seam 2.2 , aprendi a depurar errores de
implementacin. En este paso, depure y resuelva cada error en tiempo de ejecucin que encuentre.

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.

Pro ced imien t o 4 .11. D ep u raci n y reso lu ci n d e excep cio n es y erro res en t iemp o d e
ejecu ci n
En este momento cuando implementa la aplicacin no ve errores en el registro. Sin embargo,
cuando accede la URL de la aplicacin, aparecen errores en el registro.
1. Emita - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in
context ''

129

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Cuando accede la URL http://localhost:8080/seam-booking/ en un navegador, obtiene un


mensaje que dice " La pgina no est redireccionando apropiadamente" y el registro
contiene el siguiente error:
SEVERE [org.jboss.seam.jsf.SeamPhaseListener] (http--127.0.0.1-80801) swallowing exception: java.lang.IllegalStateException: Could not
start transaction
at
org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:59
8) [jboss-seam.jar:]
(... log messages removed ...)
Caused by: org.jboss.seam.InstantiationException: Could not
instantiate Seam component:
org.jboss.seam.transaction.synchronizations
at org.jboss.seam.Component.newInstance(Component.java:2170)
[jboss-seam.jar:]
(... log messages removed ...)
Caused by: javax.naming.NameNotFoundException: Name 'jboss-seambooking' not found in context ''
at
org.jboss.as.naming.util.NamingUtils.nameNotFoundException(NamingUt
ils.java:109)
(... log messages removed ...)
Lo q u e sig n if ica:
Una NameNo tFo und Excepti o n indica un problema de nombrado JND I. Las reglas de
nombrado JND I han cambiado en JBoss EAP 6 as que necesita modificar los nombres de
bsqueda para seguir las nuevas reglas.
Para reso lverlo :
Para depurar esto, busque en la parte anterior del rastro del registro del servidor para ver
qu enlace JND I se utiliz. Al mirar en el registro del servidor puede ver esto:
15:01:16,138 INFO
[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUn
itProcessor] (MSC service thread 1-1) JNDI bindings for session bean
named RegisterAction in deployment unit subdeployment "jboss-seambooking.jar" of deployment "jboss-seam-booking.ear" are as follows:
java:global/jboss-seam-booking/jboss-seambooking.jar/RegisterAction!org.jboss.seam.example.booking.Register
java:app/jboss-seambooking.jar/RegisterAction!org.jboss.seam.example.booking.Register
java:module/RegisterAction!org.jboss.seam.example.booking.Register
java:global/jboss-seam-booking/jboss-seambooking.jar/RegisterAction
java:app/jboss-seam-booking.jar/RegisterAction
java:module/RegisterAction
[JNDI bindings continue ...]
Hay un total de ocho enlaces INFO JND I listados en el registro, uno para cada bean de
sesin: RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction,
ChangePasswordAction, HotelSearchingAction, EjbSynchronizations y

130

Capt ulo 4 . Herramient as y consejos

TimerServiceD ispatcher. Necesita modificar el archivo l i b/co mpo nents. xml del WAR
para usar los nuevos enlaces JND I. En el registro, note que todos los enlaces EJB JND I
empienzan por " java:app/jboss-seam-booking.jar" Reemplace el elemento co re: i ni t as:

< !-<core:init jndi-pattern="jboss-seam-booking/#


{ejbName}/local" debug="true" distributable="false"/> -->
< core:init jndi-pattern="java:app/jboss-seam-booking.jar/#
{ejbName}" debug="true" distributable="false"/>
Luego, necesita agregar los enlaces JND I EjbSynchronizations y TimerServiceD ispatcher.
Agregue los siguientes elementos de componente al archivo:

< component class="org.jboss.seam.transaction.EjbSynchronizations"


jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
< component class="org.jboss.seam.async.TimerServiceDispatcher"
jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>
El archivo components.xml ahora se debe ver as:

< ?xml version="1.0" encoding="UTF-8"?>


< components xmlns="http://jboss.com/products/seam/components"
xmlns:core="http://jboss.com/products/seam/core"
xmlns:security="http://jboss.com/products/seam/security"
xmlns:transaction="http://jboss.com/products/seam/transaction"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=

"http://jboss.com/products/seam/core
http://jboss.com/products/seam/core-2.2.xsd

http://jboss.com/products/seam/transaction
http://jboss.com/products/seam/transaction-2.2.xsd

http://jboss.com/products/seam/security
http://jboss.com/products/seam/security-2.2.xsd

http://jboss.com/products/seam/components
http://jboss.com/products/seam/components-2.2.xsd">

<!-- <core:init jndi-pattern="jboss-seam-booking/#


{ejbName}/local" debug="true" distributable="false"/> -->

<core:init jndi-pattern="java:app/jboss-seam-booking.jar/#
{ejbName}" debug="true" distributable="false"/>

<core:manager conversation-timeout="120000"

concurrent-request-timeout="500"

conversation-id-parameter="cid"/>

<transaction:ejb-transaction/>

<security:identity authenticate-method="#
{authenticator.authenticate}"/>

<component
class="org.jboss.seam.transaction.EjbSynchronizations"

jndi-name="java:app/jboss-seam/EjbSynchronizations"/>

<component class="org.jboss.seam.async.TimerServiceDispatcher"

jndi-name="java:app/jbossseam/TimerServiceDispatcher"/>
< /components>

131

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Vuelva a implementar la aplicacin borrando el archivo


stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y creando un
archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo directorio.
2. Problema - la aplicacin se implementa y ejecuta sin errores. Cuando accede la URL
http://localhost:8080/seam-booking/ en un navegador y trata de iniciar sesin, falla y
presenta el mensaje " Inicio de sesin fallido. Transaccin fallida" . D ebe ver un rastro de
excepcin en el registro del servidor:
13:36:04,631 WARN [org.jboss.modules] (http-/127.0.0.1:8080-1)
Failed to define class
org.jboss.seam.persistence.HibernateSessionProxy in Module
"deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from
Service Module Loader: java.lang.LinkageError: Failed to link
org/jboss/seam/persistence/HibernateSessionProxy (Module
"deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from
Service Module Loader)
....
Caused by: java.lang.LinkageError: Failed to link
org/jboss/seam/persistence/HibernateSessionProxy (Module
"deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from
Service Module Loader)
...
Caused by: java.lang.NoClassDefFoundError:
org/hibernate/engine/SessionImplementor
at java.lang.ClassLoader.defineClass1(Native Method)
[rt.jar:1.7.0_45]
...
Caused by: java.lang.ClassNotFoundException:
org.hibernate.engine.SessionImplementor from [Module
"deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from
Service Module Loader]
...
Lo q u e sig n if ica:
La ClassNotFoundException indica que falta una biblioteca Hibernate. En este caso es la
hi bernate-co re. jar.
Para reso lverlo :
Copie la JAR hi bernate-co re. jar del directorio EAP 5_HO ME/seam/l i b/ al directorio
jbo ss-seam-bo o ki ng . ear/l i b.
Vuelva a implementar la aplicacin borrando el archivo
stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y creando un
archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo directorio.
3. Problema - la aplicacin se implementa y ejecuta sin errores. Cuando accede la URL
http://localhost:8080/seam-booking/ en un navegador, puede iniciar sesin de manera
exitosa. Sin embargo, cuando trata de reservar un hotel ver un rastro de excepcin.
Para depurar esto, primero debe borrar la jbo ss-seam-bo o ki ng . ear/jbo ss-seambo o ki ng . war/WEB-INF/l i b/jbo ss-seam-d ebug . jar ya que enmascara el error
verdadero. En este momento debe ver el siguiente error:

132

Capt ulo 4 . Herramient as y consejos

java.lang.NoClassDefFoundError:
org/hibernate/annotations/common/reflection/ReflectionManager
Lo q u e sig n if ica:
La NoClassD efFoundError indica que falta una biblioteca Hibernate.
Para reso lverlo :
Copie las JARs hi bernate-anno tati o ns. jar y hi bernate-co mmo nsanno tati o ns. jar del directorio EAP 5_HO ME/seam/l i b/ al directorio jbo ss-seambo o ki ng . ear/l i b.
Vuelva a implementar la aplicacin borrando el archivo
stand al o ne/d epl o yments/jbo ss-seam-bo o ki ng . ear. fai l ed y creando un
archivo en blanco jbo ss-seam-bo o ki ng . ear. d o d epl o y en el mismo directorio.
4. Se deben resolver los errores de tiempo de ejecucin y de las aplicaciones
En este punto, la aplicacin se implementa y ejecuta sin errores.
Para regresar al tema anterior haga clic aqu: Seccin 4.3.4, Migracin del archivador de
reservas de Seam 2.2 a JBoss EAP 6: instrucciones paso por paso
Reportar un error

4 .3.8. Revisin de un resumen de los cambios realiz ados al migrar la


aplicacin de reservas Seam 2.2
Aunque sera mucho ms eficiente el determinar las dependencias por adelantado y agregar las
dependencias implcitas en un paso, este ejercicio muestra la manera en que los problemas
aparecen en el registro y proporciona algo de informacin sobre cmo depurar y resolverlos. El
siguiente es un resumen de los cambios realizados a la aplicacin al migrarla a JBoss EAP 6.

Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versin de
Hibernate 3 empacada dentro de la aplicacin. Hibernate 4, el cual se proporciona a travs
del mdulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este
ejemplo tiene el propsito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer
paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicacin Seam 2.2 no es una
configuracin soportada.
1. Cre un archivo jbo ss-d epl o yment-structure. xml en el directorio MET A-INF/ del
EAR. Agreg <d epend enci es> y <excl usi o ns> para resolver
C l assNo tFo und Excepti o ns. Este archivo contiene los siguientes datos:

< jboss-deployment-structure xmlns="urn:jboss:deploymentstructure:1.0">


<deployment>

<dependencies>

<module name="javax.faces.api" slot="1.2" export="true"/>

<module name="com.sun.jsf-impl" slot="1.2" export="true"/>

133

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

<module name="org.apache.commons.logging" export="true"/>


<module name="org.dom4j" export="true"/>

<module name="org.apache.commons.collections"
export="true"/>

</dependencies>
</deployment>
<sub-deployment name="jboss-seam-booking.war">

<exclusions>

<module name="javax.faces.api" slot="main"/>

<module name="com.sun.jsf-impl" slot="main"/>

</exclusions>

<dependencies>

<module name="javax.faces.api" slot="1.2"/>

<module name="com.sun.jsf-impl" slot="1.2"/>

</dependencies>
</sub-deployment>
< /jboss-deployment-structure>

2. Copi las siguientes JARs del directorio EAP5_HOME/jbo ss-eap-5. X/seam/l i b/


(reemplace 5.X con la versin de EAP 5 desde la cual est migrando) al directorio jbo ssseam-bo o ki ng . ear/l i b/ para resolver C l assNo tFo und Excepti o ns:
hibernate-core.jar
hibernate-validator.jar
3. Modific el archivo jbo ss-seam-bo o ki ng . jar/MET A-INF/persi stence. xml as:
a. Cambi el elemento jta-d ata-so urce para usar la base de datos de ejemplo que
se enva junto con JBoss EAP 6:

< !-- <jta-data-source>java:/bookingDatasource</jta-datasource> -->


< jta-data-source>java:jboss/datasources/ExampleDS</jta-datasource>
b. Borr el comentario de la propiedad hibernate.cache.provider_class:

< !-- <property name="hibernate.cache.provider_class"


value="org.hibernate.cache.HashtableCacheProvider"/> -->
4. Modific el archivo l i b/co mpo nents. xml del WAR para utilizar los nuevos enlaces JND I
a. Reemplaz el elemento existente co re: i ni t as:

< !-- <core:init jndi-pattern="jboss-seam-booking/#


{ejbName}/local" debug="true" distributable="false"/> -->
< core:init jndi-pattern="java:app/jboss-seam-booking.jar/#
{ejbName}" debug="true" distributable="false"/>
b. Agreg los elementos de componentes para los enlaces JND I " EjbSynchronizations"
y " TimerServiceD ispatcher"

134

Capt ulo 4 . Herramient as y consejos

< component
class="org.jboss.seam.transaction.EjbSynchronizations" jndiname="java:app/jboss-seam/EjbSynchronizations"/>
<component
class="org.jboss.seam.async.TimerServiceDispatcher" jndiname="java:app/jboss-seam/TimerServiceDispatcher"/>
Reportar un error

135

Plat aforma de aplicaciones empresariales JBoss 6 .3 G ua de migracin

Historial de revisiones
R evisi n 6 .3.0- 24
Wed n esd ay Ju ly 30 2014
Red Hat JBoss Enterprise Application Platform 6.3.0.GA

136

San d e G ild a

Das könnte Ihnen auch gefallen