→Java関連 →DI(依存性注入) #contents *概要 [#z6d6544d] -種類: --セッションBean ---ビジネスロジックを受け持つ ---状態を持つかどうかでステートレスセッションBeanとステートフルセッションBeanに別れる ---ローカルインターフェースとリモートインターフェースを持つ --エンティティBean ---ドメインモデル(対象領域のオブジェクトモデル)を表現する ---O/Rマッピングを使う --メッセージ駆動型Bean ---JMSによる非同期メッセージを受信するためのBean ---アプリケーション間の通信 -[[セッションBeanのライフサイクル>http://rio1218.blog26.fc2.com/blog-entry-16.html]] * 存在しない(初期状態) * メソッド実行可能 * トランザクション実行中 * 非活性化 インスタンスが生成されると、以下の処理後にメソッド実行可能状態となります。 * @EJB/@Resource 等のアノテーションによる DI * @PostConstruct 指定されたメソッドの実行 * ejbCreate の実行 メソッド実行可能状態では、以下の状態変更が発生します。 * トランザクション開始→トランザクション実行中 * 所定の時間使用されていない→@PrePassivate 指定メソッド実行後に非活性化 --トランザクション実行中、コミットやロールバックによりトランザクションが終了するとメソッド実行可能状態となります。 -EJBのトランザクション --CMT(Container Managed Transaction) ---メソッドの出入りでトランザクションを形成 --BMT(Bean Managed Transaction) ---プログラムでトランザクションを制御 -[[EJBとトランザクションの説明>http://liffey2.ld.infoseek.co.jp/java/ejb/index8.html]] -1つのEJBは以下の3つのファイルによって定義される --EJBクラス --リモート・インターフェイス --ホーム・インターフェイス -[[@EJBアノテーションの動き>http://mitsublo.blogspot.com/2006/10/ejb.html]] --EJBコンテナが管理するセッションBeanをインジェクションする --@EJBアノテーションは、属性無しだと宣言されるフィールドの型を見てEJBをDIする。 --EJB実装が複数ある場合は致命的エラー --ただし、実装が複数あってもアノテーションで実装の指定をすればよい @EJB(beanName="HogeBeanImpl2") private Hoge hoge; --検索対象はモジュール内のみ。グローバルJNDIをlookupしたりするわけでは無い。 --別のモジュールからや分散環境で利用したい場合は、今までどおりJNDIの設定を書いてname属性を明記する。 -CDIに関しては→DI(依存性注入) へ -[[誰もが書けるEJBを実現するEJB3.0>http://www.atmarkit.co.jp/fjava/kaisetsu/j2eewatch02/j2eewatch02.html]] -[[従来のEJBは存在自体が間違いだった:http://itpro.nikkeibp.co.jp/free/NSW/NEWS/20050621/163065/]] 2005.6.21 -[[EJBでスレッド>http://kaoriha.org/nikki/archives/000269.html]] --EJBの最悪さを知らない人々は幸福である。幸福な人々には大変恐縮だが、暗澹たる事実のひとつをお知らせしよう。 --EJBコンテナ内では、普通の方法でスレッドを作ってはいけない。 --今度はEJB 3.0だそうだが、そもそも最初から作り直せと言いたい。MSの.NETがよくできている(後発だから当然だが)のを見るにつけ、「貧乏人はJavaをやれ」と言われている気分だ。 *JavaBeansのプロパティ命名規約 [#l7db8fa5] -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 [#hb2908d3] -[[JMSとは?>http://www.atmarkit.co.jp/fjava/keyword/jkey/jkey06.html]] -[[エンタープライズ・メッセージング!JMS編>http://www.acroquest.co.jp/webworkshop/JavaNetwork/NP_lecture05.html]] -[[今からでも遅くない JMSを学ぼう!(前編) 非同期通信の世界へようこそ >http://codezine.jp/article/detail/4975]]