読書会(EJBデザインパターン)第3回議事録
[ 戻る ]
"EJBデザインパターン"を読む会 第3回議事録
開催日時:2004年3月20日(土) 9:00 〜 16:30
開催場所:江戸川区船堀の「タワーホール船堀407号室」(総合区民ホール)
参加者(敬称略):根本、金井、村山、門脇、高橋(智)、
西野、高橋(徹)、坂本、宮本、吉村、村上
読み手:高橋(智)、吉村
書記:村上
■ P92 Version Number(更新先データの整合性確認)より
- サーバ側の最新データに基づいての確認
-> 確認の結果データが違っていたら、通例ユーザ例外をスロー。
- 楽観的並行制御(Optimistic Lockingの訳)- CVSでも使われている。
- EJBのreentrant Yes とされているケースは見たことがない。
- バージョン番号以外の実装例 - タイムスタンプ プラス 乱数等もあり。
- 独立性レベルとはJDBC で指定するアイソレイション・レベルのこと。
- バージョン番号を使わず、全項一致のwhere句を書く手もあり。
-> ただこれはBLOBを含む場合は使えない。
- バージョン番号、後付は難しい。
■ P97 JDBC for Reading(N+1回呼び出し問題の解)
- 環状(Circularの訳)あまり使われていない。
- 複数のエンティティBean間の関連をたどる
-> CMR(Comtainer Managed Relationship)のこと。
- EJBアンチパターンにこのパターンとりあげられていた。
- APサーバとDBサーバが別マシンの際のオーバーヘッド大きいよね。
-> RAID JDBC が注目されている。
- O/Rマッピング、オーバーヘッドが大きい。
- DAOというロジックとJDBCを分離するパターンあり。
- DDの設定で Read-OnlyのエンティティBeanを作る手もある。
■ P102 Data Access Command Bean(永続化ロジックとストアの詳細を分離)
- エンタープライズBeanとは? EJBとは違うようだ。
- 図3.3 DACBの例で点線 "利用"とあるが"依存"ではないか?
- p104 のコード中 insEmp.execute()抜けている。
- p105 のコード中
Vector employees = new Vector(); と
while loop中のemployee.add(anEmployee) が抜けている
- P241のコードthis.release は finally句に記述しないといけない。
- 抽象クラスはイタリック、継承は点線ではなくて実線を使いましょう。
- PreparedStatementを使うことはよいことだ。re: MJP SQLインジェクション予防等。
■ P109 Dual Persistence Entity Bean(CMPとBMPの両方をサポート)
- 図3.5 の右側 AccountBMPBeanのentityContext は不要(誤植?)。
- P252のAccountBMPBeanコード、Vector を使っている。
- EJB サーバ 普通は、VectorもArrayListも受け取れる実装になっているはず。
- VectorもパフォーマンスがOKならば使える。
- このパターンだと、テストの手間増えるよね...
- CMPのよい例え、車のオートマ、パワステ。
■ P114 EJBHomeFactory(EJBHomeのキャッシュ)
- P257のコード、ホームのキャッシュとしてCollection.synchronizedMap()を使っ
ている。
- ホームのキャッシュ、フェールオーバの時は良いが、ラウンドロビンのケースは?
- InitialContextの実装の中で、キャッシュしているケースあり。
- 同じEJBをJNDI名が異なる名前でDeployできるか?その意図は?
■ P120 Business Delegate(EJB層とクライアントの独立性を高める)
- SFSB の場合、サーバ落ちたらどうなるのか?
-> lookup/create し直して、それでもだめなら例外を投げるのかな。
-> Template Method、AOP が使えそう。
-> Retryはコードが難しくなる。(catch文の中にtryがネストされていくとか)
-> Retry可能かどうかはI/Fを見ただけでは分からない。
-> システムつくる時に、Tx別に入り口からシナリオを設計する。
-> 中間層で再実行処理するよりはユーザ層に戻すことが多い。
-> 金融等は送金している途中で、銀行が倒産するケース等の対応必要。
-> 例外設計の良い本はないか。
- ServletSessionとは?原著はthe ServletSession(イタリック)になっている。
- EJBハンドルオブジェクト
-> CorbaのIOR(オブジェクト・リファレンス)的なもの。
- getHandle() はサーバベンダーの実装依存。
- EJBObject はSerializableではない理由。
-> 実行しているプロセス固有の情報(ID、キー、ポート番号等)が含まれる為。
- Corba のIOR実装依存、ポート番号固定可。JBossはどうか?
- doGet/doPost中でSessionをとったらsynchronize で囲む。
- IE、ダブルクリック/新しいWindow起動でSessionの持ち方変わる。
- ネスケは1つのプロセスで動いている。
- VB 等から(ActiveX経由C++/Corbaで)EJBを呼び出すケース、GPS 地図等あり。
※ 次回 Chapter5のあたまから
村上 記
[ 戻る ]