我有一个曾经在许多 Web 服务器(tomcat、jboss、weblogic 和 websphere)上运行良好的 Web 应用程序。但是,现在在 WebSphere 9 上部署时出现错误。
该应用程序包含 jar javax.transaction-api-1.2。它的一些类,例如 ,javax.transaction.xa.XAResource
也包含在 Java SE 中,但不是全部。有些是 Java EE 特有的,并且是我的应用程序中的一些 3rd-party 库所必需的。该应用程序始终使用子优先(父最后)类加载器进行部署。当应用程序尝试加载 Oracle JDBC 驱动程序时,WebSphere 9 在启动期间抛出此错误:
java.lang.LinkageError: loading constraint violation: loader "com/ibm/ws/classloader/CompoundClassLoader@7157be44" previously initiated loading for a different type with name
"javax/transaction/xa/XAResource" defined by loader "com/ibm/oti/vm/BootstrapClassLoader@422c7b1b"
请注意,我们实际上并没有在应用程序中使用 XA 事务,而是使用常规事务。
在其他服务器和先前版本的 WebSphere 上,这从来都不是问题。服务器并不关心我们XAResource
是从战争内部加载的,即使它之前是在服务器的某个地方加载的。现在 WebSphere 9 不同了,它说应用程序类加载器已经从服务器加载了这个类,但我不知道为什么或何时发生这种情况。
知道如何解决这个问题吗?