あなたがやりたいことは間違いなく可能です。いくつかの用語の説明。
あなたが持っているのは、Beanのリモートインターフェースを使用したモジュール間EJBインジェクションです。
必要なのは、Beanのローカルインターフェースを使用したモジュール間EJBインジェクションです。
したがって、用語に関するいくつかの説明:
アプリケーションとモジュール
2つのWARファイルが同じEARにある場合、仕様に関しては、1つのアプリケーションと2つのモジュールがあります。
他のすべての状況(2つのEAR、EARにないWAR)では、アプリケーションからアプリケーションへの移行があり、それを処理するのははるかに困難です。
重要なのは、EARが親になる1つのクラスローダーを作成し、各WARがEARの子クラスローダーになることです。そのため、WARファイルは互いのクラスを見ることができませんが、EAR内の共有クラスを見ることができます。ここに私たちのソリューションがあります-それについてはもう少し詳しく説明します。
リモートとローカルの参照
リモート参照は値渡しです(データのコピーを取得します)ローカル参照は参照渡しです(あなたが言うように「ポインター」)
どちらの場合も同じ注釈@EJB
が使用されており、どちらを使用しているかを判断する方法がないことに注意してください。BeanクラスまたはBeanのインターフェースのいずれかを介して@Remote
、またはその上で公開する参照の種類を決定するのは、Bean自体だけです。@Local
解決
EARがあるので、Bean(EJB)をwarファイルから移動して、WARファイルの隣のEARファイルのルートに配置されている共有jarに移動することができます。これを機能させるには、WARファイルからBeanクラスとそのインターフェースも削除する必要があります。
次に@Remote
、Beanのインターフェースをに変更できます@Local
。
これを行うと、参照渡しのセマンティクスが得られ、2つのWARファイルはCORBAなどの重いものなしでデータを共有できます。それらは、Javaでオブジェクトが渡されるのと同じ方法でJavaオブジェクトを渡すだけです。
アプリケーションからアプリケーションへの状況が本当にあった場合は、実際に値渡しのセマンティクスを使用する必要がありますが、@Remote
これはもちろん何倍も遅くなります。
このEJBを他のアプリケーション(サーバーの外部や他のEARなど)にも公開している場合でも、注釈付きのBeanに2番目のインターフェースを追加することで公開できます@Remote
。単一のEJBが、RESTサービスビューだけでなく、インターフェイス(または仕様でビューと呼んでいるビュー)を公開@Local
およびインターフェースすることは可能であり、簡単です。@Remote
@WebService