Java 通过JBoss EAP 6.2.0中的JNDI访问HornetQ连接工厂(本地)

Java 通过JBoss EAP 6.2.0中的JNDI访问HornetQ连接工厂(本地),java,jboss,jboss6.x,hornetq,Java,Jboss,Jboss6.x,Hornetq,我已经在JBoss中部署了一个web应用程序(jmsapi.war),我想通过JNDI从中获得一个jms连接工厂,是否可以不进行任何配置()?我尝试在没有任何配置的情况下使用JNDI: <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:/ConnectionFactory

我已经在JBoss中部署了一个web应用程序(jmsapi.war),我想通过JNDI从中获得一个jms连接工厂,是否可以不进行任何配置()?我尝试在没有任何配置的情况下使用JNDI:

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/ConnectionFactory" />
    <property name="resourceRef" value="false"/>
</bean>
standalone.xml中的我的连接工厂:

<jms-connection-factories>
    <connection-factory name="InVmConnectionFactory">
        <connectors>
            <connector-ref connector-name="in-vm"/>
        </connectors>
        <entries>
            <entry name="java:/ConnectionFactory"/>
        </entries>
    </connection-factory>
</jms-connection-factories>
Jboss日志(hornetq开始部分):


(jboss eap 6.2.0,hornetq 2.3.12.Final)

虽然我还没有使用v6.2,但您可以尝试一下。错误无法通过JNDI树找到您的连接工厂。因此,在已列出的条目中添加以下内容:

<entries>
  <entry name="java:/ConnectionFactory"/>
  <!-- Add this -->
  <entry name="java:jboss/exported/ConnectionFactory"/>
</entries>


并将连接器参考从vm中更改为netty

最简单的解决方案是更改bean配置:

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/ConnectionFactory" />
    <property name="resourceRef" value="false"/>
</bean>

如果resourceRef为true,那么Spring将尝试查找“java:comp/env/ConnectionFactory”(甚至可能是“java:comp/env//ConnectionFactory”),因为这是所有JavaEE容器(不仅仅是JBoss)正确的资源引用的样子

如果要使用资源引用,必须在web.xml文件中声明它们,并将它们映射到jboss-web.xml文件中


当您试图编写必须在不同JavaEE服务器实现之间可移植的代码时,通常会这样做。它们都有自己的jboss-web.xml变体,用于在服务器中的常量资源引用名称和物理资源名称之间进行映射。

我在消息传递子系统上定义了此连接工厂:

<connection-factory name="RemoteConnectionFactory">
    <connectors>
    <connector-ref connector-name="netty"/>
    </connectors>
    <entries>
        <entry name="java:jboss/exported/jms/ConnectionFactory"/>
    </entries>
</connection-factory>

在我的webappspringbean配置中(jndiName应该用java://启动):



并且在web.xml中没有更改或配置(例如,在web.xml中不需要资源引用)

我仍然有相同的问题,我应该在我的应用程序中更改的值吗?正如您所说,我更改了jndiName和resourceRef,但我仍然有相同的错误。
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/ConnectionFactory" />
    <property name="resourceRef" value="false"/>
</bean>
<connection-factory name="RemoteConnectionFactory">
    <connectors>
    <connector-ref connector-name="netty"/>
    </connectors>
    <entries>
        <entry name="java:jboss/exported/jms/ConnectionFactory"/>
    </entries>
</connection-factory>
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/jboss/exported/jms/ConnectionFactory" />
    <property name="lookupOnStartup" value="false"/>
    <property name="proxyInterface" value="javax.jms.ConnectionFactory"/>
</bean>