Это не правильный способ делать вещи.Ресурсы должны быть добавлены к локальному имени jndi отдельных EJB.Это необходимо для отделения имени jndi, используемого в коде компонента, от глобальных привязок jndi , установленных средством развертывания компонента.Сопоставление локальной привязки bean jndi и глобальной привязки может обрабатываться с помощью дескрипторов развертывания ejb-jar.xml
и appserver.
Вместо этого выдолжен объявить ваш @Resource
(что эквивалентно элементу <resource-ref>
, указывающему имя и тип ссылки на ресурс) следующим образом:
@Resource(name = "jms/queue/aQueue")
private Queue queue;
Затем в дескрипторе развертывания для конкретного приложения (для GlassFish это * 1017)*, для JBoss это jboss.xml
, для WebLogic это weblogic-ejb-jar.xml
и т. д.), объявите элемент <resource-ref>
, указывающий имя ссылки на ресурс и глобальную привязку jndi через элемент <jndi-name>
.
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name>
</resource-ref>
После того, как вы все заработаете, будет легко вариабализировать этот дескриптор развертывания, специфичный для сервера приложений, используя Maven для различных сред с профилями и фильтрацией.Просто используйте свойство, активируйте фильтрацию ресурсов и установите другое значение в профилях.Примерно так:
<resource-ref>
<res-ref-name>jms/queue/aQueue</res-ref-name>
<jndi-name>${my.jndi.name}</jndi-name>
</resource-ref>