我们在特定操作上设置事务超时时遇到问题,在使用 Hibernate 4.2.1 和 Jboss 7AS 的应用程序中覆盖一般超时,因为我们发现使用“setTimeOut”设置的值被忽略。
我们有一个这样的 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 配置文件中,我们将全局超时设置为(当然,显示的值仅用于测试):
coordinator-environment enable-statistics="true" default-timeout="10"/>
结果是无论我们通过“setTimeOut”设置的值如何,10 秒的超时始终适用。
任何对我们做错了什么有想法的人将不胜感激!
谢谢!