在JBoss7.1中使用resource-ref时未安装的必需服务

时间:2019-02-07 10:09:30

标签: java configuration jboss migration jndi

我是从WebLogic到JBoss应用程序服务器的偏头痛应用程序。而且我需要在代码中保留JMS的JNDI名称与在WebLogic中使用的名称相同。为此,我尝试在web.xml和jboss-web.xml文件中使用resource-ref。但总是会出错:

 "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一起使用。 因为如果我在connect-api(Web模块)中添加MDB,则resource-ref效果很好。 也许我需要在罐子或耳朵的水平上进行资源引用?我该怎么办? 出于测试目的,我还创建了一个简单的Web项目进行测试,在那里resource-ref效果很好。

我有多模块应用程序,并且打包在一个耳朵文件中。 耳朵的application.xml:

<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模块中,我有消息驱动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;
}

connect-api.war模块的web.xml:

  <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>

connect-api.war模块的jboss-web.xml:

<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 :(得分:0)

我找到了解决方案,需要添加到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>