desplegar deployar como deployment ejb jboss7.x jboss-eap-6

deployment - deployar - JBoss EAP 6.x comprende la fase de implementación: ResourceAdapters, EJB, jar, war



como deployar un war en jboss (2)

En JBoss, ¿cómo es la secuencia de la fase de implementación ? ¿Cuál es el orden de los objetos que se están creando y están disponibles para usar? Al considerar una aplicación empresarial (* .ear), al inspeccionar todo el registro de implementación (server.log), la fase de implementación es como:

  1. Se implementan todas las bibliotecas : los archivos .class se cargan y están disponibles;
  2. Se implementan todos los módulos * .jar : los archivos .class se cargan y están disponibles;
  3. Si algún * .jar es un Jar EJB , a través de los archivos de configuración (Ej. Ejb-jar.xml) o anotaciones, se crea el árbol JNDI;
  4. Si algunos * .jar tienen una configuración de archivo persistence.xml, se cargan todas las entidades y enlaces a las fuentes de datos;
  5. Todos los módulos * .war comienzan la fase de despliegue;
  6. A través de los archivos de configuración (web.xml), se cargan los escuchas y la raíz de contexto y, finalmente, los aspectos de seguridad.
  7. Oído desplegado con éxito.

Preguntas:

  • ¿Qué pasa con los módulos de adaptadores de recursos, PersistenceContext y EJB Pool?
  • Cuando se encuentra un archivo persistence.xml, ¿se inicia una conexión al origen de datos y, por lo tanto, al conjunto de bases de datos?
  • Dado que la fuente de datos (DB) está configurada en el domain.xml standalone.xml o domain.xml , ¿cuándo ocurre la primera conexión al grupo de DB? ¿Cuándo inyecto el PersistenceContext y uso el EntityManager?
  • Cuando el grupo EJB está cargado y disponible para usar?
  • ¿Es correcto decir que durante el despliegue del jar EJB, el árbol JNDI se crea y luego está disponible?
  • Cuando se descubre un EJB, se carga dentro de la agrupación (como referencia para inyectar / buscar)?

Cuando un módulo .war está implementado y listo, incluso si la implementación completa de .ear aún no se ha completado, es posible que el servlet o el oyente se inicien desde el contenedor.

  • ¿Qué sucede si algunos de estos objetos (escucha, servlet) intentan usar EJBs o PersistenceContext u otros objetos? ¿Están disponibles esos objetos?
  • ¿Es posible tener un problema de interbloqueo y bloquear el subproceso / fase de implementación?

Intentaré abordar el resto de sus preguntas:

Cuando se encuentra un persistence.xml , ¿se inicia una conexión al origen de datos y, por lo tanto, al conjunto de bases de datos?

Sí, eso debe suceder (si no se ha realizado ninguna conexión), de lo contrario no se podría validated o crear ninguna estructura de tabla (DDL).

Dado que la fuente de datos (DB) está configurada en el archivo standalone.xml o domain.xml, ¿cuándo ocurre la primera conexión al grupo de DB? ¿Cuándo inyecto el PersistenceContext y uso el EntityManager?

La respuesta a esta pregunta es: depende. Si su fuente de datos JDBC está configurada con un tamaño mínimo de agrupación MIN_POOL_SIZE > 0 y tiene el indicador de prefill establecido en verdadero, WildFly creará conexiones MIN_POOL_SIZE al servidor DB, sin ninguna implementación en absoluto que use esa fuente de datos (después de cambiar esa marca, necesita deshabilitar / habilitar la fuente de datos). De lo contrario, en la implementación: se crea tantas conexiones como sea necesario (dependiendo de lo que haga en la implementación, pero para aplicaciones simples una sola), excepto que tiene MIN_POOL_SIZE un MIN_POOL_SIZE > 0 y el indicador de estricto mínimo se establece en verdadero, en el que caso POR LO MENOS MIN_POOL_SIZE se MIN_POOL_SIZE conexiones.

¿Cuándo está cargado el grupo EJB y está disponible para su uso?

Está disponible para su uso después de implementar el submódulo EJB, con todas sus dependencias.

¿Es correcto decir que durante el despliegue del jar EJB, el árbol JNDI se crea y luego está disponible?

Lo formularía de la siguiente manera: después ( no durante ) se comprueba que todos los EJB se pueden implementar (por ejemplo, se podrían resolver todas sus dependencias), luego se crean las entradas JNDI (en el árbol JNDI). De acuerdo con lo que noté, si un solo EJB falla, no se implementa nada, lo que me hace pensar que estoy aquí.

[Cuando se implementa un módulo .war] ¿Qué sucede si algunos de estos objetos (escucha, servlet) intentan usar EJB o PersistenceContext u otros objetos? ¿Están disponibles esos objetos?

Sí definitivamente. Usamos esa función para ejecutar algún código de inicio desde un servlet, cuando se implementa el archivo WAR (por ejemplo, para crear algunas entidades con algunos valores predeterminados).

¿Es posible tener un problema de interbloqueo y bloquear el subproceso / fase de implementación?

Teóricamente sí, prácticamente no (dudo que los chicos de RedHat no hayan pensado en esto).

Algunos consejos: si usa MySQL, puede verificar qué conexiones se hacen al servidor con show processlist . De lo contrario, si usa Linux / Unix, puede verificar todas las conexiones hechas a su servidor de base de datos con netstat .


  • Es posible controlar el orden de implementación de los archivos jar y wars en application.xml utilizando <initialize-in-order>true</initialize-in-order>
  • El ciclo de vida de los adaptadores de recursos está controlado por la arquitectura del conector
  • JBoss gestiona el ciclo de vida de los gestores de entidades gestionados por contenedor . Suponiendo que está inyectando en un EJB utilizando @PersistenceContext , esto sucede antes de @PostConstruct .
  • El orden de inicialización de Singleton EJB se puede definir utilizando @DependsOn("OtherBean")
  • Puede asegurarse de que los puntos finales de EJB estén disponibles utilizando el orden de implementación en la primera viñeta
  • No estoy seguro de si es posible bloquear el bloqueo: es mucho más probable que vea una excepción JNDI