2013-11-18 4 views
0

Я хочу использовать источник данных HSQLDB с JBoss 7. Но я также хочу использовать источник данных в режиме XA. Насколько я знаю, HSQLDB поддерживает XA-транзакции с 2.2.0, и я использую последнюю версию HSQLDB. Я также нашел соответствующий файл класса в банке HSQLDB: org.hsqldb.jdbc.pool.JDBCXAConnection.JBoss 7 HSQLDB XA Datasource

Но при запуске я получаю следующее исключение из 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 

Вот моя конфигурация DataSource:

<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> 

Это выглядит как класс XA от HSQLDB не обеспечивает общую XA интерфейс конфигурации. Как настроить источник данных для использования HSQLDB в режиме транзакции?

+0

Вы уверены, что HSQLDB поддерживает XA транзакции? https://www.atomikos.com/Documentation/NonXaDataSource предлагает другое. –

+0

Согласно http://hsqldb.org/doc/guide/running-chapt.html#N100CF, HSQLDB, похоже, поддерживает транзакции XA. Попробуем найти примеры в документации. –

+0

https://fossies.org/dox/hsqldb-2.3.4/classorg_1_1hsqldb_1_1jdbc_1_1pool_1_1JDBCXADataSource.html - почти достоверное доказательство того, что HSQLDB 2.3.4 поддерживает транзакции XA. –

ответ

1

Ok, вот правильная конфигурация для HSQLDB XA-источник данных

<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> 
Смежные вопросы