ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

本気で取り組むEJB!コミュの疑問はここで解消なり♪ 〜 Part 1 〜

  • mixiチェック
  • このエントリーをはてなブックマークに追加
質問トピです。

打ち付かれたのでここは後日。。。

さぁ、書け、書きまくるのだ!

コメント(2)

同じソースなのに「JBoss」と「OpenEJB」で違う動作するんですよ、コンテナ依存って言っても違い過ぎなんですけど?

てか、OpenEJBのバグだと思うんですけどww

■ソース内容
JSP⇒Servlet⇒EJB(BMP-Entity)
Servletをコントローラー・クラスとし、修得したEJB(同一オブジェクト)の各メソッドを呼び出すと、都度新しいEJBオブジェクトが作られてそのメソッドが呼ばれるみたい。

ちなみにJBossは希望通りに動くのであります。

さて、これどうやって確認したらいいんだろ?やっぱメーリングリスト(英語)??
自己レスです。
てか、今後は全部独り言だと思うのでこの文面省略していきますあせあせ(飛び散る汗)

結論はソースの問題でしたげっそり
そのソースを元に事象をメモしておくと

■JBossの動作
オブジェクトの永続化処理後、その参照を持ったオブジェクトに対してモロモロのメソッドを呼び出す。するとその参照は生きているので処理が上手く行く。
逆にすでに永続化されているオブジェクトを呼び出してからモロモロのメソッドを呼び出すと(例えば更新処理は)失敗する。
⇒参照情報が保持されていないため、keyクラス=nullとして扱われ、結果 where keyクラス = null というSQLが発行されてしまう。

■OpenEJBの動作
永続化処理後、続けてその参照を持つオブジェクトに対し操作を行っても、内部的には一度参照を切る→参照を修得し直しているようで、結果上記のJBossと同じ事象になっていた。
⇒そのためバグじゃないの?と勘違いw

よって、loadメソッドが呼ばれたときにpk情報を保持する処理を1行入れることによって問題解決ですぴかぴか(新しい)

これ、JBossだけでテストアプリ作ってたらハマるところだったなぁあせあせ(飛び散る汗)
比較しながら、検証しながら進めるってホント大事ね電球

と言うことで、今日分かった事は

あくまでオブジェクトの参照を管理するのはコンテナです。
フィールドにもっている「はず」だからという通常のPOJOの考え方は辞めましょう、(BMPでは)永続化情報は自分でPOJOに詰め代えなければいけません。それが c = a + b; という一行であったとしても、です。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

本気で取り組むEJB! 更新情報

本気で取り組むEJB!のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング