当前位置: 首页 > 知识库问答 >
问题:

WebSphere 9上javax.transaction.*类的LinkageError

单于山
2023-03-14

我有一个Web应用程序,它曾经在许多Web服务器(tomcat、jboss、weblogic和webphere)上运行良好。但是,现在,它在WebSphere 9上部署时出现错误。

该应用程序包含jarjavax.transaction-api-1.2。它的一些类,例如javax.transaction.xa.XAResource,也包含在JavaSE中,但不是全部。有些特定于JavaEE,并且是我的应用程序中的一些第三方库所需要的。该应用程序始终使用子优先(父级最后)类加载器进行部署。当应用程序尝试加载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上,这从来都不是问题。服务器不在乎我们从war内部加载< code>XAResource,即使它之前已经加载到服务器的某个地方。现在WebSphere 9不一样了,它说app classloader已经从服务器加载了这个类,但是我不知道为什么或者什么时候会这样。

任何想法如何解决这个问题?

共有2个答案

韦辰钊
2023-03-14

最后我们做了两件事来解决这个问题。

1)我们将jta jar升级到1.3版(链接在这里)。这个jar通过避免重复类解决了问题——它只包含J2EE类,省略了JVM中已经包含的J2SE类。2)我们将WebSphere服务器从9.0.0.7升级到9.0.0.11。

当时,我怀疑仅仅升级罐子就足够了,但是我们的质量保证有一些问题,他们也升级了服务器。由于时间不够,我们没有进一步调查,只是决定两者都做。

林彬
2023-03-14

从应用程序中删除事务API。JTA 1.2已经包含在服务器中,对您的应用程序没有任何价值。将Java EE/SE API引入一个父类-最后类加载器总是有风险的,除非你100%确定它们在技术上是必要的,因为它们会导致像这样的问题。

我不能说这在以前的服务器版本中是如何工作的(在实施这样的链接问题时有一些Java级别的更改),但是解决方案相当简单。

 类似资料:
  • 问题内容: 我试图使用Hibernate将项目“升级”到Java 9,但是在使模块正常运行方面遇到问题。 我的相关部分看起来像这样: 和我的POM中的相关依赖项是 ,2.0.0.Alpha1 ,5.2.12。最后 ,1.2 问题是,如果我运行该程序,则会得到for。我调查了一下,很显然,我的模块缺少on。 因此,我在上添加了模块依赖项。然后我继续尝试再次运行该程序- 现在我不见了。 这是我遇到的问

  • 问题内容: 我有一个用于过滤项目的界面: 和一个包含type成员的类。 当我尝试使用实现的匿名类来初始化时: 我有一个例外:。 如何使我编写的匿名类可序列化? 问题答案: 约书亚·布洛赫(Joshua Bloch)在他的《有效的Java,第二版》第74项中写道: 内部类 不应实现。它们使用编译器生成的 合成 字段来存储对 封闭实例的 引用,并存储来自封闭范围的局部变量的值。这些字段如何与类定义相对

  • 我正在创建一个验证字段的服务。如果该字段不符合我的规则,我会抛出一个ResourceBusinessException,这是我创建的一个类,用于处理不可处理的实体。但是,当抛出此异常时,Spring在类AbstractMessageConverterMethodProcessor上抛出NullPointerException。 首先,我的Spring版: } 我的ResourceBusinessE

  • 今天好,我有一个设计问题,我不能真正弄明白我的头,我希望我能解释清楚,让所有人都能理解。我有一个ClassA,它是一个包含ClassB的Arraylist的单例,所以ClassA是: 但是当我试图在另一个类中访问它时,我得到一个java.lang.IndexOutOfBoundsException:index:0,size:0,我猜这是来自ClassB保存ClassD的ArrayList的,因为其

  • 在我当前的代码(Java)中,我正在使用类级Java注释进行一些自定义注释处理,即注释。 目标类只包含静态实用程序方法,所以我在Kotlin中使用了文件范围的函数。如何将这些注释添加到生成的类中? 在Java中: 现在在静态编程语言中:

  • 问题内容: 我的实体具有以下结构: 我得到以下异常: 当我在Intermed类上将@MappedSuperclass更改为@Entity时,一切正常。使用@MappedSuperclass和@SequenceGenerator是否有任何问题?还是我错过了什么? 问题答案: 这是JPA 1.0规范对注释的说明: 9.1.37 SequenceGenerator批注 该注解定义了可以由名称当用于指定的