Uncategorized

【SOA における WCF の役割 (1)】 WCF と BizTalk、そして LOB Adapter

こんにちは。

ご存知の通り、.NET Framework 3.0 以降では、WCF という通信テクノロジーが搭載されました。(ここでは、WCF とは何かということについては触れません。WCF については、こちら のサンプルなどをあらかじめご参照ください。)

WCF はサービス指向を強く意識したテクノロジーとなっていますが、Microsoft にとっては SOA を実現するアプリケーション基盤として BizTalk Server というサーバ製品も出しています。「この両者の違いは何?」、「Microsoft ってどっちかをやめてしまうの?」、 「2つのテクノロジーがずっと存在してしまうの?」 という疑問を持たれた方も多いと思います。(ここで述べますが、BizTalk は、むしろ、ますます重要な位置づけとなってきます。)

今回は、そんな疑問に答えていきたいと思います。

SOA における WCF の役割 (今後の掲載)

  1. WCF と BizTalk、そして LOB Adapter
  2. WCF における Binding と Channel の基礎
  3. WCF LOB Adapter SDK によるカスタムアダプター実装
  4. WCF からの LOB Adapter の使用
  5. BizTalk Server からの LOB Adapter の使用 – schema 編
  6. BizTalk Server からの LOB Adapter の使用 – orchestration 編
  7. BizTalk Server からの LOB Adapter の使用 – deploy 編

まず、いきなり位置づけを整理する前に、Microsoft 製品を度外視して、SOA に何が必要かということを 今更ですみませんが簡単におさらいしてみましょう。

今、企業内に、システムA、システムB、システムC、システムD と 4 つのシステムが存在しているとします。それぞれのシステムで接続が必要になったときには、システム A と B、A と C、A と D、B と C、B と D、、、そのトポロジーは、「方向」を無視しても最大で 6 つの接続が必要になります。システムが 4 つくらいならまだましですが、現実の企業システムのように多数の構成の場合、その関係は、まさに幾何学的な数に膨れ上がることが想像できます。(からまった糸のように、いつしかメンテナンスの限界を超えてしまうことでしょう。)
SOA が目的とするところの 1 つ目は、まずはこのトポロジーを簡素にすることです。システムやアプリケーションどうしがネットワーク的に結合されているのではなく、中心となる「バス」を使ってここにシステムを接続することでトポロジーを簡素にすることができます (上記の例であれば、「システム A とバス」、「システム B とバス」、「システムC とバス」、「システム D とバス」の 4つの関連で済むわけです)。

そして、トポロジーだけが簡単になればすべてがうまく行くという訳ではありません。たとえバスを経由してシステムどうしが関係するようになったとしても、例えば、「システム A でシステム B 用のデータを更新してバスに戻す」といったような処理をしていたのでは、結局、相互のシステムどうしが強く結ばれた状態から脱することはできないでしょう。バスで処理される「論理的なメッセージ」はシステムから独立したメッセージを処理し、接続する各システムはこの「バスが扱うメッセージ」のみを意識して接続されるべきでしょう。
またプロトコルについても同様の注意が必要です。「メインフレーム用に固定長テキストデータにする」とか、「Web サービス用にSOAPメッセージにして返す」とか、それぞれのシステムに固有のプロトコルを意識してシステムどうしを接続するのではなく、これも中立的なプロトコル (システムに依存しない XML のスキーマなど) を設け、周りのシステムはこの「中立的なプロトコル」のみを意識すべきです。

まとめると、最低でも、以下のような要素が必要になります。

  1. 接続を仲介するバス (システムトポロジーの簡素化)
  2. 論理的な中立 (論理の関係の簡素化)
  3. プロトコルの中立 (プロトコルの関係の簡素化)

では、話を元に戻しましょう。WCF がいったいどこを担っているかという点です。

ご存知の通り WCF では Binding と呼ばれるプロトコルに中立な優れた概念を提供しまいますが、逆の言い方をすると、担当しているのは上記の 3 の部分のみです。1 や 2 を実現するには、WCF とは別の仕組み、もしくはそのためのエンジンの作りこみが必要となってきます。ご存知の通り、WCF / WF は、.NET Framework というフレームワークの中の Foundation テクノロジーであり、WCF / WF 単体で事を成す「製品」ではありません。”SOA” という側面では、”WCF / WF doesn’t matter.” です。(無論、それ以外のもっと軽量な多くの場面では、”WCF / WF does matter.” です)
上記では話を割愛していますが、実際の SOA 実現の場面では、1, 2 以外にも、中立的な論理プロセスを実装できるオーケストレーションエンジンの必要性、ビジネス的な追跡と記録の仕組み、SOA に固有のリトライエンジン等々、さまざまな専用の仕組みが要求されることでしょう。WCF / WF では、これらも作りこみが必要となります。
1, 2 も含めたこれらを担っていくのが、その目的のために構築された「製品」である BizTalk になります。

現状の BizTalk Server では、上記の 3 の部分も含めたすべての実装系が含まれています (各種のアダプター)。しかし、今後は、3 に関しては、そのために入念に設計された WCF のテクノロジーをうまく活用したほうが、より迅速、かつ柔軟にプロトコル中立性を実装して SOA を実現していくことが可能となるしょう (*1)。例えば、WCF では、WS-* の新仕様への対応も容易です、さらには次回以降で述べたいですが、拡張のための優れたフレームワークも備えています。
そして、その他の部分 (1, 2 など) を BizTalk と統合して利用していくことが望まれます。
先日開催された Office Developer Conference 2008 では、こうした状況を踏まえ、さっそく、WCF LOB Adapter SDK と BizTalk Adapter Pack が発表されました。(既存の MOSS のアダプターと共に使用することで、業界固有のパッケージアプリケーションと SharePoint との連携も容易になります。)

http://blogs.msdn.com/adapters/archive/2008/02/15/biztalk-adapter-pack-released.aspx

WCF LOB Adapter SDK (Windows Communication Foundation Line of Business Adapter SDK) では、パッケージアプリケーションなどのビジネスアプリケーション (ERP, CRM, あるいは業界固有のパッケージなどなど) を WCF のバインディングとしてラッピングし、WCF から呼び出せるようにすることができる ISV 向け (製品をもっている、もしくは SAP 等パッケージを売りにしているようなベンダーの方向け) の開発ツールです。
そして、SAP、Siebel、Oracle データベースなどの一般的に使用する専用アダプターについては、BizTalk Adapter Pack の中にアダプター (実体は WCF のバインディング) が同胞されています。(これらのアダプターについては以前から専用のアダプターがありましたが、ある意味、新しいフレームワークによる「作りなおし」になっています。(無論、従来の Adapter もそのまま使用できますし、BizTalk の優れたアーキテクチャによってオーケストレーションなどに影響を与えることなく移行させることも可能であり、「BizTalk Adapter Pack Tutorial – Migrating BizTalk Projects」に方法が記載されています。)

WCF LOB Adapter SDK :
http://www.microsoft.com/downloads/details.aspx?FamilyId=56278FDE-B708-469C-987E-DED9C6C5E580&displaylang=en

BizTalk Adapter Pack 1.0 : (現時点では, RTM についてはドキュメントのみです. こちらの使用に際しては BizTalk Server 2006 R2 が必要となる見込みです)
http://www.microsoft.com/downloads/details.aspx?FamilyID=d9f588e9-fa3e-4b81-a598-ddd9f471f382&displaylang=en
http://www.microsoft.com/downloads/details.aspx?familyid=58BD17C8-8EFA-4B69-AB51-9F5B11A962DC&displaylang=en

既にお気づきかもしれませんが、WCF LOB Adapter SDK で作成されるものは純粋な WCF のカスタムチャネルですので、BizTalk がなくとも WCF 単体で使用するということも可能です。
しかし、 「Adapter」という言葉が象徴するように、BizTalk、つまり SOA におけるプロトコルを強く意識して設計されています。
1例を述べておくと、「システム(アプリケーション)側の更新をトリガとして処理をする」といったようなポーリングのシナリオ (inbound senario) が考えられます。LOB Adapter では、こうした処理も簡単に組み込むことができる独自のフレームワークを (WCF 上に) 持っています。

 

では、次回から早速この SDK を使ったサンプルなどもご紹介したいですが、上記で ISV 向けと記載したように、「簡単」と言いつつも結構な高度なプログラミングを要求しますので、まずはコードを理解して頂けるよう、事前準備として、WCF の基本的な Binding の仕組みについて述べたいと思います。

【参考リソース】
書籍「プロフェッショナル BizTalk Server 2006」(日経BPソフトプレス) : ←New ! (出版されました)
http://blogs.msdn.com/mikion/archive/2008/03/11/biztalk-server-2006.aspx
(2007年のTechEDにご参加され、Post Conference DVD をお持ちの方は、エバンジェリスト中原がおこなったセッションなども参考になります)

Microsoft BizTalk Server Adapters :
http://www.microsoft.com/biztalk/evaluation/adapter/default.mspx
Team Blog :
http://blogs.msdn.com/adapters/

*1 : BizTalk 2006 にも WCF 用のアダプターは存在していますが、BizTalk 2006 R2 では .NET 3.0 Adapter Framework という Framework が備わっていて、上記 SDK で開発した WCF のバインディングなど、より拡張性に優れた設計が組み込まれています。

 

Categories: Uncategorized

Tagged as:

11 replies»

Leave a Reply