我正在开发外部化资源适配器rars。
早些时候,rar被打包在战争的/ lib中,一切运转良好。现在,为了使战争光和通用,我想外化资源适配器。我做了什么
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中有一行代码(导致问题并被添加到资源适配器的类路径中,请注意,目前这在war中以及资源适配器的类路径中都存在),即进行类型转换。 现在就这个声明
我得到了一个例外
java.lang.ClassCastException: com.csc.fs.ra.SimpleMappedRecord incompatible with com.csc.fs.ra.SimpleMappedRecord
我挖出来发现可能的原因是同一个罐子的多个版本。这是我的情况。 我在war库中有一个jar版本,也在资源适配器的classpath上。
我在这里有点想法。该怎么做才能解决这种情况。请帮忙
此致
答案 0 :(得分:1)
RAR和WAR有自己的ClassLoader,即使你使用相同版本的jar,它们中的每一个都单独加载类,你得到ClassCastException。
在嵌入它之前它起作用,因为RAR使用相同的ClassLoader。
如果RAR现在是独立的,我认为您必须将jar放在共享库中,以便它由单个ClassLoader加载。
答案 1 :(得分:0)
您可以查看classloaders。它会显示所有装载的罐子。