license java java-ee jboss migration wildfly

license - wildfly java 9



Beneficios(y consejos) de una actualización de JBoss 4.2.x a JBoss 5.x, 6.x, 7.x y WildFly 8.x? (5)

Supongamos que no tengo que preocuparme por el tiempo y los costos de desarrollo: estoy interesado en los beneficios técnicos generales (mejor rendimiento, mejores API mejoradas) y nuevas funciones.

Actualmente estoy trabajando en productos que usan 4.2.x, y consideramos un cambio importante para las versiones que están por llegar y necesitan converger.

Eché un vistazo breve a las notas de la versión de cada versión y algunos artículos sobre cada versión para 5.x, 6.x, 7.x y 8.x. Pero me gustaría recibir comentarios de primera mano de personas que han realizado el cambio.

Noté que hay algunos cambios importantes en relación con la mensajería (cambio de JBoss MQ a JBoss Messenging) y que para JBoss 7.x parece cambiar bastante su capa de configuración. Luego están sucediendo muchas más cosas al cambiar a JBoss / WildFly 8.x.

Por favor, recomienda buenos artículos que señalen los peligros si es posible. Encontré algunas para migraciones a JBoss 5.x, pero no tantas para 6.x o incluso 7.x, y alguien más está evaluando 8.x para nosotros ahora. También puede recomendar alternativas si cree que son relevantes, aunque preferiría centrarme solo en JBoss.

Para información, utilizamos una combinación de sistemas basados ​​en plugins JPF y OSGi (usando Eclipse Equinox), con clientes desarrollados en Swing (algunos implementados a través de WebStart).

Actualización: Aunque esta pregunta ya trajo algunas respuestas excelentes, creo que merece una actualización para WildFly (y en realidad, nuestros proyectos internos retrasaron el cambio de 4.2.x a 7.x como originalmente se había planeado para esperar a WildFly). Nuevos pensamientos y respuestas son bienvenidos.


Actualizamos de JBoss AS 5 a JBoss AS 7 y estamos mirando hacia WildFly AS 8.1. En este momento no podemos migrar a 8 porque no hay MQ Series JMS 2 RAR.

Algunas de las diferencias:

  • La configuración es mucho mejor y más simple. Ya no está distribuido en 20 archivos XML en los que configura aspectos en archivos XML. En cambio, todo es un lugar central. Todos los puertos están configurados en un lugar central, ya no existe un archivo XSL que transforma server.xml. Puede dar sentido al archivo de configuración sin conocer los detalles de implementación de las clases. Es difícil apreciar esto si nunca has configurado un JBoss 5.x.
  • El modelo de carga de clases se ve en forma y se obtiene un gran control a través de jboss-deployment-structure.xml
  • El registro centralizado (Slf4j, JUL, JCL, Log4j, ...) es realmente agradable.
  • La biblioteca del cliente EJB parece mucho más limpia. Se han reducido a 10 JAR de 20, la mitad de ellos incluso paquetes OSGi (nuestro cliente es una aplicación Eclipse RCP).
  • El lío de dependencia del cliente de EJB se ha ido, en su lugar ahora obtienes un BOM POM.
  • Obtiene un BOM POM para las API del servidor.
  • Inicio más rápido y menos uso de memoria. Desplegamos 80 EJB y el RAR de la serie MQ en 6 segundos sin mucha afinación. Nuestro conjunto de datos en vivo está en algún lugar por encima de 200 MB.
  • La carpeta de implementaciones está vacía de manera predeterminada
  • La (falta de) calidad de XNIO es aterradora. En 7.x, solo se utiliza para la comunicación remota EJB y acertamos varios errores de tope de demostración (interbloqueos, doble libre, fugas de identificador de socket, ...). En 8.x, también se usa para servlets en lugar de Tomcat. Todavía hay muchos errores de servlets muy básicos que se arreglan en undertow.

Cambios que tuvimos que hacer nuestra aplicación:

  • cambiar nombres JNDI a nombres estandarizados EE 6
  • migrar de JBoss Cache a Infinispan (parte de nuestro código se ha migrado a la API plana, algunas partes todavía usan la API de árbol)
  • la seguridad es un poco menos flexible (ya no puede reparar llamadas autenticadas y no autenticadas)
  • algún código horrible que se basó en los detalles de JNDI remoto
  • la configuración del cliente EJB es diferente
  • todas las secuencias de comandos para instalar, implementar, iniciar, detener, ...
  • ExternalContext se ha ido, tuvimos que reemplazarlo con un enfoque diferente
  • reemplazamos MBeans en SAR con @StartUp EJB
  • algunos feos hacks para Cocoon

La serie AS 7.x tiene muchos errores con correcciones solo disponibles en la serie EAP. Si desea ir con 7.x en lugar de 8.x, le recomendamos encarecidamente que compre EAP 6.



Me actualicé de JBoss 4 a 5 y por experiencia los siguientes son los más importantes a tener en cuenta:

  • JBoss 5 (y 6 y 7) no son tan indulgentes como JBoss 4 con archivos XML. Debe asegurarse de que todos los archivos XML del descriptor de despliegue sean válidos. Puede que esté utilizando DTD en algunos archivos. Recomiendo actualizarlos para usar el esquema XML.
  • Algunas bibliotecas pueden causar incompatibilidades. Esto puede ser particularmente cierto si accede a servicios web y / o analiza XML
  • Si precompila sus JSP en JBoss 4, probablemente no podrá hacerlo en JBoss 6/7.
  • JBoss 4 y 5 usan diferentes implementaciones de cola de mensajes. Si tiene colas de mensajes o temas definidos, deberá redefinirlos.
  • JBoss TreeCache ya no se usa. Si usa esto para el almacenamiento en caché, deberá cambiar para usar el nuevo caché de JBoss.
  • La seguridad de JBoss 5 es diferente. Si sus clientes remotos requieren acceso seguro a JBoss, deberá configurarlos de manera diferente.

Algunos recursos útiles son:

http://java.dzone.com/articles/migrating-jboss-4-jboss-5 http://venugopaal.wordpress.com/2009/02/02/jboss405-to-jboss-5ga

Oficialmente, JBoss 6 solo está certificado para el perfil web de Java EE, por lo que si utiliza características "heredadas" como EJB 2.x, es posible que no sean compatibles en el futuro. Dependiendo del ciclo de vida de su aplicación, esto puede o no ser un problema. JBoss 6 actualmente es compatible con EJB2.1 por completo, pero no está certificado contra esto.

También descubrí que JBoss 5 maneja la memoria mucho mejor que JBoss 4. Con JBoss 4 veo muchos más errores de PermGen que con JBoss 5.


Solo quería llamar la atención de todos sobre quién podría estar enfrentando el problema de hinchazón de PermGen después de actualizar a la última. El Microcontenedor JBoss-6 intenta buscar anotaciones específicas de Jboss cargando las clases de todos los JAR en la ruta de clase al inicio. Esto hace que la inflamación de PermGen comience a cargar todas las clases no deseadas. Para reducir la cantidad de escaneo, el Microcontenedor proporciona otro gancho de descripción, mediante jboss-scanning.xml. Agregue este ''jboss-scanning.xml'' al WEB-INF dentro de WAR y ascle ''jboss-scanning.xml'' al META-INF dentro de los EAR.

<scanning xmlns="urn:jboss:scanning:1.0"> <!-- Purpose: Disable scanning for annotations in contained deployment. --> </scanning>


Solo puedo hablar desde la experiencia de producción con JBoss 5.1.0 y algunas investigaciones de la versión 6.

JBoss 5 es Java EE 5 y JBoss 6 y 7 son Java EE 6 . La disparidad en las características de API está mejor documentada en esas especificaciones. Es probable que JBoss 6 tenga una vida útil muy corta; solo está certificado para el perfil web de Java EE 6 y las correcciones de errores están dirigidas a la versión 7 (en su 3ª versión beta al momento de la redacción).

Creo que obtendrías mejores respuestas en el foro de la comunidad de JBoss.