hatokuの日記: ejbとtransaction 3
日記 by
hatoku
entity beanの場合、デフォではビジネスメソッド呼ぶたび
Storeされてたので、そのたびDBのconnectionがcommitしていた。
あ、これ、Jboss2.4.3でcommit-optionをCにした場合ね。
commit-optionをAやBにすると、タイムアウトかなんかでStoreするまで
Jbossがレコードをロックしてまうので、psqlとかで背後で更新とか
できなくなってしまうので、DBにつなげるアプリをすべてEJBにしなくては
ならなくなるので避けました。
どれかこけたらどないしたらいいねん(^^;;;
が、少なくともstatefullbeanの中でentitybeanのメソッドを呼ぶ場合には、
contextからUserTransactionをとってきて、
UserTransaction.begin();
EntityBean.methodXX1();
EntityBean.methodXX2();
EntityBean.methodXX3();
UserTransaction.commit();
としてやればOKみたい。
飯くったらもちっと実験してみよ。んで、OKならあとは
EntityBeanにboolean isExist(PrimaryKey)
みたいなメソッド追加して、なきゃinsertあるならupdateとできる
ようにしてみる。こうすりゃfinderExceptionに悩まされることもあるまい
コンテナが別の場合 (スコア:2)
のっかってるコンテナが別の場合にはどうなるのだろう...
ま、いいか、どーせ機能単位でのコンテナ分散の実装は一番最後に
する予定だし。問題あったらスーパークラスをsedでさくさくっと
なおしてしまおう
isExist (スコア:2)
フツーのビジネスメソッドは実装でけんかった。
findXXXがおるので、これを使うしかあるまい。
Re:isExist (スコア:2)
思ったのだが、なんか変なエラーが出る。むぅ。トランザクションが
たぶんロールバックしとるなどと、setter一つは動くが、二つ目で
文句言うというのはどういう事?別にnullはかえってないぞ。テーブルに
データあるもん。
素直にsizeが0のCollectionを返すようにしたら素直に動く
ようになった。
データ参照系専用のStatefullBeanはNot Foundでnullを
返すので、異なるのはエレガントでないがやむおえん。ぶーぶー。
まあいいか、英語の文献しかないJBossで悪戦苦闘し、クラス階層の
デザインで苦労し、ようやくここまで来た。あとはパカパカとAPLつくる
だけじゃ