Я пытаюсь понять роль 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>
Копая глубже в SessionImpl Hibernate, я нашел следующий фрагмент:
private void firePersist(PersistEvent event) {
errorIfClosed();
checkTransactionSynchStatus();
checkNoUnresolvedActionsBeforeOperation();
for ( PersistEventListener listener : listeners( EventType.PERSIST ) ) {
listener.onPersist( event );
}
checkNoUnresolvedActionsAfterOperation();
}
Вот первый вызов метода JTA.
Объект боба выглядит так:
@Entity
@Table(name = "Example_Table")
public class ExampleObj implements Serializable {
...
Итак, мой вопрос:
Необходимо ли внедрять JTA для Hibernate JDBC и каковы могут быть преимущества использования JTA?