Comments
Transcript
Webサービス基盤設計 1 WASV6.1による基幹システム設計Workshop
WASV6.1による基幹システム設計Workshop Webサービス基盤設計 1 当セッションの目的 Webサービスの基盤設計のポイントを理解する WAS上で、Webサービス・アプリケーションを稼動させる場合のインフ ラ、非機能要件の設計ポイントの理解 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー、トランザクション設計 Webサービスのアプリケーション設計・開発は除く 2 2 Agenda Webサービス基盤概説 Webサービス基盤設計 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー、トランザクション設計 WAS V6.1 Feature Pack for Web Services 3 3 Webサービス基盤概説 4 4 Webサービスとは XMLベースの分散コンピューティング技術 サービスのインターフェースをWSDLで公開 サービスの利用性の向上 メッセージ・フォーマットとしてSOAPを使用 特定の通信プロトコルへの依存性を排除 XMLを言語として使用 特定技術への依存性を排除 WSDLと実装言語とのマッピングによって実装言語に依存しない(Javaと.NETなど) XMLで記述された インターフェース Webサービス サービス リクエスター Program (アプリ開発者が作成) Webサービス サービス Runtime (J2EE環境など たとえばWASが提供) 実装言語⇔XML WSDL ファイル SOAP Message Webサービス サービス プロバイダー Program (アプリ開発者が作成) Webサービス サービス Runtime (J2EE環境など たとえばWASが提供) XML⇔実装言語 5 Webサービスという用語に決まった定義は存在しませんが、XML言語をベースとした分散コンピューティ ング技術と言うことができます。 特徴としては、サービスの利用性の向上があります。サービスのインターフェースをWSDLで公開するこ とによって、Webサービス・リクエスター(サービスを利用する側)はWebサービス・プロバイダー(サービスを 提供する側)の実装内容や場所を気にすることなくWSDLの情報のみに従ってサービスを呼び出すことが できます。 メッセージ・フォーマットとしてSOAPを利用しているので、特定の通信プロトコルに依存することはありま せん。 主要な技術の記述言語として、技術に対して中立的であるXMLを利用することによって、特定技術への 依存性を排除しています。例えば、WebサービスのリクエスターとプロバイダーではWSDLと実装言語はラ ンタイム環境でマッピングが行われ、XMLと実装言語の変換が行われます。こうすることで、例えば、Java で記述されたWebサービス・リクエスターと、.NETテクノロジーで実装されているWebサービス・プロバイ ダーとの通信も可能となります。 SOA(Service Oriented Architecture)とは、「サービス」の組み合わせによってアプリケーションを構成す るシステム構築の考え方になります。 5 なぜWebサービスを使用するのか? (1/2) 現行のシステムの呼び出し システムのOS、言語、通信プロトコルなどの実装に依存 クライアントとビジネスロジックは密結合となっている システム間の連携は非常に困難 業務C CICS (COBOL) 3270 エミュレーター × WAS (Java) JMS 業務B × Rich Client HTTP WAS (Java) 業務A Browser Client 6 Webサービスを適用するメリットを示すために、現在多く構成されているWebシステムを例として説明しま す。 現在の多くのWebシステムではクライアントとビジネスロジックの間には固有の実装規約が存在しており、 双方でOS、言語、通信プロトコルなど全て決まった実行環境でのみ稼動することができます。 例えば、業務Cのシステムを異なる言語を実装する業務Bのクライアントから呼び出すことは容易ではあ りません。業務Cの実装言語の稼働環境が必要となり、また業務C用のクライアントを新たに開発すること になります。 業務ごとにそのシステムは密に結合しており、業務Aと業務Bのような他システムとの連携が難しいのが 現状と言えるでしょう。 6 なぜWebサービスを使用するのか? (2/2) Webサービスの適用 クライアントはWSDLを取得すれば他業務のシステムにアクセス可能 インターフェースのみに依存し、実装には依存しない(疎結合) サービスの再利用による、SOAの促進 業務C WAS (Java) Web サービス CICS (COBOL) Browser Client 業務B Web サービス WAS (Java) Web サービス Rich Client 業務A WAS (Java) Browser Client WAS (Java) 共通ロジック 7 クライアントとビジネスロジックが密結合となっているシステムとは対照的に、インターフェースのみに依 存し実装に依存しない疎結合モデルを実現している技術がWebサービスになります。 クライアントはサービスが提供するWSDLを取得し、それに合わせて開発を行います。サービスが稼動す るOSや実装言語には依存せずインターフェースのみに依存するので、他業務のシステムへの連携も比 較的容易に実現できます。 7 WASはWebサービス基盤を提供 WAS 6.1はJ2EE 1.4に準拠 J2EE 1.4の仕様にWebサービスの仕様が含まれる JAX-RPC, WSDL, SOAP, ・・・ WAS 6.1上でWebサービス・アプリケーションを稼動させることで J2EE 1.4標準に準拠したWebサービスを稼動させることができる WAS 6.1 WS-FPの サポート範囲 WAS 6.1のサポート範囲 J2EE 1.4 仕様 Servlet 2.4 仕様 EJB 2.1 仕様 JSP 2.0 仕様 Webサービス仕様・標準 JAX-RPC 1.1 Web Services for J2EE 1.1 SAAJ 1.2 SOAP 1.1 WSDL 1.1 Webサービス仕様・標準 JAX-WS 2.0 JAXB 2.0 ・・・・・・ WS-I BP 1.1 MTOM 1.0 ・・・・・・ Webサービス仕様・標準 WS-Security 1.0 WS-AT 1.0 WS-I BSP 1.0 ・・・・・・ 8 WAS 6.1はJ2EE 1.4に準拠した製品となっていますので、J2EE 1.4におけるWebサービス関連APIを使 用してWebサービスを実装しています。 J2EE 1.4ではWebサービスに関わるサポートを主要なものとしているため、多くのWebサービス関連の仕 様が新規に追加されています。 WASやJ2EEがサポートするWebサービス仕様の詳細は下記のリンクを参照ください。 WAS V6.1 InfoCenter「仕様および API 資料-Webサービス」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/r ovr_specs.html WAS V6.1 WS-FP InfoCenter「Specifications and API documentation-Web services」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.wsfep.multiplatform.d oc/info/ae/ae/rovr_specs.html J2EE 1.4 specification http://java.sun.com/j2ee/j2ee-1_4-fr-spec.pdf 8 WAS上でのWebサービス稼動の概要 WASはWebサービスのリクエスター、プロバイダーのどちら の稼働環境としても使用可能 Webサービス Webサービス・ サービス・リクエスター ユーザー・ アプリケーション (EAR) Java Java Bean Bean Webサービス Webサービス・ サービス・プロバイダー ユーザー・ アプリケーション Java (EAR) Bean Java Bean EJB EJB Webサービス Stubコード Webサービス Stubコード Webサービス エンジン Webサービス エンジン Browser Client HTTP WASランタイム WASランタイム HTTPトランスポート HTTPトランスポート HW/OS HW/OS SOAP 9 WASは、Webサービスのリクエスター、プロバイダーのどちらの実行環境としても使用可能です。リクエス ターとプロバイダーでは、チューニング項目などが異なりますので、ご注意ください。詳細は後述します。 9 インフラの観点からのWebアプリケーションとWebサービスの類似点 WebサービスのアプリケーションもEAR EARの中にStubコードやWebサービスのDDが含まれる デプロイ方法も同様 Webサービス Webサービス・ サービス・リクエスター ユーザー・ アプリケーション (EAR) Java Java Bean Bean Webサービス Webサービス・ サービス・プロバイダー ユーザー・ アプリケーション (EAR) Java Java Bean Bean DD EJB Webサービス Stubコード Webサービス エンジン WAS/RADの ツールで生成 WASランタイム HTTPトランスポート HW/OS Webサービス Stubコード Webサービス エンジン DD EJB ランタイムの ランタイムの責任 ・Webサービス・リクエストの 送受信 ・SOAPとJavaデータの変換 ・Webサービスのロジックを 実装しているJavaBeanまた はEJBの呼び出し WASランタイム SOAP HTTPトランスポート HW/OS •WebサービスはWebアプリケーションの延長線上 •Webアプリケーションのインフラ、運用管理の知識・スキルが そのまま使用可能 10 インフラ構築の観点から見た場合、Webサービス・アプリケーションの稼動とWebアプリケーションの稼動 とは異なるものではなく、これまでのWebアプリケーションの延長線上にあると考えることができます。具体 的には、Webサービスのアプリケーションも、これまでのWebアプリケーションと同様に、EARパッケージと してパッケージングされます。また、そのEARの管理コンソールやwsadminスクリプトを使用してのデプロイ 方法もほとんど同様です。 したがって、Webサービス・アプリケーションをWAS上で稼動させる場合にも、ほとんどの部分はこれまで のWebアプリケーションの知識やスキルで対応が可能です。 10 インフラの観点からのWebアプリケーションとWebサービスの相違点 リクエスターの意識 リクエスターの管理やチューニングが必要 サーバー間通信 リクエスト、レスポンス・データがWebアプリケーションと比較し、複雑、 巨大になりがち プロバイダーの処理時間が長くなることもある インターオペラビリティーの検討 .Net プロバイダー .Net リクエスター WAS リクエスター XML(SOAP) Axis リクエスター WAS プロバイダー Axis プロバイダー 11 インフラの観点から見た、WebアプリケーションとWebサービス・アプリケーションの相違点です。 まず、Webアプリケーションの場合、リクエスターは、ブラウザーであることが一般的であり、リクエスター 側の設定や運用管理ということにあまり注意を払いませんが、Webサービス・アプリケーションにおいては、 Webサービス・リクエスターもサーバー・アプリケーションとして稼動しますので、リクエスターとしての設定 に注意する必要があります。 また、Webサービスは、サーバー間通信となりますので、リクエストやレスポンス・データがWebアプリケー ションと比較して、複雑、巨大になりがちです。これにより、パフォーマンスなどに影響を与える場合があり ます。また、プロバイダー側の処理時間が長くなる場合もありますので、その場合は、リクエスター側のタイ ムアウト設定などにも注意する必要があります。 また、Webサービスの特徴は、異機種間での相互通信が可能になることです。ただし、Webサービスの 仕様は、日々進歩していますし、各実装ベンダー間での仕様の実装方法の違いなどにより、必ずしもす べての実装ベンダー間で簡単にデータの送受信を行えるわけではありません。 WAS 6.1 InfoCenter「Web サービスに関するよくある質問」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/r wbs_faq.html 11 インターオペラビリティーの考慮 WS-I (Web Services Interoperability Organization) Webサービスの相互運用性(インターオペラビリティ)を推進するため の団体 2002年2月発足 活動内容 各種Profileの作成(インターオペラビリティのガイド) テスト・ツールの作成 サンプル・アプリケーションの実装 なぜWS-Iが必要だったか? 準拠さえすれば、異機種間 環境でも、連携できる Webサービスの各種仕様だけではインターオペラビリティが十分でなかったため WAS V6.1が対応するWS-I Profileのバージョン WS-I Profile WAS6.1 Web Services Interoperability Organization (WS-I) Basic Profile V1.1 Web Services-Interoperability Organization (WS-I) Attachments Profile V1.0 Web Services Interoperability Organization (WS-I) Basic Security Profile V1.0 リクエスター、プロバイダー間の製品が準拠するProfileのバージョンに注意 12 WS-Iは、異なるプラットフォーム、OS、ミドルウェア、プログラミング言語、およびツールに跨るWebサービ スの相互運用性を推進するために設立されたオープンな業界の団体です。この団体には、以下のような Webサービスを推進している主要な企業が参加しており、ここで決められた事項は業界標準と言うことが できます。 IBM、Microsoft、BEA、HP、SUN、Oracle、SAP、インテル、富士通、その他140社以上が参加 SOAPやWSDLを使用したWebサービスは相互運用性が高いと言われてきましたが、実際には製品間で の相互運用性を実現するにはWebサービス開発者による試行錯誤が必要で簡単には実現できませんで した。例えば、Apache SOAPとMSの.NETを接続させるには、この分野に高度なスキルを持つ人が作成し ないと簡単にはWebサービスで接続することができませんでした。WS-Iはこうした状況を改善するために 作られた組織であり、Webサービスの現実的な相互運用性を実現するために様々な活動をしています。 WS-Iは実際の活動をするにあたって、Webサービス関連の各種標準を策定しているW3CやOASISと連携 しながら活動しています。それ以外の団体とも協調しながら業界の標準となるものを作成しています。 WS-Iの活動のメインは、Profileと呼ばれるインターオペラビリティーに関するガイドを作成することです。 それ以外にもサンプルや相互運用性をテストするツールを作成しています。 参考「WS-I WEB SERVICES INTEROPERABILITY ORGANIZATION」 http://www.ws-i.org/ 12 Webサービス基盤設計 1 2 3 4 5 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー、トランザクション設計 13 13 トポロジー設計:SOAP/HTTPとSOAP/JMSの選択基準 WASは、SOAPメッセージのトランスポート・プロトコルとして、 HTTPとJMSをサポート SOAP/HTTPとSOAP/JMSの比較 SOAP/HTTP SOAP/JMS 標準 標準ではない 標準準拠 信頼性 同期・非同期通信のサポート 低 高 同期 同期・非同期 Webサービス サービスServer サービス Webサービス サービスClient サービス Webコンテナー Router Webサービス リクエスター Servlet SOAP/HTTP EJBコンテナー Webサービス リクエスター Router MDB Queue Queue Web サービス プロバイダー (Stateless Session Bean) SOAP/JMS 14 SOAP/HTTPとSOAP/JMSの特徴の相違を説明します。 SOAP/HTTPは、一般にWebサービス間の通信で使用されているプロトコルであり、WS-Iにも規定される Webサービスの標準のプロトコルです。一方、SOAP/JMSは、IBMの拡張機能であり、標準の仕様が定義 されているわけではありませんので、異なるプラットフォームとのインターオペラビリティーはありません。し かし、JMSプロトコルは、SOAP/HTTPよりも、高い信頼性を得ることができます。JMSを使用した場合、Web サービス・リクエスター、またはWebサービス・プロバイダーから送信されたメッセージはQueueまたはTopic にputされ、データベースなどの永続化ストレージに保管されます。そして、通信に失敗した場合には、通 信に成功するまで、永続化ストレージに保管されます。また、リクエスター上にあるローカルキューにメッ セージを送信した時点で、リクエスター側の処理が一旦完了し、プロバイダーへのメッセージ転送をミドル ウェアが保証してくれるという点でも、信頼性が高いといえます。 また、SOAP/JMSでは、プロトコルレベルで非同期通信を実現することができ、one-wayのRequestを使用 することにより、リクエスターとプロバイダーをより疎結合にすることができます。つまり、リクエスターがoneway Requestを送信するときにプロバイダーがアクティブでなくてもかまいません。また、one-way Request の送信宛先にTopicを使用することにより、複数のサーバーに同時に送信できます。 SOAP/JMSを使用する場合の注意点としては、インターオペラビリティーが得られないことの他には、メッ セージの送受信用にQueueまたはTopicの作成が必要になります。また、Webサービスの実装はStateless Session EJBである必要があり、Java beanで実装されたクラスにSOAP/JMSで直接アクセスすることはでき ません。 SOAP/JMSでのWebサービスアクセスに関しては、下記のInfoCenterの記載も参照ください。 WAS V6.1 InfoCenter「Java Message Service API を使用した Web サービス要求のトランスポート」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.base.doc/info/aes/ae /twbs_jmstransport.html また、以下のDeveloperWorksの記事も参考になりますので、参照ください。 DeveloperWorks記事「WebSphere JAX-RPC Web services: Protocol and location transparency」 http://www.ibm.com/developerworks/webservices/library/ws-soa-jaxrpc/ 14 (参考)SOAP/JMSの相互運用性(Interoperability) WAS V6.1まではIBM拡張の実装で提供 相互運用性(Interoperability)は保証されない IBM proprietary SOAP/JMS IBM only Service Client W3CでSOAP IBM only over JMSとして標準化が進められている http://www.w3.org/Submission/SOAPJMS/ WebSphere以外のWebサービス環境とSOAP/JMS通信が可能に! standard SOAP/JMS Any Web service environment IBM Client Service 15 先程のページにてSOAP/JMSではインターオペラビリティーが得られないとご説明しましたが、W3Cで標 準化が進められています。 15 トポロジー設計:SOAP/HTTP SOAP/HTTPは、通常のWebアプリケーションと同様 リクエスター、プロバイダーともにWASのクラスタリング機能により、 高可用性、高拡張性を確保 WAS Cluster WAS Cluster Router Servlet Web Server Plug-in Router Servlet Router Servlet 負荷分散装置 Web Service リクエスター (WASなど など) など Web Server (IHSなど など) など Web Service Web Service Web Service Web Service プロバイダー (WASなど など) など Webサービス・プロバイダーの前段には、必ずしもIHSを配置しなくてもよい 16 通信プロトコルとして、SOAP/HTTPを使用する場合のトポロジー設計は、通常のWebアプリケーション と同様です。 Webサービス・リクエスター、Webサービス・プロバイダーともにWASのクラスタリング機能により、高可用 性、高拡張性を確保することができます。Webサービス・リクエスト・データはHTTPプロトコルでラップされ ますので、負荷分散装置の設定や、Webサーバーの設定においては通常のWebアプリケーション(サー ブレット)へのアクセスと同様の設定となります。 また、Webサービス・リクエスターとWebサービス・プロバイダー間にFirewallが存在せず、WASがリッス ンする9080番などのポート番号に、Webサービス・リクエスターから直接アクセスできる場合や、Webサー バー上でのアクセス・ログの取得などが必要ない場合には、Webサービス・リクエスターから、負荷分散装 置のみを経由し、IHSを使用しない構成とすることもできます。 16 トポロジー設計:SOAP/JMS SOAP/JMSは、メッセージングの高可用・高拡張性機能 WASのクラスタリング機能による、メッセージング・エンジンの高可用 性、高拡張性の機能を使用 WAS Cluster WAS Cluster Replyキュー Web Service リクエスター (WASなど など) など Requestキュー ME1 ME1 ME2 ME2 Router MDB Router MDB Web Service Web Service Web Service プロバイダー (WASなど など) など MEのフェイル・オーバーやパーティショニングを行う場合、 WebサービスとMEのクラスターを分離するか否か、 リクエスターとプロバイダーが所属するBusメンバーなどの設定により 考慮点があるので、メッセージングの知識が必要 17 通信プロトコルとして、SOAP/JMSを使用する場合のトポロジー設計は、メッセージングのインフラ構成が 必要になります。 JMSプロバイダーとしては、デフォルトのメッセージング(WAS V6.1のサービス統合バス。以下、SIBus) や、WebSphere MQ を使用することができますが、上記では「デフォルトのメッセージング」を前提としてい ます。 SOAP/JMSを使用する場合も、Webサービス・リクエスター、Webサービス・プロバイダーともにWASのク ラスタリング機能により、高可用性、高拡張性を確保することができます。メッセージング・エンジンのフェイ ルオーバー構成をとることで、宛先の高可用性を、メッセージング・エンジンのパーティショニング構成によ り、高拡張性構成とすることができます。ただし、SOAP/JMSを使用する場合には、メッセージング・エンジ ンのフェイルオーバーやパーティショニングの設定と合わせて、Webサービス・リクエスターとWebサービ ス・プロバイダーが同一のセルに所属するか否かや、メッセージング・エンジンが稼動するクラスターと Webサービス・プロバイダー・アプリケーションが稼動するクラスターを分離するか否かなどを検討する必 要があります。 17 SOAP/JMS使用時のリソース定義 SOAP/JMSアプリケーションを稼動させるためには、WAS上 に下記リソースの定義が必須 Webサービス・アプリケーション(SOAP/JMS) にはこれらリソースへの 参照を定義しておく 【デフォルトのメッセージングを使う場合に必要なリソース定義】 設定箇所 リソース 名前、備考 - SIBus (名前は任意) - バス・メンバー プロバイダーのアプリケーションサーバーとの兼用も可能 - Request用キュー宛先 (名前は任意) リクエスター Request用JMSキュー接続ファクトリー (名前は任意) リクエスター/プ ロバイダー Request用JMSキュー (名前は任意) プロバイダー JMS活動化仕様 (名前は任意) (キューはRequest用JMSキュー名を指定) プロバイダー Reply用JMSキュー接続ファクトリー WebServicesReplyQCF(固定名) デフォルトでは、Reply用のキューは自動生成される一時キュー 18 JMSプロバイダーとしては、デフォルトのメッセージング(WAS V6.1のサービス統合バス。以下、SIBus) や、WebSphere MQ を使用することができますが、上記では「デフォルトのメッセージング」を前提としてい ます。 尚、JMSプロバイダーにWebSphere MQ を採用する場合、JMS活動化仕様ではなくリスナー・ポートが使 用されます。 設定の詳細は、下記のRedbookを参照ください。 Redbook「Web Services Handbook for WebSphere Application Server 6.1」の「Appendix B. Additional material – Setting up messaging for the JMS Web service」(p.744-756) http://publib-b.boulder.ibm.com/abstracts/sg247257.html?Open 尚、デフォルトでは、SOAP/JMSのRequest-Reply型の通信を行う場合には、Replyキューとしては、一時 キューが使用されます。Replyキューとして永続キューを使用する場合には、下記のInfoCenter、または、 Technoteを参照ください。 WAS V6.1 InfoCenter「SOAP over JMS を使用した Web サービス用永続 replyTo キューの構成」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.d oc/info/exp/ae/twbs_jmspermreplyto.html Technote「How to configure a permanent replyTo queue when using SOAP over JMS to invoke a web service in WebSphere Application Server V6.1.x」 http://www.ibm.com/support/docview.wss?rs=180&uid=swg21240541 18 Webサービス・リクエストの宛先指定 Webサービス・リクエスター側の宛先指定 1. Webサービス・リクエスターのStubを生成するときに使用するWSDLファイル に定義 Webモジュールの場合、デフォルトで<war_module>/WEB-INF/wsdl/に配置 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ・・・ xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" ・・・> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ・・・ xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" ・・・> <wsdl:types> <wsdl:types> ・・・ ・・・ </wsdl:types> </wsdl:types> name="myOperationRequest"> <wsdl:message <wsdl:message name="myOperationRequest"> ・・・ ・・・ </wsdl:message> </wsdl:message> ・・・ ・・・ <wsdl:portType name="MyWebService"> <wsdl:portType name="MyWebService"> ・・・ ・・・ </wsdl:portType> </wsdl:portType> <wsdl:binding name="MyWebServiceSoapBinding" type="impl:MyWebService"> <wsdl:binding name="MyWebServiceSoapBinding" type="impl:MyWebService"> ・・・ ・・・ </wsdl:binding> </wsdl:binding> <wsdl:service name="MyWebServiceService"> <wsdl:service name="MyWebServiceService"> <wsdl:port binding="impl:MyWebServiceSoapBinding" name="MyWebService"> <wsdl:port binding="impl:MyWebServiceSoapBinding" name="MyWebService"> <wsdlsoap:address location="http://MyServer.ise.ibm.com/MyService/services/MyWebService"/> <wsdlsoap:address location="http://MyServer.ise.ibm.com/MyService/services/MyWebService"/> </wsdl:port> </wsdl:port> </wsdl:service> </wsdl:service> </wsdl:definitions> </wsdl:definitions> 2. 管理コンソールの、アプリケーションの設定で上書き可能(後述)(オプション) 3. Webサービス・リクエスターの実装コードでも上書き可能(オプション) javax.xml.rpc.Stubインタフェースの「ENDPOINT_ADDRESS_PROPERTY」属性を設定 19 Webサービス・リクエスターから呼び出すWebサービス・プロバイダーの宛先(エンドポイント・アドレス)指 定について、説明します。 まず、Webサービス・リクエスターのアプリケーションを作成するときに使用するWSDLファイルの <service>要素内に呼び出すWebサービス・プロバイダーのURLアドレスを記述しますので、その設定が Webサービス・リクエスターのStubコードを作成するときに取り込まれます。 また、後述しますが、この呼び出すWebサービス・プロバイダーのアドレスは、デプロイ後に管理コンソー ルから設定を変更することが可能です。また、Webサービス・リクエスターのソースコードの中でも、この呼 び出すアドレスをコーディングによって変更することが可能です。 尚、SOAP/JMSを使用する場合のアドレス指定は下記のように、「jms」で開始され、使用する宛先と接続 ファクトリーを指定します。 <wsdlsoap:address location="jms:/queue?destination=java:comp/env/jms/Queue&connectionFactory=java:comp/env/j ms/QCF&targetService=ContractManagerJMS"/> SOAP/JMSのエンドポイントURLの構文の詳細は、下記のInfoCenterの記載を参照ください。 WAS V6.1 InfoCenter「Java Message Service エンドポイント URL の構文」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/r wbs_jmsurl.html 19 Webサービス基盤設計 1 2 3 4 5 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー、トランザクション設計 20 20 パフォーマンス設計:概要 SOAP/HTTP 基本的にはWebアプリのチューニングと同様 キューイング・ネットワーク(IHSのMaxClients、Webコンテナーのスレッド・プール数など) JVMヒープ SOAP/JMS メッセージングのチューニングも必要 JMS接続ファクトリー 活動化仕様(アクティベーション・スペック) メッセージの信頼性レベル WAS Cluster WAS Cluster Web Service Router Servlet Web Server Plug-in 負荷分散装置 Webサービス サービス リクエスター (WASなど など) など リクエスター側にHTTP接続の コネクションプールがある Web Server (IHSなど など) など Router Servlet Router Servlet Web Service Web Service Webサービス サービス プロバイダー (WASなど など) など 21 パフォーマンスの設計、チューニングを行う場合の基本となるのは、SOAP/HTTPの場合も、SOAP/JMS の場合も、Webアプリケーションのパフォーマンス設計の知識です。SOAP/HTTPの場合は、IHSの MaxClientsやWebコンテナーのスレッド・プール数を調整して、同時リクエスト数を調整します。また、Web サービス・アプリケーションもJVM上で稼動するWebアプリケーションですので、JVMヒープの使用状況も 常に確認してください。 SOAP/JMSを使用する場合には、同時にメッセージングに関するチューニングも必要になります。JMS接 続ファクトリーや活動化仕様の設定により、同時に処理できるメッセージ数を調整します。また、メッセージ の信頼性レベルなどもパフォーマンスに影響します。 尚、次ページで説明しますが、Webサービス特有の特徴として、Webサービス・リクエスターのアウトバウ ンドのHTTPトランスポートは、接続プールを持ち、これによりパフォーマンスが向上します。 アクティベーション・スペック(ActivationSpec JavaBean)とは、レガシーやEnterprise Information System(EIS)から、アプリケーション・サーバーのEJBを呼び出す為の仕組みとしてJava Connector Architecture Specification(JCA)1.5から採用されたものです。 21 パフォーマンス設定:HTTPアウトバウンド接続プール(1/2) HTTPアウトバウンド HTTPアウトバウンド接続 アウトバウンド接続プール 接続プール Webサービス・リクエスターが、接続オブジェクトをプールして再利用すること により、作成/切断のオーバーヘッドを軽減 WASV6.1.0.13以降は、 デフォルト値は25 接続プールの管理プロパティー プロパティー名 意味 com.ibm.websphere.webservices.http.maxConnection プールされる接続の最大数 デフォルト 50 com.ibm.websphere.webservices.http.connectionTimeout 使用中の接続が最大数に達している場合の待機時間 300 sec com.ibm.websphere.webservices.http.connectionIdleTimeout 未使用でアイドル状態の接続オブジェクトを破棄にフラグ する時間 5 sec com.ibm.websphere.webservices.http.connectionPoolCleanUpTime 接続オブジェクトを監視し、タイムアウトをチェックする間隔 180 sec トランスポート・チャネル スレッド Application Server HTTPアウトバウンド ・コネクター IHS ConnectionPool KeepAlive 80 Web サービス プロバイダー 9080 SOAP/HTTP Webサービス・ プロバイダー Webサービス・リクエスター 22 Webサービス・リクエスターは、接続オブジェクトをプールして再利用することにより、作成/切断のオー バーヘッドを軽減します。(接続の確立は、コストのかかる処理であり、接続プールを使用すると、接続の 作成/切断のオーバーヘッドが回避されて、パフォーマンスが向上します。) Webサービス・リクエスターはWebサービス・リクエストを実行するとき、WebサービスのHTTPアウトバウン ド・コネクターが接続プールより空いている接続オブジェクトを取得します。応答を受信すると、コネクター は接続オブジェクトを解放します。 WASV6.1.0.13以降は、webservices.http.maxConnectionのデフォルト値が25に変更されました。また、 Webコンテナー・スレッド・プールのサイズの半分以下に設定することが推奨されています。 設定値の詳細は下記のInfoCenterを参照ください。 WAS V6.1 InfoCenter「Web サービス・アプリケーションのための、追加 HTTP トランスポート・プロパ ティー」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/r wbs_httptransportprop.html 22 パフォーマンス設定:HTTPアウトバウンド接続プール(2/2) HTTPアウトバウンド接続プールの設定における注意 Webサービス・リクエスターのスレッド・プールとの関係 Webサービス・リクエストの同時実行数を増加させるためには、HTTPアウトバウン ド接続プールのmaxConnection値の増加が必要 Webコンテナーのスレッド・プールを増加させるだけでは、Webサービス・リクエスト の同時実行数は増加しない プロバイダー側のKeepAlive設定との関係 リクエスター側のコネクション・プールでは、プロバイダー側からのKeepAliveタイム アウトによるコネクションの切断を検知できない すでに接続がcloseされている場合、java.io.IOExceptionが発生 プロバイダー側のKeepAliveタイムアウト値よりも、connectionIdleTimeout値を小さ くする コンポーネント プロパティー名 デフォルト Webサービス・リクエスター(WAS) com.ibm.websphere.webservices.http.connectionIdleTimeout 5 sec Webサービス・プロバイダーの前段のIHS (リクエスターからのプ ロバイダーへIHSを経由した接続をする場合に影響) KeepAliveTimeout (httpd.conf) 10 sec Webサービス・プロバイダー(WAS) (リクエスターからのプロバイ ダーへIHSを経由せずに直接接続する場合に影響) パーシスタント・タイムアウト (HTTPインバウンド・チャネル) 30 sec デフォルト値を使用している場合には、問題ない IHSのKeepAliveTimeout値を変更している場合に注意 23 HTTPアウトバウンド接続プールの設定値の注意点を説明します。 まず、Webサービス・クライアントからの同時Webサービス・リクエストを増加させたい場合には、Webサー ビス・クライアントのWebコンテナーのスレッドプールを増加させるだけでは、最大でもHTTPアウトバウンド 接続プール以上のWebサービス・リクエストは行われません。Webサービス・リクエストの同時実行数を増 加させる場合には、Webコンテナーのスレッドプールと合わせて、HTTPアウトバウンド接続プールの最大 数を増加させる必要があります。 また、HTTPアウトバウンド接続プール設定の注意点として、KeepAliveのタイムアウト値との関係がありま す。HTTPアウトバウンド接続プールにプールされた接続オブジェクトは、Webサービス・プロバイダー側か らのコネクションの切断を検知できませんので、HTTPアウトバウンド接続プールに未使用の接続が保持さ れる時間の設定値であるconnectionIdleTimeout値の設定を、IHSやWebサービスを提供する側の KeepAliveタイムアウト値よりも小さく設定する必要があります。もし、プロバイダー側のKeepAliveタイムアウ ト値を小さく設定する必要がある場合には、HTTPアウトバウンド接続のKeepAlive接続をOFFにすることも 検討してください。 この現象については、下記のTechnoteを参照ください。 Technote「WSWS3228E: Possible end of stream encountered.」 http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg21245844 23 パフォーマンス:Webサービス・キャッシュ Webサービス・キャッシュとは オブジェクトをキャッシュしてパフォーマンスを向上させる仕組み cachespec.xml という構成ファイルに定義するのみで、DDやコードを 変える必要がない アプリケーション・サーバー・プロセス内で動作する仕組み Webサービス・クライアント・キャッシュ リクエスターでリモートWebサービスからの応答を一定時間保管し、パフォーマンス向上 Webサービス・サーバー・キャッシュ プロバイダーでWebサービス応答を一定時間保管し、パフォーマンス向上 IHS Web サービス・ リクエスター End User Webサービス クライアント キャッシュ キャッシュ AppServer ノード1 Webサービス・リクエスター IHS Webサービス サーバー キャッシュ Web サービス・ プロバイダー キャッシュ AppServer ノード2 Webサービス・プロバイダー 24 WASには、キャッシュ(オブジェクトをアプリケーションサーバ内でキャッシュすることでパフォーマンスを 向上させる機能)の仕組みが提供されています。 キャッシュできる対象は、Javaのオブジェクトであり、Webサービスについてもオペレーション単位でキャッ シュ対象とすることができます。 WAS V6以降で、Webサービス・リクエスター、Webサービス・プロバイダー両方でキャッシュサービスを利 用できます。 Web サービス・クライアント・キャッシュは、アプリケーション・サーバー上で ハンドラーとして提供されて います。このキャッシュ・ハンドラーは、アプリケーション・クライアントから流れてくる SOAP 要求をインター セプトします。さらに キャッシュ・ハンドラーは、ターゲット Web サービスに基づいてキャッシュ・ポリシーを 識別します。いったんポリシーが見つかると、すべてのキャッシュ ID 規則が、有効な規則が検出されるま で 1 つずつ評価されます。 考慮点として、以下の点が挙げられます。 ・SOAP/HTTP(s) のアプリケーションでのみ使用可能 (参考) WAS V6.1 InfoCenter「Web サービス・クライアント・キャッシュの構成」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/inf o/ae/ae/tdyn_wsclientcache.html IBM Redbook 「WebSphere Version 6 Web Services Handbook Development and Deployment」 Chapter 24 Web Services Caching http://www.redbooks.ibm.com/redbooks/pdfs/sg246461.pdf 24 (参考)ハンドラー SOAPメッセージの内容を操作することが可能 アプリケーションの実装とは別に、メッセージに対する処理を実施 暗号化、複合化、ロギング、認証、キャッシングなどの共通処理に利用 柔軟な配置 リクエスター、プロバイダー側どちらでも配置可能 要求、応答メッセージを別々に処理可能 複数のハンドラーを組み合わせることが可能 ディプロイメント記述子(DD)にて設定 Webサービス サービス・ サービス・プロバイダー AppServer Request Handler SOAP/XML Request Handler Request Handler Webサービス・ リクエスター Response Handler SOAP/XML Response Handler Response Handler Webサービス・ Webサービス・ プロバイダー Webサービス・ プロバイダー プロバイダー 25 Webサービスでデータを送受信する間にSOAPメッセージをインターセプトして様々な共通処理を実現 することができます。主な用途としては、暗号化、複合化、ロギング、認証、キャッシングなど、アプリケー ションの実装とは別に共通に利用したい処理への利用に向きます。 また、ハンドラーは、複数のハンドラーを組み合わせて設定したり、要求・応答それぞれ別の処理を定義 することが可能です。 作成したハンドラーは、ディプロイメント記述子を使って設定します。 ・Webサービスのプロバイダー側では、webservices.xml(WebサービスDD) ・Webサービスのリクエスター側では、web.xml(WebDD) 25 パフォーマンス:モニタリング(TPV) Tivoli Performance Viewer(TPV)を使用して、Webサービスに 関連する統計情報やパフォーマンス情報を取得可能 要求数 平均応答時間 平均送受信メッセージサイズ 項目の名前 意味 LoadedWebServiceCount ロードされた Web サービスの数 ReceivedRequestCount サービスが受信した要求の数 DispatchedRequestCount サービスがディスパッチまたは配布した要求の数 ProcessedRequestCount サービスが正常に処理した要求の数 単位 ResponseTime 正常要求への平均応答時間 ミリ秒 RequestResponseTime ディスパッチ要求を準備する平均応答時間 ミリ秒 DispatchResponseTime 要求をディスパッチする平均応答時間 ミリ秒 ReplyResponseTime ディスパッチ後の応答を準備する平均応答時間 ミリ秒 PayloadSize 受信した要求または応答の平均有効搭載量(要求と応答の合計) バイト RequestPayloadSize 要求の平均有効搭載量 バイト ReplyPayloadSize 応答の平均有効搭載量 バイト 26 Tivoli Performance Viewerを使用して、Webサービスの統計情報やパフォーマンス情報を取得すること ができます。 具体的には、Webサービス・リクエストの要求数、平均応答時間、平均の送受信メッセージのサイズなど を取得することができます。 取得できるカウンター項目の詳細は下記のInfoCenterの記載を参照ください。 WAS V6.1 InfoCenter「Web サービスのカウンター」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/r prf_datacounter16.html 26 パフォーマンス:モニタリング(要求メトリック) 要求メトリックを使用して、1リクエストごとのWebサービス・リ クエスト、Webサービス・プロバイダー処理時間を取得 プロバイダー側Log プロバイダー側Log [07/07/14 16:25:53:800 JST] 00000023 PmiRmArmWrapp I PMRM0003I: [07/07/14 16:25:53:800 JST] 00000023 PmiRmArmWrapp I PMRM0003I: parent:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=11,event=1 – parent:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=11,event=1 – current:ver=1,ip=9.170.233.130,time=1184387328061,pid=388,reqid=1378,event=1 type=Web Services Provider current:ver=1,ip=9.170.233.130,time=1184387328061,pid=388,reqid=1378,event=1 type=Web Services Provider detail=wsprovider:WSServerBean.serverProcess?transport=http&namespace=http://httpserver.wspt&input=serverProcessRequest elapsed=17014 detail=wsprovider:WSServerBean.serverProcess?transport=http&namespace=http://httpserver.wspt&input=serverProcessRequest elapsed=17014 リクエスター側Log リクエスター側Log [07/07/14 16:25:52:343 JST] 0000002e PmiRmArmWrapp I PMRM0003I: [07/07/14 16:25:52:343 JST] 0000002e PmiRmArmWrapp I PMRM0003I: parent:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=10,event=1 – parent:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=10,event=1 – current:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=11,event=1 type=Web Services Requestor current:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=11,event=1 type=Web Services Requestor detail=wsrequestor:WSServerBean.serverProcess?transport=http¶meters=inputInt,inputData elapsed=17062 detail=wsrequestor:WSServerBean.serverProcess?transport=http¶meters=inputInt,inputData elapsed=17062 [07/07/14 16:26:02:421 JST] 0000002e PmiRmArmWrapp I PMRM0003I: [07/07/14 16:26:02:421 JST] 0000002e PmiRmArmWrapp I PMRM0003I: parent:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=10,event=1 – parent:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=10,event=1 – current:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=10,event=1 type=URI detail=/WSPTHTTPClient/WSClientServlet elapsed=32140 current:ver=1,ip=9.170.233.131,time=1184396332781,pid=5388,reqid=10,event=1 type=URI detail=/WSPTHTTPClient/WSClientServlet elapsed=32140 AppServer AppServer Web サービス リクエスター Request Handler (5 s sleep) SOAP/XML Response Handler (10 s sleep) SOAP/XML Request Handler (5 s sleep) Web サービス プロバイダー Response (2 s sleep) Handler (10 s sleep) TPV Webサービスの項 目 ResponseTime RequestResponseTime DispatchResponseTime ReplyResponseTime 上記リクエ スト時の値 17034 ms 5007 ms 2003 ms 10024 ms プロバイダー側の要求メトリックでの経過時間 リクエスター側の要求メトリックでの経過時間 27 要求メトリックを使用して、1リクエストごとのWebサービス・リクエストの経過時間を取得することができま す。 上記は要求メトリックのログを取得したときの例です。計測対象コンポーネントとして、「WebServices」を 選択することで、Webサービス・リクエスター側とWebサービス・プロバイダー側でそれぞれ、リクエストの 経過時間を取得することができます。 プロバイダー側の要求メトリックのログとリクエスター側の要求メトリックのログを付き合わせるときには、プ ロバイダー側の親(parent)のpid,reqidと、リクエスター側の子(current)のpid,reqidでつき合わせを行いま す。 尚、プロバイダー側の経過時間は、プロバイダーのユーザーが定義したWebサービス・ハンドラーを含 んだ時間となり、リクエスター側の経過時間は、リクエスターのユーザーが定義したWebサービス・ハンド ラーは含まない時間となります。 また、TPVでは、複数のリクエストの時間が平均された時間となりますが、ResponseTimeの測定値は、 Webサービス・プロバイダーのサービス実装、ハンドラー処理を含んだ時間となり、 RequestResponseTimeの測定値は、リクエスト・ハンドラーの処理を含む時間、 DispatchResponseTimeはハンドラー処理を含まないサービス実装の処理の時間、 ReplyResponseTimeはレスポンス・ハンドラーの処理時間を含む時間となります。 27 (参考)パフォーマンス:アプリケーション設計 JavaオブジェクトとXMLの変換処理の負荷を考慮 アプリケーション設計における注意 送受信データ・サイズを小さめに SOAP/XMLの構造をシンプルに element数を少なく、elementの階層を浅く 通信回数は少なく データ・サイズを小さくと言っても、小さいデータを大量に送受信するのではなく、大きな データを1回送受信した方がよい Webサービス サービスClient サービス Webサービス サービスServer サービス Serialization De-Seriazation SOAP/XML Object→XML XML→Object Web サービス リクエスター Web サービス プロバイダー De-Seriazation XML→Object Serialization SOAP/XML Object→XML WASのバージョンアップにともない、パフォーマンス向上 28 まず、パフォーマンスを検討するうえで重要な点は、アプリケーション設計と関連する項目になりますが、 JavaオブジェクトとXMLの変換処理は負荷のかかる処理です。同一JVM内のロジックを呼び出したり、EJB 呼び出しを行うよりも、Webサービスのパフォーマンスは悪くなります。しかし、パフォーマンスは少し悪くな りますが、Webサービスには、異言語、異ベンダー間でのインターオペラビリティーを実現することができま す。 特に、JavaからSOAP(XML)にデータ変換を行う処理は負荷のかかる処理ですので、できるかぎり上記の ような点に注意してください。 ただし、WASのバージョンごとに、XMLのシリアライズ・デシリアライズ処理のパフォーマンスは大きく向 上しています。 (参考資料) Technote「Web services performance is slow」 http://www.ibm.com/support/docview.wss?rs=180&uid=swg21232476 28 Webサービス基盤設計 1 2 3 4 5 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー、トランザクション設計 29 29 運用管理:パッケージング(サービス・プロバイダー) RADまたはWASのツール(ウィザード)を使用してアプリケーションを作成 すると、以下のようなStubクラスやデプロイメント・ディスクリプターがEAR の中に含まれる SEI(Webサービスのメソッドを宣言するインタフェース) Webサービス実装クラス(Webサービスのビジネスロジックを実装) オブジェクト・マッピングファイル(要求メッセージ) オブジェクト・マッピングファイル(返答メッセージ) WSDL JAX-RPCマッピングファイル Webサービスデプロイメント記述子の拡張ファイル Webサービスデプロイメント記述子 30 JavaBeanを元に作成したWebサービス・プロバイダーのアプリケーションのクラスファイル、デプロイメン ト・ディスクリプターの定義ファイルです。 ・SEI(Service Endpoint Interface):Webサービスとして公開するメソッドをJavaのインターフェースとして定義 します。Webサービスのリクエスター側の視点からWebサービスの定義を表します。java.rmi.Remoteイン ターフェースを継承する必要があります。 ・Webサービス実装クラス:ビジネス・ロジックを実装、またはビジネス・ロジックを呼び出す実装クラスです。 ・オブジェクト・マッピングファイル:Webサービスの要求メッセージでJavaオブジェクトを使用している場合 に、シリアライザーとデシリアライザーとなるオブジェクトのマッピングファイルです。 ・WSDL:WebサービスのインターフェースをXMLで定義したファイルです。 ・JAX-RPCマッピング・ファイル:WSDLとJavaのインターフェースのマッピング情報を定義します。 ・Webサービスデプロイメント記述子の拡張ファイル:Webサービス用のIBM拡張デプロイメント記述子です。 ・Webサービスデプロイメント記述子:Webサービス用のデプロイメント記述子で、Web services for J2EEの 仕様で定められた内容を表します。 30 webservices.xml (WebサービスDD) webservices.xmlの設定内容 サービス名 WSDLファイルのロケーション JAX-RPCマッピングファイルのローケーション ポート・コンポーネント情報 ポート・コンポーネント名 SEIの完全修飾名 Webサービス実装クラス名 31 Webサービスデプロイメント記述子には、下記のような項目が設定されます。 ・サービス名 ・WSDLファイルのロケーション ・JAX-RPCマッピング・ファイルのロケーション ・ポート・コンポーネント情報 ・ポート・コンポーネント名 ・SEIの完全修飾名 ・Webサービス実装クラス名 また、Webサービス・ハンドラーやWSセキュリティーの設定もWebサービス・エディター(webservices.xml とIBM拡張のWebサービス・デプロイメント記述子を含む)で設定します。 31 運用管理:パッケージング(サービス・リクエスター) RADまたはWASのツール(ウィザード)を使用 してリクエスター・アプリケーションを作成する と、以下のようなStubクラスやデプロイメント・ ディスクリプターがEARの中に含まれる Stubクラス オブジェクト・マッピングファイル(要求メッセージ) オブジェクト・マッピングファイル(返答メッセージ) Webサービス・リクエストコード実装クラス JavaオブジェクトとXML要素 JavaオブジェクトとXML要素 のマッピング情報 のマッピング情報 WebSphere製品固有のWeb WebSphere製品固有のWeb サービス・ランタイム情報 サービス・ランタイム情報 ・要求タイムアウト ・要求タイムアウト ・SSL構成 ・SSL構成 ・WS-Security構成情報 ・WS-Security構成情報 WSDL JAX-RPCマッピングファイル Webサービス・リクエスターのデプロイメント記述子の拡張ファイル Webサービス・リクエスターの設定ファイルは、webデプロイメント記述子 32 に含まれる Webサービス・リクエスターのアプリケーションのクラスファイル、デプロイメント・ディスクリプターの定義 ファイルです。 JAX-RPCマッピングファイルには、JavaオブジェクトとXML要素のマッピング情報が含まれ、メッセージタ イプや各パラメータについてのマッピングが定義されています。 ibm-webservicescleint-bnd.xml, ibm-webservicesclient-ext.xmi ファイルには、要求タイムアウト、SSL構 成、WS-Security構成情報など、 WebSphere 製品固有の Web サービス・ランタイム情報が含まれていま す。 32 web.xmlに含まれるWebサービス・リクエスター関連項目 WSバインディングの項目で、IBM拡張の要求タイムアウト設定である 「同期タイムアウト」なども設定できる 33 Webサービス・リクエスターの定義情報は、webデプロイメント・ディスクリプター(web.xml)に設定されます。 尚、IBM拡張部分は、「ibm-webservicesclient-bnd.xmi」、「ibm-webservicesclient-ext.xmi」ファイルに記 述されます。 RADのweb.xmlエディターでWebサービス・リクエスターの設定項目を確認・設定する場合には、「参照」、 「WSハンドラー」、「WS拡張」、「WSバインディング」タブを確認します。 33 運用管理:デプロイ 通常のWebアプリケーションのデプロイと同様 管理コンソール、またはwsadminにてデプロイ 「Webサービスのデプロイ」のチェックを 「Webサービスのデプロイ」のチェックを 入れると、wsdeployコマンドが実行され 入れると、wsdeployコマンドが実行され ます。 ます。 (※ RADウィザードで作成したEARファイ (※ RADウィザードで作成したEARファイ ルであれば不要) ルであれば不要) 34 Webサービスアプリケーションは、J2EEアプリケーションであり、WASの管理コンソールからデプロイしま す。 「Webサービスのデプロイ」というチェックボックスはデフォルトでオフ(チェックなし)になっています。 このチェックボックスをONにすると、アプリケーションのデプロイ時にwsdeployコマンドが実行されます。 wsdeployコマンドはWebSphere製品に固有のデプロイメント・クラスをEARファイルやアプリケーション・ク ライアントのJARファイルに追加します。wsdeployコマンドは、少なくとも1回実行する必要があります。ただ し、RADウィザードでEARファイルを作成している場合はwsdeployコマンドが実行されていますので、WAS へのデプロイ時に実行させる必要はありません。 wsdeployコマンドの実行によって以下のような処理が行われます。 ・EARファイル内の各モジュールの検査 ・モジュールにWebサービス・プロバイダー・インプリメンテーションが含まれている場合、WSDL2Javaコマ ンドが「deploy-server」のロールで実行される ・モジュールにWebサービス・リクエスター・インプリメンテーションが含まれている場合、WSDL2Javaコマン ドが「deploy-client」のロールで実行される ・WSDL2Javaコマンドによって生成されるファイルがコンパイルされて再パッケージ される また、wsadminコマンドからWebサービスアプリケーションをデプロイする場合には、deploywsオプションを 指定して下さい。 「Webサービスのデプロイ」オプションの詳細は、下記のInfoCenterの記載を参照ください。 WAS V6.1 InfoCenter「アプリケーション・サーバーへの Web サービス・アプリケーションのデプロイ」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/t wbs_deployapp2.html 34 運用管理:管理コンソールからの管理 管理コンソールからできるWebサービスの管理 サービス・プロバイダー デプロイメント・ディスクリプターの表示 WSDLファイルの取得 サービス・リクエスター デプロイメント・ディスクリプターの表示 エンドポイント・アドレスの変更 要求タイムアウト値の変更 35 管理コンソールからできるWebサービス・アプリケーションの管理項目としては、プロバイダー側のWeb サービス・デプロイメント・ディスクリプターの内容を表示することができます。 管理コンソールで[アプリケーション]-[エンタープライズ・アプリケーション]-[サービス・プロバイダー・ア プリケーション名]-[モジュール:モジュールの管理]-[モジュール名]-[Webサービス・プロパティー]のサブ 項目で選択します。 WSDLファイルの取得は、管理コンソールから、[アプリケーション]-[エンタープライズ・アプリケーション][サービス・プロバイダー・アプリケーション名]-[WSDLファイルの公開]を選択します。名前は、「WSDLファ イルの公開」となっていますが、WSDLファイルをzip化し、ローカルのディスクにダウンロードする機能です。 エンドポイントのアドレスのURL接頭部は、サーバー固有の値などに変更してWSDLファイルを提供するこ とができます。 サービス・リクエスター側では、 [アプリケーション]-[エンタープライズ・アプリケーション]-[サービス・リク エスター・アプリケーション名]-[モジュール:モジュールの管理]-[モジュール名]-[Webサービス・プロパ ティー]のサブ項目で、IBM拡張のWebサービス・クライアント・デプロイメント・ディスクリプターの表示や、 呼び出すエンドポイント・アドレスや要求タイムアウト値を変更することができます。 管理コンソールから行うことのできるWebサービス・アプリケーションの管理の詳細は下記のInfoCenterの 記載を参照ください。 WAS V6.1 InfoCenter「デプロイされた Web サービス・アプリケーションの管理」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/t wbs_admindeploy.html WAS V6.1 InfoCenter「Web サービス・クライアント・バインディングの構成」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/t wbs_clientbindings.html WAS V6.1 InfoCenter「管理コンソールを使用した WSDL ファイルの公開」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/t wbs_adminwsdl.html 35 運用管理:エンドポイント・アドレスの変更(1/2) サービス公開後、以下のような理由でエンドポイントが変更 になる可能性がある サーバー名変更 ドメイン変更 使用ポート変更 上記変更が行われた場合、Webサービス・リクエスターで接 続先であるエンドポイントを変更する 新エンドポイントにリ 新エンドポイントにリ クエストするよう変 クエストするよう変 更が必要。 更が必要。 Web サービス リクエスター 【エンドポイント変更】 (旧) http://www1.ibm.com/Ctx/services/Svc ↓↓↓ (新) http://www2.ibm.com/Ctx/services/Svc Web サービス プロバイダー End User 36 サービス・リクエスターの設定変更について説明します。サービスの公開後、サーバー名の変更などに より、エンドポイント・アドレスが変更になる場合があります。このようなときには、Webサービス・リクエスター のアプリケーションを再作成し、再デプロイを行う必要はなく、Webサービス・リクエスターの「Webサービ ス・クライアント・バインディング」の設定変更により、呼び出すエンドポイント・アドレスを変更することができ ます。 また、テスト時などに、TCP MonitorツールでSOAPメッセージをモニターする場合に、このエンドポイン ト・アドレスの変更により、一時的に呼び出しアドレスを変更するためにも利用できます。 36 運用管理:エンドポイント・アドレスの変更(2/2) WSDLやWebサービス・リクエスターのStubコードを変更する ことなくエンドポイントアドレスを変更可能 37 エンドポイント・アドレスの変更方法です。[アプリケーション]-[エンタープライズ・アプリケーション]-[サー ビス・リクエスター・アプリケーション名]-[モジュール:モジュールの管理]-[モジュール名]-[Webサービス・ プロパティー:Webサービス・クライアント・バインディング]を選択し、「ポート情報:編集」のリンクをクリックし ます。「オーバーライドされたエンドポイントURL」の項目に上書きするエンドポイントのURLアドレスを指定 します。 尚、エンドポイントURLは、Webサービス・リクエスター・アプリケーション内のコードでも明示的に指定す ることができます。その場合には、管理コンソール上で指定したアドレスよりも、アプリケーション・コード内 で指定したエンドポイント・アドレスが優先されますので、ご注意ください。 37 運用管理:要求タイムアウトの設定(1/2) 要求タイムアウト プロバイダー側でなんらかの理由で応答が返ってこない場合、リクエ スターがいつまでも待ち続けないように設定する WASでは、リクエスター側にサービス呼び出しのタイムアウト時間を 設定することができる Webサービスへの接続を開始してから設定時間以上経過すると、 SocketTimeoutExceptionが発生して、リクエスター側で RemoteException がスローされる デフォルトでは300秒 タイムアウトを検知した時、リクエスターはシステム要件に応じた対応 を行う タイムアウトエラー 時間をあけて リトライして下さい。 End User Web サービス リクエスター タイム アウト Web サービス プロバイダー プロセス 障害 38 Webサービス・プロバイダー側での処理が異常に時間がかかる場合や、ネットワーク障害が発生した場 合などにリクエスター側が待ち続けてしまうことのないよう、一定の時間待ったらタイムアウトするような構成 が望ましいです。 WASでは、リクエスター側でのWebサービス呼び出しのタイムアウトの仕組みを実装しており、デフォルト ではサービス呼び出し後、300秒経過すると、 SocketTimeoutExceptionが発生して、 RemoteExceptionが スローされます。 38 運用管理:要求タイムアウトの設定(2/2) 要求タイムアウトの設定方法 エンドポイント変更を行う画面にて、要求タイムアウトも設定できる IBM拡張Webサービス・クライアントDDでも設定可能 その設定を管理コンソールから上書ける 39 エンドポイント・アドレスの変更、要求タイムアウトの設定項目の詳細は下記のInfoCenterの記載を参照く ださい。 WAS V6.1 InfoCenter「Web サービス・クライアントのポート情報」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/u wbs_portattribute.html 尚、IBM拡張Webサービス・クライアントDDでの設定方法の詳細は下記のInfoCenterの記載を参照くだ さい。 WAS V6.1 InfoCenter「ibm-webservicesclient-bnd.xmi assembly properties」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/r wbs_assembpropclient.html WAS V6.1 InfoCenter「Configuring the Web services client bindings in the ibm-webservicesclientbnd.xmi deployment descriptor」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/t wbs_configibmclientdd.html 39 Webサービス基盤設計 1 2 3 4 5 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー設計、トランザクション設計 40 40 問題判別:tcpmon(1/2) SOAPメッセージのトレース リクエスターとプロバイダーの切り分けのためにも、SOAPメッセージ の取得は有用 tcpmonツール WASに同梱される特定のポートへのtcpパケットをキャプチャーする ツール Listenするポートは、実際のWebサービス・プロバイダーのポート(またはホスト)と 分離する必要がある 送受信で流れるSOAPメッセージをキャプチャー可能 RADやASTのTCP/IPモニターと同様にSOAPメッセージを取得できる Web サービス リクエスター Web サービス プロバイダー End User 41 Webサービスの問題判別を行う場合には、SOAPメッセージを取得することがとても有用です。 リクエストとレスポンスのSOAPメッセージを取得することで、サービス・リクエスターとサービス・プロバイ ダーのどちらが想定外のメッセージを送信しているか判別することができます。 41 問題判別:tcpmon(2/2) WASインストール・ディレクトリーで下記のコマンドを実行し、tcpmonツールを起動 D:¥WAS61>bin¥setupCmdLine.bat D:¥WAS61>java¥bin¥java -Djava.ext.dirs="%WAS_EXT_DIRS%;%WAS_HOME%¥plugins" com.ibm.ws.webservices.engine.utils.tcpmon <local_listen_port> <remote_server> <remote_port> リクエスターのエ ンドポイント・アド レスをモニター・ア ドレスに変更する リクエスト・ メッセージ 改行なし プロバイダーの ホスト名、ポート 番号を指定する レスポンス・ メッセージ 42 tcpmonツールは、上記コマンドで起動できます。 上記のように、送信SOAPメッセージ、受信SOAPメッセージをキャプチャーできます。 tcpmonの使用方法の詳細は、下記のRedbookに詳しく記述されていますので参照ください。 Redbook「Web Services Handbook for WebSphere Application Server 6.1」の「WebSphere Application Server TCP/IP Monitor」(p.330-331) http://publib-b.boulder.ibm.com/abstracts/sg247257.html?Open 42 問題判別:WASのトレース WASのトレース WASのトレース・ストリングとして、下記を指定することで、trace.logに 送受信SOAPメッセージをロギング 「com.ibm.ws.webservices.trace.MessageTrace=all」 [07/07/17 19:43:28:080 JST] 0000001f ManagerAdmin I TRAS0018I: トレース状態 トレース状態が 状態が変更されました 変更されました。 されました。 新しいトレース しいトレース状態 トレース状態は 状態は、 [07/07/17 19:43:28:080 JST] 0000001f ManagerAdmin I TRAS0018I: トレース状態 トレース状態が 状態が変更されました 変更されました。 されました。 新しいトレース しいトレース状態 トレース状態は 状態は、 *=info:com.ibm.ws.webservices.trace.MessageTrace=all です。 です。 *=info:com.ibm.ws.webservices.trace.MessageTrace=all です。 です。 [07/07/17 19:44:41:696 JST] 0000001f MessageTrace 3 WSWS3569I: インバウンド HTTP SOAP 要求: 要求 [07/07/17 19:44:41:696 JST] 0000001f MessageTrace 3 WSWS3569I: インバウンド HTTP SOAP 要求: 要求 コンテンツ・タイプ: text/xml; charset=utf-8 コンテンツ・タイプ: text/xml; charset=utf-8 メッセージ内容: メッセージ内容: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soapenv:Header><reqmetrics:arm_correlator xmlns:wsa="http://www.w3.org/2005/08/addressing"><soapenv:Header><reqmetrics:arm_correlator rm_correlator="ver=1,ip=9.170.233.131,time=1184644031515,pid=5600,reqid=20,event=1" soapenv:actor="reqmetricsURI" rm_correlator="ver=1,ip=9.170.233.131,time=1184644031515,pid=5600,reqid=20,event=1" soapenv:actor="reqmetricsURI" xmlns:reqmetrics="http://websphere.ibm.com"/><wsa:To>http://localhost:9082/EntSysSampProWeb/services/HelloService</wsa:To><wsa:Action>sayHello</ xmlns:reqmetrics="http://websphere.ibm.com"/><wsa:To>http://localhost:9082/EntSysSampProWeb/services/HelloService</wsa:To><wsa:Action>sayHello</ wsa:Action><wsa:MessageID>uuid:D3C7A643-0113-4000-E000-15E009AAE983</wsa:MessageID></soapenv:Header><soapenv:Body><p495:sayHello wsa:Action><wsa:MessageID>uuid:D3C7A643-0113-4000-E000-15E009AAE983</wsa:MessageID></soapenv:Header><soapenv:Body><p495:sayHello xmlns:p495="http://sample.ent.ise.com"><id>100</id><inputData><name>Y.N</name></inputData></p495:sayHello></soapenv:Body></soapenv:Envelope> xmlns:p495="http://sample.ent.ise.com"><id>100</id><inputData><name>Y.N</name></inputData></p495:sayHello></soapenv:Body></soapenv:Envelope> [07/07/17 19:44:42:116 JST] 0000001f MessageTrace 3 WSWS3572I: アウトバウンド HTTP SOAP 応答: 応答 [07/07/17 19:44:42:116 JST] 0000001f MessageTrace 3 WSWS3572I: アウトバウンド HTTP SOAP 応答: 応答 コンテンツ・タイプ: text/xml; charset=utf-8 コンテンツ・タイプ: text/xml; charset=utf-8 メッセージ内容: メッセージ内容: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://www.w3.org/2005/08/addressing"><soapenv:Header><wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To><wsa:Action> xmlns:wsa="http://www.w3.org/2005/08/addressing"><soapenv:Header><wsa:To>http://www.w3.org/2005/08/addressing/anonymous</wsa:To><wsa:Action> http://sample.ent.ise.com/HelloService/sayHelloResponse</wsa:Action><wsa:MessageID>uuid:D3C7A204-0113-4000-E000http://sample.ent.ise.com/HelloService/sayHelloResponse</wsa:Action><wsa:MessageID>uuid:D3C7A204-0113-4000-E0000B0C09AAE982</wsa:MessageID><wsa:RelatesTo>uuid:D3C7A643-0113-4000-E0000B0C09AAE982</wsa:MessageID><wsa:RelatesTo>uuid:D3C7A643-0113-4000-E00015E009AAE983</wsa:RelatesTo></soapenv:Header><soapenv:Body><p495:sayHelloResponse 15E009AAE983</wsa:RelatesTo></soapenv:Header><soapenv:Body><p495:sayHelloResponse xmlns:p495="http://sample.ent.ise.com"><sayHelloReturn><helloName>Hello, xmlns:p495="http://sample.ent.ise.com"><sayHelloReturn><helloName>Hello, Y.N !</helloName><provProsTime>1184669081696</provProsTime></sayHelloReturn></p495:sayHelloResponse></soapenv:Body></soapenv:Envelope> Y.N !</helloName><provProsTime>1184669081696</provProsTime></sayHelloReturn></p495:sayHelloResponse></soapenv:Body></soapenv:Envelope> Webサービス・エンジンの問題 「com.ibm.ws.webservices.engine.*=all」 43 WASのトレース・ストリングとして、上記の設定を行うことで、trace.logに送受信のSOAPメッセージを記録 することができます。 トレース・ストリングの設定は、管理コンソールで、[サーバー]-[アプリケーション・サーバー]-[アプリケー ション・サーバー名]-[トラブルシューティング:ログ詳細レベルの変更]の「構成」タブまたは「ランタイム」タ ブで設定します。 また、WASのWebサービス・エンジンの問題と思われる場合には、トレース・ストリングとして、 「com.ibm.ws.webservices.engine.*=all」を指定することで、Webサービス・エンジンの処理の詳細を trace.logに記録することも可能です。 WASのWebサービス関連のトレースの取得方法の詳細については、下記のInfoCenterやTechnoteの記 載を参照ください。 WAS V6.1 InfoCenter「Web サービスのトレース」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.doc/info/ae/ae/t wbs_tracewbscomp.html Technote「MustGather: Web services engine and tooling problems for WebSphere Application Server V6.1, V6, V5.1 and V5.」 http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg21198363 Technote「MustGather: Web services security (WS-Security) problems with WebSphere Application Server」 http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg21199335 Redpaper「WebSphere Application Server V6.1 Web Services Problem Determination」 http://www.redbooks.ibm.com/abstracts/REDP4306.html?Open 43 Webサービス基盤設計 1 2 3 4 5 トポロジー設計 パフォーマンス設計 運用管理 問題判別 セキュリティー設計、トランザクション設計 44 44 セキュリティー設計(1/2) 要件に応じてメッセージ・レベルとトランスポート・レベルのセ キュリティーを組み合わせる メッセージレベル:XMLメッセージに対するセキュリティー トランスポートレベル:通信経路自体のセキュリティー それぞれのレベルで対応できるセキュリティー要件は異なる SOAP データ・フォーマット HTTP JMS SOAP/HTTP SOAP/JMS トランスポート メッセージ・レベル etc... トランスポート・レベル 認証・機密性 IPSec, SSL.. 機密性 認証 <メッセージ 暗号化> 完全性 <デジタル署名> WS-Security 45 Webサービス環境でのセキュリティーは、メッセージ・レベルとトランスポート・レベルの2つのレイヤーに 分けて考えることができます。 ・メッセージレベル :XML/SOAPメッセージに対するセキュリティ ・トランスポートレベル:プロトコル・レイヤーに応じて通信経路を流れるデータパケット自体を暗号化 メッセージレベルでのセキュリティにはWS-Securityが、トランスポートレベルでのセキュリティにはIPSec やSSLなどがあります。それぞれのレベルで対応できるセキュリティ要件は異なり、柔軟性や設定箇所、成 熟度など各々特徴があります。要件に応じて複数のセキュリティー・ソリューションを組み合わせることで強 固なセキュリティー環境を構築することができます。 認可など一部のセキュリティー要件に関しては、現状Webサービス環境での仕様としては標準化途中の 段階であり、言語・ベンダー固有のセキュリティー・ソリューションを選択する必要があります。 45 セキュリティー設計(2/2) トランスポート・ トランスポート・レベル・ レベル・セキュリティー SSL等、通信経路自体のセキュリティ 従来の成熟したセキュリティ・ソリューション メッセージ要素に対する暗号化・署名はできない ポイント間のみのセキュリティ→ESBなどの中間ノードでの複合/再暗号化が 必要 トランスポート・プロトコルに依存 複合化/再暗号化 リクエスター 仲介ノード HTTPS プロバイダー HTTPS メッセージ・ メッセージ・レベル・ レベル・セキュリティー XMLメッセージ自体をセキュア化することでEndtoEndのセキュリティを確保 WS-Security等のセキュリティ標準仕様による相互運用性の向上 リクエスター XML 仲介ノード プロバイダー XML 46 トランスポートレベルのセキュリティーはプロトコルレイヤーに応じて通信経路を流れるデータパケット自 体を暗号化します。これは従来のWebアプリケーション環境において広範に採用されているソリューション であり、実績や異機種環境での接続性などがメリットとしてあげられます。また、H/Wアクセレーターなどパ フォーマンス向上の為の手法も成熟している点もメリットとして挙げられます。デメリットとしては以下があり ます。 ・暗号化の単位がアプリケーションもしくは通信経路の単位となり、柔軟な使い分けが望めません。 ・途中でSOAPメッセージに対する処理を行う仲介ノードが入るケースなどは必ず複合化処理が必要とな ります。つまり、End to Endでメッセージの機密性が保たれるわけではなく、ポイント間のみを保証するソ リューションといえます。 ・SSLでいえば、通常はHTTP以外のトランスポート・プロトコルに対して適用することはできません。 これらのデメリットをカバーするため、SOA環境においてはWS-Securityをはじめとするメッセージレベ ルのセキュリティを考慮に入れる必要があります。メッセージレベルのセキュリティーではSOAPメッセージ の任意の箇所に対して柔軟に暗号化・署名をかけることができます。SOAPメッセージそのものに対して 暗号化・署名を施すことによって、リクエスターからプロバイダーまで一貫してセキュリティが保証されること になります。トポロジー上、途中でトランスポートレベル・セキュリティのターミネート処理が入ったとしても、 その機密性、完全性は保証されると言えます。 トランスポートレベルのセキュリティとメッセージレベルのセキュリティを組み合わせればより強固なセキュ リティ基盤を構築することが可能です。SOA環境で必須の要件と言える相互運用性の面からもWSSecurityをはじめとするWebサービスのセキュリティー仕様の重要性は高まってきています。 Webサービスの通信をSSL化する方法の詳細は、下記のテクニカル・フラッシュにまとまっていますので、 ご参照ください。 テクニカル・フラッシュ「WebサービスアプリケーションのSSL構成 WASV6, V6.1 設定ガイド (WAS-07014)」 http://www-06.ibm.com/jp/domino01/mkt/cnpages1.nsf/page/default-000B3D93 WASのWebサービスのWS-Security設定の詳細は、下記のDeveloperDomainの記事にまとまってい ますので、ご参照ください。 DeveloperDomain記事「Webサービス・セキュリティー・ガイド」 http://www-06.ibm.com/jp/software/websphere/developer/was/wv61/guide/ws_security.html 46 トランザクション設計:Webサービスにおけるトランザクション リクエスターと リクエスターとプロバイダーを プロバイダーを跨った、 った、トランザクション処理 トランザクション処理を 処理を実施 SOAPメッセージによるコーディネータ間のトランザクション管理を実現 コーディネーター:分散環境におけるトランザクション処理の調整を行う WebServiceリクエスター WebServiceプロバイダー SOAP/HTTP AS AS JTAの技術 JTAの技術 TM トランザクション・スコープ WebServiceリクエスター AS coordinator WebServiceプロバイダー SOAP/HTTP AS WS-Transactionの技術 WS-Transactionの技術 coordinator トランザクション・スコープ 47 アプリケーションでトランザクション処理を行う場合、トランザクション・スコープの範囲によってその処理 内容は異なります。アプリケーション・サーバーごとにトランザクション管理を行うコンポーネントが存在しま すが、コンポーネントが複数の場合、コンポーネント同士の調整が必要となりトランザクション処理は複雑 になります。 Webサービス環境においては、トランザクション管理を行うコンポーネントを「コーディネーター」と呼びます。 J2EEにおけるトランザクション仕様であるJTA(Java Transaction API)の「トランザクション・マネージャー」と 同じように考えることができます。上図にWebサービス環境におけるトランザクション・スコープの例を示し ます。 Webサービス・プロバイダー内でトランザクションの開始/終了が行われる場合(トランザクション・スコー プがWebサービス・プロバイダーで閉じている場合)は、JTAに則った挙動となります。トランザクション・マ ネージャーによってACID属性を維持したトランザクション処理が実行されます。 一方、Webサービス・リクエスターでトランザクションが開始され、Webサービス・プロバイダーでの処理を 経て、トランザクションが終了される場合は、コーディネーター同士でトランザクションの調整が必要となり ます。トランザクション・コンテキストの伝達などトランザクションの調整をSOAPメッセージを介して実現する 技術がWS-Transactionになります。 47 トランザクション設計:WS-Transaction Webサービス Webサービス環境 サービス環境において 環境においてトランザクション においてトランザクション処理 トランザクション処理を 処理を実現する 実現する技術 する技術 下記の3つの技術(仕様)によって構成される Web Services Coordination (WS(WS-Coordination) 分散アプリケーション間の調整を行うフレームワーク Web Services Atomic Transaction (WS(WS-AtomicTransaction) AtomicTransaction) 短時間で終了するアトミック・トランザクションを調整するプロトコル 複数のアプリケーション・サーバー間のアクションをまとめる アクションの結果から振る舞いを決定("all-or-nothing") Web Services Business Activity (WS(WS-BusinessActivity) BusinessActivity) ロング・ランニング・トランザクションを調整するプロトコル ビジネスの例外(処理のキャンセルや予約状況の更新等)を処理するため、ビジネスロジッ クに適用 例外発生時はコンペンセーション(補償)によって、逆向きの処理を実施 48 Webサービス環境においてトランザクション処理を実現する仕様を総じてWS-Transactionと呼びます。 実際はWS-Coordination、WS-AtomicTransaction(WS-AT)、WS-BusinessActivity(WS-BA)の3つの仕様 から構成されています。 WS-Coordinationは、トランザクションの調整に必要なコーディネーション・コンテキスト(識別子やコー ディネーションに必要な情報)の作成や、調整プロトコルの決定に使用されるコーディネーターの技術で す。 WS-AtomicTransaction(WS-AT)は、分散配置されたコーディネータ間で、短期間実行される2PCのトラ ンザクション調停を行うためのプロトコルです。Webサービス・リクエスター、Webサービス・プロバイダーに おけるリソース・マネージャーへの処理を1つのトランザクション・スコープに含めることが可能です。トラン ザクション内で実行されるリソースへの処理は全て実行されるか、全く実行されない(“all-or-nothing”)と いう属性を持つためにアトミック・トランザクションと呼ばれます。 WS-BusinessActivityはWebサービス環境において、ロング・ランニング・トランザクションを実現するプロ トコルです。WS-ATが短時間で終了するアトミック・トランザクションであるのに対して、WS-BAは長期間 実行されるアクティビティや、ビジネスの例外(処理のキャンセルや予約状況の更新など)を処理するため のビジネス・ロジックの適用に対応しています。 コンペンセーション(補償処理)とは、既に実行された処理に対して逆向きとなる操作を行うことで、処理 が実行されなかったかのような状態に戻すこと 48 WAS V6.1 Feature Pack for Web Services 49 49 WAS V6.1 Feature Pack for Web Servicesとは WAS V6.1上にFeature Packという形式の追加モジュールを インストール 正式サポートされる追加モジュール WASV6.1のライセンスでサポート Feature Pack一覧 Feature Pack for WebServices(FPWS):正式版公開中 Feature Pack for Web 2.0(FPWEB2.0):正式版公開中 Feature Pack for EJB 3 (FPEJB):正式版公開中 50 WASV6.1より提供されるようになったFeature Packは、WAS V6.1上に特定のテーマに沿った最新の 機能を追加するものです。WAS V6.1がインストールされているマシン上に、追加インストールを行って拡 張機能を追加するもので、 Bug Fixとは異なります。リリースアップやバージョンアップではなく新しく Feature Packというパッケージを提供する事で、新機能を必要とするお客様のみが機能拡張出来るよう、 柔軟性をもたせています。これによって、V6.1の現状機能を維持し安定したいお客様と、Webサービスの 最新機能を早期適用したいお客様の、双方の要望に応える事が出来るようになりました。 今後も順次FeaturePackのリリースが予定されています。Feature Packのダウンロードなどは、下記の サイトをご利用ください。 Technote「Announcing: Feature Pack for Web Services for WebSphere Application Server V6.1」 http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg21264563 「WebSphere software early programs」 https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere.shtml 50 WS-FPで拡張される主要な機能のポイント インターオペラビリティの インターオペラビリティの向上 非同期プログラミングモデル 非同期プログラミングモデル のサポート WS-Iの最新Profileをサポート 最新の各種仕様をサポート トランスポート・レベルではなくプログラミングモデルの レベルで非同期呼び出しが可能(JAX-WS) 開発容易性の 開発容易性の向上 アノテーションによる開発でコードがシンプルに(JAX-WS) メッセージ送受信 メッセージ送受信における 送受信における 信頼性の 信頼性の確保 Webサービスランタイムのレベルで信頼性・セキュリティを 確保(WS-RM、WS-SC) 構成管理方法の 構成管理方法の向上 バイナリーデータの バイナリーデータの転送 その他 その他 管理コンソールのWebサービス設定項目の追加 ポリシーベースの設定方法を採用(WS-Policy) 簡単にバイナリーデータ転送ができ、.NETとのインターオペ ラビリティも確保(MTOM) XMLバインディングのサポート(JAXB) 高速なXMLパーサーの採用(StAX) 51 WAS V6.1のFeature Pack for Web Servicesによって追加される主な機能の特徴を簡単にご紹介しま す。 1つ目は、WS-I profileや各種仕様の最新バージョンをサポートする事で、WASV6.1が備えているイン ターオペラビリティを更に向上させている点です。 2つ目は、SOAP/JMSというトランスポート・レベルではなくプログラミングモデルで非同期呼び出しを行 えるようになった点です。 3つ目は、アノテーションによってコードがシンプルになり、DDが不要になったり、UT時にJ2EEコンテナ が不要になるなど、開発が容易になった点です。 4つ目は、WS-RM、WS-SCのサポートにより、信頼性の高いメッセージの送受信が可能になった点で す。 WS-RM(Reliable Messaging)とは、Webサービスで信頼性の高いメッセージング送信を行う仕組みに なります。WS-RMプロトコルを使用し、RM SourceとRM Destinationが確実なメッセージング配信を行い ます。WS-SC(Secure Conversation)とは、複数のメッセージング交換に渡るセキュリティ提供方法が定 義されています。 5つ目は、構成管理方法の向上で、Webサービスに関する要件、設定、機能をポリシーとして記述しア プリケーションにアタッチする事ができるようになった点や、管理コンソールの設定画面の拡張が挙げられ ます。 6つ目は、これまで歴史的に.NetとJavaで異なっていたバイナリーデータの添付方式について、両方の ベンダーが合意したMTOM(Message Transmission Optimization Mechanism)という仕様をサポートし、 XOPを利用したバイナリーデータの送受信を可能にした点です。 その他、XMLバインディングをサポートしHTTPプロトコルでのXML送受信が可能になった点、これまで のDOMやSAXとは異なる新しいXMLのパーシング仕様であるStAX XMLパーサーをサポートしている点 が挙げられます。 51 (参考)WS-FPがサポートする仕様 仕様 WAS6.1 WSFP Java API for XML-based RPC (JAX-RPC) V1.1 V1.1 Java API for XML Web Services (JAX-WS) - V2.0 Java Architecture for XML Binding (JAXB) - V2.0 Streaming API for XML (StAX) - V1.0 SOAP with Attachments API for Java (SAAJ) V1.2 V1.2,V1.3 SOAP V1.1 V1.1,V1.2 XML-binary Optimized Packaging (XOP) - V1.0 Web Services Interoperability Organization (WS-I) Basic Profile V1.1 V1.1 WSDL V1.1 V1.1 Web Services-Interoperability Organization (WS-I) Attachments Profile V1.0 V1.0 Web Services Addressing (WS-Addressing) V1.0 V1.0 WS-Security V1.0 V1.0,V1.1 Web Services Interoperability Organization (WS-I) Basic Security Profile V1.0 V1.0 Web Services Secure Conversation (WS-SC) - V1.0 Web Services Reliable Messaging (WS-RM) - V1.0,V1.1 Web Services Trust Language - V1.0 Message Transmission Optimization Mechanism (MTOM) - V1.0 52 上記は、WSFPがサポートする主な仕様のバージョンです。 重要な仕様としては、JAX-WS、JAXB、StAX、WS-SC、WS-RM、WS-Policy、MTOMなどが挙げられ ます。 尚、WSFPやWAS V6.1がサポートするWebサービス仕様の詳細は下記のInfoCenterの記載を参照く ださい。 WSFP InfoCenter「Specifications and API documentation」 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.wsfep.multiplatfor m.doc/info/ae/ae/rovr_specs.html 52 まとめ Webサービスの基盤設計は、Webアプリケーションの延長線 であり、Webアプリケーションと大きく異なるわけではない Webサービス基盤設計において、Webアプリケーションと比較 して注意する部分は下記の点 インターオペラビリティー Webサービス・リクエスターのチューニング項目 Webサービス・リクエスターにおけるプロバイダーの宛先指定、タイム アウト設定 問題判別におけるSOAPメッセージのキャプチャー 53 53 参考資料 WAS V6.1 InfoCenter http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp WAS V6.1 Feature Pack for Web Services InfoCenter http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm. websphere.wsfep.multiplatform.doc/info/welcome_nd.html Redbook「 Redbook「Web Services Handbook for WebSphere Application Server 6.1, SG24SG24-72577257-00」 00」 http://publib-b.boulder.ibm.com/abstracts/sg247257.html?Open 54 54