読書会(EJBデザインパターン)第1回議事録
[ 戻る ]
"EJBデザインパターン"を読む会 第1回議事録
開催日時:2004年1月31日 10:00 〜 17:00
開催場所:東山住区センター 第1会議室
参加者(敬称略):石黒、井上、布留川、根本、新井、西野、宮本、百瀬、高橋(智)、
伊東、高橋(徹)、金井、原、古橋、松尾、中村、村上、村山
書記:高橋(智)
読み手:村上、百瀬
■はじめに
今回は、EJBの基本に関する書籍を飛ばして、いきなりEJBデザインパターンの本
を読むことになりました。しかし、予想に反して18名の方が出席がされ、とても賑
やかな読書会を開催することができました。
今後とも多くの方の参加を願っております。
■「推薦の言葉」から19ページまで
◆一応、読書会の慣例で、できる限り最初のページから読むことになっている
--> 「推薦の言葉」から朗読を始める
◆EJBの基本を先に学習すべき
--> 「マスタリングEJB」「Enterprise JavaBeans 第3版」を読むべきだろう
--> 両方とも日本語の訳本が出ている
--> オライリーの本の方が良い
--> ワークブック(アーカイブ)がダウンロードできる
--> 各ApplicationServer用のコードが入っている
◆「EJBデザインパターン」の原書のPDF版が無料でダウンロードできる
--> http://www.theserverside.com/books/wiley/EJBDesignPatterns/index.jsp
--> でもたしか印刷はできないハズ
◆原書には、EJBデザインパターンの一覧が解説された巨大なポスターが付属している
--> 写真に撮って掲載してはどうか?
--> 各EJBデザインパターンの関連図を書き写して掲載する
--> http://www.javareading.com/bof/gif/ejbdesign.bmp
◆パターンのサンプルコードが本の最後に付いているので注意が必要
◆午前中の参加者(11人中)に、挙手にてアンケートをとりました
--> 5人はEJBを使ったことがあるか、あるいは知っている
--> 6人はEJBを使ったことが無いか、あるいは知らない
--> P15で、この本を理解するにはEJBの基本的で十分な知識が必要であると
書かれている
◆アレキサンダーの形式
--> 本を読んだことがある
--> 本の紹介ページは?
--> パターンにツリー構造がある
◆EJB1.1からEJB2.0に移行して通用しなくなったテクニックは?
--> BMPを使うのではなくCMPを使う
--> DTOの処理の場所が、エンティティBeanからセッションBeanに移った
--> P23の下部で解説されている
◆最良の解決策
--> 原書では「the best practice solution」となっている
--> いうことは「ベストプラクティス」は「最良の策」と訳すべきか?
◆情報処理学会のワーキンググループでアレキサンダーの勉強会を開催している
らしい
--> パターン自体の実装方法について学習できる
--> 1970年代にはもてはやされたアレキサンダーのパターンだが、最近はそれほど
でもないらしい
◆校閲者が大量に紹介されている
--> TheServerSide.comのサイトでは、いろいろな本のレビューを募集しているから
--> 最新の技術に関する文書を読みたいのであれば、TheServerSide.comのレビ
ューに参加するのが良いだろう
--> http://www.theserverside.com/reviews/index.jsp
■「Session Facade」
◆図1.1の「サーブレット」と「UserHome」の間に「ネットワークの雲」の絵を置くと
理解し易い
◆UserとAcountは、解説はされていないが、エンティティBeanである
◆P26の「集約された大きなトランザクション」とは?
--> サーブレットの先頭と最後でJTAを使用するということ
--> サーブレットの先頭でjavax.transaction.UserTransaction#begin
--> サーブレットの最後でjavax.transaction.UserTransaction#commit
◆JMS,MDB,EntityBeanを同時に使用すると2PCが必要になることが多い
--> P36の14行目の場合がその場合である
◆DOAの復活の兆しがある
--> やはりデータが先にあるし...
◆エンティティBeanの「トランザクションの並行性」や「コミットオプション」に
関する技術資料がボーランドのWebサイトにある
--> 原文(全文) : http://bdn.borland.com/article/images/29074/transaction_commit_options.pdf
--> 邦訳(抜粋) : http://www.borland.co.jp/tips/bes/bes008/003.html
--> JBossのメーリングリストでも紹介された
◆トランザクションの属性のデフォルト値があったかも知れない
--> 配布ディスクリプタ(.xml)に何も書かなかったとどうなるのか?
--> 配布時に検証でエラーになる?
--> EJBの仕様は?
--> 宿題!!
◆ローカルのBeanとは?
--> リモートではないので、外部からはアクセスできない
--> ローカルとリモートのBeanを同時に配布することはもちろん可能
◆図1.2の右のエンティティBeanの部分を、また別のサーバーに移したらどうなるか?
--> ネットワークやトランザクションのオーバーヘッドがあまり減らないので意味
がないのでは?
--> このような運用が結構行われている
--> 移すべきではないだろう
--> セッションBeanとエンティティBeanを同居させたサーバーを複数稼働させ
るべき
◆P30の「Fowler, 2001年」の資料はいったい何なのか?
--> 情報を求む!!
--> マーチン・ファウラーの新しい本がある
--> 井上さんがメーリングリストで紹介していた
--> JavaとC#のサンプルコードがダウンロードできる
--> 違う種類の Session Facade が紹介されている
◆Session Facadeは、P17の「サービス層」にあたる
--> 「Core J2EE パターン」にもSession Facadeの解説がある
◆いったい「ドメインモデル」と「エンティティEJB」とはどのように関連している
のだろうか?
◆エンティティBeanが他のエンティティBeanを操作することはあるのだろうか?
--> 両者に関連がある場合
--> CMR を使用する場合
■「Message Facade」
◆「ユースケースをキューに入れる」とは?
--> なんとなく意味は分かるが...(笑)
◆Message Facadeが有用なのは、スケーラビリティの他にも、長大なトランザクシ
ョンによる「トランザクションタイムアウト「ネットワークタイムアウト」による
例外の発生という場合にもあてはまるのでは?
◆いつの間に「2秒ルール」になったのか? (笑)
--> 昔は「8秒ルール」だったハズ
--> 原文では「a couple of seconds」と書かれている
◆図1.6の生存期間の四角の書き方がUML図としては変?
--> 確かにおかしい
--> しかし、UML図であるとは明言していない(笑)
◆図1.6の「JMS宛先」などのように自由な表現かできるUMLツールが少ない
--> 「Enterprise Architect」はどうか?
--> 開発元 : http://www.sparxsystems.com.au/
--> 日本語版 : http://www.sparxsystems.co.jp/
--> 激安なので買ってみたがまだ使っていない
--> 情報を求む!!
◆単一障害点の意味は?
--> 一つの機能が使えなくなると、すべての機能が使えなくなること
◆JMSのメッセージ受信をロールバックしたら、メッセージキューの何処に戻るのか?
--> 一般的にはメッセージキューの先頭に戻る
--> すぐに再実行するハメに陥る
--> リトライ回数をメッセージのヘッダに入れておく
--> メッセージを捨てて諦める
--> 別のところにメッセージを保存する
◆JMS実装は取り替え可能なのか?
--> 一般的に、アプリケーションサーバーとJMS実装は密に結びついている
--> アプリケーションサーバーによっては、別のJMS製品を購入してきて取り替え
可能になっている
--> 情報を求む!!
◆Session Facade と Message Facade の両者を用意すべき
--> 同期型と非同期型の選択ができるようになる
--> ただし、Message Facade は、単にSession Facadeに委譲するだけにすべき
◆CMTであればMDBは自動的にトランザクションが発生する
--> トランザクションの属性設定はどうなるのか? デフォルトは?
--> 属性を何も設定しなかったら Require だったような...
--> 宿題!!
◆決してMDBを作る必要はなく、自前でJMSのコンシューマ(クライアント)を作成して
もよい
--> EJBコンテナとは別のプロセス(JVM)として動作する
--> この中から自由にEJBにアクセスすれば良い
◆JMSの運用中にメッセージの構造が変更されるような場合にはどうするか?
--> ハッシュマップ形式でメッセージ(データ)を送るしかないのか?
--> XML形式で送るのはどうか?
--> JMSにはXML専用のデータ型が無い
--> XMLを文字列として送る
--> XMLをDOMツリーとしてシリアライズして送る
--> P231にDTOとXMLについて解説がある
--> 自作クラスを作りつつ、自前のシリアライザ/デシリアライザを実装するのは
どうか?
--> 新しいデータ用に新しいメッセージキューを作成して、新しいMDBを作成する
のはどうか?
◆BorlandのVisiNotifyを使用すればJMSもMDBも不要になるし、型チェックも行える
--> ただし、永続化の機能は無い
--> 技術資料のURL
http://community.borland.com/article/images/29321/EJBVisiNotify.pdf
http://info.borland.com/techpubs/bes/v6/html_books/vb_notify/vnintro.html
◆JMSのテンポラリキューを使って、MDBから戻り値を受け取ることも可能なのでは?
--> オライリーの「Java Message Service」の本で解説されていたハズ
--> 表紙にハトが描かれている
--> メッセージと伝書鳩を掛けている(笑)
--> 「ハト本」と命名(笑)
◆JMSのフェイルオーバーは可能なのか?
--> 自前でラウンドロビン&フェイルオーバーを実装する
--> JMSのベンダーに依存するだろう
--> 情報を求む!!
◆JMSとMDBを簡単に体験するには?
--> JBossを使うのはどうか?
◆JAVAPressの最新号Vol.34にて、宮本さんが「Eclipse」「JBoss」「xDoclet」を
使用してセッションBeanの開発・配布を行うチュートリアルを書かれた
--> まずはこの記事を参考にしてEJBを学習してはどうか?
■「EJB Command」
◆図1.9のクライアントは、P239の「CommandExecutor」に相当する
◆図1.9の最後で get... とメソッドを呼ぶことができるのは何故?
--> コマンドの実行結果として返されるコマンドBeanを利用しているから
--> 実際には setするコマンドBeanインスタンスと、getするコマンドBeanイン
スタンスは違うものである
◆P236のsetRollbackOnly()の呼び出しの意味は?
--> ランタイム例外ではなく、ユーザー定義例外をスローしているから、自動的
にはロールバックが掛からないから
--> P229に書かれている
■さいごに
読書会後は、9名で駅前にある居酒屋で打ち上げを行いました。
お一人様 \3,200也。
[ 戻る ]