(57)【要約】１つのＥＪＢクラス又は複数のＥＪＢクラスと、自身の上で動作するＥＪＢコンパイラを含むサーバと、特定の時点又は特定のサーバ・バージョンに対するＥＪＢクラスの第１のスナップショット及び後の時点又は後続のサーバ・バージョンに対するＥＪＢクラスの第２のスナップショットを自動的に求めて、該ＥＪＢクラスに対してＥＪＢコンパイラを呼び出すべきかどうかを決定するロジックとを含む、ＥＪＢコンパイラをいつ実行する必要があるかを決定するためのシステム。
2006520973.tif 000002
【特許請求の範囲】
【請求項１】
ＥＪＢコンパイラをいつ実行する必要があるかを決定するためのシステムであって、
１つのＥＪＢクラス又は複数のＥＪＢクラス及び自身の上で動作するＥＪＢコンパイラを含むサーバと、
特定の時点又は特定のサーバ・バージョンに対する前記ＥＪＢクラスの第１のスナップショットと、後の時点又は後続のサーバ・バージョンに対する前記ＥＪＢクラスの第２のスナップショットとを自動的に求めて、前記第１及び第２のスナップショットを比較し、前記ＥＪＢクラスに対して前記ＥＪＢコンパイラを呼び出すべきかどうかを決定するロジックと、
を含むシステム。
【請求項２】
前記ロジックが、各ＥＪＢクラスに対して、
現在のサーバ・バージョンを取得して、これをスナップショットファイルに格納する段階と、
各従属ＥＪＢクラスに対して一意のハッシュを計算する段階と、
完全修飾クラス名を計算された前記ハッシュと共に前記スナップショットファイルに記録する段階と、
各デプロイメントディスクリプタに対して一意のハッシュを計算する段階と、
前記デプロイメントディスクリプタ名を計算された前記ハッシュと共に前記スナップショットファイルに記録する段階と、
前記スナップショットファイルを前記ＥＪＢクラスと関連付ける段階と、
を実行する請求項１に記載のシステム。
【請求項３】
各従属ＥＪＢクラスに対して一意のハッシュを計算する前記段階が、そのクラスに対する、パブリックメソッドシグネチャ及びパブリックフィールドの宣言に基づいている請求項２に記載のシステム。
【請求項４】
各デプロイメントディスクリプタに対して一意のハッシュを計算する前記段階が、前記デプロイメントディスクリプタファイルのバイトに基づいている請求項２に記載のシステム。
【請求項５】
前記スナップショットファイルを前記ＥＪＢクラスに関連付ける前記段階が、コンパイルされたＥＪＢ−ＪＡＲファイル内に前記スナップショットファイルを格納する段階を含む請求項２に記載のシステム。
【請求項６】
ＥＪＢコンパイラをいつ実行する必要があるかを決定するための方法であって、
１つのＥＪＢクラス又は複数のＥＪＢクラス及び自身の上で動作するＥＪＢコンパイラとを含むサーバを準備する段階と、
特定の時点又は特定のサーバ・バージョンに対する前記ＥＪＢクラスの第１のスナップショットと、後の時点又は後続のサーバ・バージョンに対する前記ＥＪＢクラスの第２のスナップショットとを自動的に求めて、前記第１及び第２のスナップショットを比較して、前記ＥＪＢクラスに対して前記ＥＪＢコンパイラを呼び出すべきかどうかを決定する段階と、
を含む方法。
【請求項７】
前記決定する段階が更に、
現在のサーバ・バージョンを取得して、これをスナップショットファイルに格納する段階と、
各従属ＥＪＢクラスに対して一意のハッシュを計算する段階と、
完全修飾クラス名を計算された前記ハッシュと共に前記スナップショットファイルに記録する段階と、
各デプロイメントディスクリプタに対して一意のハッシュを計算する段階と、
前記デプロイメントディスクリプタ名を計算された前記ハッシュと共に前記スナップショットファイルに記録する段階と、
前記スナップショットファイルを前記ＥＪＢクラスと関連付ける段階と、
を含む請求項６に記載の方法。
【請求項８】
各従属ＥＪＢクラスに対して一意のハッシュを計算する前記段階が、そのクラスに対するパブリックメソッドシグネチャ及びパブリックフィールドの宣言に基づいている請求項７に記載の方法。
【請求項９】
各デプロイメントディスクリプタに対して一意のハッシュを計算する前記段階が、前記デプロイメントディスクリプタファイルのバイトに基づいている請求項７に記載の方法。
【請求項１０】
前記スナップショットファイルを前記ＥＪＢクラスに関連付ける前記段階が、前記スナップショットファイルをコンパイルされたＥＪＢ−ＪＡＲファイル内に格納する段階を含む請求項７に記載の方法。
【請求項１１】
１つのＥＪＢクラス又は複数のＥＪＢクラス及び自身の上で動作するＥＪＢコンパイラとを含むサーバを準備する段階と、
特定の時点又は特定のサーバ・バージョンに対する前記ＥＪＢクラスの第１のスナップショットと、後の時点又は後続のサーバ・バージョンに対する前記ＥＪＢクラスの第２のスナップショットとを自動的に求めて、前記第１及び第２のスナップショットを比較し、前記ＥＪＢクラスに対して前記ＥＪＢコンパイラを呼び出すべきかどうかを決定する段階と、
を実行時にコンピュータに行わせる、格納された命令を含むコンピュータ可読媒体。
【請求項１２】
前記決定する段階が更に、
現在のサーバ・バージョンを取得して、これをスナップショットファイルに格納する段階と、
各従属ＥＪＢクラスに対して一意のハッシュを計算する段階と、
完全修飾クラス名を計算された前記ハッシュと共に前記スナップショットファイルに記録する段階と、
各デプロイメントディスクリプタに対して一意のハッシュを計算する段階と、
前記デプロイメントディスクリプタ名を計算された前記ハッシュと共に前記スナップショットファイルに記録する段階と、
前記スナップショットファイルを前記ＥＪＢクラスと関連付ける段階と、
を含む請求項１１に記載のコンピュータ可読媒体。
【請求項１３】
コンパイラをいつ実行する必要があるかを決定するための方法であって、
コンパイルされたコード及び自身の上で動作するコンパイラとを含むサーバを準備する段階と、
特定の時点又は特定のサーバ・バージョンに対する前記コンパイルされたコードの第１のスナップショットと、後の時点又は後続のサーバ・バージョンに対する前記コンパイルされたコードの第２のスナップショットとを自動的に求めて、前記第１及び第２のスナップショットを自動的に比較して、前記コンパイルされたコードに対して前記コンパイラを呼び出すべきかどうかを決定する段階と、
を含む方法。
【請求項１４】
前記コンパイラが、呼び出された時に前記コンパイルされたコードに対するラッパーコードを生成し且つコンパイルする請求項１３に記載の方法。
【請求項１５】
前記コンパイラが、呼び出された時に前記コンパイルされたコードを検証する請求項１３に記載の方法。
【請求項１６】
前記コンパイラが更に、呼び出された時に前記コンパイルされたコードに対して第２のコンパイラを呼び出す請求項１４に記載の方法。
【請求項１７】
ＥＪＢコンパイラをいつ実行する必要があるかを決定するための方法であって、
第１のＥＪＢクラス又は複数のＥＪＢクラス及び自身の上で動作するＥＪＢコンパイラとを含むサーバを準備する段階と、
特定の時点で前記第１のＥＪＢクラスの第１のスナップショットと、後の時点で第２のＥＪＢクラスの第２のスナップショットとを求める段階と、
を含み、
前記第２のＥＪＢクラスは前記後の時点でサーバにデプロイされ、前記第１及び第２のＥＪＢクラスは同じ完全修飾クラス名を有し、
前記方法が更に、
前記第１及び第２のスナップショットを比較して、前記第２のＥＪＢクラスに対して前記ＥＪＢコンパイラを呼び出すべきかどうかを決定する段階と、
を含む方法。
【請求項１８】
前記決定する段階、前記比較する段階、及び前記呼び出す段階が、ユーザが介在することなく自動的に実行される請求項１７に記載の方法。
【請求項１９】
前記第２のＥＪＢクラスに対して前記ＥＪＢコンパイラを呼び出す段階が、前記第２のＥＪＢクラスを検証する段階を含む請求項１７に記載の方法。
【請求項２０】
前記第２のＥＪＢクラスに対して前記ＥＪＢコンパイラを呼び出す段階が、前記第２のＥＪＢクラスに対するラッパークラスを生成する段階と、前記生成されたラッパークラスをコンパイルする段階を含む請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００３年２月２８日に出願された米国仮特許出願６０/４５０,６４５号（Ａｔｔｙ．Ｄｏｃｋｅｔ  Ｎｏ．ＢＥＡＳ−０１４１３ＵＳ０）及び２００４年２月＿＿日に出願された米国特許出願Ｎｏ．＿＿＿＿（Ａｔｔｙ．Ｄｏｃｋｅｔ Ｎｏ．ＢＥＡＳ−０１４１３ＵＳ１）に対する優先権を主張する。
【０００２】
本発明は、全体的には、アプリケーションサーバ及びソフトウェア開発システムに関し、より具体的には、ＥＪＢコンパイラをいつ実行することが必要であるかを決定するためのシステム及び方法に関する。
【背景技術】
【０００３】
例えば、サーバ内でデプロイされることになるＥＪＢ用の代表的アプリケーションサーバ、例えばＢＥＡ  ｓｙｓｔｅｍから入手可能なＷｅｂＬｏｇｉｃ  Ｓｅｒｖｅｒ製品において、ＥＪＢコンパイラは、デプロイする前にＥＪＢを含むｅｊｂ−ｊａｒファイルに対して呼び出される必要がある。ｅｊｂ−ｊａｒファイル中の各ＥＪＢに対して、ＥＪＢコンパイラは、ＥＪＢの検証、ＥＪＢ用のラッパークラス生成、該生成されたラッパークラスのコンパイル、及び必要時にＲＭＩコンパイラの呼び出しを行う役割を有する。これは、ＥＪＢ当り数秒のオーダーであり、場合によっては時間のかかる処理となる。多数のＥＪＢを備えたｅｊｂ−ｊａｒファイルにおいては、この合計の時間はかなりのものとなる可能性がある。
【０００４】
更に悪いことには、ｅｊｂ−ｊａｒファイルが更新されるごとに、ＥＪＢコンパイラを実行する必要がある場合が多い。ｅｊｂ−ｊａｒファイルは通常、これが作成されるときに数回更新される。問題を更に複雑にしているのは、ＥＪＢコンパイラが、該ＥＪＢコンパイラを実際に呼び出す必要があるか否かを決定するロジックを通常は持っていないスクリプトを介して呼び出される場合が多いことである。このことは、スクリプトが、ＥＪＢコンパイラを必要としない場合でもこれを呼び出して、有用な時間を浪費することを意味している。
【０００５】
更に、ＥＪＢコンパイラによって生成されたクラスは、新しいサーバコードと互換性がない可能性があるので、サーバがアップグレードされた後にＥＪＢコンパイラを実行することが必要である。新しいバージョンのサーバへのアップグレード後、ＥＪＢをデプロイする前に、ユーザがＥＪＢコンパイラを実行することを忘れた場合には、結果として予期しないエラーが生じる恐れがある。
【０００６】
別の問題は、ＥＪＢの更新後、ユーザがＥＪＢに対してＥＪＢコンパイラを実行することを忘れる可能性があることである。また、ＥＪＢコンパイラによって生成されるクラスは、このＥＪＢとはもはや互換性がないので、これは予期しないエラーにつながる可能性がある。
【発明の開示】
【０００７】
本発明は、ＥＪＢコンパイラをいつ実行する必要があるかを決定するためのシステム及び方法を提供する。ＥＪＢを再コンパイルする必要があるか否かを決定するためには、ＥＪＢの状態及び最後にコンパイルされた時のサーバのバージョンを知る必要がある。この情報が得られれば、これを現在のＥＪＢの状態及び現在のサーバのバージョンと比較して、ＥＪＢコンパイラを再実行させる必要があるか否かを決定することができる。１つの実施形態によれば、本発明は、以下の段階：現在のサーバのバージョンを取得し、これをファイル内に記録する段階と、各従属ＥＪＢクラスに対して、そのクラスに対するパブリックメソッドシグネチャ及びパブリックフィールドの宣言に基づいて一意のハッシュを計算する段階と、完全修飾クラス名を計算されたハッシュと共にファイルに記録する段階と、ＥＪＢの各デプロイメントディスクリプタに対して、ファイルのバイトに基づいて一意のハッシュを計算する段階と、デプロイメントディスクリプタ名を計算されたハッシュと共にクラス名及びハッシュを含むファイルに記録する段階と、及びハッシュを含むファイルをコンパイルされたｅｊｂ−ｊａｒファイル内に格納する段階とを含む。
【発明を実施するための最良の形態】
【０００８】
本発明は、ＥＪＢコンパイラを実行する必要があるタイミングを求めるためのシステム及び方法を提供する。ＥＪＢを再コンパイルする必要があるか否かを決定するためには、システムは、ＥＪＢの状態及びＥＪＢが最後にコンパイルされた時のサーバのバージョンを知る必要がある。この情報が得られると、これを現在のＥＪＢ状態及び現在のサーバのバージョンと比較して、ＥＪＢコンパイラを再実行させる必要があるか否かを判断することができる。ＥＪＢに対するある変更だけが、ＥＪＢコンパイラを実行することを必要とするので、比較を行うのは、ＥＪＢコンパイラを再実行することが必要となる属性に限定することができる。１つの実施形態では、以下のような変更がＥＪＢの再コンパイルを必要とする。
ＥＪＢにおけるデプロイメントディスクリプタへの何らかの変更。
従属ＥＪＢクラス（即ち、ＥＪＢ実装クラス、インターフェース、又はプライマリキークラス）のパブリックメソッドシグネチャ（パブリックメソッドの追加又は削除を含む）に対する何らかの変更。
従属ＥＪＢクラスのパブリックフィールド宣言（パブリックフィールドの追加又は削除を含む）への何らかの変更。
【０００９】
ＥＪＢコンパイラをいつ再実行する必要があるかを決定することができることによって、システムは、サーバの内部で必要な時にコンパイラを自動で再実行できるようになる。例えば、ユーザがサーバをアップグレードし、且つＥＪＢコンパイラの再実行を忘れた場合には、システムは、ＥＪＢコンパイラの再実行が必要であることを検出して、ＥＪＢがサーバにデプロイされたときにユーザに対して自動的にこれを実行することができる。同様に、ＥＪＢの更新後、ユーザがコンパイラの再実行を忘れた場合には、システムはまた、ＥＪＢコンパイラを自動的に実行することができる。これは、ＥＪＢコンパイラによって生成されるクラスと互換性がないことに起因して、予期しないエラーが起こりうる状況を回避するので、極めて有用である。
【００１０】
ＥＪＢコンパイラアルゴリズム
図１は、本発明の１つの実施形態による、システムが用いるアルゴリズム又は処理を表すフローチャートを示している。アルゴリズムは、ＥＪＢコンパイラが呼び出される度に実行される。これは、ＥＪＢの相対的なスナップショット及びＥＪＢがコンパイルされた時のサーバのバージョンを提供する。図１に示されるように、アルゴリズム又は処理は、以下のステップを含む。
１．現在のサーバのバージョンを取得し、これをファイル内に記録する。
２．各従属ＥＪＢクラスに対して、そのクラスに対するパブリックメソッドシグネチャ及びパブリックフィールド宣言に基づいて、一意のハッシュを計算する。
３．完全修飾クラス名を計算されたハッシュと共にファイルに記録する。
４．ＥＪＢの各デプロイメントディスクリプタに対して、ファイルのバイトに基づいて一意のハッシュを計算する。
５．クラス名及びハッシュを含むファイルにデプロイメントディスクリプタ名を計算されたハッシュと共に記録する。
６．コンパイルされたｅｊｂ−ｊａｒファイル中にハッシュを含むファイルを格納する。
【００１１】
このスナップショットでは、システムは、所与のＥＪＢに対してＥＪＢコンパイラを再実行する必要があるかどうかを後で決めることができる。ＥＪＢの現在のスナップショットが、ＥＪＢが最後にコンパイルされた時のスナップショットと同じであれば、再コンパイルする必要はない。
【００１２】
本発明は、本開示の教示に従ってプログラムされる通常の汎用又は専用ディジタルコンピュータ又はマイクロプロセッサを用いて、好都合に実施することができる。適切なソフトウェアのコーディングは、ソフトウェア当業者には明白であるように、本開示の教示に基づいて熟練プログラマーにより容易に作製することができる。
【００１３】
幾つかの実施形態において、本発明は、コンピュータが本発明の処理のいずれかを実行するようプログラムするのに使用可能な命令を記憶媒体上又は記憶媒体中に格納したコンピュータプログラム製品を含む。記憶媒体は、フロッピー（登録商標）ディスク、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブ、及び磁気光ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリ装置、磁気又は光学カード、ナノシステム（分子メモリＩＣを含む）を含む任意の種類のディスク、或いは命令及び／又はデータを格納するのに好適な任意の種類の媒体又は装置を含むことができるが、これらに限定されるものではない。
【００１４】
本発明の上記説明は、例証及び説明の目的で提供されている。網羅的であること、又は本発明を開示された正確な形態に限定するものではない。多くの変更及び変形形態の実施は、当業者には明らかであろう。特に、本明細書に説明されている実施例は、本発明がウェブロジック環境でどのように用いることができるかを例証しているが、他のアプリケーションサーバ及びコンピュータ環境で用いて、本発明により恩恵が得られることは明らかであろう。
【００１５】
本実施形態は、本発明の原理及びその実施応用に関して最良の説明を行うために選択され説明されたが、これにより、他の当業者は種々の実施形態に対して、及び企図された特定の用途に適するような種々の変更により本発明を理解することができるようになる。本発明の範囲は、添付の請求項及びその均等物によって定義されるものとする。
【図面の簡単な説明】
【００１６】
【図１】本発明の１つの実施形態による、ＥＪＢコンパイラが呼び出される度に実行されるアルゴリズム又は処理を表すフローチャートを示す。
【図１】
2006520973.tif 000003
【国際調査報告】
2006520973.tif 000004