私はapache activemq 5.8を使用しています。これが私がしたことです:
1) informix jdbc jar (ifxjdbc-3.70-JC3.jar) を activemq/libs/optional に配置します。
2) activemq.xml で Bean を宣言します。
<bean id="informix-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.informix.jdbc.IfxDriver"/>
<property name="url" value="jdbc:informix-sqli://192.168.7.30:21893/activemq_nightly:informixserver=ol_informix1170_1;IFX_LOCK_MODE_WAIT=20;IFX_ISOLATION_LEVEL=TRANSACTION_READ_UNCOMMITTED"/>
<property name="username" value="XXXX" />
<property name="password" value="XXXX" />
<property name="maxActive" value="200" />
<property name="poolPreparedStatements" value="true"/>
</bean>
3) activemq.xml で持続性アダプターを変更します。
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#informix-ds"/>
</persistenceAdapter>
activemq の起動中に「トランザクションがサポートされていません」というエラーが発生したため、informix 接続文字列で分離レベルを設定しました。今、私はこの例外を受け取ります:
2013-04-12 14:21:23,196 | ERROR | Failed to start Apache ActiveMQ (localhost, null). Reason: java.io.IOException: Cannot create PoolableConnectionFactory (Transaction not available.) | org.apache.activemq.broker.BrokerService | main
org.apache.activemq.store.jdbc.TransactionContext.getConnection(TransactionContext.java:58) で getConnection(BasicDataSource.java:1044) ... 45 以上 原因: java.sql.SQLException: トランザクションが利用できません。com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:413) com.informix.jdbc.IfxSqli.a(IfxSqli.java:3550) com.informix.jdbc.IfxSqli.E(IfxSqli.java:3871) ) com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2662) com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2578) com.informix.jdbc.IfxSqli.c(IfxSqli.java: 1512) com.informix.jdbc.IfxSqli.executeExecute(IfxSqli.java:2493) com.informix.jdbc.IfxSqli.executeExecute(IfxSqli.java:2430) com.informix.jdbc.IfxResultSet.b(IfxResultSet.java) :393) com.informix.jdbc.IfxStatement.a(IfxStatement.java:1326) で。
activemq を開始すると、次のエラーが表示されます。