ClassNotFoundException в Jboss EAP 6, но файл находится в пути к классам (WEB-INF/lib)

В моем проекте я обновляю версию hibernate 3.2 до 4.1(которая по умолчанию предоставляется в JBoss EAP 6.0) и устанавливаю версию ehcache на 2.8.0.

Я добавил hibernate-ehcache-4.2.8.Final.jar в classpath(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 в classpath я добавил зависимость в jboss-deploy-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

Я вижу, что класс находится в банке. Я думаю, что это из-за некоторой проблемы с classpath модуля jboss... просить предложения.

PS: я не использую Maven. Используя at, чтобы построить.

1 ответ

Решение

Вы столкнулись с той же проблемой, как описано в этом ответе.

В вашем конкретном случае JAR-файлы Hibernate загружаются загрузчиком классов, который является предком загрузчика классов, который загружает hibernate-ehcache-4.2.8.Final.jar, Таким образом, эти классы не могут видеть org.hibernate.cache.ehcache.*,

Решением было бы создать модуль для EHCache и использовать этот модуль вместо того, чтобы включать jar в WEB-INF/lib.

Другие вопросы по тегам