0

私は、リソース アダプターの rar を外部化する作業を行っています。

以前は、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 の 1 つにコード行があり (これは問題を引き起こし、リソース アダプターのクラスパスに追加されました。現在、これは war 内にあり、リソース アダプターのクラスパスにも存在することに注意してください)、型キャストを行っています。今回の発言について

例外が発生します

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

掘り下げたところ、考えられる原因は同じjarの複数のバージョンであることがわかりました。これは私の場合です。war ライブラリ内とリソース アダプタのクラスパス上に jar のバージョンがあります。

私はここでちょっとアイデアがありません。このような状況を解決するために何をすべきか。助けてください

よろしく

4

2 に答える 2

0

RAR と WAR には独自の ClassLoader があり、同じバージョンの jar を使用しても、それぞれが個別にクラスをロードし、ClassCastException が発生します。

RARが同じClassLoaderを使用していたため、埋め込まれた前は機能していました。

RAR が分離された場合、単一の ClassLoader によってロードされるように、jar を共有ライブラリに配置する必要があると思います。

于 2012-10-10T07:20:09.703 に答える
0

クラスローダーを確認できます。ロードされているすべての jar が表示されます。

于 2012-10-09T17:53:40.973 に答える