モジュール式のMavenプロジェクトがあり、「BIZ」と「EJB」の2つのモジュールに次のようなものが含まれています。
//PART OF "BIZ" Module:
public interface MyInterface{
public void foo();
}
............................................
public class ImplFactory{
public static MyInterface getInterfaceImplementation(){
MyInterface ret=null;
Class<? extends MyInterface> cl = null;
try {
cl= (Class<? extends MyInterface>) Class.forName("InterfaceImpl");
ret= cl.newInstance();
}
....
ret ret;
}
.......................................
public class MyClassX{
public static void doSomethingX(){
}
}
//PART OF "EJB" Module:
public class InterfaceImpl implements MyInterface
@EJB
private MyEJB1 ejb1;
public void foo(){
ejb1.doSomething();
}
........................................
@Stateless
public class MyEJB1{
public void doSomething(){
...
MyClassX.doSomethingX();
....
}
}
ご覧のとおり、 「EJB」はMyClassXを使用するため「BIZ」に依存しています(実際には、いくつかのクラスのBIZを使用しています)。これが、 ImplFactoryがリフレクションを使用してInterfaceImplをインスタンス化する理由です。問題は、cl.newInstance()がClassCastExceptionをスローすることです。これは、2つのモジュールがそれぞれWARとJARに属し(モジュール「EJB」はtype = "ejb"を指定し、maven ejbプラグインを使用してコンパイルされます)、異なるClassLoaderを使用するためです( JBossで実行されます7)。一方、InterfaceImplはそのジョブにMyEJB1が必要であるため、BIZに移動できません。これにより、循環依存が発生します。
だから私の質問は:このトリッキーな状況をどのように解決しますか(プログラムで、または構成を変更することによって)?あなたが私を助けてくれることを願っています!ありがとう!