[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11008] EJB デザインパタ ーンを読む会第 1 回議事録



  高橋(智)です。
  昨日はたくさんの方に集まって頂き、とても有意義な読書会となりました。
  この場を借りてお礼を申し上げます。m(_ _)m

  さて、EJBデザインパターンを読む会第1回議事録を送ります。
  この議事録の他に、原書にしか付属していない「EJBデザインパターンの一覧と
その関連性を描いたポスター」の中から、[Interrelationship of Design Patterns]
の部分を、真似て描いてみました。
  http://www.javareading.com/bof/gif/ejbdesign.bmp
をご覧ください。

==========================================================================
"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也。
============================================================================

-- 
高橋智宏
  Java読書会( http://www.javareading.com/bof/ )