1

AMQ5.6.0でActiveMQ5.5.0(ヒューズバージョン)アプリをテストしましたが、SpringJNDIで構成されたOracleデータソースが見つからないことに気付きました。

私がアプリケーションで変更したのは、AMQ / Springのpom.xmlバージョン(5.6バージョンと一致するため)だけでした。それ以外の場合は、同じアプリケーションコードと構成(activemq.xml、jndi.xmlなど)を使用していますが、Spring JDBC DAO(v3.0.5)がそれらを見つけられません。

それ以外の場合はログにエラーはありません。このSpringアプリケーションコンテキストの初期化エラーだけです...

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

これが関連するSpringjndi構成(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を使用せずにテストし(代わりにアプリでデータソースをハードコーディングしただけです)、すべてが期待どおりに機能します。したがって、SpringJNDIの登録/データソースのルックアップなどを除くすべてを除外する必要があります。

だから、私は何が欠けていますか?

4

2 に答える 2

0

ActiveMQには、JNDIプロバイダーとして使用しているxbean-springへの依存関係があります。ActiveMQ 5.6.0へのアップグレードにより、推移的なXbeanの依存関係が変更された可能性があります。

于 2012-07-31T21:13:19.970 に答える
0

問題を見つけました。/confディレクトリの下にjndi.propertiesファイルを追加しました。これには次のものが含まれています。これで正常に動作します(AMQ 5.5ではこれは必要ありませんでした...奇妙な)...

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