Rubyを使ったエンタープライズ・インテグレーション
ネットワークとミドルウェア
エンタープライズアプリケーションは、ネットワークを介して互いに通信を行います。単純なソケットベースの通信を使う場合ではソケットをシンプルに 利用できるのでRubyやその他のスクリプト言語が優れています。その他のエンタープライズアプリケーションは、CorbaやJava 2 Enterprise Edition、メインフレーム、あるいは様々なメッセージングの方式を利用しています。
この本では最初に単純なソケットの例をあげて、HTTPベースのRubyアプリケーションを簡単に作ることができることを示しています。Rubyの HTTPクライアントがシンプルに作れると期待されているかもしれませんが、むしろHTTPサーバが容易に開発できることを示しています。
Ruby WEBrickフレームワークは、ビジネスロジック以外のHTTPサーバとしての複雑な動作をカバーします。WEBrickのアプリケーションモデルは、 受信したHTTPリクエストによってフレームワーク上に実装された特定のメソッドを呼び出すところがJavaのサーブレットモデルとよく似ています。
例えばHTTP GETリクエストに応答する場合、WEBrickフレームワークはこのリクエストを処理するために作成されたRubyサーブレット上のdo_GETオペ レーションを呼び出します。またWEBrickは、ファイルの処理(File-Handlerサーブレット)やCGIスクリプトの実行 (CGIHandlerサーブレット)などの様々なサーブレットを提供しています。
WEBrickのような機能では、XML-RPCやSOAPのようなHTTPベースのプロセス間通信をRubyアプリケーションが非常に簡単に処理 できるようになります。もしXML-RPCアプリケーションと通信しなければならなかったり、システムにXML-RPCのサポート機能を追加するときは、 XML-RPCの完全な実装を備えているxmlrpc4rモジュールを使うと簡単に実現できます。同様にRubyはSOAP 1.1を実装したsoap4rライブラリをサポートしています。
WSDLベースのサービスとのインテグレーションでは、soap4rが提供するWSDLDriverFactoryクラスがWSDLファイルを参照 し、WSDLが定義しているサービスに対する実行時のクライアントプロキシとスタブを生成します。またsoap4rが、WSDL文章で定義されたサービス をベースとしてRubyのコードを生成する「wsdl2ruby」と呼ばれる個別のツールを提供します。
同じように、WSDLからJavaやC++のコードを生成するツールを提供しているWebサービスシステムは数多くあります。そのような同様のツー ルをよく知っている開発者にとって、wsdl2rubyの機能は、エンタープライズアプリケーションをRubyで開発するためのよい導入ポイントとなりま す。
この本で記述されているすべての事柄をお薦めしたいと思っているのですが、ただCorbaの記述はいくつか問題があります。1991年から Corbaに関わり続けてきたこともあり、私は平均的な分散アプリケーションの開発関係者より多少知識があると思っています。特にCorbaの仕様につい ては、数年に渡ってかなりの貢献をしてきました。
この本では、Schmidt氏はCorbaのような仕様は大変複雑であり、「SunやBorland、IBMのような大きな企業だけがCorbaを 実装する力のあり、そのような企業でさえも時々正しく利用することができない」と記述されています。しかし私の所属するアイオナテクノロジーズは、 1993年から一貫してCorba市場のリーダであり、もっとも拡大したときでも500名弱の従業員で構成されていました。このことから、明らかに Corbaの実装が大きな企業に限られていることにはなりません。
さらにこの本は、次のようにCorbaについて記述しています。
「結果的に、現状では混乱しています。ほんの少しのプログラミング言語にしか対応しておらず、ベンダーの個別の拡張のために多くのシステムが相互運 用できていません。このような古い"標準"は、すっかり、XML-RPCのような、新しくて新鮮な後継者に置き換わっています」
この文章の中の3つの指摘はすべてが間違っています。まずCorbaの実装は、C、C++、Java、Smalltalk、Lisp、Ada、 Cobol、PL/I、PhthonやPerlといった様々なプログラミング言語の環境でサポートされています。次に異なるCobraの実装の間の相互運 用性は、実際にはScmidt氏が問題視しているよりも非常に良好です、最後に私は個人的にもXML-RPCに置き換えられたCorbaのプロジェクトを 知りません。
このようなテクノロジの性能やユーティリティ機能は、実効的に比較することができない程に異なっているのです。現在でもCorbaは多くのテレコム と金融アプリケーションで稼動しています。さらに高い応答性能と拡張性で、これらのアプリケーションをカバーしていて、すぐに置き換えられることはありま せん。
Corbaの歴史や記述の誤りにも関わらず、この本ではRubyとCorbaのインテグレーションへの理にかなったアプローチを紹介しています。 Rubyで完全なオブジェクトリクエストブローカ(ORB)を開発しようとするのではなく、Ruby Javaブリッジ(RJB)によってCorbaのJavaクライアントとRubyをインテグレーションすることを薦めています。
RJBによってRubyアプリケーションはJavaのクラスをインポートし、Java Native Interface(JNI)を介して透過的に呼び出すことができます。これによりクライアントは簡単にCorbaサーバのアプリケーションを呼び出すこ とが可能です(この本では、この他のアプローチとして、Java virtual machine(JVM)上でのRubyの実装であるJRubyを利用するとCorbaクライアントにRubyを組み込むことを紹介しています)。
またSchmidt氏は、CorbaクライアントがWEBrickサーバとなり、効率的にCorbaアプリケーションへアクセスするHTTPのルートを提供する方法も示しています。