Java関連

DI(依存性注入)

概要

  • 種類:
    • セッションBean
      • ビジネスロジックを受け持つ
      • 状態を持つかどうかでステートレスセッションBeanとステートフルセッションBeanに別れる
      • ローカルインターフェースとリモートインターフェースを持つ
  • エンティティBean
    • ドメインモデル(対象領域のオブジェクトモデル)を表現する
    • O/Rマッピングを使う
  • メッセージ駆動型Bean
    • JMSによる非同期メッセージを受信するためのBean
    • アプリケーション間の通信
  • セッションBeanのライフサイクル
       *  存在しない(初期状態)
       * メソッド実行可能
       * トランザクション実行中
       * 非活性化
    インスタンスが生成されると、以下の処理後にメソッド実行可能状態となります。
       * @EJB/@Resource 等のアノテーションによる DI
       * @PostConstruct 指定されたメソッドの実行
       * ejbCreate の実行
    メソッド実行可能状態では、以下の状態変更が発生します。
       * トランザクション開始→トランザクション実行中
       * 所定の時間使用されていない→@PrePassivate 指定メソッド実行後に非活性化
    • トランザクション実行中、コミットやロールバックによりトランザクションが終了するとメソッド実行可能状態となります。
  • EJBのトランザクション
    • CMT(Container Managed Transaction)
      • メソッドの出入りでトランザクションを形成
    • BMT(Bean Managed Transaction)
      • プログラムでトランザクションを制御
  • 1つのEJBは以下の3つのファイルによって定義される
    • EJBクラス
    • リモート・インターフェイス
    • ホーム・インターフェイス
  • @EJBアノテーションの動き
    • EJBコンテナが管理するセッションBeanをインジェクションする
    • @EJBアノテーションは、属性無しだと宣言されるフィールドの型を見てEJBをDIする。
    • EJB実装が複数ある場合は致命的エラー
    • ただし、実装が複数あってもアノテーションで実装の指定をすればよい
      @EJB(beanName="HogeBeanImpl2")
      private Hoge hoge;
    • 検索対象はモジュール内のみ。グローバルJNDIをlookupしたりするわけでは無い。
    • 別のモジュールからや分散環境で利用したい場合は、今までどおりJNDIの設定を書いてname属性を明記する。
  • EJBでスレッド
    • EJBの最悪さを知らない人々は幸福である。幸福な人々には大変恐縮だが、暗澹たる事実のひとつをお知らせしよう。
    • EJBコンテナ内では、普通の方法でスレッドを作ってはいけない。
    • 今度はEJB 3.0だそうだが、そもそも最初から作り直せと言いたい。MSの.NETがよくできている(後発だから当然だが)のを見るにつけ、「貧乏人はJavaをやれ」と言われている気分だ。

JavaBeansのプロパティ命名規約

  • http://www.fourmeisters.com/blog/kimada/web_1/web/
    • JavaBeans仕様における、プロパティ命名規約では、
      public Wombat getFoo();
      public void setFoo(Wombat w);
      というgetter/setterメソッドがあれば、fooというプロパティが定義されていると解釈します。
    • メソッドの中では、先頭が大文字ですが、プロパティ名としては、先頭を小文字に変換するという規則になっている
    • たとえば、「FooBah」は「fooBah」、「X」は「x」に変換されますが、「URL」は変換されません。

JMS


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-07-20 (日) 09:42:48 (2653d)