1

我在 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 注册/查找等之外的所有内容。

那么,我错过了什么?

4

2 回答 2

0

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

java.naming.factory.initial = org.apache.xbean.spring.jndi.SpringInitialContextFactory
于 2012-10-01T19:42:47.540 回答
0

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

于 2012-07-31T21:13:19.970 回答