2014-02-26 52 views
0

我正在編寫一個部署在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測試,這項工作沒有應用程序服務器,該節目完全是本地的,該代碼將存儲數據,所以它的交易問題,在業務代碼沒有問題的。)

+0

如果有人能夠爲我提供一個在glassfish 4上運行並使用derbyDB的sampel JEE5 maven項目,那就太棒了。就像一個代碼片段。或者,也許你可以指出一個教程,設置一個。 – KFleischer

回答

0

我終於發現,配置沒有問題。包裝是垃圾,我得到的錯誤只是跟進錯誤。

相關問題