maven 2 - proceso - ¿Cómo puedo configurar el módulo y el nombre de la aplicación para las búsquedas JNDI?
seo html (2)
Enfoque ingenuo
El complemento EAR de Maven permite personalizar un nombre de archivo de módulo y puede establecer el nombre final o el EAR utilizando project.build.finalName
.
Mucho mejor enfoque
Reemplace el <application-name>
y el <module-name>
en la application.xml
y el ejb-jar.xml
respectivamente. Citando el nombre JNDI global portátil en EJB 3.1 :
Además del nombre anterior, si el EJB expone solo una vista de un solo cliente (es decir, implementa solo una interfaz o la vista sin interfaz), el contenedor también tiene la obligación de asignar el bean a
java:global/[<application-name>]/<module-name>/<bean-name>
Dónde
<aplication-name>
toma como valor predeterminado el nombre del paquete (nombre de archivo.ear
) sin la extensión del paquete. Esto se puede anular enapplication.xml
. Además,<application-name>
solo es aplicable si el bean está empaquetado dentro de un archivo.ear
.<module-name>
defecto es el nombre del paquete (.war
o.jar
) sin la extensión del paquete. De nuevo, esto se puede anular enejb-jar.xml
.<bean-name>
defecto el nombre de clase no calificado del bean. Sin embargo, si@Stateful
o@Stateless
o@Singleton
usan el atributo de nombre, entonces el valor especificado allí se usará como el nombre del bean.
En EJB 3.1, las búsquedas de JNDI se pueden hacer con diferentes nombres de búsqueda:
java:global[/<app-name>]/<module-name>/<bean-name>!<fully-qualifiedbean interface-name>
java:global[/<app-name>]/<module-name>/<bean-name>
java:app/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>
java:app/<module-name>/<bean-name>
java:module/<bean-name>!<fully-qualified-bean-interface-name>
java:module/<bean-name>
En mi proyecto JavaEE 6 (con Maven 2, Netbeans 6 y Glassfish v3) el nombre de la aplicación es X-Snapshot.ear y el módulo EJB es Y-Snapshot.jar. ¿Cómo puedo configurar este proyecto de maven para usar otra aplicación y nombre de módulo? ¡No quiero cambiar todas las búsquedas de JNDI cuando cambian estos nombres! Entonces, ¿es posible configurar los nombres de aplicaciones y módulos para las LookUps de JNDI?
El nombre de la aplicación y los nombres de los módulos se pueden consultar en tiempo de ejecución a través de JNDI:
@Resource(lookup = "java:app/AppName")
private String appName;
@Resource(lookup = "java:module/ModuleName")
private String moduleName;
Si bien puede configurar el nombre de la aplicación y el nombre del módulo en su descriptor de implementación de la aplicación como se describe , estos nombres aún se pueden anular en el momento de la implementación (según la especificación Java EE , como se indica a continuación), por lo que es mejor no codificar Estos valores en su código de aplicación.
EE.8.5.2 Implementación de una aplicación Java EE y EE.8.5.1 Implementación de un módulo Java EE independiente
La herramienta de implementación debe garantizar que el nombre de la aplicación sea único en la instancia del servidor de la aplicación. Si el nombre no es único, la herramienta de implementación puede elegir automáticamente un nombre único o permitir que el Deployer elija un nombre único
EE.8.1.1 Creación de componentes
Si y solo si el nombre no es único (por ejemplo, debido a que dos nombres son idénticos después de eliminar diferentes extensiones de nombre de archivo), la herramienta de implementación puede elegir nuevos nombres únicos para cualquiera de los módulos en conflicto; Los nombres de módulos que no entren en conflicto no deben ser cambiados. El algoritmo para elegir nombres únicos en tal caso es específico del producto.