提问者:小点点

WebSphere和Hibernate:NoClassDefFoundError


一位开发人员解决了Hibernate 3和WAS7.5的一个问题,其中WAS7.5显然使用了hibernate jpa桥的旧版本。开发人员将jpa2.0jar放在ext文件夹中,让WAS2将其加载到引导类加载器中,因此使用了更新的版本。这实际上是可行的,但“感觉不对劲”。

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

所以这是一个很好的时机来重新审视这个问题并问,解决这个问题的“正确”方法是什么?或者,如果你不知道“正确”的方法,我该如何做相当于was 8.5.5中的ext文件夹技巧?

如果你好奇,确切的错误是:

java. lang.NoClassDefFoundError:javax.持久化.属性转换器


共1个答案

匿名用户

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

好的,就这样。如果有解决此类问题的正确方法,那么将JAR添加到WebSphere的ext目录中肯定不是。WebSphere为您提供了将第三方库添加到运行时的其他工具;不要使用ext目录。事实上,如果您想确保更好的可运维性(例如修复包的正确实现等),请不要使用整个WebSphere安装目录。

根据我的经验,最好的行动方案是:

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