在我的项目中,我正在将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来构建。
答案 0 :(得分:1)
您遇到的问题与this answer中描述的相同。
在您的特定情况下,Hibernate JAR由类加载器加载,类加载器是加载hibernate-ehcache-4.2.8.Final.jar
的类加载器的祖先。因此,这些类无法看到org.hibernate.cache.ehcache.*
。
解决方案是为EHCache创建一个模块并使用该模块,而不是将jar包含在WEB-INF / lib中。