!エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。EE6をやるようになって「えっ」と思ったことの1つとして「EJBを使うとDBのトランザクション処理も自動でやってくれます」という説明があります。え、自動...って何?怪しい...(-_-;みたいな(^^;次期案件では以下のような商談-見積-製品...等ツリーになるテーブル構造があって、テーブル保存処理などでも上から下に流すようなことがあったりします。複数テーブルを保存する際のEJB挙動は確認しておきたいと思っていて、簡単なサンプルですが確認してみました。Derby?)・O/R:EclipseLinkテーブルとりあえず商談(Opportunity)と見積(Quote)の2つを定義して、見積は親の商談IDを外部キーで持っています。スキーマは以下のように超簡易です。・EJBは「エンティティ・クラスのセッションBean」で生成してます。昨年作ったWebプロトもこのノリで作ってるので、検証のスモールモデルとしてはいいかなと。具体的には以下のようなコードです。(Entityは省略)AbstractFacadeEJBのCRUD処理を束ねるAbstractFacadeクラス。NetBeans生成のまんますぎですが...。}}QuoteFacadeは上記OpportunityがQuoteになっているだけでまんまなので省略します。EJBでの実験用クラス実験用に以下のようなEJBを用意しました。}商談と見積のEntityを受け取ってFacade経由でcreateするだけです。}}あとはJSFのxhtmlでテキストを配置したものを置いてプロパティと紐付け、CommandButtonのactionでsaveと紐付けをして完了です。ちなみにxhtmlは以下のような超簡素なものです。</h:body></html>保存が成功するパターンまずは正常に商談、見積が保存される確認からです。実行して画面を起動します。しょぼい画面ですいません...実験用です。画面に適当に値を入れて...ボタン押して保存!DBはちゃんと保存されています。ちなみにEclipseLinkのログをFINESTにして、確認しました。released上記で改行入れたのは、ブレークポイントで確認する際に、OpportunityFacadeのcreateを通り終わった所です。保存が失敗するパターン失敗のさせ方が乱暴すぎですが、以下のような、わざとこけるコードをいれて実行しました(^^;いいのか。}まあ実際には何かの処理でExceptionが出たり、という感じだと思いますが。実行!EJBがちゃんとロールバックしてくれるなら、商談(opportunity)は保存されないはずです。com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)ロールバックのステータスが!ちゃんとトランザクション処理してくれてるので安心しました。やっちゃいそうなパターンちょっと気を付けないと、私みたいな初心者は以下のような呼び出しを書きそうです(^^;というか最初実は書いちゃいました...。}}上記コードでcreateの間にわざとゼロ割コード入れると、当然ですが、商談だけは保存されます。このコードはEJBではないので、EJBからすると、商談保存の前後でトランザクト、その後、見積保存の前後でトランザクトっていう形になるので、ロールバックとかありません。C#からくると、最初はManagedBeanとEJBの境界というか、コンテナとかを意識しなかったりするので「EJBでトランザクションは自動」とだけ聞くと上記のようなことをやりそうな気が(^^;自分だけかな;ふぅ。AD...2013-11-01JSFでもレスポンシブWebをやってみたい!Twitterで以下の情報が流れてました。ヶ月)長らくC#屋でした。EEを触ることになりました。Web開発も初めてです。日々の勉強メモとしてブログ作成。デビュー当時から堀北真希さんを愛するエンジニアです。現在は乃木坂46が大好きです。(15)にほんブログ村にほんブログ村はてなブログをはじめよう!kikutaro777さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。