Ce n'est pas la bonne façon de faire les choses. Les ressources doivent être ajoutées au local jndi name des EJB individuels. Cela permet de séparer le nom jndi utilisé dans le code bean des bindings jndi globales définies par le déployeur de beans. Le mappage du bean local jndi binding et la liaison globale peuvent être gérés via les descripteurs de déploiement ejb-jar.xml
et spécifiques au serveur d'applications.
Ainsi, au lieu, vous devez déclarer votre @Resource
(ce qui équivaut à un nom de référence des ressources indiquant l'élément <resource-ref>
et le type) comme ceci:
@Resource(name = "jms/queue/aQueue")
private Queue queue;
Puis, dans un descripteur de déploiement spécifique serveur d'applications (pour GlassFish c'est sun-ejb-jar.xml
, pour JBoss c'est jboss.xml
, pour WebLogic c'est weblogic-ejb-jar.xml
, etc), déclarez un élément <resource-ref>
indiquant le nom de référence de ressource et la liaison globale de jndi via l'élément <jndi-name>
.
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name>
</resource-ref>
Une fois que vous aurez tout le travail chose, il sera facile de variabalize ce descripteur de déploiement spécifique à l'aide du serveur d'applications Maven pour différents environnements avec des profils et de filtrage. Utilisez simplement une propriété, activez le filtrage des ressources et définissez une valeur différente dans les profils. Quelque chose comme ça:
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>${my.jndi.name}</jndi-name>
</resource-ref>
maintenant qui se sent mieux :) – Bozho