0
我正在開發一個小型應用程序,用於在struts2,ejb和JPA(Hibernate作爲提供)中將自學習作爲Wildfly 10與應用程序服務器進行自我學習。我試圖配置JTA以管理與容器。下面是我的代碼無法使CMT事務工作
業務服務(EJB)
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class BusinessService implements BusinessRemote {
@EJB
Dao bDao;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void updateAll(){
try {
dao.saveAll(xyz);
} catch (Exception e) {
e.printstacktrace();
}
try {
dao.updateAll();
} catch (Exception e) {
e.printstacktrace();
}
}
}
DaoImpl(EJB)
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class DaoImpl implements Dao {
@PersistenceContext(unitName="db")
private EntityManager entityManager;
public void saveAll(xyz) {
entityManager.persist(xyz);
}
public void updateAll() {
Query query = entityManager.createNamedQuery("getQuery.ById");
query1.executeUpdate();
}
}
的persistence.xml
<persistence-unit name="db" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:/DB</jta-data-source>
<properties>
<property name="javax.persistence.jdbc.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.transaction.jta.platform" value="org.hibernate.engine.transaction.jta.platform.internal.JBossStandAloneJtaPlatform" />
<property name="hibernate.current_session_context_class" value="jta"/>
<property name="hibernate.transaction.factory_class" value="org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl" />
</properties>
</persistence-unit>
,但我得到以下堆棧跟蹤時updateAll
方法被執行。
javax.persistence.TransactionRequiredException: Executing an update/delete query
看來,當更新查詢被觸發時,沒有活動事務存在。當我嘗試執行saveAll
方法時,雖然我沒有收到任何異常,但沒有任何內容保存在數據庫中。如果我嘗試刷新更改,則會給出以下例外。
javax.persistence.TransactionRequiredException: no transaction is in progress
所以這意味着在上述情況下容器根本不會啓動任何事務。似乎我的配置中缺少一些我無法找到的東西。