Comments
Description
Transcript
BEWAN 54
Contents はじめに ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・3 目次 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・4 第1章 なぜJ2EE なのか―新しい秩序の誕生 9 1-1. 変革期に何をすべきか ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・10 1-2. C/S システムの終焉――Web アプリケーション夜明け前 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・12 1-3. Web アプリケーションの時代へ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・14 1-4. 大規模EC サイトでJava を採用・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・15 1-5. 新しい秩序に向けた夜明け前 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・15 1-6. MVC モデルとApache プロジェクト・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・16 1-7. 本書の構成・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・18 第2章 J2EE の要素技術を使い分ける 23 2-1. Web アプリケーションとは何か ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・25 コラム:J2EE を理解するには,まずはServlet とJSP を使いこなそう・・・・・・・・・・・・・・・・・・・・24 2-2. サンプル・アプリケーションのアウトライン ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・29 2-3. サンプル・アプリケーションの実装方法 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・31 ステップ1 ●Servlet だけで実装する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・33 ステップ2 ●表示の部分をJSP に ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・35 ステップ3 ●データベース・アクセスをEntity Bean へ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・36 ステップ4 ●ビジネス・ロジックをSession Bean へ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・38 ステップ5 ●Struts フレームワークの導入 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・40 2-4. 機能を追加して「ユーザー情報検索システム」を仕上げる・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・41 (1)認証機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・42 (2)プロファイル編集機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・44 (3)メール送信機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・47 第3章 MVCモデルとStrutsフレームワーク 49 3-1. SurutsでWebアプリケーション開発と保守を簡略化する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・50 コラム:Strutsは「画面周り」だけを担当するフレームワークだからみんなが乗れる ・・・・・・・・・50 3-2. Strutsフレームワークの動作をひとまず把握する・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・51 3-3. MVCモデルとStruts ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・54 3-4. StrutsのController―― ActionServletとActionMapping ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・57 3-5. StrutsのModel ――ActionクラスとActionFormクラス ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・58 3-6. StrutsのView――JSP ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・59 4 3-7. Strutsの役割はMVCモデルの「C」と「V」 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・60 3-8. 処理の流れをシーケンス図で見る ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・61 3-9. ActionServletクラス――各コンポーネントを制御・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・62 3-10. ActionMappingクラス――URLとアクションを対応付ける ・・・・・・・・・・・・・・・・・・・・・・・・・・・・64 3-11. ActionFormクラス――フォームへの入力を扱う ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・67 3-12. ActionFormクラスでの検証処理 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・70 3-13. Actionクラス――ビジネス・ロジックを呼び出す・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・72 3-14. Strutsタグ・ライブラリの利用 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・74 3-15. デプロイメント・ディスクリプタ(web.xml) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・77 コラム:Strutsの使い勝手とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・80 第4章 EJBでビジネス・ロジックを実装する 81 4-1. EJBのメリットとは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・83 コラム:ビジネス・ロジックをEJBで実装すれば, 安全にトランザクションを実現できる ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・83 4-2. EJBコンポーネントを使う理由とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・86 4-3. EJBコンポーネントを使い分ける ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・87 ① AuthEJB.jar――認証用モジュール ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・88 ② MailProducerEJB.jar――メール送信用モジュール ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・90 ③ UpdateProfileEJB.jar――プロファイル編集用モジュール・・・・・・・・・・・・・・・・・・・・・・・・・・・・・91 ④ WhoisXEJB.jar――ユーザー検索用モジュール・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・91 コラム:EJBのデータを運ぶ「箱」としてJavaBeansを利用する・・・・・・・・・・・・・・・・・・・・・・・・・・・92 4-4. EJBの種類――Session Bean, Entity Bean,Message-driven Bean ・・・・・・・・・・・・・・・・95 4-5. Session Beanの概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・96 Stateless Session Bean ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・96 Stateful Session Bean・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・97 4-6. Entity Beanの概要・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・98 BMP(Bean-Managed Persistence)とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・99 CMP(Container-Managed Persistence)とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・99 4-7. EJBの実行サイクルを理解する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・99 コラム:EJBインスタンスのライフサイクルを意識するのはどんな場合か ・・・・・・・・・・・・・・・・101 Stateless Session Beanインスタンスのライフサイクル ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・102 Stateful Session Beanインスタンスのライフサイクル・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・103 Entity Beanインスタンスのライフサイクル ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・104 4-8. Session BeanとEntity Beanの使い分け・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・106 4-9. JavaBeansとEJBの違い ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・109 5 コラム:検索結果を保持する手段:Session BeanかHTTP Sessionか ・・・・・・・・・・・・・・・・・・108 4-10. EJBを使ったアプリケーションの開発 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・110 実装例●1ログイン処理機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・112 実装例●2キーワード検索機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・125 4-11. EJB2.0の新機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・147 Localインタフェース・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・147 コラム:EJB2.0のLocalインタフェースの意義とは ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・149 EJB2.0の構成要素 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・150 EJB2.0 CMP ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・151 4-12. EJB2.0を使ったアプリケーションの開発 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・152 4-13. EJB QL(EJB Query Language) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・160 EJB QLにおけるベンダー拡張機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・162 付録:EJB規約の要約(EJB1.1およびEJB2.0) ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・166 第5章 WebアプリケーションからWebサービスへ 171 5-1. Webサービスは何に使うのか ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・172 コラム:分散した複数のWebアプリケーションをWebサービスが統合する ・・・・・・・・・・・・・・・・172 5-2. Webサービスの基本技術 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・174 SOAP――XMLによるデータ交換 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・174 WSDL――Webサービスを定義 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・176 UDDI――サービスを検索・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・178 5-3. SOAP,WSDL,UDDIの関係 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・180 5-4. WebアプリケーションからWebサービスを作り出す ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・182 第6章 Apache Axisを利用したWebサービスの作成 185 6-1. オープンソースのSOAPドライバApache Axis ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・186 コラム:オープンソース・コミュニティのApacheの成果を使ってWebサービスを実装する ・・・187 6-2. Axisを使いWebサービスを公開する ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・188 Webサービス実装クラスの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・188 Apache Axisドライバの登録 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・190 Webサービスの登録・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・192 WSDLの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・194 6-3. Webサービス・クライアントの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・195 Javaクライアントの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・195 C#クライアントの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・196 6-4. ステートフルなWebサービスの実装・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・197 6 6-4. ステートフルなWebサービスの実装・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・197 コラム:WebサービスでJava環境と.NET環境を結ぶ ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・200 第7章 Webサービスをポータル構築に応用する 201 7-1. Webサービスによるサーバー間連携 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・202 コラム:ポータル・サーバーのPortletが Webサービスを使ってWebアプリケーションを呼び出す ・・・・・・・・・・・・・・・・・・・・・・・・・・・202 7-2. ポータル・サーバー構築用ソフトJetspeed ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・204 7-3. PortletによるWebサービス・クライアントの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・206 7-4. ポータル・サーバーへのPortletの登録 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・211 7-5. ポータル・サーバー上でのユーザー検索機能の実行手順 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・212 第8章 非同期メッセージングとメール送信機能 215 8-1. メール送信機能の成り立ち ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・216 コラム:J2EEのJMSを使って非同期メッセージングで他システムと連携する ・・・・・・・・・・・・・216 8-2. JMSを用いた非同期メッセージング ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・217 アプリケーション・サーバーの設定・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・219 送信側プログラム ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・220 受信側プログラム(その1)――キュー・リスナを使う ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・223 受信側プログラム(その2)――Message-driven Beanを使う ・・・・・・・・・・・・・・・・・・・・・・・・・227 8-3. JavaMailを用いたメール送信 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・232 第9章 JNDIとLDAPでユーザー認証機能を実現する 235 9-1. ユーザー認証機能 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・236 コラム:シングル・サインオンへの第一歩,JNDIとLDAP ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・236 LDAP ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・237 JNDI ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・237 9-2. JNDIを用いたLDAPサーバーへのアクセス ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・238 LDAPサーバー上の情報の取得 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・238 LDAPサーバー上の情報の変更 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・240 9-3. LDAPアクセスをBMP Entity Beanに ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・242 付録A:Apacheプロジェクトの概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・251 付録B:JBossサーバーの概要 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・253 索引 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・254 7