Jpa 从ear内部的jar访问数据库

Jpa 从ear内部的jar访问数据库,jpa,jakarta-ee,eclipselink,Jpa,Jakarta Ee,Eclipselink,在ear文件中,我有一个持久化单元,用于管理ear中的实体,这很好。此外,APP-INF/lib中还有一个commons jar文件,它也是其他ear(同一级别的其他ear模块)中的一个依赖项。在这个commons jar中,我希望有一个实体,并在该实体上创建CRUD的可能性。现在它是一个只有额外持久性单元的jar(但与ear的db相同),我无法将其全部设置好。该持久性单元是否也由容器管理?我也可以在jar文件中使用EJB吗?有可能做我想做的事吗 我创建了如下实体 @Entity public

在ear文件中,我有一个持久化单元,用于管理ear中的实体,这很好。此外,APP-INF/lib中还有一个commons jar文件,它也是其他ear(同一级别的其他ear模块)中的一个依赖项。在这个commons jar中,我希望有一个实体,并在该实体上创建CRUD的可能性。现在它是一个只有额外持久性单元的jar(但与ear的db相同),我无法将其全部设置好。该持久性单元是否也由容器管理?我也可以在jar文件中使用EJB吗?有可能做我想做的事吗

我创建了如下实体

@Entity
public class ConfigEntity {

  @Id
  private Long id;
  @Version
  private Long version;

  [further fields, getters and setters omitted]

}
使用下面的“道”,我试着从耳朵里的一个豆子中调用isEntityManagerNull

public class ConfigBEDao {

  @PersistenceContext(unitName = "configurationPU")
  EntityManager entityManager;

  public boolean isEntityManagerNull() {
    return entityManager == null;
  }

}
persistence.xml

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

    <persistence-unit name="configurationPU" transaction-type="RESOURCE_LOCAL">
        <description/>
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/db</jta-data-source>
        <properties>
            <property name="eclipselink.target-database" value="${database.dialect}"/>
            <property name="eclipselink.logging.level" value="FINE"/>
            <property name="eclipselink.logging.parameters" value="true"/>
            <property name="eclipselink.cache.shared.default" value="false"/>
        </properties>
    </persistence-unit>
</persistence>
在尝试在服务器(payara)上部署时,我已经遇到了以下异常:

然后,我对persistence.xml进行了如下更改,但这也不起作用,尽管可以部署应用程序:

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

    <persistence-unit name="configurationPU" transaction-type="RESOURCE_LOCAL">
        <description/>
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/db"/>
            <property name="javax.persistence.jdbc.user" value="db"/>
            <property name="javax.persistence.jdbc.password" value="secret"/>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

您可能希望尝试一个简单的教程,并在进行复杂更改之前使其正常工作。例如,您将其设置为transaction type=“RESOURCE_LOCAL”,但随后告诉它使用JTA数据源—持久化单元使用JTA或不使用JTA。第二,如何在持久化单元中解析“${database.dialogue}”?但是,您遇到的错误似乎是没有加载持久性单元(因为它会显示上面提到的persistence.xml文件的其他错误),请参见“确定”,谢谢。我会试着这样做,然后回来。
java.lang.RuntimeException: Could not resolve a persistence unit corresponding to the persistence-context-ref-name [ConfigBEDao/entityManager] in the scope of the module called [main_ear-1.0-SNAPSHOT#main_ejb-1.0-SNAPSHOT.jar]. Please verify your application.
    at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUViaEMRef(BundleDescriptor.java:733)
    at org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl.findReferencedPUs(EjbBundleDescriptorImpl.java:889)
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:186)
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

    <persistence-unit name="configurationPU" transaction-type="RESOURCE_LOCAL">
        <description/>
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/db"/>
            <property name="javax.persistence.jdbc.user" value="db"/>
            <property name="javax.persistence.jdbc.password" value="secret"/>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
        </properties>
    </persistence-unit>
</persistence>
javax.persistence.PersistenceException: No Persistence provider for EntityManager named configurationPU
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)