0

我正在研究外部化资源适配器 rars。

早些时候,rar被打包在war的/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`s。

我是如何解决的:当我们通过 WAS 管理控制台安装 rar 时,可以选择提供类路径。我在那里提供了导致类路径问题的罐子。我可以部署并启动我的应用程序

问题:

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

我得到一个例外

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

我挖出来发现一个可能的原因是同一个罐子的多个版本。这是我的情况。我在战争库中有一个 jar 版本,也在资源适配器的类路径上。

我在这里有点想法。如何解决这种情况。请帮忙

问候

4

2 回答 2

0

您可以检查类加载器。它将显示所有已加载的罐子。

于 2012-10-09T17:53:40.973 回答
0

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

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

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

于 2012-10-10T07:20:09.703 回答