ローカルビュー、リモートビュー、インターフェイスなしビューの違いを理解しています。「ビューなし」(注釈なし)とインターフェースなしビューの違いがわかりません。また、なぜインターフェイスに注釈を付ける必要があるの@Local
ですか?インターフェイスに注釈を付けない場合、違いはありますか?
3 に答える
ルールは(メモリから):
- Beanには
@LocalBean
アノテーションがあります->Beanにはインターフェースビューがありません - Beanには
@Local
アノテーションがあります->Beanにはローカルビューがあります - Beanには
@Remote
注釈があります->Beanにはリモートビューがあります - Beanにはビューのアノテーションはありませんが、@Localアノテーションを持つインターフェースを直接実装します->Beanにはローカルビューがあります
- Beanにはビューのアノテーションはありませんが、@Remoteアノテーションを持つインターフェースを直接実装します->Beanにはリモートビューがあります
- Beanにはビューの注釈がありませんが、ビューの注釈がないインターフェースを直接実装します->Beanにはローカルビューがあります
- Beanにはビュー注釈がなく、インターフェースを実装していません->Beanにはインターフェースビューがありません
したがって、@LocalBean
アノテーションを使用することと使用しないことは、どちらもインターフェイスなしのビューを取得する方法です。インターフェースなしのビューが必要な場合、最も簡単なのは注釈を付けないことです。インターフェースも実装していない場合。
その理由の一部は、@LocalBean
インターフェースビューも持つBeanにインターフェースなしのビューを追加するために存在します。スペック作成者の頭の中で一番上のシナリオは、次のようなBeanを持っているシナリオだったと思います。
@Stateless
public class UserPreferences {
public String getPreference(String preferenceName);
public Map<String, String> getPreferences();
}
両方のメソッドをローカルで公開したいが、より粗いものだけをgetPreferences()
リモートで公開したい場合。これを行うには、そのメソッドだけでリモートインターフェイスを宣言して@LocalBean
から、Beanクラスを叩きます。これがないと、両方のメソッドをローカルに公開するためだけに、無意味なローカルインターフェイスを作成する必要があります。
または、別の見方をすれ@LocalBean
ば、インターフェースなしのビューなどがあり、注釈なしのオプションが便利なショートカットとして存在するために存在します。
- リモート EJB: リモート クライアント (ユーザー マシンで実行される Swing や JavaFX クライアントなどの別の JVM で実行されるクライアント) からアクセスできます。
- ローカル EJB: 同じ JVM で実行されている他の「コンポーネント」からのみアクセスできます (Web フロントエンド、他の EJB など)。
- インターフェースなしのビュー: Local と同じですが、ビジネス インターフェースを指定しません。
- 注釈なし: 単純な POJO ですが、EJB ではありません
オブジェクト参照を渡すことができるため、ローカル/非インターフェース ビューはリモート EJB よりも効率的です。
あなた/私たちが感じている混乱は、歴史/後方競争力(いわば)の結果だと思います。違いを識別できません(ローカルビューを使用する場合、仕様ではインターフェイスを作成するための実装が必要です)
インターフェースなしのビューは、EJB 3.0ローカルビューと同じ動作をします。たとえば、参照渡しの呼び出しセマンティクスやトランザクションおよびセキュリティの伝播などの機能をサポートします。ただし、インターフェイスなしのビューには個別のインターフェイスは必要ありません。つまり、Beanクラスのすべてのパブリックメソッドが自動的に呼び出し元に公開されます。デフォルトでは、implements句が空で、他のローカルまたはリモートのクライアントビューを定義していないセッションBeanは、インターフェイスなしのクライアントビューを公開します。