パスワードを忘れた? アカウント作成
431246 journal

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に悩まされることもあるまい

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by hatoku (1188) on 2001年11月15日 14時45分 (#38299) 日記
    むむぅ、entitybeanとクライアントになるstatefull-sessionbeanの
    のっかってるコンテナが別の場合にはどうなるのだろう...

    ま、いいか、どーせ機能単位でのコンテナ分散の実装は一番最後に
    する予定だし。問題あったらスーパークラスをsedでさくさくっと
    なおしてしまおう
  • by hatoku (1188) on 2001年11月15日 15時21分 (#38308) 日記
    isExist()メソッド実装は失敗。EJBのHomeインタフェースだから、
    フツーのビジネスメソッドは実装でけんかった。
    findXXXがおるので、これを使うしかあるまい。
    • by hatoku (1188) on 2001年11月15日 17時34分 (#38356) 日記
      findXXXメソッドで該当レコードが無い場合は戻りをnullにしようと
      思ったのだが、なんか変なエラーが出る。むぅ。トランザクションが
      たぶんロールバックしとるなどと、setter一つは動くが、二つ目で
      文句言うというのはどういう事?別にnullはかえってないぞ。テーブルに
      データあるもん。

          素直にsizeが0のCollectionを返すようにしたら素直に動く
      ようになった。
       データ参照系専用のStatefullBeanはNot Foundでnullを
      返すので、異なるのはエレガントでないがやむおえん。ぶーぶー。

          まあいいか、英語の文献しかないJBossで悪戦苦闘し、クラス階層の
      デザインで苦労し、ようやくここまで来た。あとはパカパカとAPLつくる
      だけじゃ
      親コメント
typodupeerror

計算機科学者とは、壊れていないものを修理する人々のことである

読み込み中...