jboss hibernate库版本冲突:java.lang.NoClassDefFoundError:org / hibernate / cfg / ExtendedMappings

时间:2012-01-26 13:49:51

标签: java hibernate classloader jboss-4.0.x

我在我的代码中使用hibernate,并在jboss 4.0.5GA上运行我的应用程序。提供的jboss hibernate库不包含我需要的实体管理器。即使我在我的应用程序的lib目录中包含了hibernate 3.6.0,但在启动时却找不到它。

java.lang.NoClassDefFoundError: org/hibernate/cfg/ExtendedMappings
        at org.hibernate.ejb.Ejb3Configuration.(Ejb3Configuration.java:129)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)

........
Caused by: java.lang.ClassNotFoundException: Unexpected error during load of: org.hibernate.cfg.ExtendedMappings, msg=Implementing class
        at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:550)
        at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:405)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        ... 142 more
Caused by: java.lang.IncompatibleClassChangeError: Implementing class

我认为这是因为jboss的hibernate核心库是在随应用程序提供的hibernate 3.6 libs之前加载的。

问题是我无法更改JBOSS_HOME下的任何jar文件。我可以更改/提供各种jboss配置,因为我们将域目录设置为应用程序主目录,因此例如我们提供了一个jboss / conf / jboss-service.xml,我可以调整它。

我已经尝试了几种方法来解决这个问题,这就是我发现的:     如果我从JBOSS_HOME / server / default / lib中删除hibernate3.jar,问题就解决了     如果我将JBOSS_HOME / server / default / lib / hibernate3.jar替换为也修复它的正确版本(3.6.0)

我尝试了另一种方法:鉴于jboss提供了一个hibernate核心(版本3.2)而不是实体管理器或注释,我尝试提供实体管理器和放大器。我的应用程序中相同版本的hibernate(3.2.0GA)的注释库。然而,这导致了

java.lang.IllegalAccessError: tried to access method org.hibernate.cfg.Mappings
,因为(我认为)jar文件是由不同的类加载器/来自不同的存储库加载的。根据{{​​3}},所有hibernate库都需要从同一个地方加载。在我的情况下不可能。

我还尝试使用ear-deployer.xml来打开隔离的类加载。这打开了整个潘多拉的一系列例外情况,我认为我无法修复。

帮助!

0 个答案:

没有答案