Jboss EAP 6中的ClassNotFoundException,但jar在classpath(WEB-INF / lib)中

时间:2014-01-03 14:58:28

标签: hibernate jboss jboss7.x ehcache

在我的项目中,我正在将hibernate版本3.2升级到4.1(JBoss EAP 6.0中默认提供)并将我的ehcache版本设置为2.8.0。

我已将hibernate-ehcache-4.2.8.Final.jar添加到类路径(web-inf / lib /)并更改了我的ehcache配置,

<prop key="hibernate.cache.region.factory_class">
                org.hibernate.cache.ehcache.EhCacheRegionFactory
            </prop>
            <prop key="net.sf.ehcache.configurationResourceName">ehcache.xml</prop>

用于在类路径中加载Hibernate类我在jboss-deployment-structure.xml中添加了依赖项,如下所示。

 <module name="org.hibernate" export="true"/>
<module name="org.hibernate.commons-annotations" export="true"/>

但是在启动服务器时我遇到了这个错误,

Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.cache.ehcache.EhCacheRegionFactory]
at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:141) [hibernate-core-4.1.3.Final-redhat-1-JBPAPP-9359.jar:4.1.4-SNAPSHOT]
at org.hibernate.cfg.SettingsFactory.createRegionFactory(SettingsFactory.java:386) [hibernate-core-4.1.3.Final-redhat-1-JBPAPP-9359.jar:4.1.4-SNAPSHOT]
... 68 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.hibernate.cache.ehcache.EhCacheRegionFactory
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$1.findClass(ClassLoaderServiceImpl.java:99) [hibernate-core-4.1.3.Final-redhat-1-JBPAPP-9359.jar:4.1.4-SNAPSHOT]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) [rt.jar:1.7.0_05]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) [rt.jar:1.7.0_05]
    at java.lang.Class.forName0(Native Method) [rt.jar:1.7.0_05]
    at java.lang.Class.forName(Class.java:264) [rt.jar:1.7.0_05]
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138) [hibernate-core-4.1.3.Final-redhat-1-JBPAPP-9359.jar:4.1.4-SNAPSHOT]
    ... 69 more

我可以看到这个类在jar中。我认为这是由于一些jboss模块类路径问题......寻求建议。

P.S。 :我不是在使用maven。用at来构建。

1 个答案:

答案 0 :(得分:1)

您遇到的问题与this answer中描述的相同。

在您的特定情况下,Hibernate JAR由类加载器加载,类加载器是加载hibernate-ehcache-4.2.8.Final.jar的类加载器的祖先。因此,这些类无法看到org.hibernate.cache.ehcache.*

解决方案是为EHCache创建一个模块并使用该模块,而不是将jar包含在WEB-INF / lib中。