Jakarta ee 在Glassfish中重新加载/重新部署JPA应用程序的问题

Jakarta ee 在Glassfish中重新加载/重新部署JPA应用程序的问题,jakarta-ee,jpa,deployment,glassfish-4,Jakarta Ee,Jpa,Deployment,Glassfish 4,根据我最近的问题,我们在将多个应用程序WAR部署到包含JPA/EJBJAR文件的同一个Glassfish4服务器时遇到了问题。目前,我们在每次战争中都包含jar文件 我们已经编写了一个简单的测试servlet,它将向数据库中插入记录。我们可以重新加载、重新部署(同一个war)和取消部署/部署(同一个war)该应用程序,每次JPA都可以正常工作/重新启动服务器 我们还有另一个应用程序是RESTFul服务(Jersey),如果重新加载,在访问JPA服务bean时会出现以下异常: java.lang.

根据我最近的问题,我们在将多个应用程序WAR部署到包含JPA/EJBJAR文件的同一个Glassfish4服务器时遇到了问题。目前,我们在每次战争中都包含jar文件

我们已经编写了一个简单的测试servlet,它将向数据库中插入记录。我们可以重新加载、重新部署(同一个war)和取消部署/部署(同一个war)该应用程序,每次JPA都可以正常工作/重新启动服务器

我们还有另一个应用程序是RESTFul服务(Jersey),如果重新加载,在访问JPA服务bean时会出现以下异常:

java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManagerFactory.
如果我们重新部署应用程序(使用相同的war)并尝试访问服务bean,则会出现以下错误:

Caused by: java.lang.IllegalArgumentException: Object: Change ID=ABCD is not a known entity type.
其中“ABCD”是传递给批处理实体的setChangeId()方法的值

我发现了这个Glassfish bug(应该在v4中修复,但似乎没有),它指出一个解决方法是完全取消部署/部署。完成后,我们得到同样的IllegalArgumentException

在所有这些错误情况下,必须重新启动服务器才能使应用程序再次工作

在没有重新加载/重新部署问题的测试应用程序和另一个应用程序之间肯定有一些不同,但我找不到它。两个应用程序都包含相同的EJB/JPA jar文件。这两个应用程序都像这样注入服务bean:

@EJB
private transient DataService dataService;
@PersistenceContext(unitName = "data")
private EntityManager em;
我们在JPA服务bean中注入EntityManager,如下所示:

@EJB
private transient DataService dataService;
@PersistenceContext(unitName = "data")
private EntityManager em;
我还应该看到什么不同之处

Persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

    <persistence-unit name="data" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/data</jta-data-source>            
        <properties>
            <!-- disable ddl generation -->
            <property name="eclipselink.ddl-generation" value="NONE"/>

            <!-- log sqls executed in server.log -->
            <property name="eclipselink.logging.level" value="INFO" />

            <!-- Instruct EclipseLink to not log execeptions it throws. Lets the application  decide about it -->
            <property name="eclipselink.logging.exceptions" value="false" />
        </properties> 
    </persistence-unit>         
</persistence>

org.eclipse.persistence.jpa.PersistenceProvider
jdbc/data
更新


我看到一个网页,暗示管理控制台应用程序中存在用于重新部署应用程序的错误,并且使用asadmin CLI应该可以工作。因此,我尝试过以这种方式部署/取消部署,但仍然有相同的错误。

您是否手动访问代码中的某个地方的
EntityManagerFactory
?否。在我们的JPA服务bean中,我们注入了EntityManger。已用代码更新问题。请将您的
persistence.xml
添加到问题。已添加。但我认为这不应该成为问题的一部分。我认为这两个应用程序都会出现问题,如果是的话……为什么要使用持久性版本1.0?也许这会有所不同?