アプリケーション連携アーキテクチャ
エンタープライズシステムでは、複数のアプリケーション同士が連携して、一つの業務取引を成立させるケースが多いでしょう。連携を行う相手のアプリケーションは、同じ企業内における他部門のアプリケーションかもしれませんし、他の企業のアプリケーションかもしれません。いずれにしても、アプリケーション連携を行うためには、何らかの通信プロトコルによって相手のアプリケーションと接続し、お互いのアプリケーションにとって都合の良いメッセージフォーマットで、データの送受信を行う必要があります。
本節では、アプリケーション連携のための様々なアーキテクチャを紹介します。なお、本連載では、アプリケーション連携において、呼び出し元となるアプリケーションを「リクエスタ」、呼び出し先となるアプリケーションを「プロバイダ」、プロバイダが提供する機能を「サービス」、リクエスタが送信するメッセージを「要求メッセージ」、プロバイダが返送するメッセージを「応答メッセージ」という呼称で統一します(図1)。
さて、Javaでアプリケーション連携を行うための方法を、通信プロトコルとメッセージフォーマットに着目して分類すると、以下のようになります。
- Java-RMI
- EJBリモート呼び出し
- HTTP連携
- SOAP Webサービス
- RESTful Webサービス
- JMS
分散オブジェクト技術
上記の1.~6.のうち、Java-RMI(1.)とEJBリモート呼び出し(2.)は、「分散オブジェクト技術」と呼ばれています。後述するSOAP Webサービス(4.)も、広義の分散オブジェクトと位置付けることができます。
分散オブジェクト技術では、プロバイダが提供するサービスのインタフェースを、何らかの記述言語によって表現します。そしてリクエスタでは、そのインタフェースを取り込み、ツールによってプロキシ(スタブと呼ばれることもあります)を自動生成します。リクエスタでは、自動生成されたプロキシに対してプログラミングを行うことで、通信プロトコルやメッセージフォーマットをまったく意識することなく、物理的に離れた位置にあるアプリケーション(=プロバイダ)のサービスメソッドを呼び出すことが可能になります。
RPC
このように、プロキシを利用することによって、物理的に離れた位置にあるアプリケーションのメソッド(リモートメソッド)を、ローカルメソッドと全く同じように呼び出す手法は、古くからRPC(Remote Procedure Call)と呼ばれてきました。
Java-RMIやEJBリモート呼び出しを利用すると、リクエスタは容易にプロバイダにアクセスできますが、これらの技術の適用は、あくまでもリクエスタ・プロバイダ双方がJavaであることが条件です。また、通信プロトコルはRMIになるため、インターネット越しのサービス呼び出しは難しいでしょう。