戻る

SOA

Reviced: 2007-12-15

2007年後半、日本国内でも、SOAの事例が登場してきました。

SOA の定義

SOAはService Oriented Architectureの略です。日本では、「サービス志向アーキテクチャ」という訳語が当てられています。最大公約的な意味は、「記述言語で定義された粗粒度のサービスを、共通のインタフェースで粗結合する、分散コンピューティング」といったところです。

粗粒度
業務プロセス的に意味のある、単一の機能やオブジェクトより大きな単位
サービス
ロジックの詳細に依存せずに、入力インタフェースだけを通して利用可能な、それ自体で動作可能な単位
粗結合
実装の詳細に依存しない、インタフェースに対するメッセージを介した結合。この結合には、同期処理の場合と、非同期処理の両方が含まれます
分散コンピューティング
複数のサービスを組み合わせることで、業務プロセスを組み立てて実現すること

最も有力な実装は、通信プロトコル/インタフェース定義としてのWebサービスと、ビジネスフロー定義としてのBPEL (Business Process Execution Language)です。

ベンダー各社のJ2EE/Java EEコンテナ製品は、ESB (Enterprise Service Bus)やMOM (Message Oriented Middleware)を独自に実装し、トランザクション管理機能や自己回復などのシステムレベルの機能を追加することで差別化を図っています。

SOAの関連仕様

SOA は EA - Enterprise Architecture などと同様にレイヤの高い概念です。標準仕様は、W3CとOASISで策定されています。WSDL, SOAPなどのXML系の仕様はW3Cで策定されており、Web Service系の仕様はOASISが定めています。

W3Cの代表的な勧告
仕様バージョンリリース日付備考
SOAP1.2 2nd Edition2007-04-27Simple Object Access Protocol. Web ServiceのXMLメッセージ交換の仕様。入門(Primer)を含む三部からなる。
WSDL2.02007-06-26Web Service Definition Language. Web ServiceのXMLインタフェース記述言語の仕様。入門(Primer)を含む三部からなる。
Web Services Policy1.52007-09-04Web Serviceベースのシステムの、セキュリティ、信頼性、アドレッシングなどのモジュールを用いる、ポリシー記述のための仕様。
Basic XML Schema Patterns for Databinding1.0 (Working Draft)2007-10-31データの内部実装とバインドするXML Schemaパターンの記述仕様。特定の言語とは独立した、XML Schemaベースの仕様。
OASISの代表的な仕様
仕様バージョンリリース日付備考
WS-BPEL2.02007-04-11Web Services Business Process Execution Language. SOAで結び付けるプロセスを定義するXMLベースの言語仕様。
WS-Reliability1.12004-11-25SOAPベースのメッセージ交換の信頼性保証のための仕様。
WS-Security1.12006-02-01デジタル署名、ユーザ認証、暗号化の機能を、SOAPヘッダに記述する仕様。
WS-Security Policy1.22007-07-01W3C Web Services Policyで利用可能なセキュリティに関する記述仕様。関連仕様として、WS-Trust, WS-SecureConversationがある。
WS-Transaction1.02007-04-16WS-Coordination, WS-AtomicTransaction, WS-BusinessActivityの三つの仕様からなる。分散アプリケーションのトランザクションの受け取り方の仕様。
WS-Federation1.2 3rd Edition (Draft)2007-12-05認証、認可/承認、ユーザ属性の情報管理の仕様。

ベンダ各社での実装レベルの乖離を収束させるために、ベンダグループによるWS-I (Web Services Interoperability Organization)も発足しています。ここでは相互運用性を確保するためのWS-Iプロファイルを開発しており、2007年12月現在、次のものが公開されています:

WS-Iの代表的な仕様
仕様バージョンリリース日付
ベーシック・プロファイル1.0 Second Edition2006-04-20
ベーシック・セキュリティ・プロファイル(BSP)1.02007-03-30
リライアブル・セキュリティ・プロファイルUsage Scenarios version 1.02006-11-06

Web Service

SOAがらみの活動が今年の後半になって活発になってきたのは、Web Service関連の仕様が一通り安定化してきて、それらの仕様を実装する製品が成熟してきたからです。

基礎的な仕様である、SOAP, WSDL, BPELは以前からありますが、それらが事例を吸収してバージョンアップし、それらを組み合わせて非機能要件を満たすための、ポリシ記述やリファレンス・モデルの仕様が出揃っています。また、記述言語仕様だけでなく、それらを実装するコーディングの仕様も、Java EE 5 (EJB 3.0, JAX-WS/JAXB 2.0)、REST型Web Service、Ruby On Railsなどの事例や仕様が充実してきています。それらを受けて、各ベンダの製品も充実してきました。Java EE 5/Java SE 6の実装製品はまだ多くありませんが、オープンソースでは出ていますし、プロプライエタリなベンダも開発意向表明を出しています。次のメジャーバージョンアップでは、SOAを現実するための非機能要件までフォーカスした製品になるでしょう。このタイミングで、調査/パイロットに着手しておけば、実用化された暁には、スムースに実プロジェクトに適用できるようになります。

UDDI/WSDL/SOAPによるWeb Serviceが登場してきて久しいのですが、これまでは、SIベンダでも、企業の要求を分析しきれず、実装には二の足を踏んでいたのが実情です。実プロジェクトでの利用は、実験的/技術評価的なものにとどまっていました。ここにきて、基礎技術の仕様が固まったことを受けて、国内でも検討/パイロットプロジェクトに着手する企業が増えてきた模様です。

SOAの実現モデル

概要

SOAの基礎的な構成は、ESBでWebサービス・リクエスタとプロバイダを結び付け、BPELでそれらのサービスを渡り歩く順序/障害発生時の戻し/冪等を実装するものです

Web Serviceでは、要求を出すリクエスタとプロバイダを構成する必要があります。プロバイダは、業務ロジックを任意の言語で実装し、そのインタフェースをWSDLとバインドします。

     業務ロジック
         A |
     応答| |要求
         | V
     Proxy Client-------+
         A |            |
         | |            |
    (JAX-WS/JAXB)       |
         | |           ▽
         | V     Service Endpoint Interface
         XML            A
         A |            :
         | |            :
    (SOAP Handler)      :
         | |     (mapping tool)
         | V            :
         SOAP           :
         A |            :
         | |            :
-----(HTTP/TCPIP)--------------[リクエスタ]
         | |            :
         | V            :
[BPEL]--[ESB]           :
         A |            :
         | |            :
-----(HTTP/TCPIP)--------------[プロバイダ]
         | |            :
         | V            :
         SOAP         WSDL
         A |            A
         | |            :
    (SOAP Handler)      :
         | |     (mapping tool)
         | V            :
         XML            :
         A |     Service Endpoint Interface
         | |           △
    (JAX-WS/JAXB)       |
     応答| |要求        |
         | V            |
     業務ロジック-------+

アプローチ

実装言語のインタフェースとWSDL/SOAPのバインディングは半自動/半手動で行われ、次の二通りのアプローチがあります。

トップダウン
WSDLを先に作ってから、実装言語のインタフェースを生成
ボトムアップ
実装言語のインタフェースからWSDLを生成

トップダウンの方が、概念的に分かりやすく、相互運用性にも優れています。その反面、標準的なWSDLのSchema (xsdファイル)を確定する敷居の高さが難点です。一方、ボトムアップの場合は、アプリケーション・開発者にとっては記述言語を外に吐き出せるために魅力的です。

開発者の責務

業務アプリケーションの開発者は、WSDLやSOAPには拘泥せずに、当該の実装言語のインタフェースに向けて開発します。従来の開発モデルと変わりありません。

フレームワーク/業務共通部品の開発者は、XML中心の技術にも詳しい必要があります。フレームワーク/業務共通部品の開発者は、次のようなことに責務を持ち、業務アプリケーション開発者を当該言語内に向けたコーディングに注力させ、その成果物をWeb Serviceインタフェースに結び付ける必要があります。

WSDLの記述では、業務プロセス分析してサービス粒度をdefinition要素に切り出し、モジュール化されたWSDLを親文書にimport要素で取り込みます。XSD (XML Schema Definition)を用いてtypes要素のデータの型付けを定義し、portType要素の子要素であるperation要素でメソッドを表現します。これらの生成は、実装言語のインタフェースから生成できます。このバインドは、デフォルトのベースバインドだけに頼ることもできますが、インタフェースに記述するアノテーションによってバインドの詳細を指定することができます。

戻る

Copyright 2007 SUGAI, Manabu. All rights reserved.