2

我正在使用 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>

我在informix 连接字符串中设置了隔离级别,因为在启动activemq 时出现“不支持事务”错误。现在我得到了这个例外:

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

getConnection(BasicDataSource.java:1044) at org.apache.activemq.store.jdbc.TransactionContext.getConnection(TransactionContext.java:58) ... 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 章:393) 在 com.informix.jdbc.IfxStatement.a(IfxStatement.java:1326) 在 com。

当我启动 activemq 时,出现以下错误:

4

2 回答 2

2

1) 下载最新的activemq版本

2) vi ACTIVEMQ_HOME/conf/activemq.xml

3)添加以下bean配置来配置informix ds:

<bean id="informix-ds" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.informix.jdbc.IfxDriver"/>
<property name="jdbcUrl" value="jdbc:informix-sqli://192.168.7.30:21893/XXX:informixserver=ol_informix1170_1;IFX_LOCK_MODE_WAIT=20;IFX_ISOLATION_LEVEL=TRANSACTION_READ_UNCOMMITTED"/>
<property name="user" value="XXXXX" />
<property name="password" value="XXXX" />

注意:Informix 连接字符串应包含:IFX_ISOLATION_LEVEL=TRANSACTION_READ_UNCOMMITTED。数据源实现应该是 com.mchange.v2.c3p0.ComboPooledDataSource

4) 将 ds 注册为持久化适配器:

    <persistenceAdapter>

--> 5) 下载 c3p0-0.8.4.5.jar 和 ifxjdbc-3.70-JC3.jar 并复制到 ACTIVEMQ_HOME/lib/optional

6) 启动activemq,尽情享受吧!

注意:如果 activemq 抱怨缺少 db 表,请检查您的数据库是否使用单字节字符集或手动创建具有适当约束的缺少表(仅适用于 dev env)。

于 2013-04-15T13:42:09.733 回答
0

一个很好的猜测是informix帮助中描述的

-122 ISAM 错误:事务不可用。

已要求 ISAM 处理器标记事务的开始或结束,但事务日志记录未生效。对于 C-ISAM 程序,此文件未通过日志记录打开。查看对 isopen 的调用,并确保包含 ISTRANS 参数。对于 SQL 产品,此数据库不支持事务日志记录。如果您正在使用数据库服务器,请让数据库服务器管理员为此数据库启用日志记录。否则,使用 START DATABASE 语句开始事务记录。在所有情况下,日志记录只应在数据库完全备份后立即开始。

于 2013-04-12T13:46:01.527 回答