CORBAとJavaの出会い

私たちは皆、HTMLフォームとCommon Gateway Interface(CGI)を使用してサーバースクリプトと対話できるWebサイトにアクセスしました。多くの場合、サイトはこの手法を使用して、サイトにログインするためのユーザー名とパスワードの入力をユーザーに求めます。Username変数とPassword変数は、特定のユーザーが実際にサイトの特定の部分にアクセスできることを確認するサーバースクリプトに渡されます。このプロセスはHTTPを介して実行されます。HTTPは(ご存知かもしれませんが)ステートレスですプロトコル。新しいページがロードされるたびに、サーバーから事実上切断され、サーバーはあなたが誰であるか、そしてあなたが現在何をしているかについての知識を持っていません。したがって、そのようなサイトにログインした後でも、その時点からアクセスされる各ページは、ページにアクセスするユーザーの権利を確認するために、ユーザー名とパスワードをサーバーに返す必要があります。つまり、クライアントアプリケーション(Webブラウザ)とサーバーアプリケーション(Webサーバー)には、ローカル変数、ローカルメソッド呼び出し、またはオブジェクトの概念がありません。

ソフトウェア開発コミュニティが数十年にわたってコードをオブジェクトとしてカプセル化するのに苦労してようやく成功したように見えた直後、私たちは時間の経過とともにステートレスな「バッチ」モードのコンピューティングに転落しました。

しかし、それはすべて悪いわけではありません。 Webは、標準ベースのオープンプロトコルとプラットフォームに依存しないという革新的な利点を提供してくれました。何万ものサイトがHTTPとCGIを使用してユーザー情報を取得し、サーバー上でスクリプトを実行し、場合によってはユーザーに追加情報を返しますが、これらのサイトは、従来の意味での実際の「アプリケーション」とは考えられません。 。さらに、新しいテクノロジー(HTTPおよびCGI)が使用されているため、これらのサイトのすべてのコードを最初から作成する必要がありました。既存のソフトウェアアプリケーションをWebに後付けしたり、インターネット/イントラネットを通信バックボーンとして使用して真に強力な新しいアプリケーションを構築したりするには、次の「聖杯」の属性を備えたテクノロジを使用する必要があります。

  • (他の言語の中でも)C、C ++、およびCOBOLに現在存在するレガシーコードのサポート
  • モバイルでプラットフォームに依存しないオブジェクト指向アプリケーションを構築できるようにするためのJavaサポート
  • ベンダーの中立性。これにより、アプリケーションを維持し、時間の経過とともに繁栄させることができます。
  • 多数のユーザーを処理するためのスケーラビリティ
  • プラットフォームの「ロックイン」を回避するための幅広いプラットフォームのサポート
  • オブジェクト指向開発パラダイム(OOPに固有の多くの利点のため)
  • エンドツーエンドのセキュリティ
  • 幅広い業界サポート

CORBAと入力します。

この記事の過程で、CORBAという1つのテクノロジーだけが、私たちのウィッシュリスト(そしていくつか)を本当に満たすことがわかります。さらに、JavaとCORBAは非常に補完的なテクノロジーであるため、JavaでCORBA開発を迅速かつコスト効率よく開始できることがわかります。

CORBAの簡単な紹介

CORBAは、分散オブジェクトがどのように相互運用できるかを定義する仕様です。 World Wide Web、特にJavaプログラミング言語の人気が爆発的に高まるまで、CORBAは基本的に、主にC ++開発者によって使用されるハイエンドの分散オブジェクトソリューションでした。

実際のCORBA仕様は、オブジェクトコンピューティングのオープンスタンダードを定義するために協力する700社を超える企業(私の雇用主を含む)のオープンコンソーシアムであるObject Management Group(OMG)によって管理されています。 CORBAオブジェクトは、C、C ++、Java、Ada、SmalltalkなどのCORBAソフトウェアメーカーがサポートする任意のプログラミング言語で記述できます。これらのオブジェクトは、Solaris、Windows 95 / NT、OpenVMS、Digital Unix、HP-UX、AIXなどのCORBAソフトウェアメーカーがサポートする任意のプラットフォームにも存在できます。これは、UnixWebサーバー上のインターネット経由で格納されたC ++オブジェクトを動的にロードして使用するJavaアプリケーションをWindows95で実行できることを意味します。

言語の独立性は、インターフェイス記述言語(IDL)を使用してオブジェクトへのインターフェイスを構築することで可能になります。 IDLを使用すると、すべてのCORBAオブジェクトを同じ方法で記述することができます。唯一の要件は、ネイティブ言語(C / C ++、COBOL、Java)とIDLの間の「ブリッジ」です。 CORBAオブジェクトは、Object Request Broker(ORB)を仲介として使用して相互に通信し、多くの一般的なネットワークプロトコル(TCP / IPやIPX / SPXなど)を介して通信できます。さまざまなベンダーのORBは、CORBA 2.0標準(最新バージョン)の一部であるインターネットインターオーブプロトコル(IIOP)を使用してTCP / IPを介して通信します。

現在、サードパーティのORBは、より一般的なプログラミング言語(C ++、Smalltalk、Java、Ada95など)で利用できます。他の言語の人気が高まるにつれ、CORBAベンダーは間違いなくそれらの言語のORBもリリースするでしょう。

OMGは、アプリケーションがどのように相互運用できるかを説明するために、1990年にオブジェクト管理アーキテクチャ(OMA)を最初に定義しました。この目標のサブセットとして、アプリケーション内のピースまたはオブジェクトがどのように相互運用できるかを明確にするための標準を設定する必要がありました。つまり、CORBAの誕生です。OMAは、CORBAインストールを構成できる4つの主要な部分を定義します。

  1. オブジェクトリクエストブローカは、相互通信へのオブジェクトのためのソフトウェアバスとして機能します。
  2. CORBAServicesは、セキュリティ、ネーミング、トランザクションなど、ORBに追加されるシステムレベルのサービスを定義します。
  3. CORBAFacilitiesは、複合ドキュメントやその他の垂直機能などのアプリケーションレベルのサービスを定義します。
  4. Business Objectsは、飛行機やBankAccountなどの実際のオブジェクトとアプリケーションを記述します。

実践:JavaでのCORBA開発

CORBAを使用してサーバーオブジェクトにアクセスする分散Javaアプレットを構築するために、一般的な商用ORBを利用し、IDLを使用してオブジェクトへのインターフェイスを定義します。ザ・

リソース

この記事の最後のセクションには、いくつかの人気のあるCORBAベンダーの連絡先情報が記載されています。作成するアプレットの例では、Java用のVisigenicVisiBrokerを使用することを選択しました。このORBは、Oracle、Netscape、Novellなど、いくつかの異なる企業からライセンス供与されており、Netscape Navigator4.0に含まれています。

注:このアプレットは、Netscape Navigator4.0以外のブラウザで実行できます。いくつかの追加のJavaクラスファイルをクライアントにダウンロードする必要があるため、アプレットの起動は少し遅くなります。

CORBAを使用してサーバーオブジェクトをインスタンス化する単純なJavaアプレットを作成します。簡単にするために、このサーバーオブジェクトもJavaで記述されます。サーバーオブジェクトは、さまざまなCORBAORBベンダーとその製品に関する一連の情報を格納します。クライアントアプレットは、画面を更新するためにオブジェクトをインスタンス化し、配列をクエリします。より完全な例(および検討することをお勧めします)は、ORB情報をリレーショナルデータベースに格納し、サーバー上でJDBC(またはその他のデータベースアクセス手段)を使用して要求された情報を取得することです。このアプローチでは、CORBAを使用して真の3層アプリケーションを作成します。

アプリケーションの構築を開始する前に、オブジェクトへのインターフェイスを定義するために使用されるORBとIDLを詳しく調べます。

Object RequestBrokerの詳細

オブジェクト管理アーキテクチャの最も重要な部分はORBです。ORBは、CORBA準拠のアプリケーションを構築するために存在しなければならないCORBAの唯一の部分です。多くのORBは、CORBAServicesまたはCORBAFacilitiesなしで出荷されるため、ビジネスオブジェクトを自分で作成(または購入)する必要があります。ただし、ORBがないと、CORBAアプリケーションは機能しません。

CORBA ORBの最も目に見える機能は、アプリケーションまたは別のORBからの要求に応答することです。実行中のCORBAアプリケーションのライフサイクル中に、ORBは次のようなさまざまなことを行うように求められる場合があります。

  • リモートマシンでオブジェクトを検索してインスタンス化します
  • あるプログラミング言語(C ++など)から別の言語(Javaなど)へのパラメーターのマーシャル
  • マシンのローカル境界を越えてセキュリティを処理する
  • 別のORBのローカルシステム上のオブジェクトのメタデータを取得して公開します
  • ダウンロードされたスタブによって記述された静的メソッド呼び出しを使用して、リモートオブジェクトのメソッドを呼び出します
  • 動的メソッド呼び出しを使用して、リモートオブジェクトのメソッドを呼び出します
  • 現在稼働していないオブジェクトを自動的に起動します
  • コールバックメソッドを、管理している適切なローカルオブジェクトにルーティングします

ORBの優れている点は、これらすべての職務の実装の詳細のほぼすべてがソフトウェア開発者から隠されていることです。コードに適切な「フック」を指定してORBを初期化し、アプリケーションをORBに登録するだけで、アプリケーションは膨大な数の分散オブジェクトに開かれます。

IDLを使用したオブジェクトの記述

CORBAがベンダー中立および言語中立の位置を維持するには、たとえばC ++ CORBAサーバーコードとJavaCORBAクライアントの間に何らかの仲介が必要です。ご存知のように、この仲介者はIDLです。基になるオブジェクトによってサポートされる関連するメソッドとプロパティは、IDLを使用して単一のインターフェイスにグループ化されます。 IDLインターフェースが完成すると、スタブコードとスケルトンコードの両方の形式で、選択した言語にコンパイルできます。 IDLコンパイラはすべてのORBに含まれています。たとえば、Java / IDLコンパイラはVisigenicVisiBroker for Java ORBに含まれていますが、C ++ / IDLコンパイラはVisigenicVisiBroker for C ++ ORBに含まれています。

Note that it is much easier to work with IDL than a standard object-oriented programming language because IDL cannot be used to specify actual implementation of classes or the methods within them. Instead, IDL is used only to describe the interface to the underlying objects.

After reading this section you will be familiar enough with the language to understand the examples presented later in the article. For a more thorough presentation on IDL, visit the OMG Web site. (See the Resources section below.)

Just as properties and methods are grouped together into related classes in Java, these items are contained within modules in IDL. There can be one or more interfaces defined within each IDL module. Listing 1 shows a simple IDL module named TheModule that contains a basic interface named TheInterface. This interface contains a single variable (TheVariable, of course) defined to be an integer value.

Listing 1: The simplest IDL module possible

Module TheModule { interface TheInterface { long TheVariable; }; }; 

If you compile this IDL module using an IDL-to-Java compiler (such as Visigenic's idl2java), you will get the Java interface shown in Listing 2.

Listing 2: The Java equivalent of TheModule

package TheModule; public interface TheInterface { public int TheVariable; } 

The ORBQuery applet

Now that you have a basic understanding of an ORB and IDL, we are ready to construct our ORBQuery applet. The client applet will consist of a standard Java GUI and will instantiate a remote CORBA object. Once this object has been instantiated, its methods can be called to determine information about a specific CORBA ORB. On the server side, we need to define five methods in order to retrieve the following information about a particular ORB: Name, Vendor, Operating System, Languages, and URL. Therefore, we must construct an IDL interface that defines five methods to retrieve this information. This interface,

ORBInfo

, is defined in Listing 3.

Listing 3: The ORBInfo IDL interface

module ORBQuery { interface ORBInfo { string GetName(in long index); string GetVendor(in long index); string GetOS(in long index); string GetLanguages(in long index); string GetURL(in long index); }; }; 

The VisiBroker installation includes an IDL compiler, idl2java, that you can use to generate the necessary Java code required to implement this interface. Once you've installed the package, simply execute the following command to generate the code:

idl2java ORBInfo.idl

This operation will create a subdirectory named ORBQuery (corresponding to the ORBQuery Java package). Within this directory, there are eight files: ORBInfo.java, ORBInfoHolder.java, ORBInfoHelper.java, _st_ORBInfo.java, _sk_ORBInfo.java, ORBInfoOperations.java, _tie_ORBInfo.java, and _example_ORBInfo.java. As you might have guessed, the ORBInfo.java file contains the Java version of the ORBInfo interface declaration, but what do the other Java classes do?

The ORBInfoHolder.java file contains a holder class used when passing parameters, while the ORBInfoHelper class defines various utility functions. The _st_ORBInfo class defines the client stub, while the _sk_ORBInfo class defines the server skeleton class. The ORBInfoOperations and _tie_ORBInfo classes are used to implement a tie mechanism, a VisiBroker feature designed to allow the implementation class to inherit from a class other than the skeleton class. We will not use these classes directly within this example. Finally, _example_ORBInfo contains a sample server object that can be extended to build the server application.

まだまとめていない場合は、IDLコンパイラによって作成された8つのJavaクラスによって、独自のクライアント/サーバーCORBAを構築するためのフレームワーク(ヘルパークラス、スタブ、スケルトン、およびインターフェイスの形式)が提供されています。 Javaのアプリケーション。

サーバーアプリケーションの構築