Обязательные сервисы, которые не установлены при использовании resource-ref в JBoss7.1 - PullRequest
0 голосов
/ 07 февраля 2019

Я перенес приложение из WebLogic на сервер приложений JBoss.И мне нужно оставить имена JNDI для JMS в коде такими же, как и в WebLogic.Для этого я пытаюсь использовать resource-ref в файле web.xml и jboss-web.xml.Но всегда получаю ошибку:

 "WFLYCTL0412: Required services that are not installed:" => [
        "jboss.naming.context.java.comp.connect.connect-ejb.ConnectCGMPeriodicMessageBean.env.jms.ConnectConnectionFactory",
        "jboss.naming.context.java.comp.connect.connect-ejb.ConnectCGMPeriodicMessageBean.env.jms.ConnectSMSQueue"
    ]

Мое предположение, что ресурс-ссылка не работает с MDB из другого модуля.Потому что, если я добавлю MDB в connect-api (веб-модуль) - ресурс-ссылка будет работать хорошо.Может быть, мне нужно сделать ресурс-реф на уровне банки или уха?И как я могу это сделать?Для целей тестирования я также создал простой веб-проект для тестирования, и там ресурс-ссылка работает хорошо.

У меня есть многомодульное приложение, которое упаковано в один файл с ушами.application.xml of ear:

<module>
    <web>
      <web-uri>connect-api.war</web-uri>
      <context-root>/api/connect/v1</context-root>
    </web>
  </module>
  <module>
    <ejb>connect-ejb.jar</ejb>
  </module>

В модуле connect-ejb.jar у меня есть Message Driven Bean:

@MessageDriven
@RequestScoped
@TransactionManagement(TransactionManagementType.BEAN)
public class ConnectCGMPeriodicMessageBean extends AbstractConnectBean {
 @Resource(mappedName = "jms/ConnectConnectionFactory")
    private ConnectionFactory m_factory;
    @Resource(mappedName = "jms/ConnectSMSQueue")
    private Queue m_queue;
}

web.xml модуля connect-api.war:

  <resource-ref>
            <res-ref-name>jms/ConnectConnectionFactory</res-ref-name>
            <res-type>javax.jms.QueueConnectionFactory</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
        <resource-ref>
            <res-ref-name>jms/ConnectSMSQueue</res-ref-name>
            <res-type>javax.jms.Queue</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>

jboss-web.xml модуля connect-api.war:

<resource-ref>
        <res-ref-name>jms/ConnectConnectionFactory</res-ref-name>
        <res-type>javax.jms.QueueConnectionFactory</res-type>
        <jndi-name>java:/jms/ConnectConnectionFactory</jndi-name>
    </resource-ref>
    <resource-ref>
        <res-ref-name>jms/ConnectSMSQueue</res-ref-name>
        <res-type>javax.jms.Queue</res-type>
        <jndi-name>java:/jms/ConnectSMSQueue</jndi-name>
    </resource-ref>

в standalone-full.xml Я добавляю:

  <jms-queue name="jms/ConnectSMSQueue" entries="java:/jms/ConnectSMSQueue"/>
                          <connection-factory name="jms/ConnectConnectionFactory" entries="java:/jms/ConnectConnectionFactory" connectors="in-vm"/>

1 Ответ

0 голосов
/ 08 февраля 2019

Я нашел решение, нужно добавить в jboss-ejb3.xml:

 <message-driven>
        <ejb-name>ConnectPumpPeriodicMessageBean</ejb-name>
        <resource-ref>
            <res-ref-name>jms/ConnectConnectionFactory</res-ref-name>
            <lookup-name>java:/jms/ConnectConnectionFactory</lookup-name>
        </resource-ref>
        <resource-ref>
            <res-ref-name>jms/ConnectSMSQueue</res-ref-name>
            <lookup-name>java:/jms/ConnectSMSQueue</lookup-name>
        </resource-ref>
    </message-driven>
...