Зачем мне нужен префикс "java: /" для внедрения @Resource в Wildfly 12? - PullRequest
0 голосов
/ 02 мая 2018

Начиная с запущенного EAR в Weblogic 12 Мне нужно, чтобы это приложение также работало с Wildfly 12.

У нас есть несколько очередей JMS, которые мы добавляем в Weblogic следующим образом:

@Resource(lookup = "jms/Queues/MYQUEUE")
private Queue destination;

@Resource(lookup = "jms/QueueConnectionFactories/MYQUEUECF")
private QueueConnectionFactory connectionFactory;

С Wildfly я определил очередь в standalone-full.xml

<jms-queue name="MYQUEUE" entries="jms/Queues/MYQUEUE" durable="true"/>
<connection-factory name="MYQUEUECF" entries="jms/QueueConnectionFactories/MYQUEUECF" connectors="in-vm"/>

Но инъекция завершается неудачно при запуске сервера.

service jboss.naming.context.java.comp.XXX.ejb.JMSMessageProducer.env.jms.Queues.MYQUEUE (missing) dependents: [service jboss.naming.context.java.comp.XXX.ejb.JMSMessageProducer.env."com.xxx.webservices.components.communication.ejb.JMSMessageProducerBean".destination] [[...]

Чтобы это исправить, мне нужно использовать

@Resource(lookup = "java:/jms/Queues/MYQUEUE")
private Queue destination;

Без префикса "java: /" внедрение не будет работать.

К сожалению, это не работает с Weblogic (ведущей / продуктивной системой).

Поскольку я не могу изменить конфигурацию weblogic, я должен сделать свою конфигурацию Wildfly совместимой с ней или изменить код впрыска, чтобы он работал на обоих серверах приложений.

Зачем Wildfly нужен этот префикс в аннотации @Resource для правильной инъекции?

Есть ли способ изменить его конфигурацию, чтобы код работал без префикса "java: /"?

Заранее спасибо; -)

Mark.

PS: Когда я удаляю аннотации @Resource и выполняю поиск по контексту, это происходит без «java: /» - странно; -)

1 Ответ

0 голосов
/ 03 октября 2018

Пожалуйста, посмотрите на следующую ссылку:

https://developer.jboss.org/thread/261022

Я собираюсь процитировать фрагмент, если найден там:

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-web>  
  <resource-ref>  
    <res-ref-name>jdbc/fs</res-ref-name>  
    <jndi-name>java:jboss/datasources/FS</jndi-name>  
  </resource-ref>  
</jboss-web>  

Используя описанный выше дескриптор развертывания, вы можете сказать, что определенное имя ресурса соответствует любому имени jndi, которое вам нравится. Таким образом, с этим вы можете обойтись без использования инъекции аннотаций ресурсов с именами, которые работают в weblogic, и сопоставить их с именами jndi wildfly, которым требуется java: //

код.

...