【发布时间】:2013-11-18 11:39:24
【问题描述】:
我想在 JBoss 7 中使用 HSQLDB 数据源。 但我也想在 XA 模式下使用数据源。 据我所知,HSQLDB 从 2.2.0 开始支持 XA 事务,我使用的是最新版本的 HSQLDB。我还在HSQLDB jar中找到了对应的类文件:org.hsqldb.jdbc.pool.JDBCXAConnection。
但在启动时,我从 JBoss 收到以下异常:
Throwable while attempting to get a new connection: null: javax.resource.ResourceException: Could not create connection
at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXAManagedConnection(XAManagedConnectionFactory.java:461)
at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAManagedConnectionFactory.java:398)
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.createConnectionEventListener(SemaphoreArrayListManagedConnectionPool.java:781)
at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.java:344)
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:397)
at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:365)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:329)
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:368)
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:139)
at org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.initDatabaseType(ProcessEngineConfigurationImpl.java:636) [camunda-engine-7.0.0-Final.jar:]
at org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.initDataSource(ProcessEngineConfigurationImpl.java:598) [camunda-engine-7.0.0-Final.jar:]
at org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.init(ProcessEngineConfigurationImpl.java:385) [camunda-engine-7.0.0-Final.jar:]
at org.camunda.bpm.engine.impl.cfg.JtaProcessEngineConfiguration.init(JtaProcessEngineConfiguration.java:54) [camunda-engine-7.0.0-Final.jar:]
at org.camunda.bpm.container.impl.jboss.config.ManagedJtaProcessEngineConfiguration.init(ManagedJtaProcessEngineConfiguration.java:34)
at org.camunda.bpm.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:357) [camunda-engine-7.0.0-Final.jar:]
at org.camunda.bpm.container.impl.jboss.service.MscManagedProcessEngineController.startProcessEngine(MscManagedProcessEngineController.java:178)
at org.camunda.bpm.container.impl.jboss.service.MscManagedProcessEngineController$2.run(MscManagedProcessEngineController.java:132)
at org.camunda.bpm.container.impl.jboss.service.MscManagedProcessEngineController$2.run(MscManagedProcessEngineController.java:130)
at org.camunda.bpm.container.impl.jboss.util.Tccl.runWithTccl(Tccl.java:53)
at org.camunda.bpm.container.impl.jboss.util.Tccl.runUnderClassloader(Tccl.java:45)
at org.camunda.bpm.container.impl.jboss.service.MscManagedProcessEngineController.startInternal(MscManagedProcessEngineController.java:130)
at org.camunda.bpm.container.impl.jboss.service.MscManagedProcessEngineController$1.run(MscManagedProcessEngineController.java:91)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_07]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [rt.jar:1.7.0_07]
at java.util.concurrent.FutureTask.run(FutureTask.java:166) [rt.jar:1.7.0_07]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_07]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_07]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_07]
at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: javax.resource.ResourceException: Could not find accessor on XADataSource:
at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXADataSource(XAManagedConnectionFactory.java:603)
at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXAManagedConnection(XAManagedConnectionFactory.java:444)
... 29 more
Caused by: java.lang.NoSuchMethodException: Method setURL not found
at org.jboss.jca.adapters.jdbc.util.Injection.inject(Injection.java:141)
at org.jboss.jca.adapters.jdbc.util.Injection.inject(Injection.java:70)
at org.jboss.jca.adapters.jdbc.xa.XAManagedConnectionFactory.getXADataSource(XAManagedConnectionFactory.java:578)
... 30 more
这是我的数据源配置:
<xa-datasource jndi-name="java:jboss/datasources/LiferayDS" pool-name="LiferayDS" enabled="true" use-ccm="false">
<xa-datasource-property name="URL">
jdbc:hsqldb:file:../../hsql-data/LiferayDS
</xa-datasource-property>
<driver>hsqldb</driver>
<xa-pool>
<max-pool-size>10</max-pool-size>
<is-same-rm-override>false</is-same-rm-override>
<interleaving>false</interleaving>
<pad-xid>false</pad-xid>
<wrap-xa-resource>false</wrap-xa-resource>
</xa-pool>
<security>
<user-name>sa</user-name>
<password></password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
HSQLDB 中的 XA 类似乎没有提供通用的 XA 配置接口。 我必须如何配置数据源才能在事务模式下使用 HSQLDB?
【问题讨论】:
-
您确定 HSQLDB 支持 XA 事务吗? atomikos.com/Documentation/NonXaDataSource 另有建议。
-
根据hsqldb.org/doc/guide/running-chapt.html#N100CF,HSQLDB 似乎确实支持 XA 事务。将尝试在文档中查找示例。
-
fossies.org/dox/hsqldb-2.3.4/… 几乎可以肯定地证明 HSQLDB 2.3.4 支持 XA 事务。
-
很遗憾,我在hsqldb.org/doc/2.0/apidocs/org/hsqldb/jdbc/package-summary.html 中找不到课程
org.hsqldb.jdbc.pool.JDBCXADataSource。 -
hsqldb.org/doc/2.0/apidocs/index.html?org/hsqldb/jdbc/… 确实引用了
JDBCXADataSource,它可能是一个内部类。
标签: java jboss jboss7.x hsqldb