2017-03-28 34 views
0

我想将我的项目从JSF1.2,Hibernate 3.x,Jboss 4.3迁移到JSF 2.1,Hibernate 4.x和Jboss EAP 6.3。在启动过程中,我得到一个错误,指出 `Jboss 7休眠模块没有找到持久性xml类

10:46:35,776 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 48) MSC000001: Failed to start service jboss.persistenceunit."MyEAR.ear#myJPA": org.jboss.msc.service.StartException in service jboss.persistenceunit."MyEAR.ear#myJPA": javax.persistence.PersistenceException: [PersistenceUnit: myJPA] class or package not found 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:103) [jboss-as-jpa-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [rt.jar:1.6.0_45] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [rt.jar:1.6.0_45] 
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_45] 
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1] 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: myJPA] class or package not found 
    at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1410) 
    at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:1193) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1057) 
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:702) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:75) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:200) [jboss-as-jpa-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$600(PersistenceUnitServiceImpl.java:57) [jboss-as-jpa-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:99) [jboss-as-jpa-7.4.0.Final-redhat-19.jar:7.4.0.Final-redhat-19] 
    ... 4 more 
Caused by: java.lang.ClassNotFoundException: 
     com.xxx.persistence.Agent from [Module "org.hibernate:main" from local module loader @26a3960 (finder: local module finder @bdccedd (roots: C:\JbossEAP6.3\jboss-eap-6.3\modules,C:\JbossEAP6.3\jboss-eap-6.3\modules\system\layers\base))] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:213) [jboss-modules.jar:1.3.3.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:459) [jboss-modules.jar:1.3.3.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:447) [jboss-modules.jar:1.3.3.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:414) [jboss-modules.jar:1.3.3.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:389) [jboss-modules.jar:1.3.3.Final-redhat-1] 
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:134) [jboss-modules.jar:1.3.3.Final-redhat-1] 
    at java.lang.Class.forName0(Native Method) [rt.jar:1.6.0_45] 
    at java.lang.Class.forName(Class.java:249) [rt.jar:1.6.0_45] 
    at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:170) 
    at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1327) 
    at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1399) 
    ... 11 more 

`

我的耳朵结构如下。

  • MyEAR.ear
  • MyWAR.war(持久性单元myJPA存在于WEB-INF /类/ META-INF)
  • MyEJB.jar(持久性单元myJPA存在于META-INF)
  • LIB/MyJPA.jar(持久性单元myJPA是在META-INF本)
  • META-INF

我的JBoss部署-structure.xml如下所示。 `

<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
      <module name="deployment.MyJPA" /> 
     </dependencies> 
     <resources> 
      <resource-root path="MyJPA.jar" /> 
     </resources> 
    </deployment> 
    <sub-deployment name="MyWAR.war"> 
     <dependencies> 
      <module name="deployment.MyEAR.ear.MyEJB.jar" /> 
      <module name="deployment.MyJPA" /> 
     </dependencies> 
    </sub-deployment> 
    <sub-deployment name="MyEJB.jar"> 
     <dependencies> 
      <module name="deployment.MyJPA" /> 
     </dependencies> 
    </sub-deployment> 
    <module name="deployment.MyJPA" > 
     <resources> 
      <resource-root path="lib/MyJPA.jar"/> 
     </resources> 
    </module> 
</jboss-deployment-structure> 

` 我是新来的Jboss 7所以请让我知道,如果我的设置不正确。

回答

0

因此,在深入挖掘并了解迁移之后,事实证明,与jboss捆绑在一起的hibernate无法正确读取我的persistence.xml文件。我的持久性xml有用下面的回车写的类。

<class> 
com.someClass 
</class> 

我相信hibernate在类名中包含换行符/回车符,因此没有找到它。它在以前的休眠3中工作正常。 虽然我明白我的格式不正确,但我希望hibernate能够修剪和使用类名。无论如何,我的问题已解决,希望有人认为这有帮助。