【问题标题】:Why is there no transaction in my thread? JPA JTS/JTA Glassfish 4为什么我的线程中没有事务? JPA JTS/JTA 玻璃鱼 4
【发布时间】:2014-02-26 22:08:39
【问题描述】:

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

为了简化测试,我将我的一个 EJB 声明为 @Webservice,以便我可以使用 glassfish 提供的测试器触发一个方法。到目前为止一切顺利。

调用栈是这样的: DailyReportingJob(@Stateless 和 @WebService,我测试的入口点) --> VerfahrensArchivService(@Stateless 和 @Transactional(value = 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/zvagentdb 的 jdbc 资源,它指向该池。

当我触发网络服务时,我看到我的应用正在运行。但是,当我尝试调用 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) 

之后数据库为空。未存储任何数据。

(我有 JUnit 测试,在没有应用服务器的情况下完全在本地工作,这表明代码可以存储数据。所以这是事务问题,而不是业务代码中的问题。)

【问题讨论】:

  • 如果有人可以为我提供一个在 glassfish 4 上运行并使用 derbyDB 的示例 JEE5 maven 项目,那就太好了。就像一个代码 sn-p。或者,也许您可​​以指出一个设置教程。

标签: java web-services jpa glassfish jta


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    相关资源
    最近更新 更多