我在我的 Payara/Glassfish 4.1.1 服务器上部署 EAR 项目时遇到了一个巨大的问题,从几天以来我都无法解决。
希望有人能帮助我!
我的设置 -> 我有一个 EJB/JPA eclipse 项目“CommonPersistanceAndService”,其中包含我的 JPA 实体、我的 Databaseproducer 和一些基本的服务类。
我有一个使用这个 EJB/JPA 项目的 webproject,所以我知道我的 databaseproducer 工作正常:
@Singleton
@Startup
public class DatenbankProducer implements Serializable{
private static final long serialVersionUID = 2605227297803488033L;
@PersistenceContext(unitName="XYZdb")
EntityManager emXYZProd;
@PersistenceContext(unitName="XYZtest")
EntityManager emXYZTest;
@Inject ApplicationConfig appConfig;
@Inject Logger logger;
public XYZDatenbankProducer() { }
@Produces
@XYZDatenbank
public EntityManager getEntityManager(){
if(appConfig.isBetriebsmodusTest())
return emXYZTest;
return emXYZProd;
}
@PostConstruct
public void initDBConnection(){
Query q = getEntityManager().createNativeQuery("select * from zconnectiontest");
q.getSingleResult();
logger.info("=== Connection to Database established");
}
}
现在在 EAR 项目中使用相同的 EJB/JPA 项目以及项目“Batchjobs”,该项目只有一个带有调度程序的服务类
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
<display-name>Batchjobs-EAR</display-name>
<module>
<ejb>Batchjobs.jar</ejb>
</module>
<module>
<ejb>CommonPersistanceAndService.jar</ejb>
</module>
</application>
我还将 EJB/JPA 项目中的所有 jar 文件依赖项复制到 EAR/lib 目录。EAR 部署正确,但是当调度程序调用服务时,我收到以下错误:
Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName XYZtest
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper.java:138)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:171)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNativeQuery(EntityManagerWrapper.java:557)
at com.isg.kis.application.XYZDatenbankProducer.initDBConnection(XYZDatenbankProducer.java:48)
... 122 more
当我调试 emXYZTest 的程序时,EntityManagerWrapper 的对象没有注入 EntityManagerFactory!?当我在我的 Web 项目中做同样的事情时,会有一个 EntityManagerFactory。
所以问题是 - 为什么 EntityManagerFactory 没有被注入到 EAR 部署中!?
到目前为止,我没有尝试过任何工作。任何想法是什么导致这个问题?
提前致谢
托马斯