Oracle 休眠错误:无法在活动全局事务中启用自动提交

Oracle 休眠错误:无法在活动全局事务中启用自动提交,oracle,hibernate,jboss,Oracle,Hibernate,Jboss,我在部署应用程序时出错 环境是: JBoss7.1.3+Hibernate4+JPA OJDBC:ojdbc6.jar stacktrace如下所示 09:13:30,703 WARN [org.hibernate.engine.jdbc.internal.JdbcServicesImpl] (ServerService Thread Pool -- 127) HHH000341: Could not obtain connection metadata : could not turn

我在部署应用程序时出错

环境是:

  • JBoss7.1.3+Hibernate4+JPA
  • OJDBC:ojdbc6.jar
stacktrace如下所示

09:13:30,703 WARN  [org.hibernate.engine.jdbc.internal.JdbcServicesImpl] (ServerService Thread Pool -- 127) HHH000341: Could not obtain connection metadata : could not turn on auto-commit in an active global transaction
09:13:30,703 INFO  [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (ServerService Thread Pool -- 127) HHH000422: Disabling contextual LOB creation as connection was null
09:13:30,704 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 127) MSC00001: Failed to start service jboss.persistenceunit."css-ear-0.5.3-SIT.ear/css-submission-0.5.3-SIT.war#css-submission-PU": org.jboss.msc.service.StartException in service jboss.persistenceunit."css-ear-0.5.3-SIT.ear/css-submission-0.5.3-SIT.war#css-submission-PU": java.lang.NullPointerException
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:100) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_21]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_21]
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_21]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.0.0.GA.jar:2.0.0.GA]
Caused by: java.lang.NullPointerException
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:207)
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:73)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2279)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2275)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:197) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$500(PersistenceUnitServiceImpl.java:57) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:96) [jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final
09:13:30703警告[org.hibernate.engine.jdbc.internal.jdbcservicesiml](服务器服务线程池--127)HH000341:无法获取连接元数据:无法在活动全局事务中启用自动提交
09:13:30703信息[org.hibernate.engine.jdbc.internal.LobCreatorBuilder](服务器服务线程池--127)HH000422:禁用上下文LOB创建,因为连接为空
09:13:30704错误[org.jboss.msc.service.fail](ServerService线程池--127)MSC00001:无法启动服务jboss.persistenceunit。“css-ear-0.5.3-SIT.ear/css-submission-0.5.3-SIT.war#css submission PU”:org.jboss.msc.service.StartException在服务jboss.persistenceunit中。“css-ear-0.5.3-SIT.ear/css-submission-0.5.3-SIT.war#css submission PU”:java.lang.NullPointerException
在org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:100)[jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[rt.jar:1.7.021]
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[rt.jar:1.7.021]
在java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_21]
在org.jboss.threads.JBossThread.run(JBossThread.java:122)[jboss-threads-2.0.0.GA.jar:2.0.0.GA]
原因:java.lang.NullPointerException
位于org.hibernate.engine.jdbc.internal.jdbcservicesiml.configure(jdbcservicesiml.java:207)
位于org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
位于org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
在org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:73)上
位于org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2279)
位于org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2275)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
位于org.hibernate.ejb.EntityManagerFactoryImpl。(EntityManagerFactoryImpl.java:94)
位于org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
位于org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
位于org.hibernate.ejb.HibernatePersistence.createContainerEntityManager工厂(HibernatePersistence.java:74)
位于org.jboss.as.jpa.service.PersistenceUnitServiceImpl.CreateContainerEntityManager工厂(PersistenceUnitServiceImpl.java:197)[jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
访问org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$500(PersistenceUnitServiceImpl.java:57)[jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final]
在org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:96)[jboss-as-jpa-7.1.3.Final.jar:7.1.3.Final
standalone.xml中的数据源配置为

<xa-datasource jta="true" jndi-name="java:jboss/datasources/PsaDS" pool-name="PsaDS" enabled="true" use-java-context="true" use-ccm="true">
  <xa-datasource-property name="URL">
        jdbc:oracle:thin:@<hsot>
  </xa-datasource-property>
  <driver>oracle</driver>
  <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
  <xa-pool>
        <min-pool-size>2</min-pool-size>
        <max-pool-size>50</max-pool-size>
        <prefill>true</prefill>
  </xa-pool>
  <security>
        <user-name>user</user-name>
        <password>pwd</password>
  </security>

jdbc:oracle:thin:@
神谕
事务读取已提交
2.
50
真的
用户
pwd

我们使用的驱动程序是

<drivers>
  <driver name="oracle" module="com.oracle.ojdbc6">
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
  </driver></drivers>

oracle.jdbc.xa.client.oraclexadasource

我从未使用过JBoss+Hibernate。因此我不尝试此调整。只阅读一些文档。请分别尝试这些调整:

A) 休眠属性

需要调整
hibernate.properties
。我在文档中找到了此可选属性:

hibernate.connection.autocommit

为JDBC池连接启用自动提交(不是 推荐)

e、 g.对|错

B) standalone.xml

-目的是解决问题 驱动程序应用自动提交的可疑驱动程序行为 本地事务的语义。启用预处理语句缓存 同一事务中的两个请求是否应返回相同的 语句(来自jboss-4.0.2-默认为false)

假设准备的语句相同。对于某些驱动程序, executeQuery()将自动关闭rs1,因此我们实际上需要 在幕后准备了两份真实的声明。这应该是 对于自动提交语义,重新运行查询将启动一个新的 自动事务。对于遵循规范的驱动程序,您可以 将其设置为true以共享同一个real prepared语句


尝试在
定义标记中对standalone.xml进行以下更改:

标记内添加以下内容:

<is-same-rm-override>false</is-same-rm-override>
<no-tx-separate-pools>true</no-tx-separate-pools>
false
真的
根据文件:

无tx独立池:此元素的存在表示需要两个连接池来隔离与JTA事务一起使用的连接和未与JTA事务一起使用的连接。这些池在第一次使用时是惰性构建的。其用例适用于Oracle(可能还有其他供应商)XA实现不喜欢使用带或不带JTA事务的XA连接

如果这不能单独起作用,请尝试将其添加到您的
定义中:

<validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>


当您使用JTA时,不应启用自动提交到true和休眠连接释放模式“ConnectionReleaseMode.AFTER_语句”。请检查these@Pokuri,我们在系统中没有这样的配置。我们没有明确设置连接释放模式和自动提交(因此应该采用默认值)。正如您所说,自动提交需要默认值true。JTA中不建议这样做。请尝试t
<validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>