在IBM WebSphere application Server was 7中启动EJB应用程序时,我遇到了以下错误。
JPAPUnitInfo E CWWJP0015E:org.hibernate.ejb.HHibernate持久性提供程序尝试为创建容器实体管理器工厂*YOUR_PERSISTENCE_UNIT*持久性单元。出现以下错误:[PersistenceUnit:*YOUR_PERSISTENCE_UNIT*]类或包未找到
虽然这个错误消息在启动过程中可能不会被注意到,但最晚当你试图获取实体管理器时,你会看到这个错误:
javax.ejb.EJBException:注入失败;嵌套异常为:java.lang.IollegalStateException:EntityManagerFactory尚未为PU:PuId=创建
对于不同的错误场景,错误消息是相似的,所以你可以在网上找到很多解决方案,但没有一个适合。
事实上,错误消息class或package not found中的提示是正确的,尽管没有告诉丢失的类名,所以没有那么大帮助。
在我的例子中,我的persistence.xml中列出了一个类,它已经不存在了
要查看此错误消息的来源,请查看Ejb3Configuration.addNamedAnnotatedClasses(...)
,您会发现以下内容:
throw new PersistenceException( getExceptionHeader() + "class or package not found", cnfe );
因此,cnfe ClassNotFoundException
中提供了未找到类的信息,但不幸的是,它没有以某种方式传播到日志文件中。
要访问信息,只需在那里放置一个调试断点并检查cnfe
对象。
如果有人再次面临这个问题,就像最近我一样,有一种非常简单的方法可以找到确切的原因,但很容易忽略它。
WebSphere的主SystemOut/Err日志中没有显示此异常的确切日志。但是,它可以在ffdc日志中找到(即%APP_PROGILE_PATH%\logs\ffdc(。
查找类似的条目
[2/18/15 1:49:25:547 UTC] 0000004e FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on IBMAppSrvlogsffdcserver1_6d42a5e6_15.02.18_01.49.25.1322237127215208595734.txt com.ibm.ws.jpa.management.JPAPUnitInfo.createEMFactory 759
在SystemOut.log中的CWWJP0015E异常之前,查找事件的确切文件名。
如果没有此异常的条目,请尝试另外设置更高的日志级别。但是,对于默认的WebSphere设置,不应该要求它。1.转到:WebSphere Administration Console>疑难解答>日志和跟踪>服务器>诊断跟踪>更改日志详细级别2.将"com.ibm.ws.jpa.*"的日志记录级别设置为"All messages and traces"3.重新启动WebSphere