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