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

时间:2012-10-09 12:35:17

标签: java websphere classloader websphere-7 classcastexception

我正在开发外部化资源适配器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上。

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

此致

2 个答案:

答案 0 :(得分:1)

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

在嵌入它之前它起作用,因为RAR使用相同的ClassLoader。

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

答案 1 :(得分:0)

您可以查看classloaders。它会显示所有装载的罐子。