在JTA环境中忽略事务setTimeOut

时间:2013-10-07 14:38:07

标签: hibernate jboss7.x jta

我们在特定操作上设置事务超时时出现问题,因为我们发现使用“setTimeOut”设置的值被忽略,所以覆盖了使用Hibernate 4.2.1和Jboss 7AS的应用程序中的常规超时。

我们有一个像这样的JTA非CMT持久性单元:

<persistence-unit name="ourName" transaction-type="JTA">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:/datasources/ourDataSourceName</jta-data-source>
  <properties>
        <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>
        <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="false" />
  </properties>
</persistence-unit>

然后我们像这样声明persistenceUnit:

@PersistenceUnit(unitName="ourName")
private EntityManagerFactory emf;

从中获取sessionFactory。使用这样的sessionFactory,我们打开一个会话并获得一个事务,我们在开始之前设置超时:

session = sessionFactory.openSession ();
tx = session.getTransaction ();
tx.setTimeout (200);
tx.begin ();

在我们的standalone.xml配置文件中,我们将全局超时设置为(10秒。显示的值仅用于测试):

coordinator-environment enable-statistics="true" default-timeout="10"/>

结果是,无论我们通过“setTimeOut”设置的值,都会应用10秒的超时。

任何有关我们做错事的想法的人都将不胜感激!

THX!

0 个答案:

没有答案