web-dev-qa-db-ja.com

EJB3ローカルおよびリモートインターフェース

ローカルインターフェイスは同じコンテナのJVMインスタンス内のクライアント用に設計されており、リモートインターフェイスはEJBコンテナのJVM外にあるクライアント用に設計されていることを理解しました。同じ.earに存在しない(またはパッケージ化されていない)が、同じJava EEサーバーに存在する)Webアプリケーションクライアントはどうですか?

21
Thurein

公式には@Localアノテーション付きBeanは、同じアプリケーション内にある場合にのみアクセスできます。 .ear(または他の.warまたは他の.jar EJB)とは別にデプロイされた.warは、同じアプリケーションサーバーインスタンスにデプロイされた場合でも、異なるアプリケーションです。

したがって、.war内のコードが.earで定義されている@Local EJB Beanを呼び出すことができる保証はありません。

ただし、実際には、ほぼすべてのアプリケーションサーバーでこれは機能します。

ローカルのクロスアプリケーション呼び出しを公式にサポートするためのEJB3.2仕様の要求があります: https://download.Oracle.com/otndocs/jcp/ejb-3_2-fr-spec

27
Arjan Tijms

ローカルインターフェイスは、同じアプリケーション内の通信で使用されます。必ずしも[〜#〜] jvm [〜#〜]を意味するわけではありません。

重要なのは、同じJVMインスタンス内でも、同じサーバー上でも、2つの異なるアプリケーションできないローカルインターフェイス(つまり、ローカルビューとインターフェイスなしのビュー)を使用して通信することです。

同じアプリケーション内にWebコンポーネント(WAR)とビジネスコンポーネント(EJB-JAR)がある場合、最も直感的で簡単な解決策は、それらを1つのEARまたは1つのWARにパッケージ化することです(Java EE 6)。

5
Piotr Nowicki

リモートインターフェイスを使用しますが、JNDIを使用してルックアップを作成します(これが私が行う方法です)。このようにして、サーバーでEJBのインスタンスを見つけ、Webアプリケーションで使用できます。

ただし、WebアプリケーションプロジェクトにはEJBインターフェイスを備えたjarが必要です。

[〜#〜] edit [〜#〜]そして私はJB Nizetに同​​意します、なぜあなたはEARの外にWARが欲しいのですか?

0
Alvin Baena

リモートインターフェイスは、アプリケーション間で、アプリケーションサーバー内のどこからでも、外部からでも、他のホストからでも呼び出すことができます。

したがって、リモートが必要であると想定します(@Remote) インターフェース。 EJB 3.1では、依存性注入を使用できます。

0
AValchev