升级到ActiveMQ 5.6.0后无法识别Spring JNDI数据源

时间:2012-07-31 20:18:25

标签: spring activemq jndi

我在AMQ 5.6.0中测试了一个ActiveMQ 5.5.0(保险丝版)应用程序,并注意到我们的Spring JNDI未配置Oracle数据源。

我在应用程序中唯一改变的是AMQ / Spring的pom.xml版本(以匹配5.6版本)。否则,我使用相同的应用程序代码和配置(activemq.xml,jndi.xml等),但我的Spring JDBC DAO(v3.0.5)无法找到它们。

日志中没有错误,只是这个Spring Application Context初始化错误......

javax.naming.NameNotFoundException; remaining name 'jdbc/myDataSource'

这里是相关的Spring jndi配置(conf / jndi.xml,包含在conf / activemq.xml中)......

<bean id="jndi" class="org.apache.xbean.spring.jndi.SpringInitialContextFactory" 
    factory-method="makeInitialContext" scope="singleton">
    <property name="entries" ref="jndiEntries" />
</bean>
<util:map id="jndiEntries">
    <entry key="jdbc/myDataSource">
    <bean id="myDBCPDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
        ...

然后我的应用程序像这样引用它......

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>jdbc/myDataSource</value>
    </property>
</bean>

<bean id="messageDAO" class="com.mycompany.MessageDAOImpl">
    <property name="dataSource" ref="myDataSource" />
</bean>

那就是说,我在没有使用JNDI的情况下进行了测试(而只是硬编码了我的应用程序中的数据源),一切都按预期工作。因此,除了Spring JNDI注册/查找数据源等之外,应该排除所有内容。

那么,我错过了什么?

2 个答案:

答案 0 :(得分:0)

ActiveMQ依赖于xbean-spring,您将其用作JNDI提供程序。由于升级到ActiveMQ 5.6.0,传递的Xbean依赖关系可能已经发生了变化。

答案 1 :(得分:0)

我发现了这个问题,我在/ conf目录下添加了一个包含以下内容的jndi.properties文件,它现在运行正常(在AMQ 5.5下不需要这个...奇怪的)......

java.naming.factory.initial = org.apache.xbean.spring.jndi.SpringInitialContextFactory