将来性から見たJavaと.NETの違い、そして連携は?:Javaから見た.NET(3)(2/4 ページ)
システム開発がますます複雑化していく中、エンジニアには、テクノロジを理解して、さまざまな場面に適した選択が求められます。本連載では、Javaと.NETの基本的な仕組みから最新の傾向や技術などについて、数回に分けて紹介します
SOA
そして近年では、オブジェクト分散技術の流れを組んだ「SOA(Service Oriented Architecture、サービス指向アーキテクチャ)」と呼ばれる形態のシステムが一般的になってきました。SOAとは、アプリケーションの機能を「サービス」という単位で部品化して、それらを用途に合わせて組み合わせてシステムを構築する設計手法です。分散オブジェクト技術と大きく異なる点は、「処理を行う単位が“サービス”だ」ということです。
さらにサービスを自由に組み合わせられる柔軟性や、1つのサービスをさまざまなシステムから呼び出せる再利用性なども大きな特徴です。非常に有用なシステム形態ですが、基本的に疎結合で非同期通信のため、リアルタイムで処理を行うシステムには向いていません。
実は、SOAは新しい設計手法ではありません。以前は前述した分散オブジェクト技術のCORBAや、マイクロソフトが定めた「DCOM(Distributed Component Object Model)」などで実現しようとされていました。当時はCORBAの仕様が複雑だったことや、DCOMのプラットフォームがWindowsに限られているなどの理由でSOAの考え方は普及しませんでした。
しかし、「XML Webサービス」(以下、「Webサービス」)という技術の登場によりSOAが再注目され出しました。
WebサービスとJava実装
Webサービスとは、ネットワーク上に分散しているアプリケーションをXML形式のフォーマットを用いた“メッセージ”の送受信によってほかのアプリケーションと連携させる仕組み、またはその連携するアプリケーションのことです。
インターネットの標準技術を使用できることや、クロスプラットフォーム対応、レガシーシステムとの連携や、コストが低いことも普及している要因でしょう。Webサービスは基本的に以下の3つの概念で構成されています。
- SOAP(Simple Object Access Protocol)
Webサービスで一般的に使用されているプロトコルで、Webサービスのメッセージのデータフォーマットや処理のルールを決めた通信規約。HTTPを利用して通信が行われている(SOAP over HTTP) - WSDL(Web Services Description Language)
Webサービスのインターフェイスやプロトコルを記述するためのXMLベースの言語。インターフェイスとプロトコルが区別されているため、プロトコルにかかわらずフォーマットを再利用できる - UDDI(Universal Description, Discovery and Integration)
目的に合ったWebサービスを検索する代表的な仕様
Javaでは「JAX-WS(Java API for XML-Based Web Services)」と呼ばれるSOAPをベースにしたWebサービスを扱うためのAPIがあります。JCP(Java Community Process)でJSR-224として仕様が策定されています。JAX-WSでやりとりするメッセージはXMLベースのため、プラットフォームに依存もしません。
またJavaとXMLをデータバインディングする「JAXB(Java Architecture for XML Binding)」という仕様もあるため、ユーザーは意識せずに相互変換してマッピングできます。
RESTとJAX-RS
また近年では、企業の業務システムのWebサービスにSOAPよりもREST(REpresentational State Transfer)スタイルのWebサービスが選ばれることが増えてきています。RESTとはWebサービスをリソースと見なして、そのWebサービスを示すURLによって一意に識別するという手法です。
RESTでは基本的なCRUD(Create(作成)/Read(読み取り)/Update(更新)/Delete(削除))を以下のプロトコル・メソッドを使用します。
- POST:リソースを作成
- GET:リソースの読み取り
- PUT:リソースの更新
- DELETE:リソースの削除
RESTが選ばれるのは、HTTPプロトコルを使用することや、SOAPよりXMLの記述が簡易であることが理由でしょう。
Javaには「JAX-RS(Java API for XML-based RESTful Web Services」と呼ばれるRESTfulなWebアプリケーションを開発するためのAPIもあります。後述する「java.net」コミュニティで開発が行わている「Jersey」というリファレンス実装もあります。
.NETの分散コンピューティング技術「WCF」
一方、.NETでは分散型アプリケーションを統合的に提供する技術として「WCF(Windows Communication Foundation)」というフレームワークがあります。WCFもSOAに対応すべく設計・構築されています。
WCF前の.NETの分散コンピューティング技術
WCF導入前に提供されていた以下の仕様は通信要件によって提供され、互換性がありませんでした。
- ASMX(ASP.NET Webサービス)
- .NET Remoting(.NETリモート処理)
- Enterprise Service(DCOM/COM+ベースの分散技術)
- Web Service Enhancements(Webサービスの拡張サポートライブラリ)
- MSMQ(キューを介したメッセージベースの通信)
WCFの通信方式
そこで通信方式を共通化して扱えるようにしたフレームワークがWCFです。WCFは表の通信方式をサポートしています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
WCFでは、通信を提供する側を「サービス」、サービスを呼び出す側を「クライアント」と呼びます。このサービス・クライアント間で相互にメッセージをやりとりすることでアプリケーション間の通信を実現しています。このサービスの提供口のことを「エンドポイント」といいます。
WCFの「エンドポイント」
エンドポイントは、以下の4つの要素で構成されています。
- A:Address(アドレス)
サービスを提供するための位置を示すURLを表します。クライアントはこのURLにリクエストすることでサービスを受ける - B:Binding(バインディング)
プロトコルやエンコーディングなどのデータの形式を特定する - C:Contract(コントラクト)
利用するサービスやデータ、メッセージを特定する - Bv:Behaivor(ビヘイビア)
サービスやエンドポイントに対して細かな設定できる
またエンドポイントは用途に応じてサービス内に複数持つことができ、通信方式やバインディングが異なるエンドポイントを構成可能です。
Webサービスを駆使したJavaと.NETの連携
Webサービスを使うことにより、Javaと.NETの連携も可能になりました。例えばUI部分を.NETのWPF(Windows Presentation Foundation)でリッチクライアントにし、Java EEサーバと連携するシステムの場合は、以下のように構築できます(図の「J2EE」は、現在のJava EEのことです)。
WPFのフロントエンドとJavaのバックエンドとのやりとりに、WCFも使用可能です。
また企業間でJavaと.NETの連携を実践している例もあります。NTTデータイントラマートとマイクロソフトです。NTTデータイントラマートのWebアプリケーションの構築や運用、帳票作成やワークフロー管理ができる「intra-mart」とマイクロソフトのOffice製品とMicrosoft Office SharePoint Server(MOSS)を連携させるソリューションを発表しました。
WS-*による通信技術の向上も手伝い、今後はさらに相互運用性の高い技術が増えるかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.