我正在編寫一個部署在glassfish 4上的小型EJB3應用程序,並使用了glassfish附帶的derbyDB。爲什麼我的線程中沒有交易? JPA JTS/JTA Glassfish 4
爲了讓測試變得簡單,我已經將我的一個EJB聲明爲@Webservice,所以我可以用glassfish提供的測試器觸發一個方法。到現在爲止還挺好。
調用堆棧是這樣的: DailyReportingJob(@Stateless和@WebService,入口點爲我的測試) - >VerfahrensArchivService(@Stateless和@Transactional(值= TxType.REQUIRES_NEW))
我的persistence.xml是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="zvagent">
<jta-data-source>jdbc/zvagentdb</jta-data-source>
<class>de.kevinfleischer.zvagent.verfahren.Verfahren</class>
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
<property name="eclipselink.deploy-on-startup" value="true"/>
</properties>
</persistence-unit>
</persistence>
我在的ressource型javax.sql中的GlassFish的配置連接池.DataSource和一個名爲jdbc/zvagentdb的jdbc資源指向此池。
當我觸發web服務時,我看到我的應用程序工作。但是,當我嘗試調用VerfahrensArchivService(應將數據存儲到數據庫)時,會顯示以下警告。在web服務測試器的web界面中,我會看到更多的InvocationTargetException,告訴我對「doPost」的調用失敗。
WARNING: javax.ejb.EJBException: java.lang.IllegalStateException: Transaction is not active in the current thread.
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2016)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
at com.sun.proxy.$Proxy455.storeAndUpdateVerfahren(Unknown Source)
at de.kevinfleischer.zvagent.archiv.__EJB31_Generated__VerfahrensArchivService__Intf____Bean__.storeAndUpdateVerfahren(Unknown Source)
at de.kevinfleischer.zvagent.job.DailyReportingJob.executeJob(DailyReportingJob.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
之後的DB爲空。沒有數據存儲。
(我有JUnit測試,這項工作沒有應用程序服務器,該節目完全是本地的,該代碼將存儲數據,所以它的交易問題,在業務代碼沒有問題的。)
如果有人能夠爲我提供一個在glassfish 4上運行並使用derbyDB的sampel JEE5 maven項目,那就太棒了。就像一個代碼片段。或者,也許你可以指出一個教程,設置一個。 – KFleischer