2010-01-18 10 views
6

Nuestro código tiene algo como esto:¿Cómo se especifica el nombre para las anotaciones de recursos en tiempo de compilación?

@Resource(name = "java:comp/resource/foo/bar/ONE_QUEUE") 
private Queue queue; 

Sin embargo, en un escenario de implementación de la anotación de la cola debe tener este aspecto:

@Resource(name = "java:comp/resource/foo/bar/SECOND_QUEUE") 
private Queue queue; 

me gustaría elegir el nombre que se utilizará con Maven construir perfiles .

¿Qué opciones tengo?

Respuesta

10

Esta no es la forma correcta de hacer las cosas. Los recursos se deben agregar al nombre jndi local de EJB individuales. Esto es para separar el nombre de jndi utilizado en el código de bean de global jndi bindings establecido por el bean deployer. El mapeo del bean local jndi binding y el global binding se puede manejar a través de los descriptores de implementación específicos del servidor de aplicaciones ejb-jar.xml.

Así, en lugar, usted debe declarar su @Resource (lo que equivale a una indicación del nombre <resource-ref> elemento de referencia de recurso y tipo) de esta manera:

@Resource(name = "jms/queue/aQueue") 
private Queue queue; 

Luego, en un descriptor de despliegue-servidor de aplicaciones específicas (por GlassFish es sun-ejb-jar.xml, para JBoss es jboss.xml, para WebLogic es weblogic-ejb-jar.xml, etc.), declara un elemento <resource-ref> que indica el nombre de referencia del recurso y el enlace jndi global a través del elemento <jndi-name>.

<resource-ref> 
    <res-ref-name>jms/queue/aQueue</res-ref-name> 
    <jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name> 
</resource-ref> 

Una vez que obtendrá todo el asunto de trabajo, será fácil de variabalize este descriptor de despliegue específico de servidor de aplicaciones utilizando Maven para diferentes entornos con perfiles y filtrado. Simplemente use una propiedad, active el filtrado de recursos y establezca diferentes valores en los perfiles. Algo así:

<resource-ref> 
    <res-ref-name>jms/queue/aQueue</res-ref-name> 
    <jndi-name>${my.jndi.name}</jndi-name> 
</resource-ref> 
+1

ahora que se siente mejor :) – Bozho

1

Creo que se puede usar el filtro maven, aunque sería extraño.

Here es un artículo acerca de este enfoque.

+0

Esa es una idea interesante, gracias por la punta – tputkonen

0

Si no quiere hacer por config-frijol, se podría utilizar la funcionalidad de JBoss Seam para esto (ver Seam reference doc). No sé si esto forma parte de la especificación de inyección de dependencia de Java (JSR-299) (si le preocupa la independencia del proveedor).

EDIT: Parece ser que es parte de JSR-299, consulte resin's doc about JSR-299

Cuestiones relacionadas