JPH10111802A - 分散オブジェクトシステムの応用分野におけるコード生成器 - Google Patents

分散オブジェクトシステムの応用分野におけるコード生成器

Info

Publication number
JPH10111802A
JPH10111802A JP9178588A JP17858897A JPH10111802A JP H10111802 A JPH10111802 A JP H10111802A JP 9178588 A JP9178588 A JP 9178588A JP 17858897 A JP17858897 A JP 17858897A JP H10111802 A JPH10111802 A JP H10111802A
Authority
JP
Japan
Prior art keywords
symbol table
network
loading
program
schema
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9178588A
Other languages
English (en)
Inventor
Brad G Fowlow
ジー. フォウロウ ブラッド
Gregory B Nuyens
ビー. ニュイエンズ グレゴリー
Hans E Muller
イー. ムッラー ハンズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH10111802A publication Critical patent/JPH10111802A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems

Abstract

(57)【要約】 【課題】 分散オブジェクトシステムにおいて、ネット
ワーク上に存在するオブジェクトを利用して、アプリケ
ーションを組み立てて行く場合に、オブジェクトの情報
を定型化し、それを利用することによって、自動的にコ
ードを生成し、アプリケーション開発の効率を高める。 【解決手段】 ネットワーク上の言語に依存しないオブ
ジェクトを自動的に組み立てて分散オブジェクトシステ
ム上で用いられるネットワーク・アプリケーションを作
成する技術は、シンボル表とプログラム・テンプレート
を用いる。 ネットワーク・アプリケーションのスキー
マ表現は視覚的なアプリケーション構築器によって形成
される。スキーマ表現は以前に定義された分散オブジェ
クトを表現したものの間に接続を定義する。 これらの
接続は、 コンポーネントと名づけられた分散オブジェ
クト表現であるパーツ、 プラグ、 ソケットの間で形成
される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は分散計算機システ
ム、クライアント-サーバ・システム、 およびオブジェ
クト指向プログラミングに関わるものである。具体的に
は、アプリケーションプログラムを分散オブジェクトシ
ステム上に作成し、インストールする技術に関する発明
である。
【0002】
【従来の技術】オブジェクト指向に関する方法論は過去
数年に渡ってますます注目を集めてきた。これは従来的
なプログラミングの方法によるソフトウェア開発では時
間と予算がかかり過ぎることによる。オブジェクト指向
のプログラミング方法論は手続きよりもむしろデータ操
作にフォーカスを置く。したがって、プログラマーにと
っては実世界の問題に対してより直観的なアプローチが
可能になる。加えて、オブジェクトとはそれに関係する
データと手続きをカプセル化したものであり、このオブ
ジェクトのインタフェースにあるデータと手続きだけを
アクセス可能にし、それ以外の他のプログラムの部分を
切り分けておくことができる。したがって、あるオブジ
ェクトのデータと手続き部分の変更は他の部分に影響し
ない。このやり方は、 あるオブジェクトの仕様変更が
他のオブジェクトを干渉しない点で、 従来的なプログ
ラミング方法論に比べてコードのメンテナンスをより容
易にするものである。さらには、オブジェクトにはモジ
ュールという考え方が内在しているため、あるオブジェ
クトを他のプログラムの中で転用することができる。し
たがって、 プログラマーは「試用され、機能する」オ
ブジェクトをライブラリとして貯め込み、何度も他のア
プリケーションで使うことができる。信頼性のあるコー
ドを繰り返し使うことは、ソフトウェア全体の信頼性を
高め、開発時間を短縮することになる。
【0003】
【発明が解決しようとする課題】分散オブジェクトシス
テムにおいてオブジェクト指向プログラミングを用いる
利点は多いが、このことを実装(インプリメンテーショ
ン、implementation)するとなると大きな問題が残る。
一般に、プログラミングの過程でソフトウェアの再利用
することは、オブジェクト指向の世界においても難しい
ことである。特に、プログラマーは自分の理解があまり
及ばないようなコードを用いるのを嫌がるものである。
分散オブジェクトシステムではこの問題は倍化する。あ
るコードの開発者のコメントやインストラクションは新
しいアプリケーションの開発者の耳には届きにくくなる
からである。したがって、 分散システムからは多くの
コードが利用可能でありその恩恵を被ることが本来でき
るはずであるのに、実際は既存のコードを書き直すこと
を余儀なくされることになる。
【0004】分散オブジェクトモデルにおいて現在のコ
ードを共有化する技術は不十分である。現在のコード共
有化とは、ライブラリの使用、一般に公開されているデ
ィレクトリのヘッダ・ファイルの使用、広く流布した文
書(電子的にも紙の形でも)の使用などが含まれる。こ
れらの方法は、しかしながら、分散オブジェクト環境に
は充分なじまないものである。分散オブジェクト環境で
は、再利用される単位がファイル・ベースではなく、イ
ンタフェース・ベースなのである。さらにまた、 分散
環境における再利用の方法においては、プログラマーも
開発されるコードも「共同体」意識をさらに高める努力
をする必要がある。このように、分散オブジェクトシス
テムにおけるオブジェクトの再利用をより活発化したい
ならば、ユーザから見たオブジェクトの識別、目的、利
用法などを容易にするべきである。
【0005】分散オブジェクト環境におけるプログラミ
ングのもう一つの挑戦課題は、「反復使用語句(boiler
plate)」型のコンピュータコードをより多く供給する
ことである。これにより、分散オブジェクトシステムの
中で動くよう開発されたオブジェクトやアプリケーショ
ンは、そのシステムの中でより確実に動作するようにな
る。特に、C++ オブジェクトのような通常のオブジェク
トが分散オブジェクトとして機能できるような基礎的な
コンピュータ・コード体系が供給される必要がある。し
かしながら、既存のオブジェクトを最大限再利用したい
と願うプログラマーは、 同様な、しかし多少異なった
挑戦課題に直面している。プログラマーが開発中のアプ
リケーションの中のオブジェクトを使いたいと思ったと
きは、そのオブジェクトの開発者など基礎的な情報を明
記し初期化情報なども合わせて持たねばならない。さら
に、いろいろなメイクファイル (makefile; システム
のその環境でのインストール手続きファイル)やヘッダ
ファイル、ライブラリの依存関係などが、他のコードの
中に送られる前に全部付加されていなければならない。
さらにはプログラマー自身によっていろいろな例外処理
機構、デバッグやトレースの情報なども付加されなけれ
ばならない。繰り返すと、プログラミング技法に習熟し
ている人たちにはよく知られていることであるが、その
ようなルーチンを実装(インプリメンテーション)する
ことは労多く、繰り返しの多い、誤りを犯しがちな作業
である。適切にコード化されたオブジェクトのアプリケ
ーションの開発は極度に時間を喰う大変な仕事である。
それゆえに、このような「ハウスキーピング(housekee
ping)、つまりプログラムを適切に実行させるためにし
なければならないシステムタスクを行う」ようなコード
の作成は、自動化されることが望ましいのである。
【0006】不幸なことに、現存する多くのオブジェク
トは分散オペレーティングシステム上に置いて機能する
ようには書かれていない。分散システムのためのオブジ
ェクトの実装とは、現存するオブジェクト・ソフトウェ
アの再編成を要求するものとなる。このことは、既存の
プログラミング・オブジェクトが分散オブジェクトシス
テム上で容易に利用可能でないと同様、オブジェクト・
プログラミング方法論の魅力を半減させるものである。
【0007】分散オブジェクトシステムの上で分散オブ
ジェクトを実装する上では、さらにオブジェクトがイン
ストールされた時点でその存在をアナウンスする必要が
ある。すべてのクライアントの要求は、オブジェクト要
求ブローカー (object request broker:ORB)を通じて
処理される。したがって、ORBは常にその時点で現存す
るオブジェクトを把握している必要がある。さらには、
分散オブジェクトシステムにおいては、開発途中にある
オブジェクトと分散システム上のユーザに既に利用可能
になったオブジェクトを明示して区別しておくことが望
ましい。このような公開情報を供給することは、それで
なくても開発の重荷と分散オブジェクトシステムの利点
を利用するための「ハウスキーピング」労働に追われる
プログラマーにとって、新たな困難を課すことになる。
【0008】プログラマーにとってもユーザにとって
も、分散オブジェクトを作りインストールするのに相対
的に透明性のあるやり方が望ましい。ここで透明性と
は、異なった計算機上、異なったプログラミング言語で
開発されたオブジェクトでも、さらなるコードの書き換
えなど不当な労働をユーザに課すことなく、分散システ
ム上で利用可能にできるという意味である。このよう
に、分散オブジェクトの形成とインストールに関して
は、プログラマーやユーザが分散オブジェクトシステム
の細かいことまで知らずともできるようにすることが望
ましい。さらには、分散されることを念頭に置かずに開
発されたオブジェクトもプログラマーやユーザから見て
相対的に透明に分散オブジェクトに作り替えられればも
っと喜ばしい。
【0009】
【発明を解決するための手段】本発明の実施例は、ネッ
トワーク上の言語に依存しないオブジェクトを自動的に
組み立てネットワーク・アプリケーションとする方法に
関するものである。このネットワーク・アプリケーショ
ンは分散オブジェクトシステムで使われるものとする。
このネットワーク・アプリケーションのモデル,あるい
はスキーマ表現は、コンポジション構築器の中で形成さ
れる。このコンポジション構築器はスキーマ表現を作成
するのに適した開発ツールとなりうる。一度スキーマ表
現が用意されると、ネットワーク・アプリケーションの
スキーマ表現を受け取る一ステップが実行される。スキ
ーマ表現はそれ以前に定義された数多く分散オブジェク
トのリンクを定義している。次に、ネットワーク・アプ
リケーションのスキーマ表現はシンボル表上にロードさ
れ、スキーマ表現の部分はシンボル表のエントリとして
貯えられる。次のステップでは、生成されるべきソース
プログラムのファイルが少なくとも一つ決定し、そのソ
ースファイルを生成するのに対応するプログラムのテン
プレートが決まる。このテンプレートはシンボル表の複
数のエントリへのレファランスを含んでいる。次のステ
ップでは、シンボル表の多数のエントリが、少なくとも
一つのプログラムテンプレートに組み合わされ、対応す
るプログラム・ソースを生成することになる。このプロ
グラムのソースファイルはコンパイルするとネットワー
ク・アプリケーションの一部になるようにできている。
【0010】ある実施例では、スキーマ(schematic)
表現は視覚的なアプリケーション作成器によって形成さ
れ、クライアント・オブジェクトかサーバ・オブジェク
トに整形される。また、分散オブジェクトの複数リンク
はパーツ、プラグ、ソケットといったコンポーネントの
組み合わせによって形成される。ここでロードを行なう
モジュールでは、スキーマ表現のパーツ、プラグ、ソケ
ットをシンボル表にロードする過程を含む。
【0011】シンボル表の実施例では、シンボル表は対
応する値にマップする識別子を含む。多数のエントリを
結びつける操作は、プログラム・テンプレートの中の識
別子へのレファランスをシンボル表からの適当な値に置
換することで行なわれる。
【0012】他の実施例では、ネットワーク・アプリケ
ーションのスキーマ表現を視覚的なアプリケーション生
成器の中に生成するステップと、プログラム・ソース・
ファイルをネットワーク・アプリケーションにコンパイ
ルし実行可能形式にリンクするようなオブジェクト開発
機能を要求するステップを含む。
【0013】本発明の一つの実施例は、シンボル表の情
報をロードする手法に関するものである。この実施例は
ネットワーク・アプリケーションのスキーマ表現をロー
ドする計算機による方法である。これにより、ネットワ
ーク上の言語に依存しないオブジェクトを分散オブジェ
クト・システムの中で使用するネットワーク・アプリケ
ーションに仕立てあげるのを自動化するのを補助する。
シンボル表は多数の識別子を対応する多数の値にマップ
するよう変換される。スキーマ表現は、値を持つ識別子
に対応する要素を含んでいる。この方法はどの順序で実
行されてもよい、いろいろなステップから成る。最初の
ステップでは、スキーマ表現のトップレベルにあるシン
ボルはシンボル表にロードされ、トップレベル・シンボ
ルに関連した識別子は対応する値を持つようになる。二
番目のステップでは、スキーマ表現のパーツがシンボル
表上にロードされ、そのパーツに関連した識別子は対応
する値にマップされる。三番目のステップでは、スキー
マ表現の接続関係はシンボル表上にロードされ、接続に
関連した識別子は対応する値にマップされる。他の実施
例では、ファイル記述子、プラグ、ソケットを同様なや
り方でロードするステップを含む。
【0014】
【発明の実施の形態】
1. 物理的実施例と分散オブジェクトシステムの背景 本発明は分散オブジェクトシステムに向けてのものであ
り、添付した図のようなある望ましい形での実施例に関
して詳述を行なう。本発明は、CORBA のもとで定義され
たものかあるいは適切な仕様のものであれば、どの分散
オブジェクトシステムであれば実行可能となる。しかし
ながら、図で示したように、本発明の実施例に関して
は、オブジェクト・管理・グループ(Object Managemen
t Group:OMG) 改訂2.0版(1995年7月)によるCORBA
の仕様で実装されたオブジェクト要求ブローカ(Object
Request Broker:ORB) を主に念頭に置いて行なう。図
1は本発明の実施例を実装する上で適当な代表的な分散
オブジェクトシステムの全体像を示している。
【0015】分散オブジェクトシステム10は、図1に記
号で示したように、典型的にはORB(Object Request Br
oker)11を含んでいる。ORB 11はクライアントからの呼
びかけをサーバ (遠隔オブジェクト) に伝えその答を
返すのに必要なすべての情報、すなわち、位置、送信メ
カニズム、設備を供給する。クライアントとサーバは同
じプロセスに同居している場合もあれば、同じマシンの
違うプロセス、異なるマシンの場合もある。議論の都合
上、クライアント20は分散オブジェクトに何か操作を起
こすコードであるとし、それ自身が分散オブジェクトや
プロセスの形態をとっているかどうかは問わないことに
する。分散オブジェクトの表現にはいろいろな方法があ
りうる。この例では分散オブジェクトはアプリケーショ
ン開発者によって用意された C++ のオブジェクトであ
ってもよい。あるいは、分散オブジェクトは視覚的アプ
リケーション構築器(視覚的アプリケーションビルダ)
15で実装されたものかも知れない。この視覚的アプリケ
ーション構築器は、新オブジェクトを実装するにあた
り、開発者に画面からカタログでオブジェクトの型を選
別し、他からの必要に応じてそのオブジェクトのもつサ
ービス機能 (属性、引数、結果など)を接合するもの
である。
【0016】オブジェクト開発器(オブジェクト開発フ
ァシリティ、object development facility)16は分散
オブジェクトを単に生成し、インストールするものであ
る。これは開発したオブジェクトを分散オブジェクトの
コードに包み込みカプセル化するものである。このよう
に、オブジェクト開発器16は開発したオブジェクトをOR
B オブジェクト14に変換する。この例では、ORBオブジ
ェクト14は図の中の位置からサーバとして示されてい
る。開発者はORBオブジェクトとのインタフェースを定
義するためにインタフェース定義言語を用い、開発用オ
ブジェクトのふるまいを決めて実装し、そののちにオブ
ジェクト開発器16を用いて ORBオブジェクト14を実装す
る。このORBオブジェクト(サーバント・オブジェク
ト)のインスタンスは実行時に生成されるが、その際に
は実装されたORBオブジェクトが利用される。オブジェ
クト開発器はある時点でクライアントの役を受け持つオ
ブジェクトを生成することも可能である。
【0017】クライアント20はスタブ(stub)21、下請け
層(サブコントラクト、subcontract)36、ときにより
フィルタ40、トランスポート層38を通じてサーバントと
通信する。スタブ21はサロゲート(surrogate)22、メ
ソッド・テーブル24、スタブ関数25からなる。クライア
ント20は最初クライアントにとってサーバントに見える
サロゲート22と通信する。あるいは、クライアント20は
サロゲート22、メソッド・テーブル 24、スタブ関数25
を介する代わりに、動的起動(動的呼び出し)インタフ
ェース(Dynamic Invocation Interface:DII) 26を通じ
て直接通信する場合もある。DII 26はクライアントが動
的に要求を作るのを可能にする。
【0018】下請け層36は特定の下請け名で指定された
いろいろなサービス(あるいは属性やオブジェクト・メ
カニズム)を実装する下請けを利用するためにオブジェ
クトから来る要求を受け付ける機能を有している。下請
けは、ある個別のオブジェクトにより利用されるかも知
れない分散オブジェクトシステムによって供給されるサ
ービスの質を決定する。例えば、下請けはある特定オブ
ジェクトによって使われる安全性の特徴を同定したりす
る。それぞれの下請けは実行時に動的にサーバント・オ
ブジェクトに結びつけられる。フィルタ40が使われる
と、いろいろなタスク、例えば圧縮、暗号化、トレース
やデバッグなどを実行し、オブジェクトとのやりとりに
使われる。トランスポート層 38は、一般にはクライア
ントとは別のプロセスにあるサーバントへ情報を転送し
たり物理的に流したりする。
【0019】標準実装スイート(標準インプリメンテー
ションスイート、standard implementation suite)28
(オブジェクト・アダプタ)は、例えばオブジェクト・
キー・マネジメントのように、ORBオブジェクト14と相
互作用する下請けの一群を表わす。ここで、下請けは複
数の実装スーツに属することもある。スケルトンは、静
的なスケルトン32と動的なスケルトン30の両方の形態を
とることがあり、要求をサーバント・オブジェクトに合
う形に変換するのに用いられる。したがって、スケルト
ン30と32は適当なサーバント・オブジェクトと呼ばれ
る。静的スケルトン32はインタフェースに特定したオブ
ジェクトの実装14を呼び出すのに用いられ、動的スケル
トン30はインタフェースを特定できるオブジェクトがな
いときに用いられる。ORBインタフェース34は、直接ORB
のところに行くインタフェースであり、これはどのORB
にも共通である。すなわち、 オブジェクトのインタフ
ェースやオブジェクト・アダプタに依存しない。ORBデ
ーモン46はオブジェクト・サーバがクライアントから呼
び出された時、それが稼働中であることを確認する機能
を持つ。
【0020】信頼性プロトコル(安全プロトコル)42は
ORB のインターネット間のプロトコルを確保するもので
あり、トランスポート層38を通じて情報が安全に移送で
きるようにするためのものである。これは統合性保護、
機密性などを意味する。インターネットのORB 間プロト
コルは異なるマシン上のプロセス間での通信を行なうた
めのものであるが、ときには同じマシン上のプロセス間
でも用いられることがある。セキュリティ・ サーバ54
は安全性を管理するサーバで、異なるコンピュータ上の
プロセス間で用いられるサービスの安全性を確保するた
めのものである。
【0021】Typecode/Any モジュール44は「Typecod
e」および「Any」オブジェクトを実装するためのもので
ある。Typecodeはインタフェース定義言語(IDL)のデ
ータタイプを記述し、そこではタイプ記述がクライアン
トとサーバ間で転送されることを許す。IDLデータタイ
プのインスタンスは「Any」オブジェクトによってカプ
セル化される。Anyオブジェクトはカプセルの中のデー
タのタイプコードとデータの一般的なコード化を参照す
る。
【0022】実装貯蔵庫(インプリメンテーション・レ
ポジトリ、implementation repository)50は、オブジ
ェクト・サーバに関する情報を貯えるのに用いられる。
特に実装貯蔵庫50は、サーバのプロセスをスタートさせ
るのに必要な情報を貯蔵している。例えば、実装貯蔵庫
50はサーバ・プログラムのある場所、プログラムの引
数、プログラム渡す環境変数などの情報を貯蔵してい
る。
【0023】簡便持続機能(単純パーシステンス、simp
le persistence)56は、IDLが定義するタイプとそれをI
DLコンパイラに渡した結果を他のコードといっしょに用
い、ディスク上に読み込んだり書き込んだりできるよう
にする。名前づけサービス(ネーミングサービス)52は
ORBオブジェクトを名前づけするのに用いられる。クラ
イアントはこのサービスを用いて必要なオブジェクトを
名前で検索することができる。名前づけサービス52はは
オブジェクトへのレファランスを返すが、代わってそれ
はそのオブジェクトに何か情報を渡すのに用いられる。
インタフェース貯蔵庫48(IFR)は分散オブジェクトシ
ステム内にあるすべてのオブジェクトに関してのインタ
フェースを把握している。
【0024】本発明は計算機システムの内部にあるデー
タとともにいろいろなステップをとる。これらのステッ
プは物理量を操作する物理操作を要求する。通常これら
の物理量は電子的あるいは磁気的な信号の形態を取るこ
とが多く、これらは記憶されたり、転送されたり、ある
いは相互に結びつけられ、比較されるなどの操作を受け
る。これらの信号はビット、値、要素、変数、文字、デ
ータ構造などを単位に扱うのが便利である。それは他で
の使い方と共通性を持たせるためである。しかしなが
ら、これら、あるいは他の同様な用語は常に適当な物理
量と関連づけらけていることを忘れてはならず、これら
の用語は実際の量を言及するための便利なラベルである
に過ぎない。
【0025】さらには、行なわれる操作は、しばしば同
定、実行(running)、比較などの用語を用いて述べら
れる。本発明の中に述べられるこれらの操作はいずれも
機械の行なう操作である。本発明の操作を実行するのに
適した計算機は、一般のデジタル計算機かあるいはそれ
と同様な装置である。いずれの場合にせよ、計算機に対
して操作を実行させる方法と計算そのものの方法とは、
異なることを常に心に銘記すべきである。本発明は計算
機に操作をさせる方法に関するものであり、そこでは電
気的かあるいは他の物理信号を処理し、望む形の物理信
号を生成することになる。
【0026】本発明は、これらの操作を実行する上での
装置(apparatus) 器具にも関係している。この器具は
特に特別な目的のために作られている可能性があるし、
またどのような目的にも対応できるように計算機内のプ
ログラムによって選んだ機能が作動したりその使途を再
構成できるようになっているかも知れない。この中に記
述されたプロセスは特に計算機やあるいは他の器具を限
定していない。特に、各種一般的なマシンがここでの仕
様に基づくプログラムで使われることもあれば、本プロ
セスを専用に実行できる特別な器具を構築すればより便
利となることもある。これらマシンに要求される構造は
以下に記述される。
【0027】この中に記述された計算機に実装されるべ
き方法は、計算機科学の技法に基づき計算機システム上
でプログラムを実行する良く知られた技術と器具を用い
て実装可能である。ここで使われた「計算機システム」
という用語は、処理装置(中央演算装置; CPU)、ある
いはそれに相当するものを持ち、一つあるいは複数のデ
ータ保持装置からデータおよび命令を読みだし、組み合
わせ、処理する機構を指す。ここでデータ保持装置とは
RAM、ROM、CD-ROM、ハードディスク、あるいは他の同様
な機器を指す。データ保持装置は直接処理装置にかかる
こともあれば、ネットワークを介して遠隔の処理装置に
かかることもある。遠隔のデータ保持装置がネットワー
クを介して遠隔の処理装置にかかるとき、特定のワーク
ステーション上で実行できるようプログラムを送ること
ができればありがたい。加えて、処理装置が(並列処理
装置として)同じ機械の中の他の処理装置と、あるいは
(分散処理装置として)ネットワークを介して遠隔の処
理装置と組合わさって動作することもある。このような
遠隔地のデータ保持装置と処理装置の組み合わせは計算
機技術の中の技法として一般的になっていくであろう。
【0028】ここで「コンピュータ・ネットワーク」と
いうことばは、相互につながった計算機システムとそれ
を結ぶ通信チャネル全体を含むものとして定義される。
通信チャネルは、電線(ねじれ二重線)、同軸ケーブ
ル、光ファイバー、衛星リンク、デジタル超音波など伝
達メディアを指す。計算機システムは大規模に広域(数
十、数百、数千マイル;WAN)に分散しているか、あるい
は局地的な(数フィートから数百フィート;LAN)ネット
ワークに分散していることもある。さらにまた、いろい
ろなLANやWANが相互につながって計算機システムの集合
体をなしていることもある。このひとつの例は「インタ
ーネット」と呼ばれるものである。
【0029】本発明の実施例では、図2の100のところ
で図示したように、分散オブジェクトは相互に結合した
ネットワークの中の計算機の中にあってもよいし、一台
の中にあってもよい。図のように、ネットワーク100は
計算機102を含み、その計算機はさらにネットワーク104
につながっている。ネットワーク104は、さらにサー
バ、ルータ、あるいはそれに類した計算機106につなが
り、さらに計算機108、110、 112につながっている。デ
ータと実行命令はすべてこのネットワークを辿っていく
ことができる。コンピュータ・ネットワークの設計、構
築、実装は一般的な技法となりつつある。
【0030】計算機102、106、108、110、112は、図3
の200のところで図式的に表現されている。計算機シス
テム200は、プロセッサ(中央演算装置; CPU)202をあ
る数含んでおり、それらは主記憶装置206(ランダム・
アクセス・メモリ; RAM)、主記憶装置204(読みだし専
用メモリ; RAM)を含んでいる。この技術ではよく知ら
れているように、204はデータや命令をCPUに向かって単
方向に送るのに対して、206は双方向に送ることができ
る。これら主記憶装置両方とも上に述べたようなメディ
アで計算機から読みだしができるようになっている。大
容量記憶装置208は、典型的にはハードディスクのよう
な二次記憶装置でプログラムやデータを貯えておくこと
ができるが、主記憶装置に比べて遅い。大容量記憶装置
208の中の情報は、場合によっては主記憶装置206の一部
として仮想記憶となって使うことも通常行なわれる。CD
-ROM 209のような特別な大容量記憶装置はCPUに一方向
にデータを送る。
【0031】CPU 202はインタフェース210を含む。イン
タフェースはビデオ・モニタ、トラック・ボール、マウ
ス、キーボード、マイクロフォン、タッチパネル付き画
面、カード読み取り機、磁気・紙テープ読み取り機、タ
ブレット、尖筆(stylus)、声あるいは手書き文字認識装
置、その他のよく知られた入出力が複数からなる。他の
計算機がインタフェースになることもある。最後に、CP
U 202は計算機や遠隔通信のネットワークと組合わさっ
て用いられる。このネットワーク接続は、図の212で一
般的に示されている。このようなネットワーク接続にお
いて、上記示した方法により、CPUは処理の過程を通じ
てネットワークから情報を受けとり、あるいはまた情報
をネットワークに向かって発信することがわかる。今ま
で述べた機器や道具は計算機のハードウェアあるいはソ
フトウェアの技術として良く知られたものである。
【0032】2. 分散オブジェクトシステムにインスト
ールされるアプリケーションを構築するコード生成器 図4の400は、分散オブジェクトシステムにアプリケー
ションを作成しインストールするシステムの実施例を摸
式的に示している。図のシステムは、コンポジション構
築器402(視覚的なアプリケーション構築器と呼ばれる
ものと同じ)を含み、ユーザ 特にプログラマーが、上
記図1で示したような分散オブジェクトシステム上へイ
ンストールされるアプリケーションを作成するのに用い
られる。このコンポジション構築器はコンポーネント・
サービス404(後述)とともにユーザ(あるいはプログ
ラマー)が分散オブジェクトシステム上で利用可能なオ
ブジェクトをアクセスする機能を提供する。コンポジシ
ョン構築器402は、さらにコード生成器408と連係し(こ
れはさらにプログラムのテンプレート貯蔵庫406とつな
がっている)、コンポジション構築器によって作成され
たものを410で示すようなプログラム・ソースファイル
に仕立てあげる。
【0033】プログラム・ソースファイル410は、さら
にオブジェクト開発器ODFのコンパイラ/リンカ414に送
られる。オブジェクト・アクセス・ソフトウェア412と
接合したODFコンパイラ/リンカは、今度はコンポーネン
ト・サービス404と連係する。ODFコンパイラ/リンカ414
はオブジェクト・ソフトウェア416とネットワーク・ア
プリケーション418の両方を生成し、今度は420で示した
ネットワーク・オブジェクト422にアクセスする。これ
らのネットワーク・オブジェクトは、図の点線矢印で示
したように、コンポーネント・サービス404かあるいはO
DFコンパイラ/リンカと連係して使われるオブジェクト
・アクセス・ソフトウェア412に用いられる。オブジェ
クト・アクセス・ソフトウェア412は、典型的には削除
されたヘッダ・ファイルかあるいは削除されたアプリケ
ーション・プログラム・インタフェース(API)であ
る。APIはクライアントにとって利用可能であり、ファ
クトリ・サービスを含むこともある。
【0034】図4のこれらの要素をここで詳述する。コ
ンポジション構築器402は、アプリケーション開発者に
対して分散オブジェクトを用いて視覚的にアプリケーシ
ョン・プログラムを構築することを可能にするものであ
る。現存する、あるいは以前に開発されたオブジェクト
のカタログがあるので、開発者は新しいアプリケーショ
ンプログラムを開発する際、容易に遠隔にあるオブジェ
クトを同定し取ってくることができる。加えて、これら
のオブジェクトは新しいオブジェクトを作る際、構築器
の中で再利用されるため、コードの再利用を許す。構築
器の中であるオブジェクトが利用のために選ばれたと
き、それはある種のサービスを提供することもあるし、
あるいは逆に利用のためのサービスを要求することもあ
る。例として、オブジェクトは何か値をとる属性を持つ
かも知れないし、何か引数をとって結果を返す操作(メ
ソッド)を持つかも知れない。オブジェクトにより要求
されるサービスとは、オブジェクトの属性に対しては
値、操作に対しては引数である。同様に、オブジェクト
によって供給されるサービスとは値が既に決まった属性
であるし、操作結果である。アプリケーションを構築す
るときには、オブジェクトによって供給されるサービス
は、それを処理上必要としているオブジェクトに「接続
され」、配送されることもある。例えば、あるオブジェ
クトの属性値は他のオブジェクトの操作の引数として用
いられるかも知れない。与えられたオブジェクトによ
り、どのサービスが供給されどのサービスが必要となる
かを決定できるようにすることは、オブジェクトの結合
上大事なことである。
【0035】本発明の実施例では、「コンポーネント
(componnent)」、「パーツ(part)」、「プラグ(pl
ug)」、「ソケット(socket)」、「接続(connectio
n)」は次の意味を持つ。 まず、コンポーネントは、あ
るオブジェクトあるいはオブジェクトタイプ、それが提
供するサービス、その実装されたもの、および分散オブ
ジェクトシステムの名前づけサービスにおけるそれの名
前を表す。コンポーネントはコンポーネント・カタログ
に登録されており、ユーザがアプリケーションを構築す
るにときにコンポーネントを調べ、選択できる。ユーザ
が構築中のアプリケーションにコンポーネントを加えよ
うとするとき、ここに説明されている構築のメカニズム
によって特定メソッドを用いてコンポーネントの中にあ
る情報から「パーツ」を引き出す。パーツとは、コンポ
ーネントによって表されるオブジェクトの将来の実行時
のインスタンスを保持する場所である。これは、他のオ
ブジェクトと接続し属性値を定義するために実行時のイ
ンスタンスとして取り扱うことになる。構築器によって
アプリケーションが完成し実行されるとき、パーツとと
もにそのアプリケーションにおける他のオブジェクトと
の連携によるアクションを表現するコードが生成され
る。こうして最終的にアプリケーションが実行されると
き、オブジェクトの実行時インスタンスが生成されパー
ツに代わって配置される。
【0036】ある実施例ではパーツは「プラグ」と「ソ
ケット」を持つ。それぞれは視覚的にプラグ・アイコン
とソケット・アイコンで表示される。上に述べたよう
に、オブジェクトはその属性に対して値を要求し、操作
に対して引数を要求する。「プラグ」とはこのようにオ
ブジェクトにとって必要なサービスを指すのに用いられ
る。分散オブジェクト・システムの技法に熟練した人で
あれば、他の種類のサービスもプラグとして表現するこ
とができる。例えば、プラグはパーツの属性か、あるい
は値を埋める必要のあるパーツの引数を表す。さらに、
プラグはコンポーネントのファクトリ・メソッドの引数
を表す場合もある。これらの引数は、コンポーネントの
ファクトリ・メソッドのによってパーツの実行時インス
タンスを作るのに用いられる。
【0037】同様にオブジェクトによって提供されるど
のサービスも「ソケット」と呼ばれる。 例として、ソ
ケットはパーツの既に値を持った属性を表す場合もある
し、ある値を返す操作を表す場合もある。このように、
ソケットはプラグが必要としているサービスを表現して
いる。プラグが必要している値を埋めるには多くの異な
った型の値ががあり、かつソケットの方も異なった型が
あることが考えられる。例えば、値としてオブジェクト
型を用いることがある。このようにプラグとソケットは
相補的な性質を持ち、サービスを要求するオブジェクト
とサービスを供給するオブジェクトの間の通信をを可能
にすることがわかる。実施例ではこのような通信はプラ
グを第一のパーツ、ソケットを第二のパーツとした「接
続」と表現される。
【0038】上に述べたように、コンポジション構築器
(composition builder)402は、分散オブジェクトのア
プリケーションを作るための開発装置として用いられ
る。このモデルは、「コンポジション」と呼ばれ、コン
ポジション構築器のコンポジション・ワークシートによ
って形成される。このコンポジションは、分散オブジェ
クトのアプリケーションの図式表現とも考えられる。こ
のコンポジションはパーツ、ソケット、プラグ、接続な
どの要素を含み、加えてインタフェースやモジュールの
名前などのトップレベル情報も含む。このような要素す
べては、シンボル表にロードされるときに値を決定す
る。このことは以下に述べる。
【0039】典型的には、コンポーネント・サービス40
4を介して他の前からあるオブジェクトを用いて構築器
(Builder)の中でオブジェクトを実装できる。より詳
しく言えば、コンポーネント・サービスは、コンポジシ
ョン・ワークシートの中でシンボル的に組み合わせるこ
とのできるコンポーネントを提供している。このコンポ
ジションは実際のオブジェクトを含んでいるわけではな
く、オブジェクトの型へのレファランスを持っている。
コンポーネント・サービスは構築器に対してコンポーネ
ントの記述を行なうインタフェースとそのための道具の
セットである。
【0040】構築器の中でコンポジションが完成したと
き、多くの場合、コードに変換されコンパイルの対象に
なるようないろいろな「断片(piece)」ができ、それ
らはコード生成器408に送られる。コンポジションは、
ユーザが使いたいと思っているパーツ、プラグ、ソケッ
ト、コンポーネントからなる拡張グラフを含んでいる。
また、コンポジション・ワークシートの中で作られるオ
ブジェクトの細かいインタフェース仕様の定義と、とき
には作成中のオブジェクトで開発者が定義したメソッド
を実装するためのソースコードが含まれることもある。
これらの「破片」は、コンポジション構築器の中から
「build」コマンドで実行され、コード生成器に送られ
る生の材料である。
【0041】コード生成器は、コンポジション・サービ
スを介してコンポジションにアクセスするのが望まし
い。コンポジション・サービスはある特定のコンポジシ
ョンの中身を記憶するために使われるインタフェースの
セットである。コンポジションは構築器が編集するコン
ポジションの下にある主「文書」である。コード生成器
のAPIはネットワーク・オブジェクトであるから、「bui
ld」コマンドによって、コード生成器はコンポジション
を完成するために、オブジェクトへのレファランスを渡
される。そのときはいっしょにプログラム・テンプレー
トの貯蔵庫から適当なテンプレートが渡される。コード
生成器がコンポジション・サービスからの情報を要求す
るとき、コンポジション・サービスのオブジェクトへの
レファランスを通じて適当な呼びかけをすることによ
り、この情報にアクセスする。
【0042】開発者が初期の段階で決定するのはクライ
アントとサーバのどちらを作るかである。すなわちコン
ポジション構築器は、クライアント・オブジェクトを作
るのにもサーバ・オブジェクトを作るのにも使われる
が、開発者は陽にどちらかの選択を行なう。一度この選
択がなされると、プログラム・テンプレート貯蔵庫406
は、クライアントなりサーバなりのテンプレートを提供
することができる。プログラム・テンプレートは、クラ
イアントなりサーバなりがどのような見えるかをレイア
ウトしたスケルトンのファイルである。しかし、これは
コンポジション構築器のコンポジションとは結びつけら
れているわけでないから、まだ特定のアプリケーション
・コードを持っていない。図5から図12を通して、コ
ード生成器がコンポジションをソースファイル410の形
式のアプリケーション・プログラム変換していく過程を
以下に詳しく述べる。
【0043】プログラム・ソースファイルは、ODF414に
供給され、次の二種類の出力をする可能性がある。ま
ず、ODFはネットワーク・アプリケーション、すなわち
分散オブジェクト・システムの中で走る「フロント-エ
ンド」ソフトウェアを作成する場合がある。あるいはま
た、ODFはオブジェクト・ソフトウェア416を作成する場
合がある。オブジェクト・ソフトウェア416はオブジェ
クトにアクセスするために走るソフトウェアであり、必
ずしもアプリケーションではない。ある実施例において
は、オブジェクトのインタフェースはIDLで定義され
る。IDLはプログラミング言語に依存しない。このIDF
は、ODF414に供給され、オブジェクト・ソフトウェア41
6を生成する。これはプログラミング言語に依存しない
ソフトウェアであり、IDLで定義されたオブジェクトに
ある属性や操作へアクセスすることができるようにな
る。すなわち、オブジェクト・ソフトウェア416は、IDL
で定義されたオブジェクトにアクセスする分散オブジェ
クト・アプリケーションによって使われるソフトウェア
のライブラリのように見える。
【0044】図5の500のところは、本発明の実施例と
して広汎に分散オブジェクト・コードが生成されるよう
すを表している。コンポジションの構築に続いて、完成
したコンポジションはコード生成器に渡されている。コ
ード生成器はコンポーネントとコンポジション・サービ
スの「顔のない(faceless)」クライアントである。そ
の仕事はコンポジションとコンポーネント・データから
コンパイルされることになるコードを生成することであ
る。これから創り出されるそれぞれのプログラム・ソー
スファイルにとっては、それに相当するテンプレートが
あるのが望ましい。このテンプレートは、コード生成器
がその中のメタシンボルを実際のコードに置換した結果
である。コード生成器は、後に詳述するように、メタシ
ンボルを置換するのを助けるのにシンボル表を用いる。
言い替えれば、コード生成器はプログラム・テンプレー
ト・ファイルとシンボル表を用い、これらプログラム・
ソースファイルを作るものである。本発明の実施例とし
ては、プログラム・ソースファイルは、C++のソースフ
ァイルであり、コンポジションと名付けられた分散オブ
ジェクト・アプリケーションに対しては、これらのソー
ス・ファイルは「composition.cc」、「compositon.h
h」、「main.cc」、「Imakefile」を含む。
【0045】本発明のコード生成器(コードジェネレー
タ)は、ステップ502で始まり、コンポジションができ
た知らせを受ける。典型的な例では、これは開発者がコ
ンポジションを完成して「build」コマンドを発行した
ときである。ある実施例においてはコンポジションは視
覚的なアプリケーション構築器と連結して作られる。こ
のアプリケーション構築器は、分散オブジェクトのコン
ポーネントのカタログといっしょに用いられる。
【0046】次にステップ504では、コード生成器はコ
ンポジションをシンボル表の中にロードする。構築器の
中でコンポジションから分散オブジェクト・アプリケー
ションを作るに際し、シンボル表がどのように使われる
かは以下に詳述する。基本的には、ロードするステップ
では、コンポジションから識別子(キーあるいは変数と
呼ばれる)を取り出し、それらを対応する値にマップす
る。それぞれの識別子の値はシンボル表を介して記憶さ
れ、それぞれの識別子-値のペアはシンボル表のエント
リと呼ばれる。それぞれの値はシンボル表、整数、文字
列あるいは文字列ベクタである。これらの識別子は、シ
ンボル表の値にマップされ、プログラム・テンプレート
にとってシンボル表がアクセスできるようになり、ソー
ス・プログラム・ファイルを作る上でそれ自身の識別子
は適当な値に置換される。言い替えればこのコンポジシ
ョンをロードするステップは、プログラムテンプレート
の中で使われる識別子と値をシンボル表に「供給する
(seed)」ことである。
【0047】次にステップ506では、作られるべきファ
イル名のリストがそれぞれ対応するテンプレートを伴っ
てコンポジションから取り出される。このときそれぞれ
のファイル名に対応して一つのテンプレートがあること
が望ましい。ファイル名のリストはコンポジションの中
で暗に作られている。すなわち、開発者は最初クライア
ントを作るかサーバを作るか選択するときにどちらのテ
ンプレートセットを使うか示しているのである。テンプ
レートは、希望のファイルを作るためにシンボル表の中
の値と結びつけられる。コンポジションをシンボル表の
上にロードし、ファイル名と対応するするテンプレート
を取り出すと、次はステップ508でこれらりテンプレー
トとシンボル表からのシンボルの値を使ってプログラム
・ソースファイルが生成される。ひとつのソースファイ
ルはひとつのテンプレートから作られることが望まし
い。このステップは図6とともに、以下により詳しく述
べる。最後に、ソースファイルができあがってしまう
と、ステップ510で示すように結果のファイルはODFに送
られることがある。ODFは、ファイルを実行可能な形式
にコンパイルしリンクする。
【0048】図6の600の箇所は、本発明の実施例とし
て606で示されるソースファイルを作るために604のシン
ボル表と602のプログラム・テンプレートを結び付ける
ようすを示している。一般に、テンプレートは結果とな
るソースファイルへと「マップ」される。テンプレート
のある部分(ジェネリックなヘッダ部分など)は文字通
りソースファイルにコピーされ、識別子などの他の部分
はシンボル表により実際の値に置き換わる。この置き換
えは識別子がシンボル表を検索したときに起こり、対応
する値に変わる。(これはマクロ置換と呼ばれる) 例
えば、サーバ・オブジェクトが作られるときには、その
インタフェースが定義される必要がある。このサーバの
アウトラインのスケルトンは、テンプレート602で与え
られる。ある実施例では、テンプレート602は、手続き
呼び出しやメソッド・ルーチンに使われるジェネリック
・ヘッダを含んでいる。602に示されているように、ひ
とつのヘッダは "class@(interface.module)::@(interf
ace.name)" という形式の行である。この"@"シンボル
は、それに続く識別子がシンボル表の中の値に置き換わ
ることを示している。この例では、テンプレートの"cla
ss@(interface.module)::@(interface.name)"が、シン
ボル表の値に結びつけられる。シンボル表604は、識別
子から値を与えるエントリを持っている。この例で
は、"interface.module"という識別子が"foo"という値
を持ち、"interface.name"という識別子が"bar"という
値を持っている。シンボル表の中のエントリは、テンプ
レートと結びつけられてソースファイルを作り、"class
foo::bar"というコードを持つことになる。
【0049】より洗練された方法で置換ができればなお
良く、例で示したような特別な形式や構文でなくてもこ
れができればありがたい。例として、次に、どのように
この置換が行なわれるのかをさらに説明する。上に述べ
たように、コード生成器はプログラム・ソースファイル
とシンボル表を作る。テンプレート・ファイルは、"@"
で始まる特別な形式を含んでいて、それがシンボル表か
らの値に置き換わる。テンプレート・ファイルの他の情
報は、出力となるファイルにそのまま文字通りコピーさ
れる。例えば、テンプレート・ファイルが、 My @(animal) has @(insect). と言う行を含んでいたとすると、シンボル表"st"は次の
ように初期化される。
【0050】 st.setValue("animal", "dog"); st.setValue("insect", "fleas"); コード生成器は、 My dog has fleas. を生成する。
【0051】"@(identifier)"という特殊な形式はシン
ボル表の中の識別子に対する値に置換される。識別子は
任意の文字列であってよい。識別子はパス(path)を表
現し、パス・コンポーネントはピリオドで区切られてい
る。それぞれのパス・コンポーネントはシンボル表から
分別して取り出され、最後のコンポーネント以外の値は
全部シンボル表である。例えば 、@(foo.bar) の値は、
@(foo)の値であるシンボル表の中の"@(bar)"の値を検索
することによって取り出される。このようにして、「シ
ンボル表」はシンボル表の木構造になっており、ピリオ
ド"."で区切られたパスによってインデックスされてい
る。
【0052】次の例では、テンプレートファイルは次の
ように書かれてあるものとする。
【0053】 The big @(story .homeowner) wanted to eat @(story.protagonist). またシンボル表 "st" は次のように初期化されているも
のとする。
【0054】 CG::SymbolTable *story = new CG:: SymbolTable; story.setValue ("homeowner", "brown bear"); story.setValue ("protagonist", "Goldilocks"); st.setValue ("story", story); このとき、 コード生成器は次のコード The big brown bear wanted to eat Goldilocks. を生成する。
【0055】シンボル表は、隠れていたシンボル表を自
動的に生成できるのでより簡単な方法で初期化できる。
【0056】 st.setValue ("story.homeowner", "brown bear"); st.setValue ("story.protagonist","Goldilocks"); シンボル表のエントリの値は再びシンボル表であるか、
あるいは整数、文字列、文字列ベクタである。整数値を
持つシンボル表のエントリは、@if/@else表現も用いる
ことができる。例えば、ゼロでない値はtrueであると
き、 @if (flag) Hi Ho @else Hi No は、flag の値が次のとき、 st.set.Value("flag",0); "Hi No"となり、そうでないとき"Hi Ho"となる。コード
生成器は、"@elseif"という表現も持ち、通常どおりに
解釈される。
【0057】ベクタの値を持つシンボル表は、@foreach
という形式 The letters are: @foreach (letter all-letters) @(l
etter) @end. を持つ。
【0058】もし、シンボル表が次のように初期化され
ている場合、 CG::StringVector v; v.insert("letterA"); v.insert("letterB"); v.insert("letterC"); st.setValue("all-letters", v); st.setValue("letterA", "A"); st.setValue("letterB", "B"); st.setValue("letterC", "C"); コード生成器は次のようなコード The letters are: A B C. を生成する。
【0059】@foreach 節のボディ(body)は文字列ベ
クタの中のそれぞれの項につき一回翻訳される。 ベク
タのそれぞれの要素の(文字列)の値は@foreach ルー
プの変数に束縛され、ループのボディの中で束縛子とし
て用いられる。ループ変数が識別子に出会ったとき、そ
れはその値に変換され、結果となる識別子はシンボル表
の中から取り出される。例えば、ループの最初の一回め
でletterの値はletterAになり、@(letter)は@(letter
A)となり、 結果 A という値になる。
【0060】@foreach節のボディの中では、文字列ベク
タ: var:index, var:is-first,var:is-last のそれぞれ
の要素に対してさらに三つの変数が束縛される。これら
の値はベクタの要素(いまループ変数 "var" に束縛さ
れる)に対する整数のインデックスであり、整数フラッ
グが "1" のとき最初かあるいは最後のベクタの要素が
束縛されている。同じ ABC のシンボル表が与えられて
いるとして、 @foreach (leter all-letters) int @(letter) = @(letter:index) @if(letter:is-las
t);@else,@end @end コード生成器は以下のコード A=1, A=2, C=3; を生成する。
【0061】C の識別子を構成するときには、ひとつか
あるいはそれ以上の @if/@else/@end か @foreach@end
表現を用いると便利なことがある。この場合、コード生
成器は、@{else}と@{end}を @else と @end のように扱
う。そこで次のように書いた場合、 FOO@if(NEVER)HOOO@{else}BAR@{end}BAZ "never" が "0" に束縛されたとすると、コード生成器
は期待どおり"FOOBARBAZ"を生成する。
【0062】コード生成器は一般目的のコードの生成器
であるが、一応 C++/Objective Cのソースとヘッダ、Im
akefileを生成することを意図したものである。また、
識別子のコンポーネントは、次のように二重に間接的で
ある。
【0063】 @foreach (var list) list element @(var) is: @(foo.var.value) ここで、@(var)は新しい識別子のパスを作るために@(fo
o.bar.value)のように一度検索され、完全なパスの値が
取り出される。
【0064】一般にテンプレート・ファイルは、分散オ
ブジェクトのアプリケーションを規範に基づき表現す
る。いろいろな種類の分散オブジェクト・システムや分
散オブジェクト・アプリケーションになる可能性のある
テンプレート・ファイルの技術において、熟練している
人たちに有意義であろう。テンプレート・ファイルの特
別な例については、上で述べたとおりである。
【0065】図に戻って、図7の700は図5の504で示し
たシンボル表の構築の実施例を表している。ステップ70
2で、探索パスがコンパイル・ツールによってロードさ
れており、後に使うことになる。これらの探索パスは、
コード生成器が用いるファイルのファイル名かディレク
トリ名のリストである。このステップの一部として、コ
ンポーネント・サービスがいくつかのコンポーネントを
束ねることがある。例えば、二つの異なるコンポーネン
トが同じヘッダ・ファイルを使い、同じ探索パスの情報
を記憶している場合がある ステップ704では、シンボル
木の中に置かれるトップレベルのシンボルがロードされ
る。これらのトップレベル・シンボルは、それぞれのど
のコンポジションにも関連づけられる大域的な名前であ
る。いろいろな種類のトップレベル・シンボルがシンボ
ル表の木にロードされる可能性がある。 例えば、これ
らのトップレベル・シンボルは、インタフェースの名
前、インタフェース・モジュール、すべてのパーツのリ
ストである可能があるし、あるいはもっと一般に、コン
ポジションのどのパーツ、プラグ、ソケットにも関連し
ない可能性もある。
【0066】次にステップ706では、コンポジションに
関係あるファイルのファイル記述子がロードされ、それ
らのうち適当なテンプレートが決定する。このステップ
は、図8でより詳細に説明される。ステップ708では、
コンポジションで定義されたコンポーネントがロードさ
れている。このステップは、コンポーネント・サービス
に、コンポジションの中でパーツによって言及されてい
るすべてのコンポーネントのリストを要求することで完
結する場合がある。このステップは、図9においてより
詳しく説明される。一度コンポーネントがロードし終る
と、ステップ710 でこれらコンポーネントに対応するパ
ーツがロードされる。このステップは、図10 で詳細
に説明される。ステップ712ではコンポジションの中で
定義されたプラグ、ソケット、ベース・インタフェース
がロードされる。このステップは、図11でより詳細に
説明される。ステップ718では接続がロードされる。こ
のステップは、図12および図13でより詳細に説明さ
れる。
【0067】図8は、ステップ706を詳細に説明したも
のである。このステップはコンポジションに関係したい
ろいろなファイルのファイル記述子をロードし、どのフ
ァイルがテンプレートであるか決定する。ファイル記述
子は、ファイルを二つの次元から型に分ける。最初に、
ファイルは中に何を含むかで分類される。ファイルは宣
言、定義、IDLコードなどを含んでいる。次に、ファイ
ルは何がもとになっているかで分類ができる。最初のカ
テゴリーでは、ファイルはコード生成器によって作られ
たものである。これらのファイルはフラグのついたテン
プレートを持っていて、そのファイルを生成するのに敵
したテンプレートを指定してある。二番目のカテゴリー
は、開発者によって提供されたファイルであり、C++ の
ようなメソッドの定義を実装したソースコードを含んで
いる。三番目のカテゴリーは、図4のオブジェクト・ア
クセス・ソフトウェア412のようにクロス・レファラン
スだけのものである。これらのクロス・レファランスに
より、コード生成器はオブジェクト・アクセス・ソフト
ウェアで利用できるファイルを見つける技術を提供す
る。802から始めて、ファイルはまず生成されたものか
そうでないかの類別を行なう。ステップ804では、非生
成ファイルはさらに中身(内容の型(content type))
による類別を行なう。プログラム・テンプレートのいく
つかは非生成ファイル名を型によって言及するので、こ
の方法は有用である。例えば、Imakefileはこれを行な
う。
【0068】ステップ806では生成されたファイルのリ
ストが貯えられる。この生成ファイルのリストは図5の
506で必要とされたとき、アクセスされ利用される。
【0069】図9の900は図7のステップ708を詳しく説
明している。このステップでは、コンポジションの中で
言及されたコンポーネントをシンボル表にロードする。
このステップではコンポーネント・サービスによって実
行され、コンポジションの中で使われるすべてのパー
ツ、プラグ、ソケットその他をスキャンして、これらに
よって使われるすべてのコンポーネントのリストを作成
する。いくつかのパーツは、同じコンポーネントを使う
ことがあるので、リストを作成する際は重複のないよう
に、ちょっとしたチェックプログラムを走らせる必要が
ある。ステップ904では、コンポーネントの名前は対応
する型とともにシンボル表に加えられる。コンポーネン
ト・ファクトリは複合的な型であるので、このデータは
いくつかの要素を含むことがある。これらはファクトリ
のクリエータの型とクリエータの名前を含み、ファクト
リの名前は名前づけサービスによって登録される。ファ
クトリはコンポーネントのインスタンスを動作時に作る
ために用いられる。この実行時コードはインスタンスを
作るために適当なファクトリを探す。
【0070】図10の1000は、図7のステップ710を詳
細に述べたものである。このステップは、コンポジショ
ンの中で使われたすべてのパーツをシンボル表にロード
する。1002から始めて、パーツのリストが決定する。こ
のステップは、コンポジション・サービスが必要なすべ
てのパーツのリストを要求することで実行される。次に
ステップ1004では、パーツの名前が、パーツのコンポー
ネントへのクロス・レファランスを伴ってシンボル表に
貯えられる。図9で各々のコンポーネントに対するシン
ボル表のエントリができるので、これらのシンボル表の
名前は、それぞれのパーツのコンポーネントをクロス・
レファランスするために貯えられる。ステップ1006で
は、それぞれパーツのクリエータ関数の引数が記憶され
る。それぞれのコンポーネントはファクトリを持ってい
て、それは今度はクリエータ関数になる。より正確に言
えばステップ1006は、それぞれのパーツのコンポーネン
トのファクトリのクリエータ関数の引数を持っているこ
とになる。このステップではシンボル表のエントリが作
られて、この値はシンボル表で、そのファクトリのクリ
エータ関数によって必要とされるすべての引数へとマッ
プされる。この引数の集合はファクトリ関数を呼び出す
コードを生成するとき必要となる値の集合である。ステ
ップ1008ではシンボル表にパーツの初期化する値を貯え
る。パーツのそれぞれの属性はこのステップで初期化さ
れる。
【0071】図11は、図7のステップ712を例示して
いる。このステップでは、コンポジションの中で使われ
るすべてのプラグ、ソケット、ベース・インタフェース
が、シンボル表に貯えられる。最初ステップ1102でプラ
グのリスト、ソケットのリスト、ベース・インタフェー
スのリストが決定する。これらのリストは、コンポジシ
ョン・サービスをに問い合わせることで決定できること
もある。一度これらの要素が決定すれば、次にステップ
1104でそれぞれのプラグの名前と型、それぞれのソケッ
トの名前と型、それぞれのベース・インタフェースの名
前と型がシンボル表に読み込まれる(stored)。プラグ
やソケットの型は、IDL型のオブジェクトで、ソケット
から渡されたり、プラグから受けとったりする。それは
接続を受けるオブジェクトの型である。ベース・インタ
フェースは、他のインタフェースから導かれるものては
ない。 言い替えれば、 ベース・インタフェースでない
インタフェースは他から引き出されたインタフェースで
ある。
【0072】図12と図13は、本発明の実施例に従っ
て図7のステップ718を説明している。このステップ
は、コンポジションから接続をシンボル表に読み込んで
いる。接続は、コンポジション構築器でアプリケーショ
ンを作成ときに開発者によって形成されるものである。
接続はあるパーツのソケットから別のパーツのプラグへ
とつながるものである。慣例では、ソケットはプラグが
必要としているオブジェクトを使うためにソケットがオ
ブジェクトを提供するものである。これは電気機器のプ
ラグとソケットを模倣したものである。電気的なプラグ
が電気的なソケットに差し込まれたとき、ソケットはプ
ラグに電力を供給する。同様に、実行時には、接続はオ
ブジェクトへのレファランスをソケットからプラグに渡
すように見えるものである。さらに、接続はコンポジシ
ョン・ソケットからパーツへ、あるいはコンポジション
・プラグからパーツへとつながるものである場合もあ
る。ここで「コンポジション」ソケット/プラグは、コ
ンポジションの中から外へアクセスできるようにするも
のである。言い替えれば、コンポジション・ソケット/
プラグは、コンポジションの公的なIDLインタフェース
である。
【0073】ステップ1202から始まって、接続のリスト
はコンポジション・サービスから得られる。この接続関
係が一度得られれば、次のステップ1204から終了(EN
D)までが実行され、それぞれの接続はシンボル表にロ
ードされる。図11で前に示したようにコンポジション
のすべてのプラグとソケットは、既にシンボル表にロー
ドされている。さらに、ソケットはオブジェクトへのレ
ファランスをプラグに渡すようになっているが、これら
のレファランスが実際に渡されるのは実行時である。さ
らに、正しいオブジェクトのレファランスが取り出され
るためには、実行時に一連の操作がソケットに対して行
なわれなければならないし、プラグに正しいオブジェク
トのレファランスをを渡すためにも、プラグに一連の操
作を施す必要がある。ステップ1204では、現時点での接
続のプラグのクロス・レファランスがシンボル表に記憶
される。次にステップ1206では、このプラグに対する操
作列もシンボル表に貯えられる。このように、プログラ
ムは適当なタイミングでこの一連の操作列(sequence o
f operation)が呼び出されて生成される。
【0074】操作列の例を述べる。ソケットは何も引数
をとらずに値を返す操作であるとする。すなわち、操作
"part.get_value" は、何も引数をとらず値だけ返す。
この構築器はユーザにソケットに対する操作列を作成で
きるようになっている。この操作は前のソケット操作の
値に依存して変わるかも知れない。例えば、次の操作: Type1 var1 = part.get_value1(); Type2 var2 = var1.get_value2(); Type3 var3 = var2.get_value3(); は、最終の値が"var3"になる操作列を定義している。
【0075】ステップ1208は、その時点での接続のソケ
ットのクロス・レファランスをシンボル表に記憶してい
る。次のステップ1210では、このソケットに対する操作
列がシンボル表に記憶される。次に、1214、1218、122
2、1226のステップに従って接続がソートされる。接続
は、その終端がソケットであるかどうか(コンポジショ
ン・ソケットがパーツに接続されたとき)、プラグであ
るかどうか(コンポジション・プラグがパーツに接続さ
れたとき)、単に二つのパーツが接続されただけである
かどうか(あるパーツのソケッがもう一方でもう一つの
パーツのプラグに接続されているとき)、あるいは接続
のプラグ終端がそのパーツのクリエータ関数への引数に
なるものであるかどうかによってソートされる。
【0076】最初ステップ1214では、接続の終端がコン
ポジション・ソケットであるかどうかを決定する。もし
このステップ1214の答えが"YES"であれば、ステップ121
6においてソケットから接続へのクロス・レファランス
がシンボル表内に生成される。このようにして、シンボ
ル表の中にソケット記述へレファランスが付加される。
いずれの場合にも、 ステップ1218で接続のどちらかの
終端がコンポジション・プラグであるかどうかが決定さ
れる。もし1218の答えが"YES"であれば、ステップ1220
において、プラグから接続へのクロス・レファランスが
生成され、シンボル表の中に記憶される。さらに、この
答えがいずれの場合でも、ステップ1222に進み、二つの
パーツの間で接続があるかどうかが決定される。この質
問1222の答えが"YES"である場合、ステップ1224におい
てこの接続が、初期接続を並べてあったシンボル表に加
えられる。この初期接続は、アプリケーションが開始時
に実行されるものである。もし1222の答えが"NO"である
なら、制御は次のステップ1226に直接進む。ステップ12
26では、接続のプラグ終端が、そのパーツのクリエータ
関数から導き出されたのであるかどうかを決定する。こ
のとき、それぞれのパーツはクリエータ関数を持つコン
ポーネントに対応する。もしもこのクリエータ関数が引
数を持つなら、これらの引数はそのパーツのプラグを形
成する。なぜなら、それら引数はオブジェクトの値によ
って埋められなければならないからである。もしここで
ステップ1226で問題になっている接続のプラグ終端が存
在すれば、パーツのクリエータ関数の引数を埋める(あ
るいは引数から導き出される)ことになり、次の制御ス
テップ1228に進む。ステップ1228ではシンボル表でパー
ツのクリエータ関数の引数リストに接続が付加される。
ステップ1228ののち、あるいはもしステップ1226の答え
が"NO"であれば、このルーチンは終る。
【0077】前述の発明について明確な理解を得てもら
うために説明をしてきたが、後に添付したクレームの範
囲内である変更や改変がなされる必要があるのは明らか
であろう。例えば、コード生成器はどの適当な分散オブ
ジェクト・システムに対してもコードを生成する場合が
ある。プログラム・テンプレートで用いられるためにあ
る特定のシンタックスが示されてきたが、これはどのよ
うなシンタックスでもよい。加えてここに示したシンボ
ル表は、識別子を値に結びつけるある一つの可能な場合
を示した。この識別子を値に結びつけるやり方にはまだ
いろいろなやり方がありうる。さらに、シンボル表にい
ろいろな要素をロードする際にはある特定の順序を提示
したが、異なる適当な順序でよい。したがって、ここで
述べた実施例は例証するためのものであり、制限ではな
い。したがって、本発明はここに詳細に与えた方法に限
らず、特許請求の範囲の主張によって、同じいかような
方法であっても定義できる。
【図面の簡単な説明】
【図1】図1は、本発明に対応する分散オブジェクト・
システムの概略図である。
【図2】図2は、本発明に対応するコンピュータ・ネッ
トワークの構成図である。
【図3】図3は、本発明に対応するコンピュータ・シス
テムのブロック図である。
【図4】図4は、本発明に関して,分散オブジェクトシ
ステムにおけるオブジェクト指向アプリケーションの構
築を説明する構成図である。
【図5】図5は、本発明に関するネットワーク・アプリ
ケーションのコードを自動生成する方法を示すフローチ
ャートである。
【図6】図6は、本発明の実施例において,テンプレー
トとシンボル表情報を組合せてソースファイルを生成す
る様子を示す構成図である。
【図7】図7は、図5のステップ504のフローチャート
であり、 本発明の実施例において、 ネットワーク・ア
プリケーションがシンボル表にロードされるようすを図
式化したものである。
【図8】図8は、本発明の実施例に関して図7のステッ
プ706を詳細化したもので、 ファイル識別子がシンボル
表にロードされるのを示す流れ図である。
【図9】図9は、本発明の実施例に関して図7のステッ
プ708を詳細化したもので、 コンポーネントがシンボル
表にロードされるのを示す流れ図である。
【図10】図10は、本発明の実施例に関して図7のス
テップ710を詳細化したもので、パーツがシンボル表に
ロードされるのを示す流れ図である。
【図11】図11は、本発明の実施例に関して図7のス
テップ712を詳細化したもので、プラグ、 ソケット、
ベース・インタフェースがシンボル表にロードされるの
を示す流れ図である。
【図12】図12は、本発明の実施例に関して図7のス
テップ718を詳細化したもので、接続情報がシンボル表
にロードされるのを示す流れ図である。
【図13】図13は、本発明の実施例に関して図7のス
テップ718を詳細化したもので、接続情報がシンボル表
にロードされるのを示す流れ図である。
【符号の説明】
10…分散オブジェクトシステム、14…ORBオブジ
ェクト・インプリメンテーション、16…オブジェクト
開発ファシリティ、20…クライアント、22…サロゲ
ート 24…メソッド表(メソッド・テーブル)、25…スタ
ブ関数、26…動的起動インタフェイス、28…標準イ
ンプリメンテーション・スイート 30…動的スケルトン、32…静的スケルトン、34…
ORBインタフェイス、36…サブコントラクト、38
…トランスポート層、42…安全プロトコル、44…タ
イプコード/ANY、46…ORBデーモン、48…イ
ンタフェース・レポジトリ、50…インプリメンテーシ
ョン・レポジトリ、52…ネーミング・サービス、54
…セキュリティ・サーバ、56…単純パージステンス
フロントページの続き (72)発明者 グレゴリー ビー. ニュイエンズ アメリカ合衆国, カリフォルニア州, メンロ パーク, ローレル アヴェニュ ー 403 (72)発明者 ハンズ イー. ムッラー アメリカ合衆国, カリフォルニア州, サラトガ, メローウッド ドライヴ 12160

Claims (14)

    【特許請求の範囲】
  1. 【請求項1】 ネットワーク上にあり(networked)言
    語に独立なオブジェクト(indepentent object)を自動
    的に組み立てて、分散オブジェクト・システムに用いる
    ネットワーク・アプリケーションを生成する計算機にイ
    ンプリメントされる(computer-implemented)方法であ
    って、 前記ネットワーク・アプリケーションのスキーマ表現
    (schematic representation)を受けるステップであっ
    て、前記スキーマ表現は前記分散オブジェクト表現の間
    の(among)複数のリンクを定義し、 前記ネットワーク・アプリケーションの前記スキーマ表
    現をシンボル表中へロードすると共に、前記スキーマ表
    現の部分(portion)を前記シンボル表にある複数のエ
    ントリ(entry)として格納する(store)ロードステッ
    プと、 少なくとも一つ生成されるべきプログラム・ソース・フ
    ァイルと、プログラム・ソース・ファイルの発生に使用
    するための対応する少なくとも一つのプログラム・テン
    プレートと、を決定するステップであって、前記プログ
    ラム・テンプレートは前記シンボル表にある複数のエン
    トリ(entry)へのレファランス(reference)を含み、 前記シンボル表にある複数のエントリを対応する少なく
    とも一つの前記プログラム・テンプレートと組み合わ
    せ、それによって、コンパイルされ前記ネットワーク・
    アプリケーションの一部を形成するために適する、少な
    くとも一つの前記プログラム・ソース・ファイルを作る
    ステップと、を備える方法。
  2. 【請求項2】 前記ネットワーク・アプリケーションの
    前記スキーマ表現は、視覚的アプリケーションビルダ
    (builder)内に形成され、クライアント・オブジェク
    トおよびサーバ・オブジェクトの一方を示すように配置
    される、請求項1に記載の方法。
  3. 【請求項3】 分散オブジェクトの表現の間の前記複数
    のリンクは、パーツ(parts)、プラグ(plugs)および
    ソケット(sockets)を含む要素(element)の組み合わ
    せによって形成される、請求項1または請求項2に記載
    の方法。
  4. 【請求項4】 スキーマ表現をロードするロードステッ
    プは、前記スキーマ表現のパーツ、プラグ、ソケットを
    ロードすることを含む、請求項1から請求項3のいずれ
    かに記載の方法。
  5. 【請求項5】 前記シンボル表にある前記複数のエント
    リの各一つは対応する値にマップする(map)識別子(i
    dentifier)を含み、且つ前記複数のエントリを組み合
    わる前記ステップは、前記プログラム・テンプレートに
    ある前記識別子への前記レファランスをシンボル表から
    の対応する値に置換するように作用する、請求項1から
    請求項4のいずれかに記載の方法。
  6. 【請求項6】 少なくとも一つの前記ソースファイルが
    コンパイルされ、ネットワーク・アプリケーションの一
    部となることを要求するステップを含む、請求項1から
    請求項5のいずれかに記載の方法。
  7. 【請求項7】 ネットワーク上にあり言語に独立なオブ
    ジェクトを自動的に組み立てて、分散オブジェクト・シ
    ステムに用いるネットワーク・アプリケーションを生成
    する計算機にインプリメントされる方法であって、 前記ネットワーク・アプリケーションの前記スキーマ表
    現を視覚的アプリケーションビルダを用いて生成するス
    テップであって、前記スキーマ表現はクライアント・オ
    ブジェクトおよびサーバ・オブジェクトの一方を表示す
    るように配置され、スキーマ表現は分散オブジェクトの
    表現の間の複数のリンクを定義し、 前記ネットワーク・アプリケーションの前記スキーマ表
    現をシンボル表にロードし、前記スキーマ表現の部分を
    前記シンボル表にある複数のエントリとして格納するス
    テップと、 生成されるべき少なくとも一つプログラム・ソース・フ
    ァイルと、前記プログラム・ソース・ファイルを作るた
    めの対応する少なくとも一つのプログラム・テンプレー
    トとを決定するステップであって、前記プログラム・テ
    ンプレート前記前記シンボル表にある複数のエントリの
    レファランスを含み、 前記シンボル表にある複数のエントリを対応する少なく
    とも一つのプログラム・テンプレートと組み合わせ、そ
    れによって、コンパイルされネットワーク・アプリケー
    ションの一部を形成するために適する、少なくとも一つ
    の前記ソース・ファイルを形成するステップと、を備え
    る方法。
  8. 【請求項8】 分散オブジェクトの表現の間の複数の前
    記リンクは、パーツ、プラグ、およびソケットを含む要
    素の組み合わせによって形成される、請求項7に記載の
    方法。
  9. 【請求項9】 前記スキーマ表現をロードするステップ
    は、前記スキーマ表現の要素をロードすることを含む、
    請求項8に記載の方法。
  10. 【請求項10】 前記シンボル表にある複数の前記エン
    トリの各一つは対応する値にマップする識別子を含み、
    且つ複数のエントリを組み合わせるステップは、前記プ
    ログラム・テンプレートにある前記識別子への前記レフ
    ァランスを前記シンボル表にある対応する値に置換する
    ように作用する、請求項7から請求項9のいずれかに記
    載の方法。
  11. 【請求項11】 少なくとも一つの前記ソースファイル
    がコンパイルされ、前記ネットワーク・アプリケーショ
    ンの一部となることを要求するステップを更に含む、請
    求項7から請求項10のいずれかに記載の方法。
  12. 【請求項12】 ネットワーク・アプリケーションのス
    キーマ表現をシンボル表にロードし、それにより、ネッ
    トワーク上にあり言語に独立なオブジェクトを自動的に
    組み立てて、分散オブジェクト・システムに用いるネッ
    トワーク・アプリケーションを生成することを補助する
    計算機にインプリメントされる方法であって、前記シン
    ボル表は複数の識別子を対応する値にマップするよう配
    置され、前記スキーマ表現は値を有する識別子に関連づ
    けられる要素を含み、 該スキーマ表現からトップレベル・シンボルをシンボル
    表へロードし、前記トップレベル・シンボルに関連づけ
    られた識別子を対応する値へマップするステップと、 該スキーマ表現から接続をシンボル表へロードし、前記
    接続に関連づけられた識別子を対応する値へマップする
    ステップと、を備える方法。
  13. 【請求項13】 スキーマ表現の構築に用いられるファ
    イルを指示すると共に生成されるべきファイルを指示す
    るファイル記述子(file descriptor)をロードするス
    テップと、 該スキーマ表現からプラグを該シンボル表にロードし、
    前記プラグに関連づけられる識別子を対応する値にマッ
    プするステップと、 スキーマ表現からソケットをシンボル表にロードし、前
    記ソケットに関連づけられる識別子を対応する値にマッ
    プするステップと、を更に備える請求項12に記載の方
    法。
  14. 【請求項14】 ネットワーク上にあり言語に独立なオ
    ブジェクトを自動的に組み立てて、分散オブジェクト・
    システムに用いるネットワーク・アプリケーションを生
    成するために使用する計算機装置(computer apparatu
    s)であって、 処理ユニットと、 前記処理ユニットに結合する入力/出力デバイス(devic
    e)と前記処理ユニットと通信する記憶デバイスと、 前記ネットワーク・アプリケーションの、分散オブジェ
    クトの表現に間の複数のリンクを定義するスキーマ表現
    を受ける手段と、 前記ネットワーク・アプリケーションの前記スキーマ表
    現をシンボル表にロードすると共に、前記スキーマ表現
    の一部を前記シンボル表にある複数のエントリとして格
    納する手段と、 生成されるべき少なくとも一つのファイルと、前記ソー
    スファイルを生成するために使用する対応する少なくと
    も一つのプログラム・テンプレートとを決定する手段で
    あって、前記プログラム・テンプレートは前記シンボル
    表にある複数のエントリへのレファランスを含み、 前記シンボル表にある複数のエントリを対応する少なく
    とも一つのプログラム・テンプレートを少なくとも一つ
    組み合わせ、それによって、コンパイルされネットワー
    ク・アプリケーションの一部を形成するために適する、
    少なくとも一つの前記ソースファイルを作成する手段
    と、を備える計算機装置。
JP9178588A 1996-07-03 1997-07-03 分散オブジェクトシステムの応用分野におけるコード生成器 Pending JPH10111802A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/674828 1996-07-03
US08/674,828 US5860004A (en) 1996-07-03 1996-07-03 Code generator for applications in distributed object systems

Publications (1)

Publication Number Publication Date
JPH10111802A true JPH10111802A (ja) 1998-04-28

Family

ID=24708039

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9178588A Pending JPH10111802A (ja) 1996-07-03 1997-07-03 分散オブジェクトシステムの応用分野におけるコード生成器

Country Status (3)

Country Link
US (1) US5860004A (ja)
EP (1) EP0817033A3 (ja)
JP (1) JPH10111802A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000047888A (ja) * 1998-07-31 2000-02-18 Digital Vision Laboratories:Kk コンピュータ、並列分散システムおよび機能呼び出し方法
US6996801B2 (en) 2000-07-14 2006-02-07 Nec Corporation System and method for automatically generating program
JP2009048485A (ja) * 2007-08-21 2009-03-05 Ricoh Co Ltd 情報処理装置、情報処理方法、情報処理プログラム、及び情報処理プログラムを記録する記録媒体
JP2011521339A (ja) * 2008-05-14 2011-07-21 エアバス オペラシオン 共同サービス向けワークショップにおけるプロセス管理方法
JP2011521340A (ja) * 2008-05-14 2011-07-21 エアバス オペラシオン 共同サービス指向ワークショップにおけるデータのトレーサビリティのための方法

Families Citing this family (131)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5875331A (en) * 1994-09-30 1999-02-23 International Business Machines Corp. System and method for generating target language code utilizing an object oriented code generator
SE506535C2 (sv) * 1995-06-16 1998-01-12 Ericsson Telefon Ab L M Metod och anordning för att härleda instansinformation i ett informationshanterande system
US6487607B1 (en) 1998-02-26 2002-11-26 Sun Microsystems, Inc. Methods and apparatus for remote method invocation
US6438614B2 (en) 1998-02-26 2002-08-20 Sun Microsystems, Inc. Polymorphic token based control
US6938263B2 (en) 1996-04-23 2005-08-30 Sun Microsystems, Inc. System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space
US6237024B1 (en) 1998-03-20 2001-05-22 Sun Microsystem, Inc. Method and apparatus for the suspension and continuation of remote processes
US6393497B1 (en) * 1998-03-20 2002-05-21 Sun Microsystems, Inc. Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system
US6247026B1 (en) 1996-10-11 2001-06-12 Sun Microsystems, Inc. Method, apparatus, and product for leasing of delegation certificates in a distributed system
US6463446B1 (en) 1998-02-26 2002-10-08 Sun Microsystems, Inc. Method and apparatus for transporting behavior in an event-based distributed system
US6226746B1 (en) 1998-03-20 2001-05-01 Sun Microsystems, Inc. Stack-based system and method to combine security requirements of methods
US6182083B1 (en) 1997-11-17 2001-01-30 Sun Microsystems, Inc. Method and system for multi-entry and multi-template matching in a database
US6446070B1 (en) * 1998-02-26 2002-09-03 Sun Microsystems, Inc. Method and apparatus for dynamic distributed computing over a network
US6138238A (en) 1997-12-11 2000-10-24 Sun Microsystems, Inc. Stack-based access control using code and executor identifiers
US6578044B1 (en) * 1997-11-17 2003-06-10 Sun Microsystems, Inc. Method and system for typesafe attribute matching
US6708171B1 (en) 1996-04-23 2004-03-16 Sun Microsystems, Inc. Network proxy
US6560656B1 (en) 1998-02-26 2003-05-06 Sun Microsystems, Inc. Apparatus and method for providing downloadable code for use in communicating with a device in a distributed system
US6598094B1 (en) 1998-03-20 2003-07-22 Sun Microsystems, Inc. Method and apparatus for determining status of remote objects in a distributed system
US6421704B1 (en) 1998-03-20 2002-07-16 Sun Microsystems, Inc. Method, apparatus, and product for leasing of group membership in a distributed system
US6272559B1 (en) 1997-10-15 2001-08-07 Sun Microsystems, Inc. Deferred reconstruction of objects and remote loading for event notification in a distributed system
US6466947B2 (en) 1998-03-20 2002-10-15 Sun Microsystems, Inc. Apparatus and method for dynamically verifying information in a distributed system
US6832223B1 (en) * 1996-04-23 2004-12-14 Sun Microsystems, Inc. Method and system for facilitating access to a lookup service
US6185611B1 (en) 1998-03-20 2001-02-06 Sun Microsystem, Inc. Dynamic lookup service in a distributed system
JP3763937B2 (ja) * 1996-06-28 2006-04-05 富士通株式会社 オブジェクト指向プログラミング装置、およびオブジェクト結合プログラム記憶媒体
US5991535A (en) * 1996-07-03 1999-11-23 Sun Microsystems, Inc. Visual composition tool for constructing application programs using distributed objects on a distributed object network
US5949998A (en) * 1996-07-03 1999-09-07 Sun Microsystems, Inc. Filtering an object interface definition to determine services needed and provided
US6728737B2 (en) 1996-10-11 2004-04-27 Sun Microsystems, Inc. Method and system for leasing storage
US5832529A (en) 1996-10-11 1998-11-03 Sun Microsystems, Inc. Methods, apparatus, and product for distributed garbage collection
US6237009B1 (en) 1996-10-11 2001-05-22 Sun Microsystems, Inc. Lease renewal service
US5999988A (en) * 1997-03-31 1999-12-07 Sun Microsystems, Inc. Method and apparatus for generating and employing a run-time generated stub to reference an object in object oriented systems
US5978579A (en) * 1997-08-12 1999-11-02 International Business Machines Corporation Architecture for customizable component system
US5970252A (en) * 1997-08-12 1999-10-19 International Business Machines Corporation Method and apparatus for loading components in a component system
US6865734B2 (en) * 1997-10-06 2005-03-08 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6253256B1 (en) 1997-10-15 2001-06-26 Sun Microsystems, Inc. Deferred reconstruction of objects and remote loading in a distributed system
US6125400A (en) * 1997-11-10 2000-09-26 International Business Machines Corporation Method and system of running object oriented programs across a network through compression and distillation of remote method invocation
US6604127B2 (en) 1998-03-20 2003-08-05 Brian T. Murphy Dynamic lookup service in distributed system
KR20010034514A (ko) 1998-02-26 2001-04-25 케네쓰 올센 원격 메소드를 식별하는 해시 판정 방법 및 시스템
WO1999049387A1 (fr) * 1998-03-20 1999-09-30 Information System Development Institute Dispositif et procede servant a produire un logiciel
US6222916B1 (en) * 1998-05-22 2001-04-24 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for introducing and modifying telecommunications services
US6490623B1 (en) * 1998-08-24 2002-12-03 International Business Machines Corporation System, method and computer readable code for encapsulating system, language and device independent communications socket functionality in a lightweight uniform communications object model
US6167563A (en) * 1998-09-17 2000-12-26 Unisys Corporation Method and system for building components in a framework useful in developing integrated business-centric applications
US7039673B1 (en) * 1998-12-24 2006-05-02 Computer Associates Think, Inc. Method and apparatus for dynamic command extensibility in an intelligent agent
US6421739B1 (en) * 1999-01-30 2002-07-16 Nortel Networks Limited Fault-tolerant java virtual machine
US6421821B1 (en) * 1999-03-10 2002-07-16 Ronald J. Lavallee Flow chart-based programming method and system for object-oriented languages
US6347397B1 (en) * 1999-03-29 2002-02-12 International Business Machines Corporation System, method, and program for providing an object-oriented install architecture
US6434742B1 (en) * 1999-05-10 2002-08-13 Lucent Technologies Inc. Symbol for automatically renaming symbols in files during the compiling of the files
US6560633B1 (en) 1999-06-10 2003-05-06 Bow Street Software, Inc. Method for creating network services by transforming an XML runtime model in response to an iterative input process
US6877163B1 (en) 1999-06-14 2005-04-05 Sun Microsystems, Inc. Method and system for dynamic proxy classes
US7152228B2 (en) * 1999-07-08 2006-12-19 Science Applications International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
US6760912B1 (en) 1999-08-03 2004-07-06 International Business Machines Corporation Determining browser type in an open Java environment
WO2001022228A1 (en) * 1999-09-17 2001-03-29 Nortel Networks Limited System and method for producing a verification system for verifying procedure interfaces
AU7993900A (en) 1999-10-05 2001-05-10 Togethersoft Corporation Method for generating and defining a pattern
US6865732B1 (en) * 1999-11-01 2005-03-08 Hewlett-Packard Development Company, L.P. Providing an embedded application specific web server
US6976258B1 (en) 1999-11-30 2005-12-13 Ensim Corporation Providing quality of service guarantees to virtual hosts
US6973639B2 (en) * 2000-01-25 2005-12-06 Fujitsu Limited Automatic program generation technology using data structure resolution unit
US6711607B1 (en) 2000-02-04 2004-03-23 Ensim Corporation Dynamic scheduling of task streams in a multiple-resource system to ensure task stream quality of service
US6560613B1 (en) * 2000-02-08 2003-05-06 Ensim Corporation Disambiguating file descriptors
US6754716B1 (en) 2000-02-11 2004-06-22 Ensim Corporation Restricting communication between network devices on a common network
US7343421B1 (en) * 2000-02-14 2008-03-11 Digital Asset Enterprises Llc Restricting communication of selected processes to a set of specific network addresses
US6948003B1 (en) 2000-03-15 2005-09-20 Ensim Corporation Enabling a service provider to provide intranet services
US7577834B1 (en) 2000-05-09 2009-08-18 Sun Microsystems, Inc. Message authentication using message gates in a distributed computing environment
US7016966B1 (en) 2000-05-09 2006-03-21 Sun Microsystems, Inc. Generating results gates in a distributed computing environment
US6792466B1 (en) 2000-05-09 2004-09-14 Sun Microsystems, Inc. Trusted construction of message endpoints in a distributed computing environment
US7370091B1 (en) 2000-05-09 2008-05-06 Sun Microsystems, Inc. Method and apparatus for obtaining space advertisements
US6850979B1 (en) 2000-05-09 2005-02-01 Sun Microsystems, Inc. Message gates in a distributed computing environment
US7243356B1 (en) 2000-05-09 2007-07-10 Sun Microsystems, Inc. Remote method invocation with secure messaging in a distributed computing environment
US7080078B1 (en) 2000-05-09 2006-07-18 Sun Microsystems, Inc. Mechanism and apparatus for URI-addressable repositories of service advertisements and other content in a distributed computing environment
US6862594B1 (en) 2000-05-09 2005-03-01 Sun Microsystems, Inc. Method and apparatus to discover services using flexible search criteria
US6950875B1 (en) 2000-05-09 2005-09-27 Sun Microsystems, Inc. Message conductors in a distributed computing environment
US6789077B1 (en) 2000-05-09 2004-09-07 Sun Microsystems, Inc. Mechanism and apparatus for web-based searching of URI-addressable repositories in a distributed computing environment
US6898618B1 (en) 2000-05-09 2005-05-24 Sun Microsystems, Inc. Client-specified display services in a distributed computing environment
US7716492B1 (en) 2000-05-09 2010-05-11 Oracle America, Inc. Method and apparatus to obtain service capability credentials
US8082491B1 (en) 2000-05-09 2011-12-20 Oracle America, Inc. Dynamic displays in a distributed computing environment
US7188251B1 (en) 2000-05-09 2007-03-06 Sun Microsystems, Inc. System and method for secure message-based leasing of resources in a distributed computing environment
US7065574B1 (en) 2000-05-09 2006-06-20 Sun Microsystems, Inc. Messaging system using pairs of message gates in a distributed computing environment
US6970869B1 (en) 2000-05-09 2005-11-29 Sun Microsystems, Inc. Method and apparatus to discover services and negotiate capabilities
US6868447B1 (en) 2000-05-09 2005-03-15 Sun Microsystems, Inc. Mechanism and apparatus for returning results of services in a distributed computing environment
US6918084B1 (en) 2000-05-09 2005-07-12 Sun Microsystems, Inc. Spawning new repository spaces using information provided in advertisement schema messages
US7200848B1 (en) 2000-05-09 2007-04-03 Sun Microsystems, Inc. Migrating processes using data representation language representations of the processes in a distributed computing environment
US6643650B1 (en) 2000-05-09 2003-11-04 Sun Microsystems, Inc. Mechanism and apparatus for using messages to look up documents stored in spaces in a distributed computing environment
US7072967B1 (en) 2000-05-09 2006-07-04 Sun Microsystems, Inc. Efficient construction of message endpoints
US7395333B1 (en) 2000-05-09 2008-07-01 Sun Microsystems, Inc. Method and apparatus to obtain negotiated service advertisement
US8001232B1 (en) 2000-05-09 2011-08-16 Oracle America, Inc. Event message endpoints in a distributed computing environment
US7010573B1 (en) 2000-05-09 2006-03-07 Sun Microsystems, Inc. Message gates using a shared transport in a distributed computing environment
US6789126B1 (en) 2000-05-09 2004-09-07 Sun Microsystems, Inc. Addressing message gates in a distributed computing environment
US8135796B1 (en) 2000-05-09 2012-03-13 Oracle America, Inc. Mechanism and apparatus for accessing and addressing services in a distributed computing environment
US6973493B1 (en) 2000-05-09 2005-12-06 Sun Microsystems, Inc. Mechanism and apparatus for security of newly spawned repository spaces in a distributed computing environment
US6917976B1 (en) 2000-05-09 2005-07-12 Sun Microsystems, Inc. Message-based leasing of resources in a distributed computing environment
US7260543B1 (en) 2000-05-09 2007-08-21 Sun Microsystems, Inc. Automatic lease renewal with message gates in a distributed computing environment
US6985937B1 (en) 2000-05-11 2006-01-10 Ensim Corporation Dynamically modifying the resources of a virtual server
US6907421B1 (en) 2000-05-16 2005-06-14 Ensim Corporation Regulating file access rates according to file type
US6760815B1 (en) * 2000-06-02 2004-07-06 Sun Microsystems, Inc. Caching mechanism for a virtual heap
US6763440B1 (en) 2000-06-02 2004-07-13 Sun Microsystems, Inc. Garbage collection using nursery regions for new objects in a virtual heap
US6865657B1 (en) 2000-06-02 2005-03-08 Sun Microsystems, Inc. Garbage collector for a virtual heap
US6854115B1 (en) 2000-06-02 2005-02-08 Sun Microsystems, Inc. Process persistence in a virtual machine
US6874148B1 (en) * 2000-06-14 2005-03-29 National Instruments Corporation System and method for exporting a graphical program to a shared library
US7143024B1 (en) 2000-07-07 2006-11-28 Ensim Corporation Associating identifiers with virtual processes
US6909691B1 (en) 2000-08-07 2005-06-21 Ensim Corporation Fairly partitioning resources while limiting the maximum fair share
DE10041072A1 (de) * 2000-08-22 2002-03-14 Siemens Ag Verfahren zur automatischen Erzeugung von Programmcode
US6732211B1 (en) 2000-09-18 2004-05-04 Ensim Corporation Intercepting I/O multiplexing operations involving cross-domain file descriptor sets
US20020091872A1 (en) * 2000-11-29 2002-07-11 Bourke-Dunphy Erin M. Virtualization of an integrated system across one or more computers
US7219354B1 (en) 2000-12-22 2007-05-15 Ensim Corporation Virtualizing super-user privileges for multiple virtual processes
CA2704080C (en) * 2001-07-26 2012-08-28 Irise System and process for cooperatively programming a simulation program of a computer application to be developed
JP4045399B2 (ja) * 2001-08-24 2008-02-13 富士ゼロックス株式会社 構造化文書管理装置及び構造化文書管理方法
US7756969B1 (en) 2001-09-07 2010-07-13 Oracle America, Inc. Dynamic provisioning of identification services in a distributed system
US7660887B2 (en) * 2001-09-07 2010-02-09 Sun Microsystems, Inc. Systems and methods for providing dynamic quality of service for a distributed system
US20030051029A1 (en) * 2001-09-07 2003-03-13 Reedy Dennis G. Dynamic provisioning of sevice components in a distributed system
WO2003036469A2 (en) * 2001-10-26 2003-05-01 Codagen Technologies Inc. A template-based method and system for reverse engineering
JP2005510790A (ja) * 2001-11-28 2005-04-21 ボウ・ストリート・ソフトウェア・インコーポレーテッド ソフトウェア・オブジェクトを作成する方法と装置
US20040015835A1 (en) * 2002-01-24 2004-01-22 Sasank Kotnur Dynamic distribution and integration of computer code objects
US20030192038A1 (en) * 2002-04-09 2003-10-09 Thomas Hagmann Linking data objects to a project development system
US7024664B2 (en) * 2002-04-22 2006-04-04 Intel Corporation Symbolic assembly language
EP1387261A1 (fr) * 2002-07-30 2004-02-04 Sereneo Logiciel de generation de code d'application informatique et langage de description de logiciel
US7571172B2 (en) * 2003-05-06 2009-08-04 Novell, Inc. Methods, data stores, data structures, and systems for electronic identity aggregation
US7433878B2 (en) * 2003-06-23 2008-10-07 American Express Travel Related Services Company, Inc. Method and system for interfacing with accounting systems
US7380235B1 (en) * 2003-06-27 2008-05-27 Microsoft Corporation Application program interface call replay tool
US7610587B2 (en) * 2003-11-05 2009-10-27 Hewlett-Packard Development Company, L.P. System and method for creating a best-match object at run time
US7376945B1 (en) * 2003-12-02 2008-05-20 Cisco Technology, Inc. Software change modeling for network devices
US7792874B1 (en) 2004-01-30 2010-09-07 Oracle America, Inc. Dynamic provisioning for filtering and consolidating events
US7305652B2 (en) * 2004-03-11 2007-12-04 International Business Machines Corporation Standard application development template
US7305653B2 (en) * 2004-03-11 2007-12-04 International Business Machines Corporation Standard application development framework
US7493596B2 (en) * 2004-06-30 2009-02-17 International Business Machines Corporation Method, system and program product for determining java software code plagiarism and infringement
US7975256B2 (en) * 2004-06-30 2011-07-05 International Business Machines Corporation Optimizing application performance through data mining
US7571430B2 (en) * 2005-01-24 2009-08-04 Lsi Logic Corporation Adaptive dispatch table based on templates
US7921216B2 (en) * 2005-02-01 2011-04-05 Microsoft Corporation System and method for building and using communication binding objects
US7761848B1 (en) 2005-03-15 2010-07-20 Open Invention Network, Llc Code generator tool for building software applications with reusable components
DE202006000135U1 (de) * 2006-01-05 2006-04-20 Framework Systems Gmbh Vorrichtung zum Erzeugen von Programmcode eines Nutzerprogrammes
US20080126376A1 (en) * 2006-09-22 2008-05-29 Avraham Leff Enabling multi-view applications based on a relational state machine paradigm
US8065658B1 (en) * 2007-08-07 2011-11-22 Network Appliance, Inc. Tool for visualizing software architecture
US8631385B2 (en) 2009-02-26 2014-01-14 International Business Machines Corporation Optimizing code generation system with input data integration
EP2625606A4 (en) 2010-10-08 2014-11-26 Irise SYSTEM AND METHOD FOR EXTENDING A VISUALIZATION PLATFORM
US9672030B2 (en) 2015-10-14 2017-06-06 International Business Machines Corporation Generating comprehensive symbol tables for source code files

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63181033A (ja) * 1987-01-23 1988-07-26 Hitachi Ltd プログラム自動生成方式
US5283900A (en) * 1989-10-02 1994-02-01 Spectron Microsystems, Inc. Real-time operating system and virtual digital signal processor for the control of a digital signal processor
GB9105278D0 (en) * 1990-04-27 1991-04-24 Sun Microsystems Inc Method and apparatus for implementing object-oriented programming using unmodified c for a window-based computer system
US5339419A (en) * 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
US5699310A (en) * 1990-06-29 1997-12-16 Dynasty Technologies, Inc. Method and apparatus for a fully inherited object-oriented computer system for generating source code from user-entered specifications
EP0501610B1 (en) * 1991-02-25 1999-03-17 Hewlett-Packard Company Object oriented distributed computing system
JP3055970B2 (ja) * 1991-06-20 2000-06-26 富士通株式会社 オブジェクト指向言語間インタフェース実現方法および装置
US5261098A (en) * 1991-08-28 1993-11-09 Sun Microsystems, Inc. Method and apparatus for deriving object type and obtaining object type attribute values
GB2270242A (en) * 1992-08-29 1994-03-02 Ibm A method of editing for an object oriented computer system
US5339433A (en) * 1992-11-19 1994-08-16 Borland International, Inc. Symbol browsing in an object-oriented development system
US5671415A (en) * 1992-12-07 1997-09-23 The Dow Chemical Company System and method for facilitating software development
CA2128387C (en) * 1993-08-23 1999-12-28 Daniel F. Hurley Method and apparatus for configuring computer programs from available subprograms
US5875331A (en) * 1994-09-30 1999-02-23 International Business Machines Corp. System and method for generating target language code utilizing an object oriented code generator
US5659735A (en) * 1994-12-09 1997-08-19 Object Technology Licensing Corp. Object-oriented system for program version and history database management system for various program components
US5692183A (en) * 1995-03-31 1997-11-25 Sun Microsystems, Inc. Methods and apparatus for providing transparent persistence in a distributed object operating environment
US5724589A (en) * 1995-10-13 1998-03-03 Borland International, Inc. Development system with a property-method-event programming model for developing context-free reusable software components
US5721911A (en) * 1996-06-25 1998-02-24 International Business Machines Corporation Mechanism for metadata for an information catalog system

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000047888A (ja) * 1998-07-31 2000-02-18 Digital Vision Laboratories:Kk コンピュータ、並列分散システムおよび機能呼び出し方法
US6996801B2 (en) 2000-07-14 2006-02-07 Nec Corporation System and method for automatically generating program
JP2009048485A (ja) * 2007-08-21 2009-03-05 Ricoh Co Ltd 情報処理装置、情報処理方法、情報処理プログラム、及び情報処理プログラムを記録する記録媒体
JP2011521339A (ja) * 2008-05-14 2011-07-21 エアバス オペラシオン 共同サービス向けワークショップにおけるプロセス管理方法
JP2011521340A (ja) * 2008-05-14 2011-07-21 エアバス オペラシオン 共同サービス指向ワークショップにおけるデータのトレーサビリティのための方法

Also Published As

Publication number Publication date
US5860004A (en) 1999-01-12
EP0817033A3 (en) 2003-04-23
EP0817033A2 (en) 1998-01-07

Similar Documents

Publication Publication Date Title
JPH10111802A (ja) 分散オブジェクトシステムの応用分野におけるコード生成器
US9086931B2 (en) System for translating diverse programming languages
US7533365B1 (en) Development system with methodology for run-time restoration of UML model from program code
US9965259B2 (en) System for translating diverse programming languages
US6189138B1 (en) Visual composition tool for constructing application programs using distributed objects on a distributed object network
US8745584B2 (en) Dependency injection by static code generation
US6063128A (en) Object-oriented computerized modeling system
US8332828B2 (en) System for translating diverse programming languages
US5815415A (en) Computer system for portable persistent modeling
US5920868A (en) Cataloging apparatus for facilitating the re-use of distributed objects in a distributed object system
US6230117B1 (en) System for automated interface generation for computer programs operating in different environments
US6549955B2 (en) System and method for dynamic generation of remote proxies
US8656372B2 (en) System for translating diverse programming languages
US20080270974A1 (en) Enterprise JavaBeans Metadata Model
US20090254881A1 (en) Code generation techniques for administrative tasks
US20090018822A1 (en) Methods and apparatus for business rules authoring and operation employing a customizable vocabulary
US20100287528A1 (en) Systems and Methods for Modifying Code Generation Templates
JP2002525744A (ja) テキスト・オブジェクトのコンパイル方法およびシステム
US7665062B1 (en) System and methodology for design-time dynamic class type construction
US7657869B2 (en) Integration of external tools into an existing design environment
Cortesi Pyinstaller manual
Gschwind Adaptation and composition techniques for component-based software engineering
Feigenbaum Go for Java Programmers
US20100023923A1 (en) Method for medeling objects in a hetrogenious computing environment
Chen et al. RoadMapAssembler: A new pattern-based J2EE development tool