【问题标题】:Glassfish v4 Transaction Manager not found未找到 Glassfish v4 事务管理器
【发布时间】:2013-09-11 10:11:35
【问题描述】:

将应用程序从 IntelliJ 重新部署到 Glassfish v4 时抛出以下异常:

[2013-09-11T12:55:44.122+0300] [glassfish 4.0] [SEVERE] [] [javax.enterprise.system.core] [[
  Exception while deploying the app [gtwcustreporter_war_exploded] : Exception [EclipseLink-23004] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error obtaining the Transaction Manager
Internal Exception: Exception [EclipseLink-23001] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error looking up external Transaction resource under JNDI name [java:appserver/TransactionManager]
Internal Exception: javax.naming.NameNotFoundException: remaining name: /appserver/TransactionManager]]

但是,重新启动整个服务器并部署应用程序可以正常工作。只有重新部署失败。

我的假设是应用程序描述符中缺少某些内容,但我似乎找不到我的错误。

我在 Glassfish 的 JDBC 数据库池和 JDBC 资源中定义了数据库(MySQL)(当事务管理器不崩溃时,我可以对其进行读写)

这是我的 persistence.xml:

<persistence-unit name="GTWunit" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/gtwcust</jta-data-source>
    <class>net.metarex.ga.jpa.LocationCode</class>
    <class>net.metarex.ga.jpa.Shipment</class>
</persistence-unit>

在工件中,我添加了 Glassfish 提供的 LIB 和 Java-EE 6 作为编译依赖项。

任何想法可能是根本原因?

【问题讨论】:

    标签: jakarta-ee glassfish war glassfish-4


    【解决方案1】:

    您是否尝试过直接部署到 GlassFish?在 IntelliJ 之外重新部署是否也会失败?

    您在persistence.xml 中明确包含实体类的任何特定原因。

    持久化提供者也是如此。

    您为什么按照提供的方式添加 GlassFish 的 LIB。标准的 Java EE 6 应用程序甚至不需要这样做。

    【讨论】:

    • 自从这篇文章以来我已经清理了很多:persistence.xml 也没有提供程序和类,并且还删除了 Java-EE6 库(因为我有一些 7 东西,比如 multi-catch和字符串开关)。在 IntelliJ 之外部署也会失败 - 通过 admin 实用程序和 asadmin 命令。然而,在一个不眠之夜之后,我认为我发现了问题:来自我的应用程序需要使用的 api 的类路径问题。我想知道是否可以以某种方式隔离一个 jar 以仅由另一个 jar 使用,而不是由整个服务器。
    • multi-catch 和 string switch 是 JDK 7,它们可以独立于 Java EE 版本使用。似乎 OSGi 可能适用于您的情况,需要了解更多详细信息。
    • 从未在 OSGI 中做过任何事情。基本上情况是:API 在 2 个 jars 中(相互依赖),必须在我的项目中。然而,API 是针对 Weblogic 服务器进行编码的,因此我需要在 GF 中包含一些巨大的 (50 MB) weblogic.jar(当前位于 glassfish/glassfish/lib 下)。从外观上看,这是一个 weblogic 服务器的一半,所以有时我的应用程序会尝试从它而不是 GF 中查找容器事务管理器..
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2011-12-10
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多