Documente Academic
Documente Profesional
Documente Cultură
Sande Gilda
Misty Stanley-Jones
Darrin Mison
Tom Wells
David Ryan
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
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
...........
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.
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.
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"));
}
}
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.
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.
Describa el problema:
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
Importante
Antes de realizar modificaciones a su aplicacin asegrese de crear una copia de seguridad.
Reportar un error
10
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.
11
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
12
13
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
14
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
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<ejbVersion>3.0</ejbVersion>
</configuration>
</plugin>
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
<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");
}
17
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
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
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
20
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
21
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
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);
}
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
23
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
24
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
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
26
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
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/
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>
28
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
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
<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
31
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>
32
Descripcin
java:global
java:module
java:app
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
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);
}
34
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
OrderManagerApp/ProductMan
agerBean/local
java:app/OrderManagerEJB/Pro
ductManagerBean!services.ejb.
ProductManager
OrderManagerApp/ProductMan
agerBean/local
java:global/OrderManagerApp/O
rderManagerEJB/ProductManag
erBean!services.ejb.ProductMan
ager
java:comp/UserTransaction
java:comp/UserTransaction
java:comp/UserTransaction
java:jboss/UserTransaction
java:/TransactionManager
java:jboss/TransactionManager
java:/TransactionSynchronizatio
nRegistry
java:jboss/TransactionSynchroni
zationRegistry
Reportar un error
35
36
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
37
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>
38
Valor
predeterminado
Propsito
hibernate.id.
new_generator
_m appings
true
hibernate.tra
nsaction.jta.
platform
Instancia de la
interfaz
org.hibernate
.service.jta.
platform .spi.
JtaPlatform
hibernate.ejb
.resource_sca
nner
Instancia de la
interaz
org.hibernate
.ejb.packagin
g.Scanner
hibernate.tra
nsaction.m ana
ger_lookup_cl
ass
hibernate.ses
sion_factory_
nam e
QUALIFIED_PERS
ISTENCE_UNIT_N
AME
hibernate.ses
sion_factory_
nam e_is_jndi
false
hibernate.ejb
.entitym anage
r_factory_nam
e
QUALIFIED_PERS
ISTENCE_UNIT_N
AME
39
Valor
predeterminado
Propsito
jboss.as.jpa.
providerModul
e
org.hibernate
jboss.as.jpa.
adapterModule
org.jboss.as.
jpa.hibernate
:4
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
41
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
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
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"/>
43
44
<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"/>
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>
Tambin tiene que agregar las siguientes dependencias al archivo MANIFEST .MF:
45
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
hibernate.cache.use_query_cache
hibernate.cache.use_second_level_cac
he
hibernate.cache.query_cache_factory
hibernate.cache.region_prefix
hibernate.cache.use_structured_entri
es
hibernate.cache.default_cache_concur
rency_strategy
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
47
Reportar un error
48
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
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
Descripcin
context-root
config-name
config-file
propiedad
port-component
webservice-description
Reportar un error
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
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>
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
52
<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
53
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
<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
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
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
58
59
60
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}">
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
62
63
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
} else {
LOGGER.info("Stop service '" + this.getClass().getName() +
"'");
}
}
}
65
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
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
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!");
}
}
}
68
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();
}
69
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
<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>
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
Reportar un error
72
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
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
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
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.
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
77
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
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
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>
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
<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>
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
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 ''
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
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
82
.
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
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
84
Reportar un error
85
Reportar un error
Reportar un error
86
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
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
Reportar un error
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
88
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
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
89
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>
90
<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
91
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
93
94
<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
<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
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
97
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
98
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
99
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
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
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
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"/> -->
102
Resultado:
La aplicacin de ejemplo Seam 2.2 JPA implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error
103
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>
104
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"/> -->
Las cadenas de bsqueda JNDI para las EJBs del marco de trabajo Seam 2.2 se debn cambiar
as:
105
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
Resultado:
La aplicacin de reservas Seam 2.2 implementa y ejecuta de manera exitosa en JBoss EAP 6.
Reportar un error
106
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
107
$ cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking
$ ANT_HOME/ant explode
108
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
109
<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>
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
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
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
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
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
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
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seambooking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.Authent
icatorAction/em\" ]
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
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
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
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
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
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
<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>
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"/>
121
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