EJB 3.1 @LocalBeanとアノテーションなしの比較
質問
ローカル ビュー、リモート ビュー、および非インターフェイス ビューの違いは理解しています。ただ、quot;no view" (注釈なし) と no-interface view の違いは何なのかがわかりません。また、なぜ私のインターフェイスに
@Local
? インターフェイスに全く注釈を付けない場合はどうなるのでしょうか?
どのように解決するのですか?
ルールは(記憶では)です。
-
ビーンには
@LocalBean
アノテーション -> Beanはノーインターフェイスビューを持ちます。 -
ビーンには
@Local
アノテーション -> Beanはローカルビューを持ちます。 -
ビーンには
@Remote
アノテーション -> Beanはリモートビューを持ちます。 - Beanはビューアノテーションを持たないが、@Localアノテーションを持つインターフェースを直接実装している -> Beanはローカルビューを持つ
- Beanはビューアノテーションを持たないが、@Remoteアノテーションを持つインターフェースを直接実装する ->beanはリモートビューを持つ
- Beanはビューアノテーションを持たないが、ビューアノテーションを持たないインタフェースを直接実装する -> beanはローカルビューを持つ
- Beanはビューアノテーションを持たず、インターフェースを実装しない -> Beanはインターフェースなしのビューを持つ
そこで
@LocalBean
を使うのも、アノテーションを全く使わないのも、どちらもノーインターフェイス・ビューを得るための方法です。もし、インターフェイスなしのビューが欲しいだけなら、アノテーションを付けないのが一番シンプルな方法です。ただし、インターフェースも実装していないことが条件です。
理由の一部
@LocalBean
が存在する理由のひとつは、インターフェイス ビューを持つ Bean にインターフェイスなしのビューを追加するためです。仕様作成者の頭の中で最も上位にあったシナリオは、次のようなビーンを持っているものだったと想像しています。
@Stateless
public class UserPreferences {
public String getPreference(String preferenceName);
public Map<String, String> getPreferences();
}
両方のメソッドをローカルに公開したいが、より粗い粒度の
getPreferences()
をリモートで公開したい場合です。そのためには、そのメソッドだけを持つリモートインターフェイスを宣言し、 そのインターフェイスに
@LocalBean
をビーンクラスに追加するだけです。これがなければ、両方のメソッドをローカルに公開するために、無意味なローカルインターフェースを書かなければならないでしょう。
あるいは、別の見方をすれば、ビーンクラスにある
@LocalBean
が存在するのは、ノーインターフェイスビューというものが存在するからであり、ノーアノテーションオプションは便利なショートカットとして存在するのです。
関連
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] java.lang.UnsupportedClassVersionError を修正する方法。サポートされていないメジャー.マイナーバージョン
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
型に解決できない エラー解決
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
java send https request prompt java.security.cert.について。
-
eclipse にリソースリーク:'in' が閉じない
-
コンストラクタDate()が未定義である問題
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。