Sunteți pe pagina 1din 126

Plataforma de aplicaciones

empresariales JBoss 6.2


Gua de migracin

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


Hat
Edicin 1

Sande Gilda
Misty Stanley-Jones

Darrin Mison
Tom Wells

David Ryan

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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


Hat
Edicin 1

Sande Gilda
Darrin Mison
David Ryan
Misty Stanley-Jones
misty@redhat.com
Tom Wells
twells@redhat.com

Legal Notice
Copyright 2014 Red Hat, Inc..
This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported
License. If you distribute this document, or a modified version of it, you must provide attribution to Red
Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be
removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section
4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo,
and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux is the registered trademark of Linus Torvalds in the United States and other countries.
Java is a registered trademark of Oracle and/or its affiliates.
XFS is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States
and/or other countries.
MySQL is a registered trademark of MySQL AB in the United States, the European Union and other
countries.
Node.js is an official trademark of Joyent. Red Hat Software Collections is not formally related to or
endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack Word Mark and OpenStack Logo are either registered trademarks/service marks or
trademarks/service marks of the OpenStack Foundation, in the United States and other countries and
are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored
by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Abstract
Este libro es una gua para migrar su aplicacin de versiones previas de la plataforma de aplicaciones
empresariales JBoss de Red Hat.

Table of Contents

Table of Contents
.Prefacio
...............................................................................5
.........
1. Convenciones del Documento
5
1.1. Convenciones tipogrficas
5
1.2. Convenciones del documento
6
1.3. Notas y Advertencias
7
2. Cmo obtener ayuda y hacer sus comentarios
7
2.1. Necesita ayuda?
7
2.2. Necesitamos sus comentarios!
8
.Captulo
. . . . . . . 1.
. . Introduccin
......................................................................9
.........
1.1. Plataforma de aplicaciones empresariales JBoss 6 de Red Hat (JBoss EAP 6)
9
1.2. Sobre la gua de migracin
9
.Captulo
. . . . . . . 2.
. . Preparacin
. . . . . . . . . . .para
. . . . la
. . migracin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
..........
2.1. Preparacin para la migracin
10
2.2. Revisin de lo nuevo y diferente en JBoss EAP 6
10
2.3. Revisin de la lista de funcionalidades no soportadas y ya no utilizadas
12
.Captulo
. . . . . . . 3.
. . Migre
. . . . . su
. . . aplicacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
..........
3.1. Cambios requeridos por la mayora de las aplicaciones
13
3.1.1. Revisin de los cambios requeridos por la mayora de las aplicaciones
13
3.1.2. Cambios en la carga de clases
13
3.1.2.1. Actualizacin de la aplicacin debido a cambios en la carga de clases
13
3.1.2.2. Dependencias de mdulos
13
3.1.2.3. Actualizar las dependencias de la aplicacin debido a los cambios en la carga de
clases
14
3.1.3. Cambios del archivo de configuracin
14
3.1.3.1. Crear o modificar archivos que controlan la carga de clases en JBoss EAP 6
14
3.1.3.2. jboss-deployment-structure.xml
19
3.1.3.3. Empacar recursos para el nuevo sistema modular de carga de clases
19
3.1.3.4. Cambiar la ubicacin de las propiedades ResourceBundle
19
3.1.3.5. Crear un mdulo personalizado
20
3.1.4. Cambios de inicio de sesin
21
3.1.4.1. Modificar las dependencias de registros
21
3.1.4.2. Actualizacin del cdigo de aplicacin para marcos de trabajo de registros de terceros
21
3.1.4.3. Modificar el cdigo para utilizar el nuevo marco de trabajo de inicio de sesin
JBoss
22
3.1.5. Cambios en el empaque de aplicaciones
23
3.1.5.1. Modificacin del empaque de EARs y WARs
23
3.1.6. Cambios de configuracin del adaptador de recursos y fuentes de datos
24
3.1.6.1. Actualizacin de la aplicacin debido a cambios en la configuracin
24
3.1.6.2. Actualizacin de la configuracin de la fuente de datos
24
3.1.6.3. Instalacin y configuracin del controlador JDBC
25
3.1.6.4. Configuracin de la fuente de datos para Hibernate o JPA
29
3.1.6.5. Actualizacin de la configuracin del adaptador de recursos
29
3.1.7. Cambios de seguridad
31
3.1.7.1. Configuracin de los cambios de seguridad de la aplicacin
31
3.1.8. Cambios de JNDI
32
3.1.8.1. Actualizacin de los nombres de espacios de nombres JNDI de la aplicacin
32
3.1.8.2. Nombres JNDI EJB porttiles
33
3.1.8.3. Revisin de las reglas del espacio de nombres de JNDI
34
3.1.8.4. Modifique la aplicacin a seguir las nuevas reglas de los espacios de nombre JNDI 34

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

3.1.8.5. Ejemplos de espacios de nombres JNDI en lanzamientos anteriores y la manera en


que se especifican en JBoss EAP 6
35
3.2. Cambios dependientes de la arquitectura de su aplicacin y componentes
36
3.2.1. Revisin de los cambios dependiendo de la arquitectura y componentes de su aplicacin
3.2.2. Cambios de JPA y Hibernate
37 36
3.2.2.1. Actualizar aplicaciones que utilizan Hibernate y/o JPA
37
3.2.2.2. Configuracin de cambios para las aplicaciones que usan Hibernate y JPA
37
3.2.2.3. Propiedades de la unidad de persistencia
39
3.2.2.4. Actualizacin de su aplicacin Hibernate 3 para utilizar Hibernate 4
40
3.2.2.5. Preservar el comportamiento existente del valor auto generado de la identidad de
Hibernate
41
3.2.2.6. Migracin de su aplicacin Hibernate 3.3.x a Hibernate 4.x
42
3.2.2.7. Migracin de su aplicacin Hibernate 3.5.x a Hibernate 4.x
42
3.2.2.8. Modificacin de las propiedades de persistencia para las aplicaciones Hibernate y
Seam migradas que ejecutan en un entorno con clsters
43
3.2.2.9. Actualizacin de su aplicacin para que cumpla con los requerimientos de la
especificacin JPA 2.0
44
3.2.2.10. Reemplace el cach de segundo nivel JPA/Hibernate con Infinispan
44
3.2.2.11. Propiedades cach de Hibernate
46
3.2.2.12. Migracin a Hibernate Validator 4
46
3.2.3. Cambios JSF
48
3.2.3.1. Habiltar aplicaciones para utilizar versiones anteriores de JSF
48
3.2.4. Cambios de los servicios web
48
3.2.4.1. Cambios de los servicios web
48
3.2.5. Cambios JAX-RS y RESTEasy
51
3.2.5.1. Configure los cambios de JAX-RS y RESTEasy
51
3.2.6. Cambios en el dominio de seguridad LDAP
52
3.2.6.1. Configuracin de los cambios del dominio de seguridad LDAP
52
3.2.7. Cambios de HornetQ
53
3.2.7.1. HornetQ y NFS
54
3.2.7.2. Configuracin de un puente JMS para migrar mensajes JMS existentes a JBoss EAP 6
3.2.7.3. Migre su aplicacin para usar HornetQ como proveedor JMS
58 54
3.2.7.4. Configuracin de la mensajera con HornetQ
59
3.2.8. Cambios del uso de clsters
59
3.2.8.1. Realizar cambios a su aplicacin para uso de clsters
59
3.2.8.2. Implementacin de un Singleton HA
63
3.2.9. Cambios en la implementacin de estilo de servicio
72
3.2.9.1. Actualizacin de aplicaciones que utilizan las implementaciones de estilo del servicio
72
3.2.10. Cambios de invocaciones remotas
72
3.2.10.1. Migracin de aplicaciones implementadas de JBoss EAP 5 que realizan invocaciones
remotas en JBoss EAP 6
72
3.2.10.2. Invocacin de un bean de sesin remotamente usando JNDI
74
3.2.11. Cambios de EJB 2.x
77
3.2.11.1. Actualizacin de aplicaciones que utilizan EJB 2.x
77
3.2.12. Cambios en JBoss AOP
77
3.2.12.1. Actualizacin de aplicaciones que utilizan JBoss AOP
77
3.2.13. Migracin de aplicaciones Seam 2.2
78
3.2.13.1. Migracin de archivadores Seam 2.2 a JBoss EAP 6
78
3.2.13.2. Problemas de migracin del archivador Seam 2.2
82
3.2.14. Migracin de aplicaciones Spring
84
3.2.14.1. Migracin de aplicaciones Spring
84
3.2.15. Otros cambios que afectan la migracin
85
3.2.15.1. Familiarcese con otros cambios que puedan afectar su migracin
85
3.2.15.2. Cambio del nombre del pug-in de Maven
85
3.2.15.3. Modificacin de aplicaciones clientes
85

Table of Contents

.Captulo
. . . . . . . 4.
. . Herramientas
. . . . . . . . . . . .y. consejos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
..........
4.1. Recursos de ayuda con la migracin
86
4.1.1. Recursos para ayudarle en su migracin
86
4.1.2. Familiarizacin con las herramientas que le ayudan con la migracin
86
4.1.3. Uso de Tattletale para encontrar dependencias de aplicaciones
87
4.1.4. Descarga e instalacin de Tattletale
87
4.1.5. Creacin y revisin del reporte Tattletale
88
4.1.6. Uso de la herramienta IronJacamar para migrar configuraciones del adapatador de
recursos y la fuente de datos
88
4.1.7. Descarga e instalacin de la herramienta de migracin IronJacamar
89
4.1.8. Use la herramienta de migracin IronJacamar para convertir un archivo de configuracin
de la fuente de datos
89
4.1.9. Uso de la herramienta de migracin IronJacamar para convertir un archivo de
configuracin del adaptador de recursos
91
4.2. Problemas de migracin de depuracin
97
4.2.1. Depurar y resolver problemas de migracin
97
4.2.2. Depurar y resolver ClassNotFoundExceptions y NoClassDefFoundErrors
97
4.2.3. Bsqueda de la dependencia del mdulo JBoss
97
4.2.4. Buscar la JAR en la instalacin anterior
98
4.2.5. Depurar y resolver ClassCastExceptions
99
4.2.6. Depurar y resolver DuplicateServiceExceptions
99
4.2.7. Depurar y resolver errores de la pgina de depuracin de JBoss Seam
100
4.3. Revise la migracin de las aplicaciones de ejemplo
102
4.3.1. Revise la migracin de las aplicaciones de ejemplo
102
4.3.2. Migracin del ejemplo Seam 2.2 JPA a JBoss EAP 6
102
4.3.3. Migracin del ejemplo de reservas Seam 2.2 a JBoss EAP 6
103
4.3.4. Migracin del archivador de reservas de Seam 2.2 a JBoss EAP 6: instrucciones paso por
paso
107
4.3.5. Construccin e implementacin de JBoss EAP versin 5.1 de la aplicacin de reservas
Seam 2.2
107
4.3.6. Depuracin y resolucin de errores y excepciones de implementacin del archivador de
reservas Seam 2.2
108
4.3.7. Depuracin y resolucin de errores y excepciones en tiempo de ejecucin del archivador
de reservas Seam 2.2
116
4.3.8. Revisin de un resumen de los cambios realizados al migrar la aplicacin de reservas
Seam 2.2
120
. . . . . . . . de
Historial
. . .revisiones
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
...........

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Prefacio

Prefacio
1. Convenciones del Documento
Este manual utiliza varias convenciones para resaltar algunas palabras y frases y llamar la atencin
sobre ciertas partes especficas de informacin.
En ediciones PDF y de papel, este manual utiliza tipos de letra procedentes de Liberation Fonts.
Liberation Fonts tambin se utilizan en ediciones de HTML si estn instalados en su sistema. Si no, se
muestran tipografas alternativas pero equivalentes. Nota: Red Hat Enterprise Linux 5 y siguientes
incluyen Liberation Fonts predeterminadas.

1.1. Convenciones tipogrficas


Se utilizan cuatro convenciones tipogrficas para llamar la atencin sobre palabras o frases especficas.
Dichas convenciones y las circunstancias en que se aplican son las siguientes:
Negrita m onoespaciado
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 m y_next_bestselling_novel en su directorio actual
de trabajo, escriba el comando cat m y_next_bestselling_novel 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 Ctrl+Alt+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 Negritam onoespaciado. Por ejemplo:
Las clases de archivo relacionadas incluyen filenam e para sistema de archivos, file
para archivos y dir para directorios. Cada clase tiene su propio conjunto asociado de
permisos.
Negrita proporcional
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 Sistema Preferencias Ratn desde la barra del men principal para
lanzar Preferencias de ratn. En la pestaa de Botones, seleccione la cajilla de ratn

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

de m ano izquierda y luego haga clic en Cerrar 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 gedit, seleccione Aplicaciones
Accesorios Mapa de caracteres de la barra del men. Luego, seleccione Bsqueda
Buscar de la barra del men de Mapa de caracteres, escriba el nombre del carcter en
el campo de Bsqueda y haga clic en Siguiente. El carcter que busc ser resaltado
en la T abla de caracteres. Haga doble clic en ese carcter resaltado para colocarlo
en el campo de T exto a copiar y luego haga clic en el botn Copiar. Ahora regrese al
documento y elija Modificar Pegar de la barra de men de gedit.
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 exam ple.com y su nombre de usuario en esa mquina es john, teclee ssh
john@ exam ple.com .
El comando m ount -o rem ount file-system remonta el sistema de archivo llamado.
Por ejemplo, para volver a montar el sistema de archivo /hom e, el comando es m ount -o
rem ount /hom e.
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 documento


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 rom ano m onoespaciado y se
presentan as:
books
books_tests

Desktop
Desktop1

documentation
downloads

drafts
images

mss
notes

photos
scripts

stuff
svgs

svn

Los listados de cdigo fuente tambin se muestran en rom ano m onoespaciado, pero se presentan y
resaltan de la siguiente manera:

Prefacio

package org.jboss.book.jca.ex1;
import javax.naming.InitialContext;
public class ExClient
{
public static void main(String args[])
throws Exception
{
InitialContext iniCtx = new InitialContext();
Object
ref
= iniCtx.lookup("EchoBean");
EchoHome
home
= (EchoHome) ref;
Echo
echo
= home.create();
System.out.println("Created Echo");
System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));
}
}

1.3. Notas y Advertencias


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 obtener ayuda y hacer sus comentarios


2.1. Necesita ayuda?
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:

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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. Necesitamos sus comentarios!


Si encuentra algun error o si se le ocurre una manera de mejorar este manual, nos encantara escuchar
sus sugerencias. Complete un reporte en Bugzilla frente al producto JBoss Enterprise
Application Platform 6 y el componente doc-Migration_Guide. El siguiente enlace le llevar
a un reporte de error ya completado para este producto: https://bugzilla.redhat.com/.
Llene la siguiente plantilla en el campo de Description de Bugzilla. Sea tan especifico como le sea
posible al describir el problema, esto ayudar a asegurarnos de que lo podemos solucionar
rpidamente.
URL del documento:

Nmero de la seccin y nombre:

Describa el problema:

Sugerencias para mejorar:

Informacin adicional:

Asegrese de darnos su nombre para poder darle todo el crdito por reportar el problema.

Captulo 1. Introduccin

Captulo 1. Introduccin
1.1. Plataforma de aplicaciones empresariales JBoss 6 de Red
Hat (JBoss EAP 6)
La plataforma de aplicaciones empresariales JBoss 6 de Red Hat (JBoss EAP 6) es una plataforma
middleware poderosa, rpida y segura construda con base en estndares libres y cumple con los
requerimientos de la especificacin Java empresarial edicin 6. Integra el servidor de aplicaciones JBoss
7 con clsters de alta disponiblidad, mensajera poderosa, cach distribudo y otras tecnologas para
crear una plataforma estable y escalable.
La nueva estructura modular permite habilitar servicios slamente cuando se requiera, incrementando
de manera importante la velocidad. La consola de administracin y la interfaz de la lnea de comandos
de administracin eliminan la necesidad de modificar archivos de configuracin XML manualmente,
agregando la habilidad para utilizar scripts y automatizar tareas. Adems, incluye APIs y marcos de
trabajo de desarrollo que se pueden utilizar para desarrollar aplicaciones Java EE seguras, poderosas y
escalables de manera rpida.
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. Debido 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

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de 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. Revisin de lo nuevo y diferente en JBoss 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. Dichos cambios incluyen cambios a la
estructura del directorio de archivos, scripts, la configuracin de implementacin, la carga de
clases y las bsquedas JNDI. Consulte Seccin 2.2, Revisin de lo nuevo y diferente en JBoss
EAP 6 para ver mayores detalles.
2. Revisin de la documentacin de inicio rpido
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
Descarga e instalacin de JBoss EAP 6
Cmo descargar e instalar JBoss Developer 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. Anlisis y comprensin de su aplicacin
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.
Reportar un error

2.2. Revisin de lo nuevo y diferente en JBoss EAP 6


Introduccin
La siguiente es una lista de diferencias importantes en JBoss EAP 6 del lanzamiento anterior.
Carga de clases con base en mdulos
En JBoss EAP 5, la arquitectura de carga de clases era jerrquica. En JBoss EAP 6, la carga de
clases se basa en mdulos de JBoss. Esto ofrece una 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 dependencias de

10

Captulo 2. Preparacin para la migracin

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/.
Gestin de dominios
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 construdas para lanzamientos
anteriores, esto puede simplificar la administracin de implementaciones en mltiples
servidores. Para mayor informacin, consulte la seccin sobre About Managed Domains en la
Administration and Configuration Guide para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.

Nota
El modo de dominio no se soporta en los siguientes productos empresariales JBoss:
Plataforma del portal JBoss 6

Configuracin de implementacin
Servidores autnomos y dominios administrados
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/standalone/configuration/standalone.xm l. Para los servidores
ejecutando en un dominio adminstrado, el servidor se configura usando el archivo
EAP_HOME/dom ain/configuration/dom ain.xm l. La informacin que se
encuentra en los mltiples archivos de configuracin de JBoss EAP 5 se deben migrar
al nuevo archivo nico de configuracin
Orden de implementaciones
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 JNDI en lugar de la inyeccin CDI o entradas de
referencias de recursos pueden requerir cambios en la configuracin.

Estructura del directorio y scripts


Como se mencion anteriormente, JBoss EAP 6 ya no utiliza una configuracin de

11

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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/standalone/configuration/ y las implementaciones se encuentran en el
directorio EAP_HOME/standalone/deploym ents/. Para los servidores ejecutando en un
dominio adminsitrado, los archivos de configuracin se encuentran en el directorio
EAP_HOME/dom ain/configuration/ y las implementaciones estn en el directorio
EAP_HOME/dom ain/deploym ents/.
En JBoss EAP 5, el script Linux EAP_HOME/bin/run.sh o el script Windows
EAP_HOME/bin/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/bin/standalone.sh o el script Windows EAP_HOME/bin/standalone.bat se
utiliza para iniciar un servidor autnomo. El script Linux EAP_HOME/bin/dom ain.sh o el script
Windows EAP_HOME/bin/dom ain.bat se utiliza para iniciar un dominio administrado.
Bsquedas JNDI
JBoss EAP 6 ahora utiliza espacios de nombres JNDI porttiles estandarizados. Las
aplicaciones escritas para JBoss EAP 5 que usan las bsquedas JNDI se deben cambiar para
que sigan la nueva convencin de espacios de nombres JNDI estndar. Para mayor
informacin sobre la sintaxis de nombrado JNDI consulte Seccin 3.1.8.2, Nombres JNDI 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/.
url="https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/"/>.
Reportar un error

2.3. Revisin de la lista de funcionalidades no soportadas y ya


no utilizadas
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 Unsupported Features 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

12

Captulo 3. Migre su aplicacin

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 JNDI 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 JNDI de la aplicacin
Reportar un error

3.1.2. Cambios en la carga de clases


3.1.2.1. Actualizacin de la aplicacin debido a cambios en la carga de clases
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. Debido 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. Dependencias de mdulos
Resumen
Un mdulo solo puede acceder sus propias clases y las clases de cualquier mdulo en el que tenga una
dependencia explcita o implcita.
Procedimiento 3.1. Dependencias de mdulos
1. Dependencias implcitas
Los implementadores dentro del servidor implcitamente agregan de manera automtica algunas
dependencias de mdulos utilizadas comnmente como javax.api y sun.jdk. Esto hace que
las clases sean visibles para la implementacin en el tiempo de ejecucin y 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 Implicit Module Dependencies en 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/.

13

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

2. Dependencias explcitas
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 ClassNotFoundExceptions o
NoClassDefFoundErrors 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 ClassCastExceptions en el registro del servidor. Para especificar dependencias de
manera explcita, modifique el MANIFEST .MF o cree un archivo descriptor de implementacin
jboss-deploym ent-structure.xm l especfico para JBoss. Para mayor informacin sobre
dependencias de mdulos consulte la Overview of Class Loading and Modules en el captulo
titulado Class Loading and Module en la Development Guide para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar un error
3.1.2.3. Actualizar las dependencias de la aplicacin debido a los cambios en la carga de clases
Resumen
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 Class Loading and Modules en la Development Guide para
la plataforma de aplicaciones empresariales JBoss 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Tareas
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, Dependencias 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

3.1.3. Cambios del archivo de configuracin


3.1.3.1. Crear o modificar archivos que controlan la carga de clases en JBoss EAP 6
Resumen
Debido 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

14

Captulo 3. Migre su aplicacin

clases consulte 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/.
Los siguientes archivos se utilizan para controlar la carga de clases en JBoss EAP 6.
jboss-web.xml
Si defini un elemento <class-loading> en el archivo jboss-web.xm l 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 <class-loading> en el archivo jboss-web.xm l 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-repository-config>java2ParentDelegation=false</loaderrepository-config>
</loader-repository>
</class-loading>
-->
</jboss-web>

MANIFEST.MF
Manualmente modificado
Dependiendo 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 Dependencies o Class-Path.
El siguiente es un ejemplo de MANIFEST .MF modificado por un desarrollador:
Manifest-Version: 1.0
Dependencies: org.jboss.logmanager
Class-Path: OrderManagerEJB.jar

Si modifica este archivo, asegrese de incluir un caracter de nueva lnea al final del
archivo.
Generado usando Maven
Si usa Maven necesita modificar su archivo pom .xm l 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 pom .xm l que se vea as:

15

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

<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 org.apache.com m ons.log necesita esa dependencia en


el archivo MANIFEST .MF. Para generar esa dependencia agregue el elemento
<plugin> al archivo pom .xm l 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/m ain/resources/MET A-INF/MANIFEST .MF


solo necesita contener la entrada de la dependencia:
Dependencies: org.apache.commons.logging

Maven generar el archivo MANIFEST .MF completo:


Manifest-Version: 1.0
Dependencies: org.apache.commons.logging

jboss-deployment-structure.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.
El siguiente es un ejemplo de un archivo jboss-deploym ent-structure.xm l que agrega
una dependencia para el mdulo JSF 1.2 y previene la carga automtica del mdulo JSF 2.0.

16

Captulo 3. Migre su aplicacin

<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>

Para mayor informacin sobre este archivo consulte: Seccin 3.1.3.2, jboss-deploymentstructure.xml.
application.xml
En versiones anteriores de JBoss EAP, usted controlaba el orden de las implementaciones
dentro de un EAR usando el archivo jboss-app.xm l. Esto ya no funciona as. La
especificacin Java EE6 proporciona el elemento <initialize-in-order> en el
application.xm l 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 <initializein-order> 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 m yBeans.jar y una m yApp.war
dentro de un m yApp.ear. Un servlet en el m yApp.war@ EJB inyecta un bean desde
m yBeans.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 <initialize-in-order>.
Sin embargo, si ese servlet usa referencias remotas del estilo de bsqueda JNDI de legado
como las siguientes para acceder al bean es posible que necesite especificar el orden de los
mdulos.
init() {
Context ctx = new InitialContext();
ctx.lookup("TheBeanInMyBeansModule");
}

En este caso, el servidor no puede determinar que el componente EJB se encuentra en la


m yBeans.jar y necesita reforzar que los componentes en la m yBeans.jar sean
inicializados antes que los componentes en m yApp.war. Para lograr esto, configure el
elemento <initialize-in-order> como true y especifique el orden de los mdulos

17

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

m yBeans.jar y m yApp.war en el archivo application.xm l.


El siguientes es un ejemplo que usa el elemento <initialize-in-order> para controlar el
orden de la implementacin. La m yBeans.jar se implementa antes que el archivo
m yApp.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 application.xm l se puede encontrar en


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

Nota
Debe tener en cuenta que la configuracin del elemento <initialize-in-order>
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.

jboss-ejb3.xml
El descriptor de implementacin jboss-ejb3.xm l reemplaza el descriptor de implementacin
jboss.xm l para sobreescribir y agregar a las funcionalidades proporcionadas por el
descriptor de implementacinejb-jar.xm l de la edicin empresarial Java (EE). El nuevo
archivo es incompatible con jboss.xm l y el jboss.xm l ahora se ignora en las
implementaciones.
login-config.xml
El archivo login-config.xm l ya no se utiliza para la configuracin de la seguridad. La
seguridad ahora se configura en el elemento <security-dom ain> en el archivo de
configuracin del servidor. Para un servidor autnomo, este es el archivo
standalone/configuration/standalone.xm l. Si est ejecutando su servidor en un
dominio administrado, este es el archivo dom ain/configuration/dom ain.xm l.

Reportar un error

18

Captulo 3. Migre su aplicacin

3.1.3.2. jboss-deployment-structure.xml
jboss-deploym ent-structure.xm l 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/docs/schem a/jboss-deploym ent-structure-1_2.xsd
Reportar un error
3.1.3.3. Empacar recursos para el nuevo sistema modular de carga de clases
Resumen
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/classes y WEB-INF/lib. Si no se empacan los artefactos de la aplicacin en los
lugares especificados se pueden generar ClassNotFoundException, NoClassDefError 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.
Modificar el empaque de recursos
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 WEB-INF/classes/ o
WEB-INF/lib/. Este enfoque se describe en ms detalles aqu: Seccin 3.1.3.4, Cambiar la
ubicacin de las propiedades ResourceBundle
Crear un mdulo personalizado
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. Cambiar la ubicacin de las propiedades ResourceBundle
Resumen
En versiones anteriores de JBoss EAP, el directorio EAP_HOME/server/SERVER_NAME/conf/ 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.
Procedimiento 3.2.
1. Si est implementando un archivador WAR tiene que empacar esas propiedades en la carpeta
WEB-INF/classes/ 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 lib/ del
EAR.

19

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Reportar un error
3.1.3.5. Crear un mdulo personalizado
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.
Procedimiento 3.3. Crear un mdulo personalizado
1. Crear y poblar la estructura del directorio m odule/.
a. Crear una estructura de directorio bajo el directorio EAP_HOME/m odule para que contenga
los archivos y JARs. Por ejemplo:
$ cd EAP_HOME/modules/ $ mkdir -p myorg-conf/main/properties

b. Mueva el archivo de propiedades al directorio EAP_HOME/m odules/m yorgconf/m ain/properties/ que cre en el paso anterior.
c. Cree un archivo m odule.xm l en el directorio EAP_HOME/m odules/m yorg-conf/m ain/
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

Debe ver la siguiente respuesta:


Conectado a un controlador autnomo en localhost:9999

b. Para crear el elemento m yorg-conf<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"}])

Debe ver el siguiente resultado:

20

Captulo 3. Migre su aplicacin

{"outcome" => "success"}

B. Siga estos pasos si prefiere modificar manualmente el archivo de configuracin del servidor.
a. Detenga 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/standalone/configuration/standalone.xm l o el archivo
EAP_HOME/dom ain/configuration/dom ain.xm l si est ejecutando un dominio
administrado.
b. Identifique el subsistema ee y agregue el mdulo global para m yorg-conf. El siguiente
es un ejemplo del elemento subsistema ee modificado para incluir el elemento m yorgconf:
<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 m y.properties en la ubicacin correcta del mdulo
ahora puede cargar archivos de propiedades usando cdigo similar al siguiente:
Thread.currentThread().getContextClassLoader().getResource("my.properties");

Reportar un error

3.1.4. Cambios de inicio de sesin


3.1.4.1. Modificar las dependencias de registros
Resumen
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.
Procedimiento 3.4. Actualizacin del cdigo de registros de la 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. Actualizacin del cdigo de aplicacin para marcos de trabajo de registros de terceros
Resumen
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. Sin embargo, si est
utilizando log4j y no quiere usar el subsistema de registro para configurar sus handlers (agregadores),

21

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

necesita excluir el mdulo de JBoss EAP 6 log4j.


Procedimiento 3.5. Configuracin de JBoss EAP 6 para utilizar un archivo log4j.properties o
log4j.xml
1. Cree un jboss-deploym ent-structure.xm l con el siguiente contenido:
<jboss-deployment-structure>
<deployment>
<!-- Las exclusiones le permiten prevenir que el servidor agregue
automticamente algunas dependencias -->
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>

2. Ponga el archivo jboss-deploym ent-structure.xm l 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.
3. Incluya el archivo log4 j.properties o log4 j.xm l en el directorio lib/ de su EAR o el
directorio WEB-INF/classes/ de su implementacin WAR.
4. Implemente su aplicacin.

Nota
Si escoje utilizar un archivo de configuracin log4j ya no podr cambiar la configuracin de
registro log4j en la ejecucin.
Reportar un error
3.1.4.3. Modificar el cdigo para utilizar el nuevo marco de trabajo de inicio de sesin JBoss
Resumen
Para utilizar el nuevo marco de trabajo, cambie sus importaciones y su cdigo as:
Procedimiento 3.6. Modificar el cdigo y las dependencias para utilizar el marco de trabajo de
inicio de sesin JBoss
1. Cambie sus importaciones y su cdigo de inicio de sesin
El siguiente es un ejemplo del cdigo que utiliza el nuevo marco de trabajo de inicio de sesin
JBoss:

22

Captulo 3. Migre su aplicacin

import org.jboss.logging.Level;
import org.jboss.logging.Logger;
private static final Logger logger =
Logger.getLogger(MyClass.class.toString());
if(logger.isTraceEnabled()) {
logger.tracef("Starting...", subsystem);
}

2. Agregue la dependencia de inicio de sesin


La JAR que contiene las clases de inicio de sesin de JBoss se encuentra en el mdulo llamado
org.jboss.logging. Su archivo MANIFEST -MF se debe ver as:
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, Depurar y resolver problemas de migracin.
Reportar un error

3.1.5. Cambios en el empaque de aplicaciones


3.1.5.1. Modificacin del empaque de EARs y WARs
Resumen
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. Dependencias del sistema
2. Dependencias del usuario
3. Recursos locales
4. Dependencias de inter-implementacin
Procedimiento 3.7. Modificacin del empaque de archivadores
1. Empaque de un 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/lib/ se tratan de igual
manera que las clases en el directorio WEB-INF/classes.
2. Empaque de un EAR
Un EAR consiste de mltiples mdulos. El directorio EAR/lib/ 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/lib/. Sin
embargo, las subimplementaciones no siempre tienen una dependencia automtica para
permitirles el acceso entre ellas. Este comportamiento se controla configurando el elemento
<ear-subdeploym ents-isolated> en la configuracin del subsistema ee as:

23

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

<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.
Para mayor informacin sobre la carga de clases consulte al 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 adaptador de recursos y fuentes de datos


3.1.6.1. Actualizacin de la aplicacin debido a cambios en la configuracin
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. Actualizacin de la configuracin de la fuente de datos
Resumen
En versiones anteriores de JBoss EAP, la configuracin de la fuente de datos JCA se defina en un
archivo con el sufijo * -ds.xm l. Luego este archivo se implementaba en el directorio deploy/ del
servidor o se empacaba con la aplicacin. El controlador JDBC se copiaba al directorio server/lib/ o
se empacaba en el directorio WEB-INF/lib/ 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 dom ain/configuration/dom ain.xm l. Si la instancia de JBoss EAP 6 est
ejecutando como un servidor autnomo, la fuente de datos est configurada en el
standalone/configuration/standalone.xm l file. 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

24

Captulo 3. Migre su aplicacin

que se pueda administrar y soportar por medio de las herramientas de administracin disponibles.
Migrar a una configuracin administrable de la fuente de datos para JBoss EAP 6
Un controlador que cumple con los requerimientos de JDBC 4.0 se puede instalar como una
implementacin o como un mdulo ncleo. Un controlador que cumple con los requerimientos de JDBC
4.0 contiene un archivo MET A-INF/services/java.sql.Driver que especifica el nombre de la
clase del controlador. Un controlador que no cumpla con los requerimientos de JDBC 4.0 requiere pasos
adicionales. Para mayores detalles sobre cmo hacer que un controlador cumpla con los requerimientos
de JDBC 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 JDBC.
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.
Use la herramienta de migracin IronJacamar para convertir los datos de configuracin
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 * -ds.xm l 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. Instalacin y configuracin del controlador JDBC
Resumen
El controlador JDBC 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 dom ain/configuration/dom ain.xm l. Si la instancia de JBoss EAP 6 est
ejecutando como un servidor autnomo entonces la fuente de datos se configura en el archivo
standalone/configuration/standalone.xm l. Puede encontrar informacin de referencia del
esquema, el cual es el mismo para ambos modos, en el directorio doc/ 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 standalone.xm l.
Procedimiento 3.8. Instalacin y configuracin del controlador JDBC
1. Instalacin del controlador JDBC
a. Instalacin del controlador JDBC como implementacin
Esta es la manera recomendada de instalar el controlador. Cuando el controlador JDBC 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 JDBC 4.0 en el directorio EAP_HOME/standalone/deploym ents/. Si
el servidor est ejecutando en un dominio administrado, copie la JAR en el directorio

25

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

EAP_HOME/dom ain/deploym ents/.


El siguiente es un ejemplo de un controlador MySQL JDBC instalado como una
implementacin en un servidor autnomo:
$cp mysql-connector-java-5.1.15.jar EAP_HOME/standalone/deployments/

Cualquier controlador que cumple con los requerimientos de JDBC 4.0 es reconocido
automticamente y se instala en el sistema por nombre y versin. Una JAR que cumple con
los requerimientos de JDBC 4.0 contiene un archivo de texto llamado MET AINF/services/java.sql.Driver, el cual especifica los nombres de las clases
controladoras. Si el controlador no cumple con los requerimientos de JDBC 4.0 entonces se
puede hacer que se implemente de una de las siguientes maneras:
Cree y agregue un archivo java.sql.Driver a la JAR bajo la ruta MET AINF/services/. Este archivo debe contener el nombre de la clase del controlador, por
ejemplo:
com.mysql.jdbc.Driver

Cree un archivo java.sql.Driver 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/standalone/deploym ents/MET AINF/services/java.sql.Driver. Si el servidor est en un dominio administrado, el
archivo se debe poner aqu: EAP_HOME/dom ain/deploym ents/MET AINF/services/java.sql.Driver.
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 JDBC 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 JDBC como un
mdulo ncleo.
Si el controlador no cumple con los requerimientos de JDBC 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 deploym ents/.
b. Instalacin del controlador JDBC como mdulo central
Para instalar un controlador JDBC como un mdulo ncleo, tiene que crear una estructura
de ruta de archivos bajo el directorio EAP_HOME/m odules/. Esta estructura contiene la JAR
del controlador JDBC, las JARS de localizacin o las licencias adicionales del vendedor y un
archivo m odule.xm l para definir el mdulo.
A. Instale el controlador MySQL JDBC como mdulo ncleo
a. Cree la estructura del directorio EAP_HOME/m odules/com /m ysql/m ain/
b. En el subdirectorio m ain/, cree un archivo m odule.xm l que contenga la
siguiente definicin de mdulo para el controlador MySQL JDBC:

26

Captulo 3. Migre su aplicacin

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


<module xmlns="urn:jboss:module:1.0" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.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 <dependencies> 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 JDBC, depende de las APIs JDBC Java que se
definen en otro mdulo llamado javax.api. Ese mdulo se encuentra bajo el
directorio m odules/system /layers/base/javax/api/m ain/.

Nota
Asegrese de NO tener un espacio al principio del archivo m odule.xm l
de otra manera obtendr un error "New missing/unsatisfied dependencies"
para este controlador.
c. Copie la JAR del controlador MySQL JDBC en el directorio
EAP_HOME/m odules/com /m ysql/m ain/:
$ cp mysql-connector-java-5.1.15.jar
EAP_HOME/modules/com/mysql/main/

B. Instale el controlador IBM DB2 JDBC y la JAR licencia como un mdulo ncleo
Este ejemplo se proporciona slo para demostrar la manera de implementar
controladores que requieren JARs adems de la JAR del controlador JDBC.
a. Cree la estructura del directorio EAP_HOME/m odules/com /ibm /db2/m ain/.
b. En el subdirectorio m ain/, cree un archivo m odule.xm l que contenga la
siguiente definicin de mdulo para el controlador IBM DB2 JDBC y licencia:
<?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>

27

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Nota
Asegrese de NO tener un espacio al principio del archivo m odule.xm l
de otra manera obtendr un error "New missing/unsatisfied dependencies"
para este controlador.
c. Copie el controlador JDBC y la JAR de lincencia en el directorio
EAP_HOME/m odules/com /ibm /db2/m ain/.
$ cp db2jcc.jar EAP_HOME/modules/com/ibm/db2/main/
$ cp db2jcc_license_cisuz.jar
EAP_HOME/modules/com/ibm/db2/main/

Las ventajas de este enfoque son:


Este es el nico enfoque que funciona cuando el controlador JDBC consiste de ms de
una JAR.
Con este enfoque, los controladores que no cumplen con los requerimientos de JDBC
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. Configuracin de la fuente de datos
a. Agregar el controlador de la base de datos
Agregar el elemento <driver> al elemento <drivers> del mismo archivo. Nuevamente
esto contiene alguna de la misma informacin de la fuente de datos que se defini
previamente en el archivo * -ds.xm l.
Primero determine si la JAR controladora cumple con los requerimientos de JDBC 4.0. Una
JAR que cumple con los requerimientos de JDBC 4.0 contiene un archivo MET AINF/services/java.sql.Driver que especifica el nombre de la clase 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 JDBC 4.0 no requiere un elemento
<driver-class> 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 JDBC 4.0:
<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>

Un controlador que no cumple con los requerimientos de JDBC 4.0 requiere un atributo
<driver-class> para identificar la clase del controlador ya que no hay un archivo MET AINF/services/java.sql.Driver 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 JDBC 4.0:
<driver name="mysql-connector-java-5.1.15.jar"
module="com.mysql"><driver-class>com.mysql.jdbc.Driver</driverclass></driver>

b. Creacin de la fuente de datos

28

Captulo 3. Migre su aplicacin

Cree un elemento <datasource> en la seccin <datasources> del archivo


standalone.xm l. Este archivo contiene mucha de las misma informacin de la fuente de
datos que se defini anteriormente en el archivo * -ds.xm l.

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
standalone.xm l:
<datasource jndi-name="java:/YourDatasourceName" poolname="YourDatasourceName">
<connectionurl>jdbc:mysql://localhost:3306/YourApplicationURL</connection-url>
<driver>mysql-connector-java-5.1.15.jar</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transactionisolation>
<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>
<prepared-statement-cache-size>100</prepared-statement-cache-size>
<share-prepared-statements/>
</statement>
</datasource>

Reportar un error
3.1.6.4. Configuracin de la fuente de datos para Hibernate 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.
Procedimiento 3.9. Borre el paquete Hibernate
1. Borre las JARs Hibernate de sus carpetas de la biblioteca de su aplicacin.
2. Borre o comente el elemento <hibernate.transaction.m anager_lookup_class> en su
archivo persistence.xm l ya que este elemento no se necesita.
Reportar un error
3.1.6.5. Actualizacin de la configuracin del adaptador de recursos
Resumen

29

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

En versiones anteriores del servidor de aplicaciones, la configuracin del adaptador de recursos se


defina en un archivo con el sufijo * -ds.xm l. 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/dom ain/configuration/dom ain.xm l. Si est ejecutando
como un servidor autnomo configure el adaptador de recursos en el archivo
EAP_HOME/standalone/configuration/standalone.xm l. Puede encontrar informacin de
referencia sobre el esquema, el cual es el mismo para ambos modos en: Descriptores del adaptador de
recursos.

Importante
Tiene que detener el servidor antes de modificar el archivo de configuracin del servidor para
que su cambio persista al reiniciar el servidor.
Definir el adaptador de recursos
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 * -ds.xm l.
El siguiente es un ejemplo de un elemento del adaptador de recursos en el archivo de configuracin del
servidor:

30

Captulo 3. Migre su aplicacin

<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.MultipleManagedConnectionFacto
ry1"
enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1"
pool-name="MultipleConnectionFactory1">
<config-property name="Name">MultipleConnectionFactory1Value</configproperty>
</connection-definition>
<connection-definition
classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFacto
ry2"
enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2"
pool-name="MultipleConnectionFactory2">
<config-property name="Name">MultipleConnectionFactory2Value</configproperty>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object
classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject1Impl"
jndi-name="java:/eis/MultipleAdminObject1">
<config-property name="Name">MultipleAdminObject1Value</config-property>
</admin-object>
<admin-object classname="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject2Impl"
jndi-name="java:/eis/MultipleAdminObject2">
<config-property name="Name">MultipleAdminObject2Value</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>

Reportar un error

3.1.7. Cambios de seguridad


3.1.7.1. Configuracin de los cambios de seguridad de la aplicacin
Configuracin de la seguridad para autenticacin bsica
En las versiones anteriores de JBoss EAP, los archivos de propiedades que se encuentran en el
directorio EAP_HOME/server/SERVER_NAME/conf/ estaban en la ruta de clase y
UsersRolesLoginModule 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.

31

Plataforma de aplicaciones empresariales JBoss 6.2 Gua 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.
Para configurar la seguridad para la autenticacin bsica, agregue un nuevo dominio de seguridad bajo
el security-dom ains a los archivos de configuracin del servidor
standalone/configuration/standalone.xm l o dom ain/configuration/dom ain.xm l:
<security-domain name="example">
<authentication>
<login-module code="UsersRoles" flag="required">
<module-option name="usersProperties"
value="${jboss.server.config.dir}/example-users.properties"/>
<module-option name="rolesProperties"
value="${jboss.server.config.dir}/example-roles.properties"/>
</login-module>
</authentication>
</security-domain>

Si la instancia de JBoss EAP 6 est ejecutando como un servidor autnomo,


${jboss.server.config.dir} se refiere al directorio
EAP_HOME/standalone/configuration/. Si la instancia est ejecutando en un dominio
administrado, ${jboss.server.config.dir} se refiere al directorio
EAP_HOME/dom ain/configuration/.
Modificacin de los nombres del dominio de seguridad
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 jboss-web.xm l.
Para las aplicaciones empresariales tiene que borrar este prefijo de las configuraciones del dominio
de seguridad en el archivo jboss-ejb3.xm l. Este archivo ha reemplazado el jboss.xm l en
JBoss EAP 6.
Reportar un error

3.1.8. Cambios de JNDI


3.1.8.1. Actualizacin de los nombres de espacios de nombres JNDI de la aplicacin
Resumen
EJB 3.1 introdujo un espacio de nombre JNDI 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:global, java:m odule y java:app. Las aplicaciones con EJBs
que usan JNDI se deben cambiar para que sigan la nueva convencin de espacios de nombre JNDI
estndarizada.
Procedimiento 3.10. Modificar bsquedas JNDI
1. Mayor informacin sobre Seccin 3.1.8.2, Nombres JNDI EJB porttiles

32

Captulo 3. Migre su aplicacin

2. Seccin 3.1.8.3, Revisin de las reglas del espacio de nombres de JNDI


3. Seccin 3.1.8.4, Modifique la aplicacin a seguir las nuevas reglas de los espacios de nombre
JNDI
Mapeos JNDI de ejemplo
Aqui puede encontrar ejemplos de espacios de nombres JNDI en lanzamientos anteriores y la manera
en que se especifican en JBoss EAP 6: Seccin 3.1.8.5, Ejemplos de espacios de nombres JNDI en
lanzamientos anteriores y la manera en que se especifican en JBoss EAP 6
Reportar un error
3.1.8.2. Nombres JNDI EJB porttiles
Resumen
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.
Tabla 3.1. Espacios de nombres JNDI porttiles
Espacio de nombre JNDI

Descripcin

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:global/jboss-seam -booking/jboss-seam booking-jar/HotelBookingAction

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:m odule/HotelBookingAction!org.jboss.seam .exa
m ple.booking.HotelBooking

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/jboss-seam -bookingjar/HotelBookingAction

Puede encontrar mayor informacin sobre los contextos de nombrado JNDI 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?

33

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

id=316
Reportar un error
3.1.8.3. Revisin de las reglas del espacio de nombres de JNDI
Resumen
JBoss EAP 6 ha mejorado en los nombres de espacio de nombres JNDI 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.
Los espacios de nombres deben seguir estas reglas:
1. Nombres relativos no calificados como DefaultDS o jdbc/DefaultDS deben ser calificados
relativos a java:com p/env, java:m odule/env o java:jboss/env, dependiendo del
contexto.
2. Nombres no calificados absolute como /jdbc/DefaultDS deben ser calificados con relacin
a un nombre java:jboss/root.
3. Nombres calificados absolute como java:/jdbc/DefaultDS se deben calificar de la misma
manera que los nombres absolute no calificados anteriores.
4. El espacio de nombres especial java:jboss se comparte a travs de toda la instancia del
servidor AS.
5. Cualquier nombre relative con un prefijo java: debe estar en uno de los cinco espacios de
nombre: com p, m odule, app, global o el jboss 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. Modifique la aplicacin a seguir las nuevas reglas de los espacios de nombre JNDI
Este es un ejemplo de una bsqueda JNDI en JBoss EAP 5.1. Este cdigo usualmente se encuentra
en un mtodo de inicializacin.
private ProductManager productManager;
try {
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 OrderManagerApp/ProductManagerBean/local.


El siguiente es un ejemplo de la manera en que la misma bsqueda se codificara en JBoss EAP 6
usando CDI.
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductMan
ager")
private ProductManager productManager;

34

Captulo 3. Migre su aplicacin

Los valores de la bsqueda ahora se definen como variables de miembros y usan el nuevo espacio
de nombre JNDI porttil java:app
java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager.
Si prefiere no usar CDI entonces puede continuar creando el nuevo InitialContext como se mostr
anteriormente y modificar la bsqueda para utilizar el nuevo espacio de nombre JNDI.
private ProductManager productManager;
try {
context = new InitialContext();
productManager = (ProductManager)
context.lookup("java:app/OrderManagerEJB/ProductManagerBean!services.ejb.Product
Manager");
} catch(Exception lookupError) {
throw new ServletException("Unable to find the ProductManager bean",
lookupError);
}

Reportar un error
3.1.8.5. Ejemplos de espacios de nombres JNDI en lanzamientos anteriores y la manera en que
se especifican en JBoss EAP 6
Tabla 3.2.
Espacios de nombres en
JBoss EAP 5.x

Espacios de nombres en
JBoss EAP 6

Comentarios adicionales

OrderManagerApp/ProductMan
agerBean/local

java:module/ProductManagerBe
an!services.ejb.ProductManager

Enlace estndar Java EE 6. Con


el mbito del mdulo actual y
solamente accesible dentro del
mismo mdulo.

OrderManagerApp/ProductMan
agerBean/local

java:app/OrderManagerEJB/Pro
ductManagerBean!services.ejb.
ProductManager

Enlace estndar Java EE 6. Con


el mbito de la aplicacin actual
y solamente accesible dentro de
la misma aplicacin.

OrderManagerApp/ProductMan
agerBean/local

java:global/OrderManagerApp/O
rderManagerEJB/ProductManag
erBean!services.ejb.ProductMan
ager

Enlace estndar Java EE 6. Con


el mbito del servidor de
aplicaciones y accesible
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/TransactionManager

java:/TransactionSynchronizatio
nRegistry

java:jboss/TransactionSynchroni
zationRegistry

Reportar un error

35

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

3.2. Cambios dependientes de la arquitectura de su aplicacin y


componentes
3.2.1. Revisin de los cambios dependiendo de la arquitectura y componentes 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.
Hibernate 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.
REST
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
LDAP
El dominio de seguridad LDAP est configurado de manera diferente en JBoss EAP 6. Si su
aplicacin usa LDAP consulte el siguiente tema para obtener mayor informacin:
Seccin 3.2.6.1, Configuracin de los cambios del dominio de seguridad LDAP.
Mensajera
JBoss Messaging ya no se incluye en JBoss EAP 6. Si su aplicacin usa JBoss Messaging
como proveedor de mensajera necesita reemplazar el cdigo de JBoss Messaging con el de
HornetQ. El siguiente tema describe lo que necesita hacer: Seccin 3.2.7.3, Migre su
aplicacin para usar HornetQ como proveedor JMS.
Uso de clsters
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.
Implementacin de estilo de servicios
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
Invocacin remota
Si su aplicacin realiza invocaciones remotas todava puede utilizar JNDI 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.

36

Captulo 3. Migre su aplicacin

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.
Spring
Si su aplicacin usa Spring, consulte: Seccin 3.2.14.1, Migracin de aplicaciones Spring.
Otros cambios que pueden tener impacto en su migracin
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 Hibernate


3.2.2.1. Actualizar aplicaciones que utilizan Hibernate y/o JPA
Resumen
Si su aplicacin usa Hibernate o JPA lea las siguientes secciones y realice los cambios necesarios para
migrar a JBoss EAP 6.
Procedimiento 3.11.
1. Seccin 3.2.2.2, Configuracin de cambios para las aplicaciones que usan Hibernate y JPA
2. Seccin 3.2.2.4, Actualizacin de su aplicacin Hibernate 3 para utilizar Hibernate 4
3. Seccin 3.2.2.9, Actualizacin de su aplicacin para que cumpla con los requerimientos de la
especificacin JPA 2.0
4. Seccin 3.2.2.10, Reemplace el cach de segundo nivel JPA/Hibernate con Infinispan
5. Seccin 3.2.2.12, Migracin a Hibernate Validator 4
Reportar un error
3.2.2.2. Configuracin de cambios para las aplicaciones que usan Hibernate y JPA
Resumen
Si su aplicacin contiene un archivo persistence.xm l o si el cdigo usa las anotaciones
@ PersistenceContext o @ PersistenceUnit, 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 ClassNotFoundExceptions cuando
implementa su aplicacin, puede tratar de resolverlas usando uno de los siguientes enfoques.

37

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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.
Procedimiento 3.12. Configure la aplicacin
1. Copie las JARs Hibernate 3 requeridas en su biblioteca de aplicaciones.
Es posible que resuelva el problema copiando las JARs especficas de Hibernate 3 que contengan
las clases que faltan en el directorio lib/ de la aplicacin o agregndolas a la ruta de clases
usando algn otro mtodo. En algunos casos esto puede generar ClassCastExceptions 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. Ordnele al servidor el utilizar slamente bibliotecas Hibernate 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
jboss.as.jpa.providerModule como hibernate3-bundled en el persistence.xm l
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</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="false" />
<property name="jboss.as.jpa.providerModule" value="hibernate3bundled" />
</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. Inhabiltar el cach de segundo nivel de Hibernate
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
<hibernate.cache.use_second_level_cache> como false en el archivo
persistence.xm l.
Reportar un error

38

Captulo 3. Migre su aplicacin

3.2.2.3. Propiedades de la unidad de persistencia


Propiedades de configuracin de Hibernate 4.x
JBoss EAP 6 configura automticamente las siguientes propiedades de configuracin de Hibernate 4.x:
Tabla 3.3. Propiedades de la unidad de persistencia de Hibernate
Nombre de la
propiedad

Valor
predeterminado

Propsito

hibernate.id.
new_generator
_m appings

true

Esta configuracin es relevante si usa


@ GeneratedValue(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 false 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
persistence.xm l.
A continuacin encontrar mayor informacin sobre este
comportamiento.

hibernate.tra
nsaction.jta.
platform

Instancia de la
interfaz
org.hibernate
.service.jta.
platform .spi.
JtaPlatform

Esta clase pasa el gestor de transacciones, la transaccin


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

hibernate.ejb
.resource_sca
nner

Instancia de la
interaz
org.hibernate
.ejb.packagin
g.Scanner

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
hibernate.transaction.jta.platform

hibernate.tra
nsaction.m ana
ger_lookup_cl
ass
hibernate.ses
sion_factory_
nam e

QUALIFIED_PERS
ISTENCE_UNIT_N
AME

Esto est configurado con el nombre de la aplicacin +


nombre de la unidad de persistencia. La aplicacin puede
especificar un valor diferente, pero debe ser nico a travs
de todas las implementaciones de la aplicacin en la
instancia de JBoss EAP 6.

hibernate.ses
sion_factory_
nam e_is_jndi

false

Este se configura solamente si la aplicacin no especific un


valor para el hibernate.session_factory_nam e.

hibernate.ejb
.entitym anage
r_factory_nam
e

QUALIFIED_PERS
ISTENCE_UNIT_N
AME

Esto est configurado con el nombre de la aplicacin +


nombre de la unidad de persistencia. La aplicacin puede
especificar un valor diferente, pero debe ser nico a travs
de todas las implementaciones de la aplicacin en la
instancia de JBoss EAP 6.

39

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

En Hibernate 4.x, si new_generator_m appings se configura como true:


@ GeneratedValue(AUT O) mapea a
org.hibernate.id.enhanced.SequenceStyleGenerator.
@ GeneratedValue(T ABLE) mapea a org.hibernate.id.enhanced.T ableGenerator.
@ GeneratedValue(SEQUENCE) mapea a
org.hibernate.id.enhanced.SequenceStyleGenerator.
En Hibernate 4.x, si new_generator_m appings se configura como false:
@ GeneratedValue(AUT O) mapea a Hibernate "native".
@ GeneratedValue(T ABLE) mapea a
org.hibernate.id.MultipleHiLoPerT ableGenerator.
@ GeneratedValue(SEQUENCE) mapea a Hibernate "seqhilo".
Para obtener mayor informacin sobre estas propiedades vaya a http://www.hibernate.org/docs y revise
la Hibernate 4.1 Developer Guide.
Propiedades de persistencia JPA
Las siguientes propiedades JPA se soportan en la definicin de la unidad de persistencia en el archivo
persistence.xm l:
Tabla 3.4. Propiedades de la unidad de persistencia JPA
Nombre de la
propiedad

Valor
predeterminado

Propsito

jboss.as.jpa.
providerModul
e

org.hibernate

El nombre del mdulo proveedor de persistencia.


El valor debe ser hibernate3-bundled 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 application.

jboss.as.jpa.
adapterModule

org.jboss.as.
jpa.hibernate
: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:
org.jboss.as.jpa.hibernate:4 : Esto es para las
clases de integracin de Hibernate 4
org.jboss.as.jpa.hibernate:4 : Esto es para las
clases de integracin de Hibernate 3

Reportar un error
3.2.2.4. Actualizacin de su aplicacin Hibernate 3 para utilizar Hibernate 4
Resumen
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

40

Captulo 3. Migre su aplicacin

actualizaciones tiene que determinar la versin que la aplicacin utiliza actualmente.


Procedimiento 3.13. Actualizacin de la aplicacin para utilizar Hibernate 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.
2. Determine 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. Preservar el comportamiento existente del valor auto generado de la identidad de
Hibernate
Hibernate 3.5 introdujo una propiedad ncleo llamada hibernate.id.new_generator_m appings
que dirige la manera en que la identidad o las columnas de secuencia se generan al utilizar
@ GeneratedValue. En JBoss EAP 6, el valor predeterminado para esta propiedad se configura as:
Cuando implementa una aplicacin Hibernate nativa, el valor predeterminado es false.
Cuando implementa una aplicacin JPA, el valor predeterminado es true.
Directrices para nuevas aplicaciones
Las nuevas aplicaciones que usan la anotacin @ GeneratedValue deben configurar el valor para la
propiedad hibernate.id.new_generator_m appings 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
hibernate.id.new_generator_m appings como true y no se debe cambiar.
Para las nuevas aplicaciones Hibernate nativas, JBoss EAP 6 por defecto utiliza la propiedad
hibernate.id.new_generator_m appings como false. Debe establecer esta propiedad
como true.
Directrices para las aplicaciones existentes de JBoss EAP 5
Las aplicaciones existentes que usan la anotacin @ GeneratedValue 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
hibernate.id.new_generator_m appings como true. Debe configurar esta propiedad como
false en el archivo persistence.xm l.
Para aplicaciones nativas Hibernate, JBoss EAP 6 por defecto usa
hibernate.id.new_generator_m appings como false 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.

41

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Reportar un error
3.2.2.6. Migracin de su aplicacin Hibernate 3.3.x a Hibernate 4.x
Procedimiento 3.14.
1. Mapeo de los tipos Hibernate text a JDBC LONGVARCHAR
En versiones de Hibernate anteriores a 3.5, el tipo text se mapeaba a JDBC CLOB. Se agreg
un nuevo tipo Hibernate, m aterialized_clob, en Hibernate 4 para mapear propiedades
String Java a JDBC CLOB. Si su aplicacin tiene propiedades configuradas como
type="text" que se planean mapear a JDBC CLOB, tiene que hacer una de las siguientes:
a. Si su aplicacin usa archivos de mapeo hbm cambie la propiedad a
type="m aterialized_clob".
b. Si su aplicacin usa anotaciones, debe reemplazar @ T ype(type = "text") con @ Lob.
2. Revise el cdigo para encontrar los cambios en los tipos de valor retornados
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
org.hibernate.criterion cambiaron.
a. Debido a los cambios en CountProjection, Projections.rowCount(),
Projections.count(propertyNam e) y
Projections.countDistinct(propertyNam e), las proyecciones count y count
distinct ahora retornan un valor Long.
b. Debido a los cambios en Projections.sum (propertyNam e), 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.lang.ClassCastException.
a. Para las propiedades mapeadas como los tipos de nmeros enteros primitivos, Long,
Short o Integer se retorna una valor Long;
b. Para las propiedades mapeadas como tipos de de punto flotante primitivo, Float o
Double se retorna un valor Double.
Reportar un error
3.2.2.7. Migracin de su aplicacin Hibernate 3.5.x a Hibernate 4.x
Procedimiento 3.15.
1. Fusione AnnotationConfiguration en la configuracin
Aunque AnnotationConfiguration ya no se utiliza no debe afectar su migracin.
Si todava est usando un archivo hbm .xm l debe tener en cuenta de que JBoss EAP 6 ahora usa
org.hibernate.cfg.EJB3Nam ingStrategy en AnnotationConfiguration en lugar de
la org.hibernate.cfg.DefaultNam ingStrategy 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. Para resolver este
problema le puede decir a Hibernate que use la
org.hibernate.cfg.DefaultNam ingStrategy de legado llamando

42

Captulo 3. Migre su aplicacin

Configuration#setNam ingStrategy y pasndole


org.hibernate.cfg.DefaultNam ingStrategy#INST ANCE.
2. Modifique los espacios de nombres para que cumplan con los requerimientos de los
nuevos nombres de los archivos Hibernate DTD.
Tabla 3.5.
Espacio de nombre DTD anterior

Nuevo espacio de nombre DTD

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

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

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

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

3. Modificar las variables del entorno


a. Si est usando Oracle y usando las propiedades m aterialized_clob o
m aterialized_blob entonces la variable global del entorno
hibernate.jdbc.use_stream s_for_binary se debe configurar como verdadera.
b. Si est usando PostgreSQL y las propiedades CLOB or BLOB entonces la variable global del
entorno hibernate.jdbc.use_stream s_for_binary se debe configurar como falsa.
Reportar un error
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 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 persistence.xm l. Para las aplicaciones nativas Hibernate
API, este es el archivo hibernate.cfg.xm l.
Procedimiento 3.16. Configure las propiedades de persistencia para ejecutar en un entorno con
clsters
1. Establezca el valor hibernate.session_factory_nam e 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.session_factory_name" value="jboss-seambooking.ear_session_factory"/>

2. Establezca el valor hibernate.ejb.entitym anager_factory_nam e con un nombre nico.


Este nombre debe ser nico a travs de todas las implementaciones de la aplicacin en la

43

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

instancia de JBoss EAP 6. Por ejemplo:


<property name="hibernate.ejb.entitymanager_factory_name" value="seambooking.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. Actualizacin de su aplicacin para que cumpla con los requerimientos de la
especificacin JPA 2.0
Resumen
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.
Comportamiento de propagacin del contexto de persistencia
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.10. Reemplace el cach de segundo nivel JPA/Hibernate con Infinispan
Resumen
JBoss Cache se reemplaz con Infinispan para el cach de segundo nivel (2LC). Esto requiere un
cambio al archivo persistence.xm l. 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.
Este es un ejemplo de la manera en que se especificaron las propiedades para el cach de segundo
nivel en el archivo persistence.xm l en JBoss EAP 5.x.

44

Captulo 3. Migre su aplicacin

<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="mvcc-entity"/>
<property name="hibernate.cache.region_prefix" value="services"/>

Los siguientes pasos utilizarn este ejemplo para configurar Infinispan en JBoss EAP 6.
Procedimiento 3.17. Modifique el archivo persistence.xm l para usar Infinispan
1. Configure Infinispan para una aplicacin JPA en JBoss 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-m ode con el valor de ENABLE_SELECT IVE o


ALL as:
A. ENABLE_SELECT 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. Configure Infinispan para una aplicacin Hibernate nativa en JBoss 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.InfinispanRegionFactory"/>
<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:

45

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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.11. Propiedades cach de Hibernate
Tabla 3.6. Propiedades
Nombre de la propiedad

Descripcin

hibernate.cache.provider_class

El nombre de la clase de un CacheProvider


personalizado.

hibernate.cache.use_m inim al_puts

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.

hibernate.cache.use_query_cache

Boolean. Habilita el cach de solicitudes. Las


solicitudes individuales todava se tienen que
configurar para utilizar el cach.

hibernate.cache.use_second_level_cac
he

Boolean. Utilizado para deshabilitar


completamente el cach de segundo nivel, el cual
est habilitado por defecto para las clases que
especifican un mapeo <cache>.

hibernate.cache.query_cache_factory

El nombre de clase de una interfaz QueryCache


personalizada. El valor predeterminado es el
StandardQueryCache includo.

hibernate.cache.region_prefix

Un prefijo para utilizar para los nombres de


regiones cach de segundo nivel.

hibernate.cache.use_structured_entri
es

Boolean. Fuerza a Hibernate a almacenar datos


en el cach de segundo nivel en un formato ms
fcil de entender.

hibernate.cache.default_cache_concur
rency_strategy

Configuracin utilizada para brindar el nombre del


org.hibernate.annotations.CacheConcu
rrencyStrategy predeterminado a utilizar
cuando se utiliza @ Cacheable o @ Cache.
@ Cache(strategy="..") para sobreescribir
este valor predeterminado.

Reportar un error
3.2.2.12. Migracin a Hibernate Validator 4
Resumen
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

46

Captulo 3. Migre su aplicacin

tiene que realizar cuando migre su aplicacin.


Procedimiento 3.18. Es posible que tenga que realizar una o ms de las siguientes tareas
1. Acceder el ValidatorFactory predeterminado
JBoss EAP 6 enlaza un ValidatorFactory predeterminado al contexto JNDI bajo el nombre
java:com p/ValidatorFactory.
2. Comprender la validacin disparada del ciclo de vida
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 INSERT , UPDAT E y DELET E
operations.
b. Puede configurar los grupos a validarse por tipo de evento usando las siguientes
propiedades:
javax.persistence.validation.group.pre-persist,
javax.persistence.validation.group.pre-update y
javax.persistence.validation.group.pre-rem ove.
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.persistence.validation.m ode como none. Los otros valores vlidos para
esta propiedad son auto (predeterminado), callback y ddl.
3. Configure su aplicacin para usar la validacin manual
a. Si quiere controlar manualmente la validacin, puede crear un validador de una de las
siguientes maneras:
Cree una instancia Validator de la ValidatorFactory usando el mtodo
getValidator().
Las instancias del validador de inyeccin en su EJB, bean CDI o cualquier otro recurso
Java EE inyectable.
b. Puede utilizar el ValidatorContext retornado por el
ValidatorFactory.usingContext() para personalizar la instancia de su validador.
Usando esta API puede configurar un MessageInterpolator, T raverableResolver
y ConstraintValidatorFactory personalizados. Estas interfaces se especifican en la
especificacin de la validacin del bean y son nuevas para Hibernate Validator 4.
4. Modifique el cdigo para utilizar las nuevas restricciones de validacin del bean
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.validation.constraints
org.hibernate.validator.constraints
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. Utilizar restricciones personalizadas
En Hibernate Validator 3, una restriccin personalizada necesitaba implementar la interfaz

47

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

org.hibernate.validator.Validator. En Hibernate Validator 4, necesita implementar la


interfaz javax.validation.ConstraintValidator. Esta interfaz contiene los mismo
mtodos initialize() and isValid() que la interfaz anterior, sin embargo, la firma del
mtodo cambi. Adems, la modificacin DDL ya no se soporta en Hibernate Validator 4.
Reportar un error

3.2.3. Cambios JSF


3.2.3.1. Habiltar aplicaciones para utilizar versiones anteriores de JSF
Resumen
Si su aplicacin usa una versin ms antigua de JSF entonces no necesita actualizar a JSF 2.0. En lugar
puede crear un archivo jboss-deploym ent-structure.xm l 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 AINF/ o WEB-INF/ de su WAR o en el directorio MET A-INF/ de su EAR.
El siguiente es un ejemplo de un archivo jboss-deploym ent-structure.xm l que agrega una
dependencia para el mdulo JSF 1.2 y excluye o previene la carga automtica del mdulo JSF 2.0.
<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. Cambios de los servicios web
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.

48

Captulo 3. Migre su aplicacin

Cambios del proyecto API JBossWS


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.
Tabla 3.7. Propiedades del controlador de registro de tamao
JAR antigua

Paquete antiguo

Nueva JAR

Nuevo paquete

JBossWS SPI

org.jboss.wsf.spi.annotation.*

JBossWS API

org.jboss.ws.api.annotation.*

JBossWS SPI

org.jboss.wsf.spi.binding.*

JBossWS API

org.jboss.ws.api.binding.*

JBossWS SPI

org.jboss.wsf.spi.manageme
nt.recording.*

JBossWS API

org.jboss.ws.api.monitoring.*

JBossWS SPI

org.jboss.wsf.spi.tools.*

JBossWS API

org.jboss.ws.api.tools.*

JBossWS SPI

org.jboss.wsf.spi.tools.ant.*

JBossWS API

org.jboss.ws.tools.ant.*

JBossWS SPI

org.jboss.wsf.spi.tools.cmd.*

JBossWS API

org.jboss.ws.tools.cmd.*

JBossWS SPI

org.jboss.wsf.spi.util.ServiceL
oader

JBossWS API

org.jboss.ws.api.util.ServiceL
oader

JBossWS
Common

org.jboss.wsf.common.*

JBossWS API

org.jboss.ws.common.*

JBossWS
Common

org.jboss.wsf.common.handl
er.*

JBossWS API

org.jboss.ws.api.handler.*

JBossWS
Common

org.jboss.wsf.common.addre
ssing.*

JBossWS API

org.jboss.ws.api.addressing.*

JBossWS
Common

org.jboss.wsf.common.DOM
Utils

JBossWS API

org.jboss.ws.api.util.DOMUtil
s

JBossWS
Native

org.jboss.ws.annotation.End
pointConfig

JBossWS API

org.jboss.ws.api.annotation.E
ndpointConfig

Anotacin @WebContext
En JBossWS 3.4.x, esta anotacin se empac como
org.jboss.wsf.spi.annotation.WebContext en el proyecto JBossWS SPI. En JBossWS
4.0, esta anotacin se movi a org.jboss.ws.api.annotation.WebContexten 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 a un atributo que no es retroactivo. El atributo String[]
virtualHosts se cambi a String virtualHosts. En JBoss EAP 6 puede especificar solo
un host virtual por implementacin. Si mltiples webservices usan la anotacin @ WebContext
entonces el valor virtualHost debe ser idntico para todos los puntos finales definidos en el
archivador de implementacin.
Configuracin del punto final
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 webservice en la configuracin de dominio de JBoss EAP 6 incluye

49

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

configuraciones del punto final predefinidas. Tambin puede definir sus propias configuraciones
de punto final predefinidas. La anotacin
@ org.jboss.ws.api.annotation.EndpointConfig 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/.
Descriptor de implementacin jboss-webservices.xml
JBossWS 4.0 introduce un nuevo descriptor de implementacin para configurar servicios web.
El archivo jboss-webservices.xm l proporciona informacin adicional para la
implementacin dada y reemplaza parcialmente el archivo obsoleto jboss.xm l.
Para las implementaciones de servicios web EJB, la ubicacin esperada del archivo descriptor
jboss-webservices.xm l 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 jbosswebservices.xm l es en el directorio WEB-INF/.
El siguiente es un ejemplo de un archivo descriptor jboss-webservices.xm l 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-component-name>
<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</webservice-descriptionname>
<wsdl-publish-location>file:///bar/foo.wsdl</wsdl-publish-location>
</webservice-description>
</webservices>

50

Captulo 3. Migre su aplicacin

Tabla 3.8. Descripcin del elemento del archivo jboss-webservice.xml


Nombre del elemento

Descripcin

context-root

Utilizado para personalizar la raz contexto de la


implementacin de los servicios web.

config-name

Utizado 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 webservices de la
configuracin del dominio.

config-file

propiedad

Utilizado para configurar parejas de valores de nombres de


propiedades simples para configurar el comportamiento de la
pila de los servicios web.

port-component

Utilizado para personalizar la URI de destino del punto final


EJB o para configurar las propiedades relacionadas con la
seguridad.

webservice-description

Utilizado para personalizar o sobreescribir la ubicacin


publicada WSDL del servicio web.

Reportar un error

3.2.5. Cambios JAX-RS y RESTEasy


3.2.5.1. Configure los cambios de JAX-RS y RESTEasy
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.xm l y reemplazarlo con una de las
siguientes opciones:
1. La subclase javax.ws.rs.core.Application y use la anotacin @ ApplicationPath.
Esta es la opcin ms fcil y no requiere ninguna configuracin xml. Simplemente cree una
subclase de javax.ws.rs.core.Application en su aplicacin y antela con la ruta en donde
quiere poner disponibles sus clases JAX-RS. Por ejemplo:
@ApplicationPath("/mypath")
public class MyApplication extends Application {
}

En el ejemplo anterior, sus recursos JAX-RS estn disponibles en la ruta


/MY_WEB_APP_CONTEXT/m ypath/.

Nota
Note que la ruta se debe especificar como /m ypath no /m ypath/* . No debe haber
espacios, barras oblicuas o asteriscos.
2. Cree una subclase de javax.ws.rs.core.Application y use el archivo web.xm l para
configurar el mapeo JAX-RS.
Si no desea usar la anotacin @ ApplicationPath entonces todava necesita crear la subclase

51

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

de javax.ws.rs.core.Application. Luego puede configurar el mapeo JAX-RS en el archivo


web.xm l. Por ejemplo:
public 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/hello.

Nota
Tambin puede utilizar este enfoque para sobreescribir una ruta de una aplicacin que se
configur usando la anotacin @ ApplicationPath.
3. Modifique el archivo web.xm l.
Si no quiere crear subclases de Application entonces puede configurar el mapeo JAX-RS en
el archivo web.xm l 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/hello.

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. Configuracin de los cambios del dominio de seguridad LDAP
En JBoss EAP 5, el dominio de seguridad LDAP se configur en un elemento <applicationpolicy> en el archivo login-config.xm l. En JBoss EAP 6, el dominio de seguridad LDAP se
configura en el elemento <security-dom ain> en el archivo de configuracin del servidor. Para un
servidor autnomo, este es el archivo standalone/configuration/standalone.xm l. Si est
ejecutando su servidor en un dominio administrado, este es el archivo
dom ain/configuration/dom ain.xm l.
El siguiente es un ejemplo de la configuracin del dominio de seguridad LDAP en el archivo loginconfig.xm l en JBoss EAP 5:

52

Captulo 3. Migre su aplicacin

<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</module-option>
<module-option name="java.naming.security.authentication">simple</moduleoption>
....
</login-module>
</authentication>
</application-policy>

Este es un ejemplo de la configuracin LDAP en el archivo de configuracin del servidor en JBoss EAP
6:
<subsystem xmlns="urn:jboss:domain:security:1.0">
<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</moduleoption>

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 HornetQ

53

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

3.2.7.1. HornetQ 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_DIRECT) 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.

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 libaio est instalado en el
sistema Red Hat Enterprise Linux en donde est ejecutando JBoss EAP 6.
Reportar un error
3.2.7.2. Configuracin de un puente JMS para migrar mensajes JMS existentes a JBoss 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. El siguiente procedimiento describe la manera de lograr esto.
Procedimiento 3.19. Configuracin del puente JMS implementado en un servidor JBoss EAP 5.x
Para evitar conflictos en las clases entre lanzamientos tiene que utilizar el siguiente procedimiento 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.
1. Cree un subdirectorio en el directorio de implementacin de JBoss EAP 5 a contener el SAR, por
ejemplo: EAP5_HOME/server/PROFILE_NAME/deploy/m yBridge.sar.
2. Cree un subdirectorio llamado MET A-INF en
EAP5_HOME/server/PROFILE_NAME/deploy/m yBridge.sar/.
3. Cree un archivo jboss-service.xm l que contiene informacin similar al siguiente en el
directorio EAP5_HOME/server/PROFILE_NAME/deploy/m yBridge.sar/MET A-INF/.

54

Captulo 3. Migre su aplicacin

<server>
<loader-repository>
com.example:archive=unique-archive-name
<loader-repository-config>java2ParentDelegation=false</loaderrepository-config>
</loader-repository>
<!-- JBoss EAP 6 JMS Provider -->
<mbean code="org.jboss.jms.jndi.JMSProviderLoader"
name="jboss.messaging:service=JMSProviderLoader,name=EnterpriseApplicationPla
tform6JMSProvider">
<attribute
name="ProviderName">EnterpriseApplicationPlatform6JMSProvider</attribute>
<attribute
name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</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.InitialContextFactor
y
java.naming.provider.url=remote://EnterpriseApplicationPlatform6host: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" xmbean-dd="xmdesc/Bridgexmbean.xml">
<depends optional-attributename="SourceProviderLoader">jboss.messaging:service=JMSProviderLoader,name=J
MSProvider</depends>
<depends optional-attributename="TargetProviderLoader">jboss.messaging:service=JMSProviderLoader,name=En
terpriseApplicationPlatform6JMSProvider</depends>
<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>

55

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Nota
El <load-repository> est presente para asegurar que el SAR tiene un cargador de
clases aislado. Tambin note que la bsqueda JNDI 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 asegurada por defecto. El usuario llamado "jbossuser"
con contrasea "jbosspass" se cre en el ApplicationRealm con el rol guest usando
el script EAP_HOME/bin/add_user.sh.
4. Copie las siguientes JARs del directorio EAP_HOME/m odules/system /layers/base/ en el
directorio EAP5_HOME/server/PROFILE_NAME/deploy/m yBridge.sar/. Reemplace cada
VERSION_NUMBER con el nmero de la versin en su distribucin de JBoss EAP 6.
org/hornetq/m ain/hornetq-core-VERSION_NUMBER.jar
org/hornetq/m ain/hornetq-jm s-VERSION_NUMBER.jar
org/jboss/ejb-client/m ain/jboss-ejb-client-VERSION_NUMBER.jar
org/jboss/logging/m ain/jboss-logging-VERSION_NUMBER.jar
org/jboss/logm anager/m ain/jboss-logm anager-VERSION_NUMBER.jar
org/jboss/m arshalling/m ain/jboss-m arshalling-VERSION_NUMBER.jar
org/jboss/m arshalling/river/m ain/jboss-m arshallingriver-VERSION_NUMBER.jar
org/jboss/rem ote-nam ing/m ain/jboss-rem ote-nam ing-VERSION_NUMBER.jar
org/jboss/rem oting3/m ain/jboss-rem oting-VERSION_NUMBER.jar
org/jboss/sasl/m ain/jboss-sasl-VERSION_NUMBER.jar
org/jboss/netty/m ain/netty-VERSION_NUMBER.jar
org/jboss/rem oting3/rem ote-jm x/m ain/rem oting-jm x-VERSION_NUMBER.jar
org/jboss/xnio/m ain/xnio-api-VERSION_NUMBER.jar
org/jboss/xnio/nio/m ain.xnio-nio-VERSION_NUMBER.jar

Nota
No copie simplemente EAP_HOME/bin/client/jboss-client.jar ya que las clases
API javax entrarn en conflicto con las de JBoss EAP JBoss 5.x.
Procedimiento 3.20. Configuracin del puente JMS implementado en un servidor JBoss EAP 6.x
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 JNDI, las clases de bsqueda JNDI del proveedor de mensajera fuente o agente de
mensajera se debe agrupar en un mdulo JBoss. El siguiente procedimiento usa el agente de
mensajera ficticio 'MyCustomMQ' como ejemplo.
1. Cree el mdulo JBoss para el proveedor de mensajera.
a. Cree una estructura de directorio bajo EAP_HOME/m odules/system /layers/base/ para
el nuevo mdulo. El subdirectorio m ain/ tendr las JARs clientes y el archivo
m odule.xm l. El siguiente es un ejemplo de la estructura de directorio creada para el
proveedor de mensajera MyCustomMQ:
EAP_HOME/m odules/system /layers/base/org/m ycustom m q/m ain/

56

Captulo 3. Migre su aplicacin

b. En el subdirectorio m ain/ cree un archivo m odule.xm l que contenga la definicin del


mdulo para el proveedor de mensajera. El siguiente es un ejemplo del m odule.xm l
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 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>

c. Copie las JARs del proveedor de mensajera requeridas para la bsqueda JNDI de los
recursos fuente en el subdirectorio m ain/ 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

2. Configuracin del puente JMS en el subsistema m essaging del servidor JBoss EAP 6.
a. 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/standalone/configuration/standalone-full-ha.xm l. Si est
ejecutando un dominio administrado, realice una copia de seguridad de los archivos
EAP_HOME/dom ain/configuration/dom ain.xm l y
EAP_HOME/dom ain/configuration/host.xm l.
b. Agregue el elemento <jm s-bridge> al subsistema m essaging en el archivo de

57

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

configuracin del servidor. Los elementos <source> y <target> proporciona los


nombres de los recursos JMS utilizados para bsquedas JNDI. Si se especifican las
credenciales <user> y <password> entonces se pasan como argumentos cuando se crea
una conexin JMS.
El siguiente es un ejemplo del elemento <jm s-bridge> 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>
<password>pwd1</password>
<context>
<property key="java.naming.factory.initial"
value="org.mycustommq.jndi.MyCustomMQInitialContextFactory"/>
<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-of-service>
<failure-retry-interval>500</failure-retry-interval>
<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-in-header>
</jms-bridge>
</subsystem>

En el ejemplo anterior, las propiedades JNDI se definen en el elemento <context> para la


<source>. Si se omite el elemento <context> como en el ejemplo anterior <target>
entonces los recursos JMS se buscan en la instancia local.
Reportar un error
3.2.7.3. Migre su aplicacin para usar HornetQ como proveedor 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.
Procedimiento 3.21. Antes de iniciar
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_.
Procedimiento 3.22. Cambie su proveedor a HornetQ
1. Transferencia de configuraciones

58

Captulo 3. Migre su aplicacin

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
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 connection-factories-service.xm l, 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
destinations-service.xm l, 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. Modificacin de su cdigo de aplicacin
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.4, Configuracin de la mensajera con HornetQ
3. Migrar los mensajes existentes
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.4. Configuracin de la mensajera con HornetQ
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 standalone.xm l o dom ain.xm l. 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 clsters


3.2.8.1. Realizar cambios a su aplicacin para uso de clsters
Procedimiento 3.23.

59

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

1. Inicie JBoss EAP 6 con el uso de clsters habilitado


Para habilitar el uso de clsters en JBoss EAP 5.x, necesitaba iniciar sus instancias del servidor
usando el perfil all o alguna derivacin de este as:
$ EAP5_HOME/bin/run.sh -c all
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. Habilite el clster para los servidores ejecutando en un dominio administrado
Para habilitar el uso de clsters para los servidores iniciados usando el controlador de
dominio, actualice su dom ain.xm l y designe un grupo de servidores para utilizar el perfil
ha y el grupo de enlace de sockets ha-sockets. 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. Habilitacin del uso de clsters para servidores autnomos


Para habilitar los clsters para los servidores autnomos inicie el servidor usando el archivo
de configuracin apropiado as: $ EAP_HOME/bin/standalone.sh --serverconfig=standalone-ha.xm l -Djboss.node.nam e=UNIQUE_NODE_NAME
2. Especifique la direccin de enlace
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: $ EAP_HOME/bin/run.sh -c all -b
192.168.0.2
En JBoss EAP 6, las direcciones de enlace se definen explcitamente por los enlaces de socket
relevantes dentro de los archivos de configuracin de JBoss EAP 6. Para los servidores iniciados
usando el controlador de dominios, las direcciones de enlace se especifican dentro del archivo
dom ain/configuration/host.xm l. Para los servidores autnomos las direcciones de enlace
se especifican dentro del archivo standalone-ha.xm l:
<interfaces>
<interface name="management">
<inet-address value="192.168.0.2"/>
</interface>
<interface name="public">
<inet-address value="192.168.0.2"/>
</interface>
</interfaces>
<socket-binding-groups>
<socket-binding-group name="ha-sockets" default-interface="public">
<!-- ... -->
</socket-binding-group>
</socket-binding-groups>

En el ejemplo anterior, la interfaz public se especifica como la interfaz predeterminada para


todos los sockets dentro del grupo de enlace del socket ha-sockets.
3. Configure jvm Route para soportar mod_jk y mod_proxy

60

Captulo 3. Migre su aplicacin

En JBoss EAP 5, el servidor web jvm Route se configuraba usando una propiedad en el archivo
server.xm l. En JBoss EAP 6, el atributo jvm Route se configura en el subsistema web del
archivo de configuracin del servidor usando el atributo instance-id as:
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="defaulthost" native="false" instance-id="{JVM_ROUTE_SERVER}">

El {JVM_ROUTE_SERVER} anterior se debe reemplazar por el id del servidor jvmRoute server.


El instance-id tambin se puede configurar usando la consola de administracin.
4. Especifique la direccin y puerto multicast
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:
$ EAP_HOME/bin/run.sh -c all -u 228.11.11.11 -m 4 5688
En JBoss EAP 6, la direccin multicast y el puerto utilizado para la comunicacin intra-clster 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>
<socket-binding-groups>
<socket-binding-group name="ha-sockets" default-interface="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, jboss.m cast.addr es
el nombre de la variable para la direccin multicast y jboss.m cast.port 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 usando los siguientes argumentos de la lnea de comandos: $
EAP_HOME/bin/dom ain.sh -Djboss.m cast.addr=228.11.11.11 Djboss.m cast.port=4 5688
5. Use una pila opcional del protocolo
En JBoss EAP 5.x, puede manipular la pila predeterminada del protocolo utilizada para todos los

61

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

servicios de clster usando la propiedad del sistema jboss.default.jgroups.stack. $


EAP_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp
En JBoss EAP 6, la pila predeterminada del protocolo es definida por el subsistema JGroups
dentro de dom ain.xm l o standalone-ha.xm l:
<subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
<stack name="udp">
<!-- ... -->
</stack>
</subsystem>

6. Reemplazar la replicacin de compaeros


JBoss EAP 5.x utilizaba la replicacin de compaeros de JBoss Cache para suprimir la rplica de
datos en todas las instancias en un clster. Se requera que pasara el argumento Djboss.cluster.buddyRepl en la lnea de comandos cuando iniciaba el servidor JBoss.
En JBoss EAP 6, la replicacin de compaeros fue reemplazada por el cach distribudo mucho
mas superior de Infinispan o modo DIST. La distribucin es un modo de uso de clsters poderoso
el cual le permite a Infinispan el escalar linearmente cuando se agregan mas servidores al clster.
El siguiente es un ejemplo de cmo configurar el servidor para utilizar el modo de cach DIST.
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

Debe ver la siguiente respuesta:


Conectado a un controlador autnomo en localhost:9999

c. Emita los siguientes comandos:


/subsystem=infinispan/cache-container=web/:write-attribute(name=defaultcache,value=dist)
/subsystem=infinispan/cache-container=web/distributed-cache=dist/:writeattribute(name=owners,value=3)
:reload

Debe ver la siguiente respuesta despus de cada comando:


"outcome" => "success"

Estos comandos crean la siguiente configuracin en el subsistema infinispan del


archivo standalone-ha.xm l:

62

Captulo 3. Migre su aplicacin

<cache-container name="web" aliases="standard-session-cache" defaultcache="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>

Para mayor informacin consulte el captulo titulado Clustering in Web Applications 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/.
Reportar un error
3.2.8.2. Implementacin de un Singleton HA
Resumen
En JBoss EAP 5, los archivadores singleton HA se implementaban en el directorio deployhasingleton/ separado de otras implementaciones. Esto se haca para prevenir la implementacin
automtica y asegurarse de que el servicio HASingletonDeployer controlaba la implementacin y
desplegaba el archivador slamente en el nodo maestro en el clster. No haba una funcionalidad de
implementacin en vivo as que para volver a implementar se requeria reiniciar el servidor. Tambin si el
nodo maestro fallaba requiriendo que otro nodo tomara en papel de maestro, el servicio singleton tena
que pasar por todo el proceso de implementacin con el fin de proporcionar el servicio.
Esto cambi en JBoss EAP 6. Usando un SingletonService, el servicio de destino se instala en todos los
nodos en el clster pero solo se inicia en un nodo. Este enfoque simplifica los requerimientos de
implementacin y minimiza el tiempo requerido para reubicar el servicio maestro singleton entre nodos.
Procedimiento 3.24. Implementacin de un servicio Singleton HA
1. Escriba la aplicacin del servicio singleton HA.
El siguiente es un ejemplo simple de un servicio que est envuelto con el decorador
SingletonService a implementarse como un servicio singleton.
a. Crear un servicio singleton.
El siguiente listado es un ejemplo de un servicio singleton:

63

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

package com.mycompany.hasingleton.service.ejb;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
import
import
import
import
import
import
import
import

org.jboss.as.server.ServerEnvironment;
org.jboss.msc.inject.Injector;
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;
org.jboss.msc.value.InjectedValue;

/**
* @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a>
*/
public class EnvironmentService implements Service<String> {
private static final Logger LOGGER =
Logger.getLogger(EnvironmentService.class.getCanonicalName());
public static final ServiceName SINGLETON_SERVICE_NAME =
ServiceName.JBOSS.append("quickstart", "ha", "singleton");
/**
* A flag whether the service is started.
*/
private final AtomicBoolean started = new AtomicBoolean(false);
private String nodeName;
private final InjectedValue<ServerEnvironment> env = new
InjectedValue<ServerEnvironment>();
public Injector<ServerEnvironment> getEnvInjector() {
return this.env;
}
/**
* @return the name of the server node
*/
public String getValue() throws IllegalStateException,
IllegalArgumentException {
if (!started.get()) {
throw new IllegalStateException("The service '" +
this.getClass().getName() + "' is not ready!");
}
return this.nodeName;
}
public void start(StartContext arg0) throws StartException {
if (!started.compareAndSet(false, true)) {
throw new StartException("The service is still started!");
}
LOGGER.info("Start service '" + this.getClass().getName() + "'");
this.nodeName = this.env.getValue().getNodeName();
}
public void stop(StopContext arg0) {
if (!started.compareAndSet(true, false)) {
LOGGER.warning("The service '" + this.getClass().getName() +
"' is not active!");

64

Captulo 3. Migre su aplicacin

} else {
LOGGER.info("Stop service '" + this.getClass().getName() +
"'");
}
}
}

b. Cree un singleton EJB para iniciar el servicio como un SingletonService al iniciar el


servidor.
El siguiente listado es un ejemplo de un singleton EJB que inicia un SingletonService al
iniciar el servidor:

65

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

package com.mycompany.hasingleton.service.ejb;
import java.util.Collection;
import java.util.EnumSet;
import
import
import
import

javax.annotation.PostConstruct;
javax.annotation.PreDestroy;
javax.ejb.Singleton;
javax.ejb.Startup;

import
import
import
import
import
import
import
import
import
import

org.jboss.as.clustering.singleton.SingletonService;
org.jboss.as.server.CurrentServiceContainer;
org.jboss.as.server.ServerEnvironment;
org.jboss.as.server.ServerEnvironmentService;
org.jboss.msc.service.AbstractServiceListener;
org.jboss.msc.service.ServiceController;
org.jboss.msc.service.ServiceController.Transition;
org.jboss.msc.service.ServiceListener;
org.slf4j.Logger;
org.slf4j.LoggerFactory;

/**
* A Singleton EJB to create the SingletonService during startup.
*
* @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a>
*/
@Singleton
@Startup
public class StartupSingleton {
private static final Logger LOGGER =
LoggerFactory.getLogger(StartupSingleton.class);
/**
* Create the Service and wait until it is started.<br/>
* Will log a message if the service will not start in 10sec.
*/
@PostConstruct
protected void startup() {
LOGGER.info("StartupSingleton will be initialized!");
EnvironmentService service = new EnvironmentService();
SingletonService<String> singleton = new
SingletonService<String>(service,
EnvironmentService.SINGLETON_SERVICE_NAME);
// if there is a node where the Singleton should deployed the
election policy might set,
// otherwise the JGroups coordinator will start it
//singleton.setElectionPolicy(new
PreferredSingletonElectionPolicy(new NamePreference("node2/cluster"),
new SimpleSingletonElectionPolicy()));
ServiceController<String> controller =
singleton.build(CurrentServiceContainer.getServiceContainer())
.addDependency(ServerEnvironmentService.SERVICE_NAME,
ServerEnvironment.class, service.getEnvInjector())
.install();
controller.setMode(ServiceController.Mode.ACTIVE);
try {
wait(controller, EnumSet.of(ServiceController.State.DOWN,

66

Captulo 3. Migre su aplicacin

ServiceController.State.STARTING), ServiceController.State.UP);
LOGGER.info("StartupSingleton has started the Service");
} catch (IllegalStateException e) {
LOGGER.warn("Singleton Service {} not started, are you sure to
start in a cluster (HA)
environment?",EnvironmentService.SINGLETON_SERVICE_NAME);
}
}
/**
* Remove the service during undeploy or shutdown
*/
@PreDestroy
protected void destroy() {
LOGGER.info("StartupSingleton will be removed!");
ServiceController<?> controller =
CurrentServiceContainer.getServiceContainer().getRequiredService(Environ
mentService.SINGLETON_SERVICE_NAME);
controller.setMode(ServiceController.Mode.REMOVE);
try {
wait(controller, EnumSet.of(ServiceController.State.UP,
ServiceController.State.STOPPING, ServiceController.State.DOWN),
ServiceController.State.REMOVED);
} catch (IllegalStateException e) {
LOGGER.warn("Singleton Service {} has not be stopped
correctly!",EnvironmentService.SINGLETON_SERVICE_NAME);
}
}
private static <T> void wait(ServiceController<T> controller,
Collection<ServiceController.State> expectedStates,
ServiceController.State targetState) {
if (controller.getState() != targetState) {
ServiceListener<T> listener = new NotifyingServiceListener<T>();
controller.addListener(listener);
try {
synchronized (controller) {
int maxRetry = 2;
while (expectedStates.contains(controller.getState()) &&
maxRetry > 0) {
LOGGER.info("Service controller state is {}, waiting for
transition to {}", new Object[] {controller.getState(), targetState});
controller.wait(5000);
maxRetry--;
}
}
} catch (InterruptedException e) {
LOGGER.warn("Wait on startup is interrupted!");
Thread.currentThread().interrupt();
}
controller.removeListener(listener);
ServiceController.State state = controller.getState();
LOGGER.info("Service controller state is now {}",state);
if (state != targetState) {
throw new IllegalStateException(String.format("Failed to wait
for state to transition to %s. Current state is %s", targetState, state),
controller.getStartException());
}
}
}

67

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

private static class NotifyingServiceListener<T> extends


AbstractServiceListener<T> {
@Override
public void transition(ServiceController<? extends T> controller,
Transition transition) {
synchronized (controller) {
controller.notify();
}
}
}
}

c. Cree un bean de sesin sin estado para acceder al servicio desde un cliente.
El siguiente es un ejemplo de un bean de sesin sin estado que accede al servicio desde un
cliente:
package com.mycompany.hasingleton.service.ejb;
import javax.ejb.Stateless;
import
import
import
import

org.jboss.as.server.CurrentServiceContainer;
org.jboss.msc.service.ServiceController;
org.slf4j.Logger;
org.slf4j.LoggerFactory;

/**
* A simple SLSB to access the internal SingletonService.
*
* @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a>
*/
@Stateless
public class ServiceAccessBean implements ServiceAccess {
private static final Logger LOGGER =
LoggerFactory.getLogger(ServiceAccessBean.class);
public String getNodeNameOfService() {
LOGGER.info("getNodeNameOfService() is called()");
ServiceController<?> service =
CurrentServiceContainer.getServiceContainer().getService(
EnvironmentService.SINGLETON_SERVICE_NAME);
LOGGER.debug("SERVICE {}", service);
if (service != null) {
return (String) service.getValue();
} else {
throw new IllegalStateException("Service '" +
EnvironmentService.SINGLETON_SERVICE_NAME + "' not found!");
}
}
}

d. Cree la interfaz de la lgica empresarial para el SingletonService.


El siguiente es un ejemplo de una interfaz de lgica empresarial para el SingletonService:

68

Captulo 3. Migre su aplicacin

package com.mycompany.hasingleton.service.ejb;
import javax.ejb.Remote;
/**
* Business interface to access the SingletonService via this EJB
*
* @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a>
*/
@Remote
public interface ServiceAccess {
public abstract String getNodeNameOfService();
}

2. Inicie cada instancia de JBoss EAP 6 con el clster habilitado.


El mtodo para habilitar el clster depende de si los servidores son autnomos o ejecutando en
un dominio administrado.
a. Habilite el clster para los servidores ejecutando en un dominio administrado.
Puede habilitar el uso de clsters usando el CLI de administracin o puede modificar
manualmente el archivo de configuracin.
A. Habilite el uso de clsters usando el CLI de administracin.
a. Inicie su controlador de dominios.
b. Abra una ventana de comandos para su sistema operativo.
c. Conctese al CLI de administracin pasando la direccin IP del controlador
de dominio o el nombre DNS.
En este ejemplo, asuma que la direccin IP del controlador de dominio es
192.168.0.14 .
A. Para Linux, ingrese lo siguiente en la lnea de comandos:
$ EAP_HOME/bin/jboss-cli.sh --connect -controller=192.168.0.14

B. Para Windows, ingrese lo siguiente en la lnea de comandos:


C:\>EAP_HOME\bin\jboss-cli.bat --connect -controller=192.168.0.14

Debe ver la siguiente respuesta:


Conectado al controlador de dominio en 192.168.0.14

d. Agregue el grupo del servidor m ain-server.


[domain@192.168.0.14:9999 /] /server-group=main-servergroup:add(profile="ha",socket-binding-group="ha-sockets")
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined
}

69

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

e. Cree un servidor llamado server-one y agrguelo al grupo de servidores


m ain-server.
[domain@192.168.0.14:9999 /] /host=station14Host2/serverconfig=server-one:add(group=main-server-group,auto-start=false)
{
"outcome" => "success",
"result" => undefined
}

f. Configure la MVJ para el grupo de servidores m ain-server.


[domain@192.168.0.14:9999 /] /server-group=main-servergroup/jvm=default:add(heap-size=64m,max-heap-size=512m)
{
"outcome" => "success",
"result" => undefined,
"server-groups" => undefined
}

g. Cree un servidor llamado server-two, pngalo en un grupo de servidores


separado y configure la compensacin del puerto como 100.
[domain@192.168.0.14:9999 /] /host=station14Host2/serverconfig=server-two:add(group=distinct2,socket-binding-portoffset=100)
{
"outcome" => "success",
"result" => undefined
}

B. Habilite el uso de clsters manualmente modificando los archivos de


configuracin del servidor.
a. Detener el servidor JBoss EAP 6.

Importante
Tiene que detener el servidor antes de modificar el archivo de
configuracin del servidor para que su cambio persista al reiniciar el
servidor.
b. Abra el archivo de configuracin dom ain.xm l para modificar
Designe un grupo de servidores para utilizar el perfil ha y el grupo de enlace de
sockets ha-sockets as:

70

Captulo 3. Migre su aplicacin

<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-groups>

c. Abra el archivo de configuracin host.xm l para modificar


Modifique el archivo as:
<servers>
<server name="server-one" group="main-server-group" autostart="false"/>
<server name="server-two" group="distinct2">
<socket-bindings port-offset="100"/>
</server>
<servers>

d. Inicie el servidor.
A. Para Linux escriba: EAP_HOME/bin/dom ain.sh
B. Para Microsoft Windows escriba: EAP_HOME\bin\dom ain.bat
b. Habilitacin del uso de clsters para servidores autnomos
Para habilitar el uso de clsters para servidores autnomos, inicie el servidor usando el
nombre del nodo y el archivo de configuracin standalone-ha.xm l as:
A. Para Linux escriba: EAP_HOME/bin/standalone.sh --serverconfig=standalone-ha.xm l -Djboss.node.nam e=UNIQUE_NODE_NAME
B. Para Microsoft Windows escriba: EAP_HOME\bin\standalone.bat --serverconfig=standalone-ha.xm l -Djboss.node.nam e=UNIQUE_NODE_NAME

Nota
Para evitar conflictos de puertos al ejecutar mltiples servidores en una mquina, configure
el archivo standalone-ha.xm l para cada instancia del sevridor para enlazar en una
interfaz separada. Opcionalmente, puede iniciar instancias del servidor posteriores con un
offset del puerto usando un argumento como el siguiente en la lnea de comandos: Djboss.socket.binding.port-offset=100.
3. Implemente la aplicacin en los servidores
Si usa Maven para implementar su aplicacin, use el siguiente comando Maven para implementar
en el servidor ejecutando en los puertos predeterminados:
m vn clean install jboss-as:deploy
Para implementar en servidores adicionales, pase el nombre del servidor y el nmero del puerto
en la lnea de comandos:
m vn clean package jboss-as:deploy -Ddeploy.hostnam e=localhost Ddeploy.port=10099

71

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Reportar un error

3.2.9. Cambios en la implementacin de estilo de servicio


3.2.9.1. Actualizacin de aplicaciones que utilizan las implementaciones de estilo del servicio
Resumen
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 jboss-service.xm l o jboss-beans.xm l 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/standalone/deploym ents/. Si est ejecutando un dominio
administrado, la carpeta de implementaciones se encuentra aqu: EAP_HOME/dom ain/deploym ents/.
Reportar un error

3.2.10. Cambios de invocaciones remotas


3.2.10.1. Migracin de aplicaciones implementadas de JBoss EAP 5 que realizan invocaciones
remotas en JBoss EAP 6
Resumen
En JBoss EAP 6, hay dos maneras de realizar invocaciones remotas al servidor:
Puede utilizar la nueva API cliente EJB especfica de JBoss para realizar la invocacin.
Puede utilizar JNDI para buscar un proxy para su bean e invocar en ese proxy retornado.
Esta seccin cubre la opcin 2: codificacin de cambios requeridos para los clientes que usan JNDI.
En JBoss EAP 5, la interfaz remota EJB se enlazaba en JNDI 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 se usa el ejb:NAMESPACE_NAME para acceso remoto a las EJBs con la siguiente
sintaxis: Para los beans sin estado:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualifiedclassname-of-the-remote-interface>

Para los beans con estado:


ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualifiedclassname-of-the-remote-interface>?stateful

Los valores a sustituirse en la sintaxis anterior son:


<app-nam e> - el nombre de la aplicacin de las EJBs implementadas. Este es usualmente el

72

Captulo 3. Migre su aplicacin

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.
<m odule-nam e> - 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-as-ejbremote-app.jar as que el nombre del mdulo es jboss-as-ejb-remote-app.
<distinct-nam e> - un nombre diferente opcional para la EJB. Este ejemplo no usa un nombre
diferente as que utiliza una cadena vaca.
<bean-nam e> - por defecto, es el nombre simple de la clase de la clase de la implementacin del
bean.
<fully-qualified-classnam e-of-the-rem ote-interface> - el nombre de la clase
completamente calificada de la vista remota.
Actualizacin del cdigo del cliente
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)
public class CalculatorBean implements RemoteCalculator {
@Override
public int add(int a, int b) {
return a + b;
}
@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:
InitialContext ctx = new InitialContext();
RemoteCalculator calculator = (RemoteCalculator)
ctx.lookup("CalculatorBean/remote");
int a = 204;
int b = 340;
int sum = calculator.add(a, b);

En JBoss EAP 6, usando la informacin descrita anteriormente, la bsqueda del cliente e invocacin se
codifica as:

73

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

final Hashtable jndiProperties = new Hashtable();


jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);
final String appName = "";
final String moduleName = "jboss-as-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);
int a = 204;
int b = 340;
int 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 obtener mayor informacin sobre las invocaciones remotas usando JNDI, consulte Invocacin de
un bean de sesin remotamente usando JNDI en el captulo titulado JavaBeans empresariales en la
Gua de desarrollo para JBoss EAP 6 en
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
Reportar un error
3.2.10.2. Invocacin de un bean de sesin remotamente usando JNDI
Esta tarea describe la manera de agregar soporte en un cliente remoto para la invocacin de beans de
sesin usando JNDI. La tarea asume que el proyecto se est construyendo usando Maven.
El inicio rpido de ejb-rem ote 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.
Prerrequisitos
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

74

Captulo 3. Migre su aplicacin

JAR entonces se recomienda el agregar la JAR a su repositorio Maven como un objeto. Consulte la
documentacin de Maven con relacin a install:install-file para obtener indicaciones,
http://maven.apache.org/plugins/maven-install-plugin/usage.html
Necesita saber el nombre de host y el puerto JNDI 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.
Procedimiento 3.25. Agregacin de la configuracin del proyecto Maven para la invocacin
remota de beans de sesin
1. Agregar las dependencias requeridas del proyecto
El pom .xm l para el proyecto se debe actualizar para incluir las dependencias necesarias.
2. Agregue el archivo jboss-ejb-client.properties
La API cliente EJB de JBoss espera encontrar un archivo en la raz del proyecto llamado jbossejb-client.properties que contiene la informacin de la conexin para el servicio JNDI.
Agregue este archivo al directorio src/m ain/resources/ 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_ENABLED=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_STARTTLS=true
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONY
MOUS=false
# Add any of the following SASL options if required
#
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONY
MOUS=false
#
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAIN
TEXT=false
#
remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MEC
HANISMS=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 ART T LS. La interfaz remota en el contenedor soporta las
conexiones seguras y no seguras usando el mismo puerto.
3. Agregar dependencias para las interfaces empresariales remotas
Agregar las dependencias Maven al pom .xm l para las interfaces empresariales remotas de los
beans de sesin.
<dependency>
<groupId>org.jboss.as.quickstarts</groupId>
<artifactId>jboss-as-ejb-remote-server-side</artifactId>
<type>ejb-client</type>
<version>${project.version}</version>
</dependency>

75

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Ahora que el proyecto se configur correctamente, puede agregar el cdigo para acceder e invocar los
beans de sesin.
Procedimiento 3.26. Obtenga un proxy bean usando JNDI e invoque mtoodos del bean
1. Manejo de las excepciones verificadas
Dos de los mtodos usados en el siguiente cdigo (InitialContext() y lookup()) tienen una
excepcin verificada del tipo javax.nam ing.Nam ingException. Estas llamadas de mtodos
pueden estar includas en un bloque try/catch que atrape Nam ingException o en un mtodo
que se declare para presentar Nam ingException. El manual de inicio rpido ejb-rem ote usa
la segunda tcnica.
2. Cree un contexto JNDI
Un objeto del contexto JNDI proporciona el mecanismo para solicitar recursos del servidor. Cree
un contexto JNDI usando el siguiente cdigo:
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
final Context context = new InitialContext(jndiProperties);

Las propiedades de conexin para el servicio JNDI se leen del archivo jboss-ejbclient.properties.
3. Use el mtodo lookup() del contexto JNDI para obtener un proxy bean
Invoque el mtodo lookup() del proxy bean y psele el nombre JNDI 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-as-ejb-remote-server-side/CalculatorBean!" +
RemoteCalculator.class.getName());

Los nombres JNDI de los beans de sesin se definen usando una sintaxis especial.
4. Invocacin de mtodos
Ahora que tiene un objeto bean proxy puede invocar cualquiera de los mtodos que se
encuentane en la interfaz empresarial remota.
int a = 204;
int b = 340;
System.out.println("Adding " + a + " and " + b + " via the remote stateless
calculator deployed on the server");
int sum = statelessRemoteCalculator.add(a, b);
System.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

76

Captulo 3. Migre su aplicacin

proxy recuperado del servidor usando JNDI.


Reportar un error

3.2.11. Cambios de EJB 2.x


3.2.11.1. Actualizacin de aplicaciones que utilizan EJB 2.x
JBoss EAP 6 proporciona soporte para EJB 2.x; sin embargo, necesita relizar unas pocas modificaciones
del cdigo e iniciar el servidor con el perfil completo.
Procedimiento 3.27. Ejecute EJB 2.x en JBoss EAP 6
1. Modifique el cdigo para utilizar las nuevas reglas del espacio de nombres JNDI
As como con EJB 3.0, tiene que utilizar el prefijo completo JNDI con EJB 2.x. Para mayor
informacin sobre las nuevas reglas del espacio de nombre JNDI y ejemplos del cdigo consulte
Seccin 3.1.8.1, Actualizacin de los nombres de espacios de nombres JNDI de la aplicacin.
Puede encontrar los ejemplos sobre cmo actualizar los espacios de nombres JNDI de
lanzamientos anteriores aqu: Seccin 3.1.8.5, Ejemplos de espacios de nombres JNDI en
lanzamientos anteriores y la manera en que se especifican en JBoss EAP 6.
2. Modifique el descriptor de archivos jboss-web.xm l
Modifique el <jndi-nam e> para cada <ejb-ref> para utilizar el nuevo formato de bsqueda
completamente calificado JNDI.
3. Reemplace el archivo descriptor de implementacin jboss.xm l
El descriptor de implementacin jboss-ejb3.xm l reemplaza el descriptor de implementacin
jboss.xm l para sobreescribir y agregar a las funcionalidades proporcionadas por el descriptor
de implementacinejb-jar.xm l de la edicin empresarial Java (EE). El nuevo archivo es
incompatible con jboss.xm l y el jboss.xm l ahora se ignora en las implementaciones.
4. Inicie el servidor con los perfiles completos
EJB 2.x requiere el perfil completo de Java Enterprise Edition 6. Para iniciar JBoss EAP 6 con el
perfil completo, pase el argumento -c standalone-full.xm l en la lnea de comandos
cuando inicie el servidor.
5. Ya no se soporta el uso de clsters
Ya no se soporta el uso de clsters de beans de entidad EJB 2.x en JBoss EAP 6.
Reportar un error

3.2.12. Cambios en JBoss AOP


3.2.12.1. Actualizacin de aplicaciones que utilizan JBoss 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.
Refactorice la aplicacin
Las configuraciones EJB3 estndares que se realizaron anteriormente en el archivo ejb3interceptors-aop.xm l ahora se configuran en el archivo de configuracin del servidor. Para un
servidor autnomo, este es el archivo standalone/configuration/standalone-full.xm l.
Si est ejecutando su servidor en un dominio administrado, este es el archivo
dom ain/configuration/dom ain.xm l.

77

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Los interceptores AOP del lado del servidor se deben modificar para utilizar el Interceptor 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/.
Use bibliotecas JBoss AOP
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: Djboss.aop.path=PATH_TO_AOP_CONFIG

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.13.1. Migracin de archivadores Seam 2.2 a JBoss EAP 6
Sinopsis
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
lib/ 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.
Procedimiento 3.28. Migracin de archivadores Seam 2.2
1. Actualizacin de la configuracin de la fuente de datos
Algunos ejemplos de Seam 2.2 usan la fuente de datos JDBC predeterminada llamada
java:/Exam pleDS. Esta fuente de datos predeterminada cambi en JBoss EAP 6 a
java:jboss/datasources/Exam pleDS. 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/persistence.xm l para reemplazar el elemento jta-data-source
existente con el nombre JNDI de la fuente de datos de la base de datos:

78

Captulo 3. Migre su aplicacin

<!-- <jta-data-source>java:/ExampleDS</jta-data-source> -->


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

Si prefiere mantener su base de datos existente, puede agregar la definicin de la fuente de


datos al archivo EAP_HOME/standalone/configuration/standalone.xm l.

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" use-ccm="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.
Ejemplo 3.1. Ejemplo de la sintaxis para agregar la definicin de la fuente de datos
$ EAP_HOME/bin/jboss-cli --connect
[standalone@localhost:9999 /] data-source add --name=ExampleDS --jndiname=java:/ExampleDS \
--connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 --drivername=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. Agregar las dependencias requeridas
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
jboss-deploym ent-structure.xm l en el directorio MET A-INF/ del EAR que contiene los
siguientes datos:

79

Plataforma de aplicaciones empresariales JBoss 6.2 Gua 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>

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 aplicacin usa Hibernate 3.x, primero trate de ejecutar la aplicacin usando las
bibliotecas Hibernate 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 ClassNotFoundExceptions o
ClassCastExceptions 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/hibernate/En
tityMode;)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. Copie los archivos dependientes de fuera de los marcos de trabajo u otros lugares
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 /lib y excluir el mdulo
Hibernate en la seccin de implementaciones del MET A-INF/jboss-deploym entstructure.xm l as:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="org.hibernate"/>
</exclusions>
<deployment>
</jboss-deployment-structure>

Tiene que tomar pasos adicionales cuando agrupa Hibernate 3.x con su aplicacin. Para mayor

80

Captulo 3. Migre su aplicacin

informacin, consulte Seccin 3.2.2.2, Configuracin de cambios para las aplicaciones que usan
Hibernate y JPA.
5. Depurar y resolver errores JNDI Seam 2.2
Cuando migra una aplicacin Seam 2.2 puede que vea errores
javax.nam ing.Nam eNotFoundException en el registro como el siguiente:
javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in
context ''

Si no quiere modificar las bsquedas JNDI en el cdigo, puede modificar el archivo


com ponents.xm l de la aplicacin de esta manera:
a. Reemplazar el elemento core-init existente
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. Busque los mensajes INFO de enlace JNDI en el registro del servidor


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

c. Agregar elementos del componente


Para cada mensaje INFO de enlace JNDI en el registro, agregue un elemento com ponent
que coincida en el archivo com ponents.xm l:
<component class="org.jboss.seam.example.booking.AuthenticatorAction"
jndi-name="java:app/jboss-seam-booking.jar/AuthenticatorAction" />

Para mayor informacin sobre cmo depurar y resolver problemas de migracin consulte
Seccin 4.2.1, Depurar 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 .

81

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Resultado
El archivador Seam 2.2 implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error
3.2.13.2. Problemas de migracin del archivador Seam 2.2
Seam 2.2 Drools y Java 7 no son compatibles
Seam 2.2 Drools y Java 7 no son compatibles y fallan con un error que dice:
org.drools.RuntimeDroolsException: value '1.7' is not a valid language level.
Seam 2.2.5 firmado cglib.jar evita que el ejemplo Spring funcione
Cuando el ejemplo Spring se ejecuta usando la cglib.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$$7d6c3d12"'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 cglib.jar as:


zip -d $SEAM_DIR/lib/cglib.jar MET A-INF/JBOSSCOD\*
El ejemplo Seambay falla con la NotLoggedInException
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
org.jboss.seam .webservice.SOAPRequestHandler.handleOutbound tal como se
describe en https://issues.jboss.org/browse/JBPAPP-8376.
El ejemplo Seambay falla con UnsupportedOperationException: no transaction
Este error es generado por cambios en el nombre JNDI del UserTransaction en JBoss EAP 6.
La solucin para este problema es sobreescribir
org.jboss.seam .transaction.T ransaction.getUserT ransaction tal como se
describe en https://issues.jboss.org/browse/JBPAPP-8322.
El ejemplo de las tareas presenta una org.jboss.resteasy.spi.UnhandledException:
Unable to unmarshall request 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 jboss-deploym ent-structure.xm l para excluir
resteasy-jaxrs, resteasy-jettison-provider, y resteasy-jaxb-provider de la implementacin
principal y resteasy-jaxrs, resteasy-jettison-provider, resteasy-jaxb-provider y resteasy-yamlprovider del jboss-seam -tasks.war tal como se describe en
https://issues.jboss.org/browse/JBPAPP-8315. Luego es necesario includir las bibliotecas
RESTEasy agrupadas con Seam 2.2 en el EAR.

82

Captulo 3. Migre su aplicacin

Punto muerto entre org.jboss.seam .core.SynchronizationInterceptor y el bloqueo


EJB de la instancia del componente con estado durante una peticin 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 ConcurrentAccessException cuando esta situacin tenga lugar.
El ejemplo de la orden de creacin del Dvdstore falla con una
javax.ejb.EJBT ransactionRolledbackException
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 transactional en
las clases CheckoutAction y ShowOrdersAction y usar la operacin de agrupamiento del
administrador de entidades en los mtodos cancelOrder y detailOrder.
El proveedor JBoss Cache Seam Cache no se puede utilizar en JBoss 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

.
Problema del auto escaneo de Hibernate 3.3.x para las entidades JPA con JBoss EAP 6
La solucin para este problema es listar todas las clases de entidades en el archivo
persistence.xml manualmente. Por ejemplo:

83

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

<?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</jta-data-source>
<properties>
<property name="jboss.as.jpa.providerModule" value="hibernate3bundled" />
</properties>
<class>com.acme.Foo</class>
<class>com.acme.Bar</class>
</persistence-unit>
</persistence>

El llamar a componentes EJB Seam desde hilos que no son EJB genera una
javax.naming.NameNotFoundException
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 JNDI 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:global, el cual es compartido por todas las aplicaciones implementadas en una
instancia del servidor de aplicaciones.
Si recibe una javax.nam ing.Nam eNotFoundException cuando trata de llamar a los
componentes EJB Seam desde mtodos asincrnicos Quartz tiene que modificar el archivo
com ponents.xm l para utilizar el nombre JNDI 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 JNDI consulte el siguiente tema: Seccin 3.1.8.1,
Actualizacin de los nombres de espacios de nombres JNDI 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
asynchronous methods en las 2.2.0 Release Notes para JBoss Web Framework Kit en el portal
del cliente en https://access.redhat.com/site/documentation/JBoss_Web_Framework_Kit/.

Reportar un error

3.2.14. Migracin de aplicaciones Spring


3.2.14.1. Migracin de aplicaciones Spring
Puede encontrar informacin sobre la migracin de aplicaciones Spring en la documentacin JBoss Web
Framework Kit. Puede descargar esta documentacin del portal del cliente en https://access.redhat.com.
Haga clic en Knowledge Product Documentation, busque JBoss Enterprise Middleware y luego
haga clic en el enlace JBoss Web Framework Kit.

84

Captulo 3. Migre su aplicacin

Reportar un error

3.2.15. Otros cambios que afectan la migracin


3.2.15.1. Familiarcese con otros cambios que puedan afectar su migracin
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.15.2. Cambio del nombre del pug-in de Maven
El jboss-m aven-plugin no se ha actualizado y no funciona en JBoss EAP 6. Ahora tiene que utilizar
org.jboss.as.plugins:jboss-as-m aven-plugin para implementar en el directorio correcto.
Reportar un error
3.2.15.3. Modificacin de aplicaciones clientes
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
jboss-client.jar y se encuentra en el directorio EAP_HOME/bin/client/. Reemplaza la
EAP_HOME/client/jbossall-client.jar y contiene todas las dependencias requeridas para
conectarse a JBoss EAP 6 desde un cliente remoto.
Reportar un error

85

Plataforma de aplicaciones empresariales JBoss 6.2 Gua 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.
Herramientas
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.
Consejos para la depuracin
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, Depurar y resolver
problemas de migracin.
Migraciones de ejemplo
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. Familiarizacin con las herramientas que le ayudan con la migracin


Resumen
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.
Tattletale
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
Herramienta de migracin IronJacamar
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

86

Captulo 4. Herramientas y consejos

4.1.3. Uso de Tattletale para encontrar dependencias de aplicaciones


Resumen
Debido a los cambios en la carga modular de clases en JBoss EAP 6, puede que encuentre rastros
ClassNotFoundException o ClassCastException 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 EAP 6" de Tattletale se puede utilizar para identificar de manera automtica y generar
nombres de mdulos dependientes para incluir el archivo jboss-deploym ent-structure.xm l de
su aplicacin.
Procedimiento 4.1. Instale y ejecute Tattletale para buscar dependencias de aplicaciones
1. Seccin 4.1.4, Descarga 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 instalacin de Tattletale


Procedimiento 4.2.
1. Descargue Tattletale versin 1.2.0.Beta2 o posteriores de
http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale.
2. Descomprima el archivo en el directorio que escoja.
3. Modifique el archivo T AT T LET ALE_HOME/jboss-tattletale.properties haciendo lo
siguiente:
a. Agregue ee6 y as7 a la propiedad profiles.
profiles=java5, java6, ee6, as7

b. Borre el comentario de las propiedades scan y reports.

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.

87

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Reportar un error

4.1.5. Creacin y revisin del reporte Tattletale


Procedimiento 4.3.
1. Cree el reporte Tattletale emitiendo el comando: java -jar
TATTLETALE_HOME/tattletale.jarAPPLICATION_ARCHIVEOUTPUT_DIRECTORY
Por ejemplo: java -jar tattletale-1.2.0.Beta2/tattletale.jar
applications/jboss-seam -booking.ear output-results/
2. En un navegador, abra el archivo OUTPUT_DIRECTORY/index.htm l y haga clic en "JBoss EAP
6" 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 jboss-deploym ent-structure.xm l 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.

Nota
Tattletale es una herramienta de terceros y no se soporta como parte de 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.6. Uso de la herramienta IronJacamar para migrar configuraciones del


adapatador de recursos y la fuente de datos
Resumen
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 * -ds.xm l. 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.
Procedimiento 4.4. Instalacin y ejecucin de la herramienta de migracin IronJacamar
1. Seccin 4.1.7, Descarga 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

88

Captulo 4. Herramientas y consejos

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.jboss.org/ironjacamar. 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 instalacin de la herramienta de migracin IronJacamar


Nota
La herramienta de migracin solo est disponible en la versin IronJacamar 1.1 o posteriores.
Procedimiento 4.5.
1. Descargue la distribucin de IronJacamar 1.1 o posteriores de aqu:
http://www.jboss.org/ironjacamar/downloads/
2. Descomprima 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/doc/as/converter.sh
El archivo de agrupacin Windows se encuentra aqu:
IRONJACAMAR_HOME/doc/as/converter.bat

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.jboss.org/ironjacamar. 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.8. Use la herramienta de migracin IronJacamar para convertir un archivo de


configuracin de la fuente de datos
Procedimiento 4.6.
1. Abra una lnea de comandos y navegue al directorio IRONJACAMAR_HOME/docs/as/.
2. Ejecute el script convertidor con el siguiente comando:
Para Linux: ./converter.sh -ds SOURCE_FILE TARGET_FILE
Para Microsoft Windows: ./converter.bat -ds 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 jboss-seam booking-ds.xm l en el directorio actual escribira:
Para Linux: ./converter.sh -ds jboss-seam -booking-ds.xm lnew-datasource-

89

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

config.xm l
Para Microsoft Windows: ./converter.bat -ds jboss-seam -booking-ds.xm lnewdatasource-config.xm l
Note que el parmetro para la conversin de la fuente de datos es -ds.
3. Copie el elemento <datasource> del archivo de destino y pguelo en el archivo de
configuracin del servidor bajo el elemento <subsystem
xm lns="urn:jboss:dom ain:datasources:1.1"><datasources>.

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/dom ain/configuration/dom ain.xm l.
Si est ejecutando como un servidor autnomo, copie el XML en el archivo
EAP_HOME/standalone/configuration/standalone.xm l.
4. Modifique el XML generado en el nuevo archivo de configuracin.
Este es un ejemplo del archivo de configuracin de la fuente de datos jboss-seam -bookingds.xm l 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 <driver-class>. La manera preferida de definir la clase
controladora en JBoss EAP 6 es utilizar un elemento <driver>. Este es el XML que resulta en el
archivo de configuracin de JBoss EAP 6 con modificaciones para borrar el comentario del
elemento <driver-class> y agregar el elemento correspondiente <driver>:

90

Captulo 4. Herramientas y consejos

<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>
-->
<transaction-isolation>TRANSACTION_NONE</transaction-isolation>
<pool>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
<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</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>

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.jboss.org/ironjacamar. 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.9. Uso de la herramienta de migracin IronJacamar para convertir un archivo


de configuracin del adaptador de recursos
Procedimiento 4.7.
1. Abra una lnea de comandos y navegue al directorio IRONJACAMAR_HOME/docs/as/.

91

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

2. Ejecute el script convertidor con el siguiente comando:


Para Linux: ./converter.sh -ra SOURCE_FILE TARGET_FILE
Para Microsoft Windows: ./converter.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
m ttestadapter-ds.xm l en el directorio actual escribira:
Para Linux: ./converter.sh -ra m ttestadapter-ds.xm lnew-adapterconfig.xm l
Para Microsoft Windows: ./converter.bat -ra m ttestadapter-ds.xm lnewadapter-config.xm l
Note que el parmetro para la conversin del adaptador de recursos es -ra.
3. Copie el elemento <resource-adapters> del archivo de destino y pguelo en el archivo de
configuracin del servidor bajo el elemento <subsystem
xm lns="urn:jboss:dom ain:resource-adapters: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/dom ain/configuration/dom ain.xm l.
Si est ejecutando como un servidor autnomo, copie el XML en el archivo
EAP_HOME/standalone/configuration/standalone.xm l.
4. Modifique el XML generado en el nuevo archivo de configuracin.
Este es un ejemplo del archivo de configuracin del adaptador de recursos m ttestadapterds.xm l de JBoss EAP 5.x TestSuite:

92

Captulo 4. Herramientas y consejos

<?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>
<connection-definition>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</config-property>
<config-property name="sleepInStop" type="long">200</config-property>
</tx-connection-factory>
<tx-connection-factory>
<jndi-name>JBossTestCF2</jndi-name>
<xa-transaction/>
<rar-name>jbosstestadapter.rar</rar-name>
<connection-definition>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</config-property>
<config-property name="sleepInStop" type="long">200</config-property>
</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>
<connection-definition>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</config-property>

93

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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


</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 <classnam e>:

94

Captulo 4. Herramientas y consejos

<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 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
class-name="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</configproperty>
<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
class-name="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</configproperty>
<config-property name="DoubleProperty">5.5</config-property>

95

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

<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" pool-name="JBossTestCFByTx"
use-ccm="true" use-java-context="true"> -->
<connection-definition
class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory"
enabled="true"
jndi-name="java:jboss/JBossTestCFByTx" pool-name="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</configproperty>
<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-adapters>
</subsystem>

96

Captulo 4. Herramientas y consejos

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.jboss.org/ironjacamar. Para ver la documentacin actualizada sobre cmo instalar y
usar esta herramienta vaya a http://www.ironjacamar.org/documentation.html.
Reportar un error

4.2. Problemas de migracin de depuracin


4.2.1. Depurar y resolver problemas de migracin
Debido a la carga de clases, las reglas de nombrado JNDI 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, Depurar y resolver ClassNotFoundExceptions y NoClassDefFoundErrors
Seccin 4.2.5, Depurar y resolver ClassCastExceptions
Seccin 4.2.6, Depurar y resolver DuplicateServiceExceptions
Seccin 4.2.7, Depurar y resolver errores de la pgina de depuracin de JBoss Seam
Reportar un error

4.2.2. Depurar y resolver ClassNotFoundExceptions y NoClassDefFoundErrors


Resumen
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.
Procedimiento 4.8.
1. Primero intente Seccin 4.2.3, Bsqueda de la dependencia del mdulo JBoss
2. Si no hay un mdulo para la clase que falta, 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 ClassNotFoundException mirando en el directorio
EAP_HOME/m odules/system /layers/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:

97

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log


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:


Procedimiento 4.9.
1. Primero determine si hay un mdulo obvio para la clase.
a. Navegue al directorio EAP_HOME/m odules/system /layers/base/ y busque la clase
que coincida con la ruta del mdulo en la ClassNotFoundException.
Encuentre la ruta del mdulo org/apache/com m ons/logging/.
b. Abra el archivo
EAP_HOME/m odules/system /layers/base/org/apache/com m ons/logging/m ain
/m odule.xm l 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 ClassNotFoundException en el reporte Tattletale.
b. Busque el mdulo que contiene la JAR en el directorio EAP_HOME/m odules y busque el
nombre del mdulo tal como en el paso anterior.
Reportar un error

4.2.4. Buscar la JAR en la instalacin anterior


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 lib/ de su servidor anterior.
Por ejemplo, si ve este rastro ClassNotFoundException 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:
grep 'org.hibernate.validator.ClassValidator' `find . \-nam e '* .jar'`
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 lib/ 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 Get

98

Captulo 4. Herramientas y consejos

Started Developing Applications en la Development Guide 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 ClassCastExceptions


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.
Procedimiento 4.10.
1. Busque la aplicacin para encontrar todas las JAR(s) que contienen la clase nombrada por la
ClassCastException. Si hay un mdulo definido para la clase, encuentre y borre las JAR(s)
duplicadas del WAR o EAR de la aplicacin.
2. Busqe el mdulo JBoss que contiene la clase y defina explcitamente la dependencia en el archivo
MANIFEST .MF o en el archivo jboss-deploym ent-structure.xm l. 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 ClassCastException 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 ClassCastException para el registro, por ejemplo:
logger.info("Class loader for CustomClass1: " +
com.example1.CustomClass1.getClass().getClassLoader().toString());
logger.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.
Reportar un error

4.2.6. Depurar y resolver DuplicateServiceExceptions


Si obtiene una DuplicateServiceException 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

99

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Renombre el archivo JAR con un nombre diferente del de la WAR as que los contextos web y WAR
son nicos.
Proporcione un elemento <context-root> en el archivo jboss-web.xm l.
Proporcione un elemento <context-root> en el archivo jboss-webservices.xm l.
Personalice el elemento <context-root> para la WAR en el archivo application.xm l.
Reportar un error

4.2.7. Depurar y resolver errores de la pgina de depuracin de JBoss Seam


Despus de que migre e implemente exitosamente su aplicacin puede encontrar un error en tiempo de
ejecucin que le redireccione a la pgina "JBoss Seam Debug". 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.

Figura 4.1. Pgina de depuracin JBoss Seam

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".
Procedimiento 4.11.
1. Amplie la seccin Com ponent en la pgina y busque el componente
org.jboss.seam .caughtException.
2. La causa y el rastro de la pila debe apuntarle a las dependencias que faltan.

100

Captulo 4. Herramientas y consejos

Figura 4.2. Informacin del componente org.jboss.seam .caughtException

3. Use la tcnica descrita en Seccin 4.2.2, Depurar y resolver ClassNotFoundExceptions y


NoClassDefFoundErrors para resolver dependencias de mdulos.
En el ejemplo anterior la solucin ms simple es agregar org.slf4 j al MANIFEST .MF
Manifest-Version: 1.0
Dependencies: org.slf4j

Otra opcin es agregar una dependencia para el mdulo al archivo jboss-deploym entstructure.xm l:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.slf4j" />
</dependencies>
</deployment>
</jboss-deployment-structure>

Reportar un error

101

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

4.3. Revise la migracin de las aplicaciones de ejemplo


4.3.1. Revise la migracin de las aplicaciones de ejemplo
Sinopsis
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


Resumen
La siguiente lista de tareas resume los cambios necesarios para migrar exitosamente la aplicacin de
ejemplo Seam 2.2 JPA a JBoss EAP 6. Esta aplicacin de ejemplo se puede encontrar en la distribucin
de JBoss EAP 5.1 bajo EAP5.1_HOME/jboss-eap-5.1/seam /exam ples/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.
Procedimiento 4.12. Migracin del ejemplo Seam 2.2 JPA
1. Borre el archivo jboss-web.xml
Borre el archivo jboss-web.xm l del directorio jboss-seam -jpa.war/WEB-INF/. La carga de
clases definida en el jboss-web.xm l ahora es el comportamiento predeterminado.
2. Modifique el archivo jboss-seam -jpa.jar/MET A-INF/persistence.xm l as:
a. Remueva o borre el comentario de la propiedad hibernate.cache.provider_class
en el archivo jboss-seam -jpa.war/WEB-INF/classes/MET AINF/persistence.xm l:
<!-- <property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider"/> -->

b. Agregue la propiedad del mdulo proveedor al archivo jboss-seam booking.jar/MET A-INF/persistence.xm l:

102

Captulo 4. Herramientas y consejos

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


/>

c. Cambie la propiedad jta-data-source para utilizar el nombre JNDI de la fuente de datos


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

3. Agregar dependencias Seam 2.2


Copie las siguientes JARs de la biblioteca de la distribucin Seam 2.2, SEAM_HOME/lib/, en el
directorio jboss-seam -jpa.war/WEB-INF/lib/:
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. Cree un archivo jboss-deployment-structure para agregar las dependencias que faltan
Cree un archivo jboss-deploym ent-structure.xm l en la carpeta jboss-seam jpa.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" />
<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>

Resultado:
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


Resumen
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:

103

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

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 JNDI para utilizar la nueva sintaxis porttil JNDI 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.
Procedimiento 4.13. Migracin del ejemplo de reservas Seam 2.2
1. Cree el archivo jboss-deploym ent-structure.xm l
Cree un nuevo archivo llamado jboss-deploym ent-structure.xm l en el jboss-seam booking.ear/MET A-INF/ y agregue el siguiente contenido:
<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"/>
<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. Modifique el archivo jboss-seam -booking.jar/MET A-INF/persistence.xm l as:

104

Captulo 4. Herramientas y consejos

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 jboss-seam booking.jar/MET A-INF/persistence.xm l:


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

c. Cambie la propiedad jta-data-source para utilizar el nombre JNDI de la fuente de datos


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

3. Copie las JARs de la distribucin Seam 2.2


Copie las siguientes JARs de la distribucin Seam 2.2 EAP5.x_HOME/jbosseap5.x/seam /lib/ en el directorio jboss-seam -booking.ear/lib.
antlr.jar
slf4j-api.jar
slf4j-log4j12.jar
hibernate-core.jar
hibernate-entitymanager.jar
hibernate-validator.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar

4. Cambie los nombres de bsqueda JNDI


Cambie las cadenas de bsqueda JNDI en el archivo jboss-seam -booking.war/WEBINF/com ponents.xm l. Debido a las nuevas reglas porttiles JNDI, JBoss EAP 6 ahora enlaza
EJBs usando reglas de sintaxis porttiles JNDI y no puede utilizar el jndiPattern que se utiliz en
JBoss EAP 5. As se deben cambiar las cadenas de bsqueda JNDI EJB de la aplicacin para
JBoss EAP 6:
java:global/jboss-seam-booking/jboss-seambooking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching
java:app/jboss-seambooking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching
java:module/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching
java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction
java:app/jboss-seam-booking/HotelSearchingAction
java:module/HotelSearchingAction

Las cadenas de bsqueda JNDI para las EJBs del marco de trabajo Seam 2.2 se debn cambiar
as:

105

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

java:global/jboss-seam-booking/jbossseam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations
java:app/jbossseam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations
java:module/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizat
ions
java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations
java:app/jboss-seam/EjbSynchronizations
java:module/EjbSynchronizations

Puede tomar cualquiera de los siguientes enfoques:


a. Agregar elementos del componente
Puede agregar un jndi-nam e para todo EJB al WEB-INF/com ponents.xm l:
<component class="org.jboss.seam.transaction.EjbSynchronizations"
jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
<component class="org.jboss.seam.async.TimerServiceDispatcher" jndiname="java:app/jboss-seam/TimerServiceDispatcher"/>
<component
class="org.jboss.seam.example.booking.AuthenticatorAction" jndiname="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"
jndi-name="java:app/jboss-seam-booking/RegisterAction" />
<component
class="org.jboss.seam.example.booking.HotelSearchingAction" jndiname="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" jndiname="java:app/jboss-seam-booking/ChangePasswordAction" />

b. Puede modificar el cdigo agregando la anotacin @ JNDINam e(value="") especificando


la ruta JNDI. 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-seam-booking/AuthenticatorAction")
public class AuthenticatorAction
implements Authenticator
{
...
}

Resultado:
La aplicacin de reservas Seam 2.2 implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error

106

Captulo 4. Herramientas y consejos

4.3.4. Migracin del archivador de reservas de Seam 2.2 a JBoss EAP 6:


instrucciones 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.1 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.
Para este ejemplo, la EAR de la aplicacin se implementa en el directorio
EAP6_HOME/standalone/deploym ents 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.
Procedimiento 4.14. Migracin de la aplicacin
1. Seccin 4.3.5, Construccin e implementacin de JBoss EAP versin 5.1 de la aplicacin de
reservas Seam 2.2
2. Seccin 4.3.6, Depuracin y resolucin de errores y excepciones de implementacin del
archivador de reservas Seam 2.2
3. Seccin 4.3.7, Depuracin 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 con demo/demo y podr ver la pgina de bienvenida
de las reservas.
Revisin del resumen de los cambios
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. Construccin e implementacin de JBoss EAP versin 5.1 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.1, extraer el archivo y copiarlo a la carpeta de implementacin de JBoss EAP 6.
Procedimiento 4.15. Construir e implementar el EAR
1. Construir el EAR:

107

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

$ cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking
$ ANT_HOME/ant explode

2. Copie el EAR al directorio de implementaciones EAP6_HOME:


$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seambooking.ear EAP6_HOME/standalone/deployments/
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seambooking.war EAP6_HOME/standalone/deployments/jboss-seam.ear
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seambooking.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 jbossseam-booking.ear in deployment directory.
To trigger deployment create a file called jboss-seambooking.ear.dodeploy

4. Cree un archivo vaco con el nombre jboss-seam -booking.ear.dodeploy y cpielo en el


directorio EAP6_HOME/standalone/deploym ents. 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
deployment of "jboss-seam-booking.ear"
INFO [org.jboss.as.server.deployment] (MSC
deployment of "jboss-seam-booking.jar"
INFO [org.jboss.as.server.deployment] (MSC
deployment of "jboss-seam.jar"
INFO [org.jboss.as.server.deployment] (MSC
deployment of "jboss-seam-booking.war"

service thread 1-1) Starting


service thread 1-3) Starting
service thread 1-6) Starting
service thread 1-2) Starting

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, Depuracin 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 implementacin del


archivador de reservas Seam 2.2
En el paso anterior, Seccin 4.3.5, Construccin e implementacin de JBoss EAP versin 5.1 de la
aplicacin de reservas Seam 2.2, construy la aplicacin de reservas Seam 2.2 de JBoss EAP 5.1 y la
implement en la carpeta de implementacin de JBoss EAP 6. En este paso, depura y resuelve cada
cada error de implementacin que encuentra.

108

Captulo 4. Herramientas 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.
Procedimiento 4.16. Depuracin y resolucin de excepciones y errores de implementacin
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."jboss-seambooking.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-seam-booking.war"
of deployment "jboss-seam-booking.ear"
(.. additional logs removed ...)
Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException from
\[Module "deployment.jboss-seam-booking.ear:main" from Service Module
Loader\]
at
org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)

Lo que significa:
La ClassNotFoundException indica que falta una dependencia. En este caso, no puede encontrar
la clase javax.faces.FacesException y necesita agregar la dependencia de manera
explcita.
Para resolverlo:
Busque el nombre del mdulo para esa clase en el directorio
EAP6_HOME/m odules/system /layers/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 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 jboss-deploym ent-structure.xm l en el directorio MET A-INF/ del EAR que
contiene los siguientes datos:

109

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure: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 deploym ent 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/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy 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."jboss-seam-booking.ear".INSTALL:
org.jboss.msc.service.StartException in service jboss.deployment.unit."jbossseam-booking.ear".INSTALL:
Failed to process phase INSTALL of deployment "jboss-seam-booking.ear"
(.. additional logs removed ...)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log
from [Module "deployment.jboss-seam-booking.ear.jboss-seam-booking.war:main"
from Service Module Loader]

Lo que significa:
La ClassNotFoundException indica que falta una dependencia. En este caso, no puede
encontrar la clase org.apache.com m ons.logging.Log y necesita agregar la dependencia
de manera explcita.
Para resolverlo:
Busque el nombre del mdulo para esa clase en el directorio
EAP6_HOME/m odules/system /layers/base/ buscando una ruta que coincida con la clase
que falta. En este caso, encuentra un mdulo que coincide con la ruta
org/apache/com m ons/logging/. El nombre del mdulo es org.apache.commons.logging.
Modifique el archivo jboss-deploym ent-structure.xm l para agregar la dependencia del
mdulo a la seccin de implementacin del archivo.

110

Captulo 4. Herramientas y consejos

<module name="org.apache.commons.logging" export="true"/>

El jboss-deploym ent-structure.xm l ahora se debe ver as:


<jboss-deployment-structure xmlns="urn:jboss:deployment-structure: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/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy en el mismo directorio.
3. Emita - java.lang.ClassNotFoundException: org.dom4j.DocumentException
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-seam-booking.ear.jboss-seam.jar:main" from Service
Module Loader]

Lo que significa:
La ClassNotFoundException indica que falta una dependencia. En este caso, no puede
encontrar la clase org.dom 4 j.Docum entException.
Para resolverlo:
Busque el nombre del mdulo en el directorio EAP6_HOME/m odules/system /layers/base/
buscando la org/dom 4 j/Docum entException. El nombre del mdulo es org.dom4j.
Modifique el archivo jboss-deploym ent-structure.xm l para agregar la dependencia del
mdulo a la seccin de implementacin del archivo.
<module name="org.dom4j" export="true"/>

111

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

El archivo jboss-deploym ent-structure.xm l ahora se debe ver as:


<jboss-deployment-structure xmlns="urn:jboss:deployment-structure: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/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy 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-seambooking.ear.jboss-seam.jar:main" from Service Module Loader]

Lo que significa:
La ClassNotFoundException indica que falta una dependencia. En este caso, no puede
encontrar la clase org.hibernate.validator.InvalidValue.
Para resolverlo:
Hay un mdulo org.hibernate.validator, pero la JAR no contiene la clase
org.hibernate.validator.InvalidValue 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.1. 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:

112

Captulo 4. Herramientas y consejos

$ Binary file ./hibernate-validator.jar matches


$ Binary file ./test/hibernate-all.jar matches

En este caso, copie la hibernate-validator.jar al directorio jboss-seam booking.ear/lib/:


$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib

Vuelva a implementar la aplicacin borrando el archivo


EAP6_HOME/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy 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.verifyFactoriesExist(Fac
toryConfigProcessor.java:296) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09jbossorg-4]
(... additional logs removed ...)
Caused by: javax.faces.FacesException:
org.jboss.seam.jsf.SeamApplicationFactory
at
javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:606)
[jsf-api-1.2_13.jar:1.2_13-b01-FCS]
(... additional logs removed ...)
at
com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(Fac
toryConfigProcessor.java:294) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09jbossorg-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.java:604)
[jsf-api-1.2_13.jar:1.2_13-b01-FCS]
... 16 more

Lo que significa:
La com .sun.faces.config.ConfigurationException y la
java.lang.InstantiationException indican un problema de dependencias. En este caso,
la causa no es tan obvia.
Para resolverlo:
Necesita encontrar el mdulo que contiene las clases com .sun.faces. Aunque no hay un
mdulo com .sun.faces, hay dos mdulos com .sun.jsf-im pl. Una revisin rpida de la
jsf-im pl-1.2_13.jar en el directorio 1.2 muestra que contiene las clases com .sun.faces.
Tal como lo hizo con javax.faces.FacesExceptionClassNotFoundException, desea
utilizar la versin JSF 1.2 y no la versin JSF 2.0 en main, as que necesita especificar una y

113

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

excluir la otra. Necesita modificar el jboss-deploym ent-structure.xm l 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: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"/>
<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


EAP6_HOME/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy 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.jbossseam-booking.ear:main" from Service Module Loader]
(... additional logs removed ...)
Caused by: java.lang.ClassNotFoundException:
org.apache.commons.collections.ArrayStack from [Module "deployment.jbossseam-booking.ear:main" from Service Module Loader]

Lo que significa:
La ClassNotFoundException indica que falta una dependencia. En este caso, no puede
encontrar la clase org.apache.com m ons.collections.ArrayStack.
Para resolverlo:
Busque el nombre del mdulo en el directorio EAP6_HOME/m odules/system /layers/base/
buscando la ruta org/apache/com m ons/collections. El nombre del mdulo es
org.apache.commons.collections. Modifique el jboss-deploym ent-structure.xm l para
agregar la dependencia del mdulo a la seccin de implementacin del archivo.
<module name="org.apache.commons.collections" export="true"/>

114

Captulo 4. Herramientas y consejos

El archivo jboss-deploym ent-structure.xm l ahora se debe ver as:


<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"/>
<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>

Vuelva a implementar la aplicacin borrando el archivo


EAP6_HOME/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy 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.booking.Authent
icatorAction/em\" ]","jboss.deployment.subunit.\"jboss-seambooking.ear\".\"jboss-seam-booking.jar\".component.HotelSearchingAction.START
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.booking.HotelS
earchingAction/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.booking.BookingLi
stAction/em\" ]","jboss.persistenceunit.\"jboss-seam-booking.ear/jboss-seambooking.jar#bookingDatabase\" missing [
jboss.naming.context.java.bookingDatasource ]"]}}}

Lo que significa:
Cuando obtenga un error Services with missing/unavailable dependencies, vea el texto dentro
de los parntesis despus de missing. En este caso puede ver:

115

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.Authent
icatorAction/em\" ]

El /em indica un problema de fuente de datos y gestor de entidades.


Para resolverlo:
En JBoss EAP 6, la configuracin de la fuente de datos cambi y es necesario definirla en el
archivo EAP6_HOME/standalone/configuration/standalone.xm l. Ya que JBoss EAP 6
se enva junto con una base de datos de ejemplo que ya est definida en el archivo
standalone.xm l, modifique el archivo persistence.xm l para utilizar esa base de datos de
ejemplo en esta aplicacin. Al ver en el archivo standalone.xm l puede ver que el jndi-nam e
para la base de datos de ejemplo es java:jboss/datasources/Exam pleDS. Modifique el
archivo jboss-seam -booking.jar/MET A-INF/persistence.xm l para comentar el
elemento existente jta-data-source 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/standalone/deploym ents/jboss-seam -booking.ear.failed y creando un
archivo en blanco jboss-seam -booking.ear.dodeploy 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, Depuracin 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 tiempo de ejecucin del


archivador de reservas Seam 2.2
En el paso anterior, Seccin 4.3.6, Depuracin 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.
Procedimiento 4.17. Depuracin y resolucin de excepciones y errores en tiempo de ejecucin

116

Captulo 4. Herramientas y consejos

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 ''
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-8080-1)
swallowing exception: java.lang.IllegalStateException: Could not start
transaction
at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:598)
[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) [jbossseam.jar:]
(... log messages removed ...)
Caused by: javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not
found in context ''
at
org.jboss.as.naming.util.NamingUtils.nameNotFoundException(NamingUtils.java:109
)
(... log messages removed ...)

Lo que significa:
Una Nam eNotFoundException indica un problema de nombrado JNDI. Las reglas de
nombrado JNDI han cambiado en JBoss EAP 6 as que necesita modificar los nombres de
bsqueda para seguir las nuevas reglas.
Para resolverlo:
Para depurar esto, busque en la parte anterior del rastro del registro del servidor para ver qu
enlace JNDI se utiliz. Al mirar en el registro del servidor puede ver esto:
15:01:16,138 INFO
[org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcesso
r] (MSC service thread 1-1) JNDI bindings for session bean named
RegisterAction in deployment unit subdeployment "jboss-seam-booking.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-seam-booking.jar/RegisterAction
java:app/jboss-seam-booking.jar/RegisterAction
java:module/RegisterAction
[JNDI bindings continue ...]

Hay un total de ocho enlaces INFO JNDI listados en el registro, uno para cada bean de sesin:
RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction,
ChangePasswordAction, HotelSearchingAction, EjbSynchronizations y TimerServiceDispatcher.
Necesita modificar el archivo lib/com ponents.xm l del WAR para usar los nuevos enlaces
JNDI. En el registro, note que todos los enlaces EJB JNDI empienzan por "java:app/jboss-seam-

117

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

booking.jar" Reemplace el elemento core:init 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 JNDI EjbSynchronizations y TimerServiceDispatcher.


Agregue los siguientes elementos de componente al archivo:
<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"/>

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/core2.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/jboss-seam/TimerServiceDispatcher"/>
</components>

Vuelva a implementar la aplicacin borrando el archivo standalone/deploym ents/jbossseam -booking.ear.failed y creando un archivo en blanco jboss-seam booking.ear.dodeploy en el mismo directorio.
2. Problema - la aplicacin se implementa y ejecuta sin errores. Cuando accede la URL

118

Captulo 4. Herramientas y consejos

http://localhost:8080/seam-booking/ en un navegador y trata de iniciar sesin, falla y presenta el


mensaje "Inicio de sesin fallido. Transaccin fallida". Debe 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.jbossseam-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.jbossseam-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-seambooking.ear.jboss-seam.jar:main" from Service Module Loader]
...

Lo que significa:
La ClassNotFoundException indica que falta una biblioteca Hibernate. En este caso es la
hibernate-core.jar.
Para resolverlo:
Copie la JAR hibernate-core.jar del directorio EAP5_HOME/seam /lib/ al directorio
jboss-seam -booking.ear/lib.
Vuelva a implementar la aplicacin borrando el archivo standalone/deploym ents/jbossseam -booking.ear.failed y creando un archivo en blanco jboss-seam booking.ear.dodeploy 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 jboss-seam -booking.ear/jboss-seam booking.war/WEB-INF/lib/jboss-seam -debug.jar ya que enmascara el error
verdadero. En este momento debe ver el siguiente error:
java.lang.NoClassDefFoundError:
org/hibernate/annotations/common/reflection/ReflectionManager

Lo que significa:
La NoClassDefFoundError indica que falta una biblioteca Hibernate.
Para resolverlo:
Copie las JARs hibernate-annotations.jar y hibernate-com m onsannotations.jar del directorio EAP5_HOME/seam /lib/ al directorio jboss-seam booking.ear/lib.

119

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

Vuelva a implementar la aplicacin borrando el archivo standalone/deploym ents/jbossseam -booking.ear.failed y creando un archivo en blanco jboss-seam booking.ear.dodeploy 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 volver 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 realizados 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 jboss-deploym ent-structure.xm l en el directorio MET A-INF/ del EAR.
Agreg <dependencies> y <exclusions> para resolver ClassNotFoundExceptions. Este
archivo contiene los siguientes datos:

120

Captulo 4. Herramientas y consejos

<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"/>
<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/jboss-eap-5.1/seam /lib/ al directorio


jboss-seam -booking.ear/lib/ para resolver ClassNotFoundExceptions:
hibernate-core.jar
hibernate-validator.jar
3. Modific el archivo jboss-seam -booking.jar/MET A-INF/persistence.xm l as:
a. Cambi el elemento jta-data-source para usar la base de datos de ejemplo que se
enva junto con JBoss EAP 6:
<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>

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 lib/com ponents.xm l del WAR para utilizar los nuevos enlaces JNDI
a. Reemplaz el elemento existente core:init 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 JNDI "EjbSynchronizations" y


"TimerServiceDispatcher"

121

Plataforma de aplicaciones empresariales JBoss 6.2 Gua de migracin

<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

122

Historial de revisiones

Historial de revisiones
Revisin 1.0.0-1
Fri Apr 11 2014
Built from Content Specification: 14877, Revision: 551330

CS Builder Robot

123

S-ar putea să vă placă și