2012-05-12 9 views
1

私のアプリケーションはJBoss 5.1.0.GA上でSpring Framework 3.0.5を使用しています。フレームワークはサーバーによって提供されます。つまり、フレームワークライブラリはserver/<servername>/libディレクトリに配置されます。サーバーは第三者によって管理されているため、このサーバーが提供する環境にはライブラリを追加できません。私のアプリケーションではcglibを使う必要があります。 Springはそれをプロキシの目的で使用します。 cglibはserver/<servername>/libにありません。したがって、cglib-2.2.2.jarを私のアプリケーション.warとmavenに含めました。Spring FrameworkはJBoss上でcglibを表示しません

問題は、次のエラーがデプロイにoccuresことです:

できませんプロキシターゲットクラスCGLIB2が使用できないため。 CGLIB をクラスパスに追加するか、プロキシインターフェイスを指定します。

私のアプリ.warをcglibにチェックしたところ、WEB-INF/libディレクトリにあります。 AFAIKこのディレクトリにあるjar内のすべてのクラスは、クラスパスにあり、jarファイル内のクラスはserver/<servername>/libです。なぜSpringがcglibを見つけられないのですか?

答えて

3

この質問のために、JBossクラスローダー階層は "ダウン"するだけです。つまり、システムクラスローダーによってロードされたクラスはアプリケーションのlibディレクトリ内のクラスを見ることができません。したがって、サーバーのlibディレクトリのSpringライブラリは、アプリケーションのlibディレクトリのcglibを見ることができません。好みの順で

可能な解決策は、:

  1. サーバーのlibディレクトリから春のJARファイルを取り除きます。彼らはそこにいるべきではありません、それは単なる悪い考えです。しかし、あなたはこれをすることはできないと言います。
  2. サーバーのlibディレクトリにcglibを追加します。上記と同じ理由でオプションではありません。
  3. アプリのlibディレクトリにSpring JARの重複を追加します。それらがサーバーとまったく同じであることを確認するか、奇妙なクラスバージョンの競合を危険にさらします。これにより、cglibを解決できるはずです。

オプション3はクラスローダー間のクラスを複製することはクラスローダーの問題のレシピですが、これは唯一の選択肢かもしれません。

関連する問題