我正在致力于外部化资源适配器 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/