java - 外部化资源适配器给出 : java. lang.ClassCastException someclass 与 someclass 不兼容

标签 java websphere classloader websphere-7 classcastexception

我正在致力于外部化资源适配器 rars。

之前,rar 被打包在 war 的/lib 中,一切都运行良好。现在,为了使 war 变得轻松且通用,我想外部化资源适配器。

我已经做了什么

Removed rars from war 
installed rar externally through WAS7.0 Admin console
configured J2C connection factories for each RAR 

我进行了一次干净的重新启动,并得到了一些 ClassNotFoundErrors。

为什么会出现这些错误: 基本上,rars 使用/lib 中存在的一些 jar。所以之前没有问题,但现在当我将其外部化时,我开始获得 CNFE。

我是如何解决的: 当我们通过 WAS 管理控制台安装 rar 时,有一个提供类路径的选项。我在那里提供了在类路径上引起问题的 jar 。我可以部署并启动我的应用程序

问题:

当我登录我的应用程序时。其中一个 jar 中有一行代码(导致问题并被添加到资源适配器的类路径中,请注意,当前它存在于 war 中以及资源适配器的类路径中),正在执行类型转换。 现在就这个声明

我遇到异常

java.lang.ClassCastException: com.csc.fs.ra.SimpleMappedRecord incompatible with com.csc.fs.ra.SimpleMappedRecord

我挖掘并发现可能的原因是相同 jar 的多个版本。我的情况就是这样。 我在 war 库中有一个 jar 版本,并且在资源适配器的类路径上也有一个版本。

我有点没有想法了。该怎么做才能解决这种情况。请帮忙

问候

最佳答案

RAR 和 WAR 都有自己的 ClassLoader,即使您使用相同版本的 jar,它们中的每一个都会单独加载类,并且您会得到 ClassCastException。

在嵌入之前它可以工作,因为 RAR 使用相同的类加载器。

如果 RAR 现在是独立的,我认为您必须将 jar 放在共享库中,以便它可以由单个类加载器加载。

关于java - 外部化资源适配器给出 : java. lang.ClassCastException someclass 与 someclass 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12800178/

相关文章:

java - Java ClassLoader 是否加载内部类?

java - 通过 URL 路径 POST/PUT 与 JAX-RS Jersey 中的参数

deployment - 23MB EAR 的 wsadmin AdminApp.install 挂起

java - GridBagConstraints 无法正常工作?需要从面板的最左侧开始

jakarta-ee - 将 EAR 部署到 WebSphere 时,出现 "duplicate entry"SaveFailureException 的原因是什么?

tomcat - 是否可以在没有单独的 J2EE 容器部署的情况下虚拟化 war 文件执行?

java - 设置 WAR 中 jar 的优先顺序

scala - 在 scala 2.10 中使用 typetag 获取类加载器

java - 无法从 java xml 解析器中的当前节点获取 NodeList

java - Redis 每个应用程序生命周期一个连接