在以下情况下,我难以理解JTA的角色:
Java EE应用程序正在使用以下代码将EJB实体持久存储到数据库中:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public T makePersistent(final T entity) {
getEntityManager().persist(entity);
return entity;
}
persistence.xml:
<persistence-unit name="EXAMPLE">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jboss/datasources/example-ds</jta-data-source>
<properties>
<property name="hibernate.default_schema" value=EXAMPLE_DB" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
深入研究Hibernate的SessionImpl,我发现了以下代码段:
private void firePersist(PersistEvent event) {
errorIfClosed();
checkTransactionSynchStatus();
checkNoUnresolvedActionsBeforeOperation();
for ( PersistEventListener listener : listeners( EventType.PERSIST ) ) {
listener.onPersist( event );
}
checkNoUnresolvedActionsAfterOperation();
}
这是JTA方法的第一个调用。
bean对象看起来像这样:
@Entity
@Table(name = "Example_Table")
public class ExampleObj implements Serializable {
...
所以,我的问题是:
是否有必要为Hibernate JDBC实现JTA?使用JTA有什么好处?