Websphere和Hibernate:NoClassDefFoundError

时间:2014-05-15 19:20:50

标签: hibernate jpa websphere classloader

开发人员解决了Hibernate 3和WAS 7.5的问题,显然WAS使用旧版本的hibernate jpa桥。开发人员将jpa 2.0 jar放在ext文件夹中以使WAS在引导程序类加载器中加载它,因此使用更新版本。这实际上是有效的,但"感觉错了"。

我们最近在一些应用程序上升级到了Hibernate 4,并且在2.1中也做了同样的事情。现在我们正在迁移到WAS 8.5.5,它显然需要相同的处理。它似乎已更新为使用2.0,因为这些应用程序运行,但Hibernate 4应用程序需要2.1,并且ext文件夹技巧突然停止工作。

所以这是一个重新审视这个问题的最佳时机,并且会问,"权利"解决这个问题的方法?或者,如果你不知道"权利"如何在WAS 8.5.5中完成相当于ext文件夹技巧的方法?

如果您有点好奇,确切的错误是:

java.lang.NoClassDefFoundError:javax.persistence.AttributeConverter

1 个答案:

答案 0 :(得分:2)

(你的问题提到了WAS 7.5。没有这样的版本)

好的,就这样吧。如果有正确的方法来解决这些问题,那么将JAR添加到WebSphere的ext目录中肯定不是这样。 WebSphere为您提供了将第三方库添加到运行时的其他工具;单独离开ext目录。实际上,如果您希望确保更好的可维护性(例如正确实现修订包等),请单独保留整个WebSphere安装目录。

最好的行动方案(根据我的经验)将是:

  1. 在EAR中捆绑JPA 2.1 JAR文件以及Hibernate JAR文件(将它们放在EAR库中;默认情况下,这将是EAR中的/lib目录。)
  2. 最重要的是:将EAR的类加载器模式设置为PARENT_LAST