为什么我的线程中没有事务?JPA JTS/JTA Glassfish 4



我正在编写一个部署在glassfish 4上的小型EJB3应用程序,并使用glassfish附带的derbyDB。

为了简化测试,我将我的一个EJB声明为@Webservice,这样我就可以用glassfish提供的测试人员触发一个方法。到目前为止还不错。

调用堆栈如下所示:DailyReportingJob(@Stateless和@WebService,我的测试的入口点)-->VerfahrensArchivService(@无状态和@事务(值=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>

我在glassfish中配置了一个资源类型为javax.sql.DataSource的连接池,以及一个指向该池的名称为jdbc/zvangentdb的jdbc资源。

当我触发Web服务时,我看到我的应用程序正在工作。但是,当我尝试调用VerfahrensArchivService(它应该将数据存储到DB)时,会出现以下警告。在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测试,它们完全在本地运行,没有appserver,表明代码会存储数据。所以这是一个事务问题,而不是业务代码中的问题。)

我终于发现配置没有问题。包装是垃圾,我得到的错误只是后续错误。

最新更新