JPH11149374A - ポストプロセッサ及びポストプロセス方法並びにポストプロセッサを格納した記憶媒体 - Google Patents
ポストプロセッサ及びポストプロセス方法並びにポストプロセッサを格納した記憶媒体Info
- Publication number
- JPH11149374A JPH11149374A JP9331057A JP33105797A JPH11149374A JP H11149374 A JPH11149374 A JP H11149374A JP 9331057 A JP9331057 A JP 9331057A JP 33105797 A JP33105797 A JP 33105797A JP H11149374 A JPH11149374 A JP H11149374A
- Authority
- JP
- Japan
- Prior art keywords
- class
- byte code
- post
- change processing
- code
- 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
(57)【要約】
【課題】 既存のオブジェクト指向データベース管理シ
ステムにおいてJavaオブジェクトを管理するために
必要な処理を、Javaバイト・コードを解析するポス
トプロセッサで行う。 【解決手段】 クラスファイルを環境変数CLASSP
ATHで指定されたディレクトリからの相対パスで検索
するクラスファイル検索部12と、クラスファイルのバ
イト・コードを取得して解析するバイト・コード解析部
13と、クラス情報に基づいて、Javaオブジェクト
の永続化に必要な変更処理を行うクラス構造変更処理部
14と、変更処理を反映したバイト・コードを出力する
バイト・コード出力部15と、変更処理を反映したクラ
スのスキーマをデータベースに登録するスキーマ登録部
16とを備え、バイト・コード実行時にJavaオブジ
ェクトを永続オブジェクトとしてデータベースに格納し
たり、データベース中の永続オブジェクトを参照または
更新することを可能とする。
ステムにおいてJavaオブジェクトを管理するために
必要な処理を、Javaバイト・コードを解析するポス
トプロセッサで行う。 【解決手段】 クラスファイルを環境変数CLASSP
ATHで指定されたディレクトリからの相対パスで検索
するクラスファイル検索部12と、クラスファイルのバ
イト・コードを取得して解析するバイト・コード解析部
13と、クラス情報に基づいて、Javaオブジェクト
の永続化に必要な変更処理を行うクラス構造変更処理部
14と、変更処理を反映したバイト・コードを出力する
バイト・コード出力部15と、変更処理を反映したクラ
スのスキーマをデータベースに登録するスキーマ登録部
16とを備え、バイト・コード実行時にJavaオブジ
ェクトを永続オブジェクトとしてデータベースに格納し
たり、データベース中の永続オブジェクトを参照または
更新することを可能とする。
Description
【0001】
【発明の属する技術分野】本発明は、既存のオブジェク
ト指向データベース管理システムを利用してJavaオ
ブジェクトを永続化し、通常のJavaオブジェクトに
対する操作を行うプログラミング記述により永続オブジ
ェクトに対する操作を可能にするためのバイト・コード
を生成するJavaバイト・コードを解析するポストプ
ロセッサ及びポストプロセス方法並びにポストプロセッ
サを格納した記憶媒体に関する。
ト指向データベース管理システムを利用してJavaオ
ブジェクトを永続化し、通常のJavaオブジェクトに
対する操作を行うプログラミング記述により永続オブジ
ェクトに対する操作を可能にするためのバイト・コード
を生成するJavaバイト・コードを解析するポストプ
ロセッサ及びポストプロセス方法並びにポストプロセッ
サを格納した記憶媒体に関する。
【0002】
【従来の技術】近年、インターネット及びWorld
Wide Web(WWW)技術の広がりの中、これら
の技術に適したプログラミング言語Javaが急速に浸
透してきている。そして、企業のWebシステムにおい
てデータベースシステムが重要であることから、Jav
aオブジェクトを直接データベースへ格納し、検索する
手段が必要となってきた。
Wide Web(WWW)技術の広がりの中、これら
の技術に適したプログラミング言語Javaが急速に浸
透してきている。そして、企業のWebシステムにおい
てデータベースシステムが重要であることから、Jav
aオブジェクトを直接データベースへ格納し、検索する
手段が必要となってきた。
【0003】この場合、Javaがオブジェクト指向プ
ログラミング言語であることを踏まえると、オブジェク
ト指向データベース管理システムを使ってJavaオブ
ジェクトを管理する方法が親和性が高く、自然なことで
あると考えられている。そしてこれは、本格的なDBM
S(データベース管理システム)としての機能を備え、
実績のある既存のオブジェクト指向データベース管理シ
ステムをうまく活用すれば、早期に実現することが可能
である。その際、ソースプログラムのコンパイル時に、
クラス定義をデータベースに登録し、永続オブジェクト
操作のために必要なコードを挿入して実行プログラムを
生成する処理が必要になる。従来のこの種の技術として
は、例えば特開平8−241239号公報に開示された
技術がある。
ログラミング言語であることを踏まえると、オブジェク
ト指向データベース管理システムを使ってJavaオブ
ジェクトを管理する方法が親和性が高く、自然なことで
あると考えられている。そしてこれは、本格的なDBM
S(データベース管理システム)としての機能を備え、
実績のある既存のオブジェクト指向データベース管理シ
ステムをうまく活用すれば、早期に実現することが可能
である。その際、ソースプログラムのコンパイル時に、
クラス定義をデータベースに登録し、永続オブジェクト
操作のために必要なコードを挿入して実行プログラムを
生成する処理が必要になる。従来のこの種の技術として
は、例えば特開平8−241239号公報に開示された
技術がある。
【0004】しかし、Javaコンパイラを起動する前
のソースプログラムを解析し、必要なコードを挿入する
方法を採ると、元ソースとデバッグ情報との関係が崩れ
てしまっていた。
のソースプログラムを解析し、必要なコードを挿入する
方法を採ると、元ソースとデバッグ情報との関係が崩れ
てしまっていた。
【0005】また、Java仮想マシン内部でJava
オブジェクトのハンドルと永続オブジェクトのオブジェ
クト識別子(OID)をバインドすることによりJav
aオブジェクトを永続化する方法では、動作するJav
a仮想マシン処理系が限定されてしまっていた。
オブジェクトのハンドルと永続オブジェクトのオブジェ
クト識別子(OID)をバインドすることによりJav
aオブジェクトを永続化する方法では、動作するJav
a仮想マシン処理系が限定されてしまっていた。
【0006】
【発明が解決しようとする課題】上記のように、従来の
ソースプログラムのコンパイル時における処理をそのま
ま用いてJavaオブジェクトの永続化を行うと、元ソ
ースとデバッグ情報との関係が崩れるという欠点があっ
た。
ソースプログラムのコンパイル時における処理をそのま
ま用いてJavaオブジェクトの永続化を行うと、元ソ
ースとデバッグ情報との関係が崩れるという欠点があっ
た。
【0007】また、Java仮想マシン内部でJava
オブジェクトのハンドルと永続オブジェクトのオブジェ
クト識別子(OID)をバインドすることによりJav
aオブジェクトを永続化する方法では、動作するJav
a仮想マシン処理系が限定されてしまうため、Java
のアーキテクチャ中立な特性を充分に活かすことができ
ないという欠点があった。
オブジェクトのハンドルと永続オブジェクトのオブジェ
クト識別子(OID)をバインドすることによりJav
aオブジェクトを永続化する方法では、動作するJav
a仮想マシン処理系が限定されてしまうため、Java
のアーキテクチャ中立な特性を充分に活かすことができ
ないという欠点があった。
【0008】本発明の目的は、上記従来の欠点を解決
し、既存のオブジェクト指向データベース管理システム
においてJavaオブジェクトを管理するために必要な
処理を、Javaバイト・コードを解析するポストプロ
セッサで行うことにある。
し、既存のオブジェクト指向データベース管理システム
においてJavaオブジェクトを管理するために必要な
処理を、Javaバイト・コードを解析するポストプロ
セッサで行うことにある。
【0009】
【課題を解決するための手段】上記の目的を達成する本
発明のポストプロセッサは、入力コマンドの引数を解析
するコマンド引数解析手段と、前記コマンド引数解析手
段の解析結果に応じて、処理対象となるクラスファイル
を環境変数CLASSPATHで指定されたディレクト
リからの相対パスで検索するクラスファイル検索手段
と、前記クラスファイル検索手段による検索結果に基づ
いて、クラスファイルのバイト・コードを取得し解析し
てクラス情報を取得するバイト・コード解析手段と、前
記バイト・コード解析手段によって取得されたバイト・
コードのクラス情報に基づいて、クラス構造に対してJ
avaオブジェクトの永続化に必要な変更処理を行うク
ラス構造変更処理手段と、前記クラス構造変更処理手段
による変更後のクラス情報を反映させた、新たなクラス
ファイルを生成し、バイト・コードを出力するバイト・
コード出力手段と、前記クラス構造変更処理手段による
変更後のクラス情報を反映させた新たなクラスのスキー
マを、データベースに登録するスキーマ登録手段とを備
えることを特徴とする。
発明のポストプロセッサは、入力コマンドの引数を解析
するコマンド引数解析手段と、前記コマンド引数解析手
段の解析結果に応じて、処理対象となるクラスファイル
を環境変数CLASSPATHで指定されたディレクト
リからの相対パスで検索するクラスファイル検索手段
と、前記クラスファイル検索手段による検索結果に基づ
いて、クラスファイルのバイト・コードを取得し解析し
てクラス情報を取得するバイト・コード解析手段と、前
記バイト・コード解析手段によって取得されたバイト・
コードのクラス情報に基づいて、クラス構造に対してJ
avaオブジェクトの永続化に必要な変更処理を行うク
ラス構造変更処理手段と、前記クラス構造変更処理手段
による変更後のクラス情報を反映させた、新たなクラス
ファイルを生成し、バイト・コードを出力するバイト・
コード出力手段と、前記クラス構造変更処理手段による
変更後のクラス情報を反映させた新たなクラスのスキー
マを、データベースに登録するスキーマ登録手段とを備
えることを特徴とする。
【0010】これにより、バイト・コード実行時にJa
vaオブジェクトを永続オブジェクトとしてデータベー
スに格納したり、データベース中の永続オブジェクトを
取り出し、参照や更新することを可能とする。
vaオブジェクトを永続オブジェクトとしてデータベー
スに格納したり、データベース中の永続オブジェクトを
取り出し、参照や更新することを可能とする。
【0011】また、本発明のポストプロセッサは、磁気
ディスクや半導体メモリその他のプログラムに格納され
て提供される。
ディスクや半導体メモリその他のプログラムに格納され
て提供される。
【0012】請求項2の本発明のポストプロセッサは、
前記クラスファイル検索手段による検索処理と前記バイ
ト・コード解析手段による解析処理とを、処理対象であ
るクラスファイルの基底クラスがiava.lang.
Objectとなるまで再帰的に繰り返すことを特徴と
する。
前記クラスファイル検索手段による検索処理と前記バイ
ト・コード解析手段による解析処理とを、処理対象であ
るクラスファイルの基底クラスがiava.lang.
Objectとなるまで再帰的に繰り返すことを特徴と
する。
【0013】請求項3の本発明のポストプロセッサは、
前記クラス構造変更処理手段が、基底クラスとしてja
va.lang.Objectクラスを持つクラスを、
PersistentObjectクラスを直接継承さ
せ、実際に各フィールド毎にデータ転送を行うメソッド
を必要に応じて追加し、データ転送が必要な箇所に必要
なコードを挿入し、ポストプロセス済みであることを示
すフラグの役割を持つ属性を追加することを特徴とす
る。
前記クラス構造変更処理手段が、基底クラスとしてja
va.lang.Objectクラスを持つクラスを、
PersistentObjectクラスを直接継承さ
せ、実際に各フィールド毎にデータ転送を行うメソッド
を必要に応じて追加し、データ転送が必要な箇所に必要
なコードを挿入し、ポストプロセス済みであることを示
すフラグの役割を持つ属性を追加することを特徴とす
る。
【0014】また上記目的を達成する本発明のポストプ
ロセス方法は、入力コマンドの引数を解析する工程と、
前記コマンド引数解析工程の解析結果に応じて、処理対
象となるクラスファイルを環境変数CLASSPATH
で指定されたディレクトリからの相対パスで検索する工
程と、前記クラスファイル検索工程による検索結果に基
づいて、クラスファイルのバイト・コードを取得し解析
してクラス情報を取得する工程と、前記バイト・コード
解析工程によって取得されたバイト・コードのクラス情
報に基づいて、クラス構造に対してJavaオブジェク
トの永続化に必要な変更処理を行う工程と、前記クラス
構造変更処理工程による変更後のクラス情報を反映させ
た、新たなクラスファイルを生成し、バイト・コードを
出力する工程と、前記クラス構造変更処理工程による変
更後のクラス情報を反映させた新たなクラスのスキーマ
を、データベースに登録する工程とを含むことを特徴と
する。
ロセス方法は、入力コマンドの引数を解析する工程と、
前記コマンド引数解析工程の解析結果に応じて、処理対
象となるクラスファイルを環境変数CLASSPATH
で指定されたディレクトリからの相対パスで検索する工
程と、前記クラスファイル検索工程による検索結果に基
づいて、クラスファイルのバイト・コードを取得し解析
してクラス情報を取得する工程と、前記バイト・コード
解析工程によって取得されたバイト・コードのクラス情
報に基づいて、クラス構造に対してJavaオブジェク
トの永続化に必要な変更処理を行う工程と、前記クラス
構造変更処理工程による変更後のクラス情報を反映させ
た、新たなクラスファイルを生成し、バイト・コードを
出力する工程と、前記クラス構造変更処理工程による変
更後のクラス情報を反映させた新たなクラスのスキーマ
を、データベースに登録する工程とを含むことを特徴と
する。
【0015】
【発明の実施の形態】以下、本発明の実施形態について
図面を参照して詳細に説明する。
図面を参照して詳細に説明する。
【0016】図1は、本発明の一実施例によるポストプ
ロセッサの構成を示した機能ブロック図である。本実施
形態のポストプロセッサは、パーソナルコンピュータや
ワークステーション端末装置等の処理装置にロードさ
れ、CPUを制御することにより機能を実現する。本実
施形態のポストプロセッサを含むコンピュータプログラ
ムは、図示のように、磁気ディスクや半導体メモリその
他の記憶媒体100に格納して提供される。
ロセッサの構成を示した機能ブロック図である。本実施
形態のポストプロセッサは、パーソナルコンピュータや
ワークステーション端末装置等の処理装置にロードさ
れ、CPUを制御することにより機能を実現する。本実
施形態のポストプロセッサを含むコンピュータプログラ
ムは、図示のように、磁気ディスクや半導体メモリその
他の記憶媒体100に格納して提供される。
【0017】図1に示すように、ポストプロセッサ10
は、入力コマンドの引数を解析するコマンド引数解析部
11と、処理対象となるクラスファイルを検索するクラ
スファイル検索部12と、クラスファイルのバイト・コ
ードを取得して解析するバイト・コード解析部13と、
バイト・コードに基づいてクラスファイルのクラス構造
を変更するクラス構造変更処理部14と、変更後のクラ
ス情報に基づいて新たなクラスファイルを生成し、バイ
ト・コードを出力するバイト・コード出力部15と、デ
ータベースにクラスのスキーマを登録するスキーマ登録
部16とを備える。
は、入力コマンドの引数を解析するコマンド引数解析部
11と、処理対象となるクラスファイルを検索するクラ
スファイル検索部12と、クラスファイルのバイト・コ
ードを取得して解析するバイト・コード解析部13と、
バイト・コードに基づいてクラスファイルのクラス構造
を変更するクラス構造変更処理部14と、変更後のクラ
ス情報に基づいて新たなクラスファイルを生成し、バイ
ト・コードを出力するバイト・コード出力部15と、デ
ータベースにクラスのスキーマを登録するスキーマ登録
部16とを備える。
【0018】コマンド引数解析部11は、ポストプロセ
ッサ10の起動時に指定される引数を解析し、ポストプ
ロセッサ10にて実行する処理を決定する。ポストプロ
セッサ起動時には、永続化の対象となるクラスファイル
のクラス名を指定すると共に、オプションで、データべ
ース名や新規に生成するクラスファイルの格納先ディレ
クトリ等を指定する。図4に、ポストプロセッサの起動
コマンドの例を示す。図4において、“odjp3”が
ポストプロセッサを起動するコマンド名であり、“O
D”以下がオプションである。
ッサ10の起動時に指定される引数を解析し、ポストプ
ロセッサ10にて実行する処理を決定する。ポストプロ
セッサ起動時には、永続化の対象となるクラスファイル
のクラス名を指定すると共に、オプションで、データべ
ース名や新規に生成するクラスファイルの格納先ディレ
クトリ等を指定する。図4に、ポストプロセッサの起動
コマンドの例を示す。図4において、“odjp3”が
ポストプロセッサを起動するコマンド名であり、“O
D”以下がオプションである。
【0019】クラスファイル検索部12は、環境変数C
LASSPATHに指定されたディレクトリからの相対
パスのうちで検索可能なパスを検索する。なお、環境変
数CLASSPATHには、Javaインタプリタ等の
JDK開発ツールがクラス定義を検索するディレクトリ
や、zipファイルを順番に並べたリストが指定されて
いる。
LASSPATHに指定されたディレクトリからの相対
パスのうちで検索可能なパスを検索する。なお、環境変
数CLASSPATHには、Javaインタプリタ等の
JDK開発ツールがクラス定義を検索するディレクトリ
や、zipファイルを順番に並べたリストが指定されて
いる。
【0020】バイト・コード解析部13は、クラスファ
イル検索部12により検出されたバイト・コードを読み
込んで、クラス構造及びクラス内で定義されたメソッド
の命令コードに関する情報を取得し、クラス情報テーブ
ル50に格納する。なお、取得したクラス構造の情報か
ら基底クラス名を取得し、基底クラスがiava.la
ng.Objectとなるまで、再帰的にクラスファイ
ル検索部12によるクラスファイル検索処理とバイト・
コード解析部13によるバイト・コード解析処理とを繰
り返す。ここで、lava.lang.Objectク
ラスとは、Javaのすべてのクラスの最上位の基底ク
ラスである。
イル検索部12により検出されたバイト・コードを読み
込んで、クラス構造及びクラス内で定義されたメソッド
の命令コードに関する情報を取得し、クラス情報テーブ
ル50に格納する。なお、取得したクラス構造の情報か
ら基底クラス名を取得し、基底クラスがiava.la
ng.Objectとなるまで、再帰的にクラスファイ
ル検索部12によるクラスファイル検索処理とバイト・
コード解析部13によるバイト・コード解析処理とを繰
り返す。ここで、lava.lang.Objectク
ラスとは、Javaのすべてのクラスの最上位の基底ク
ラスである。
【0021】クラス構造変更処理部14は、クラス情報
テーブル50に保持されているクラスに関する情報に基
づいて、次の4種類の変更処理を実行する。
テーブル50に保持されているクラスに関する情報に基
づいて、次の4種類の変更処理を実行する。
【0022】第1に、基底クラスを変更する。基底クラ
スとしてjava.lang.Objectクラスを持
つクラスは、PersistentObjectクラス
を直接継承させる。ここで、PersistentOb
jectクラスとは、本実施形態で定義する永続化処理
を行うための情報を持つクラスである。これにより、当
該クラスから生成されたオブジェクトを永続化するため
のメソッドを利用することができるようになる。
スとしてjava.lang.Objectクラスを持
つクラスは、PersistentObjectクラス
を直接継承させる。ここで、PersistentOb
jectクラスとは、本実施形態で定義する永続化処理
を行うための情報を持つクラスである。これにより、当
該クラスから生成されたオブジェクトを永続化するため
のメソッドを利用することができるようになる。
【0023】第2に、実際に各フィールド毎にデータ転
送を行うメソッドを追加する。具体的には、オブジェク
トのフィールドの値をデータべースからロードするlo
adFields、データベースにフィールドの値を格
納するstoreFields、フィールド値をクリア
するclearFieldsの3つのメソッドを追加す
る。
送を行うメソッドを追加する。具体的には、オブジェク
トのフィールドの値をデータべースからロードするlo
adFields、データベースにフィールドの値を格
納するstoreFields、フィールド値をクリア
するclearFieldsの3つのメソッドを追加す
る。
【0024】第3に、データ転送が必要な箇所にコード
を挿入する。例えば、loadFieldsは、Per
sistentObjectクラスに定義されているメ
ソッドloadObjectから呼び出される。そこ
で、コード列中からフィールド値を参照するコード(g
etfield命令)を検索し、直前にloadObj
ectを呼び出すコードを挿入することにより、フィー
ルド参照の前にデータが転送されるようにする。また、
フィールド値の更新がある場合(putfield命
令)、さらにPersistentObjectクラス
に定義されているメソッドmarkModifiedを
呼び出すコードを挿入することにより、更新があったこ
とを示すフラグを立て、storeFieldsによる
データの格納を行うかどうかを判定する。そして、コー
ドの挿入により、内部で保持するライン数や分岐先の情
報に不整合が生じないようにする。
を挿入する。例えば、loadFieldsは、Per
sistentObjectクラスに定義されているメ
ソッドloadObjectから呼び出される。そこ
で、コード列中からフィールド値を参照するコード(g
etfield命令)を検索し、直前にloadObj
ectを呼び出すコードを挿入することにより、フィー
ルド参照の前にデータが転送されるようにする。また、
フィールド値の更新がある場合(putfield命
令)、さらにPersistentObjectクラス
に定義されているメソッドmarkModifiedを
呼び出すコードを挿入することにより、更新があったこ
とを示すフラグを立て、storeFieldsによる
データの格納を行うかどうかを判定する。そして、コー
ドの挿入により、内部で保持するライン数や分岐先の情
報に不整合が生じないようにする。
【0025】第4に、ポストプロセス済みであることを
示すフラグの役割を持つ属性を追加する。
示すフラグの役割を持つ属性を追加する。
【0026】以上の各変更処理を当該クラスファイルに
対して行うことにより、当該クラスに冗長なコードの挿
入を防ぐことができる。
対して行うことにより、当該クラスに冗長なコードの挿
入を防ぐことができる。
【0027】バイト・コード出力部15は、クラス構造
変更処理部14による各変更を反映させたクラス情報を
クラス情報テーブル50から読み出し、図4に示した
“−d”オプションで指定されたディレクトリに新たな
クラスファイルを生成し、バイト・コードを出力する。
変更処理部14による各変更を反映させたクラス情報を
クラス情報テーブル50から読み出し、図4に示した
“−d”オプションで指定されたディレクトリに新たな
クラスファイルを生成し、バイト・コードを出力する。
【0028】スキーマ登録部16は、クラス構造変更処
理部14による各変更を反映させたクラス情報をクラス
情報テーブル50から読み出し、データベース管理シス
テム70にアクセスして、変更後のクラスファイルのス
キーマをデータベース80に登録する。これにより、バ
イト・コード出力部15から出力されたバイト・コード
を実行した場合に、データベース70に対してデータの
転送、格納を行うことができるようになる。
理部14による各変更を反映させたクラス情報をクラス
情報テーブル50から読み出し、データベース管理シス
テム70にアクセスして、変更後のクラスファイルのス
キーマをデータベース80に登録する。これにより、バ
イト・コード出力部15から出力されたバイト・コード
を実行した場合に、データベース70に対してデータの
転送、格納を行うことができるようになる。
【0029】次に、図2のフローチャートを参照して本
実施形態の動作について説明する。ポストプロセッサ1
0の起動前に、予め、Javaコンパイラ30によりJ
avaソースプログラム20をコンパイルし、クラスフ
ァイル40を生成しておく(ステップ201)。そし
て、所定の引数を指定してポストプロセッサ10が起動
されると(ステップ202)、まず、コマンド引数解析
部11が、指定された引数を解析し、ポストプロセッサ
10にて実行する処理を決定する(ステップ203)。
そして、基底クラスがiava.lang.Objec
tとなるまで、クラスファイル検索部12によるクラス
ファイルの検索処理とバイト・コード解析部13のバイ
ト・コード解析処理とが繰り返される(ステップ204
〜206)。次に、クラス構造変更処理部14が、クラ
ス構造の変更処理を行う(ステップ207)。そして、
バイト・コード出力部15が、クラス構造変更処理部1
4による変更後のクラス情報に基づいて新たなクラスフ
ァイル60を生成し、バイト・コードを出力する(ステ
ップ208)。最後に、スキーマ登録部16が、クラス
構造変更処理部14による変更後のクラスファイルのス
キーマをデータベース80に登録する(ステップ20
9)。
実施形態の動作について説明する。ポストプロセッサ1
0の起動前に、予め、Javaコンパイラ30によりJ
avaソースプログラム20をコンパイルし、クラスフ
ァイル40を生成しておく(ステップ201)。そし
て、所定の引数を指定してポストプロセッサ10が起動
されると(ステップ202)、まず、コマンド引数解析
部11が、指定された引数を解析し、ポストプロセッサ
10にて実行する処理を決定する(ステップ203)。
そして、基底クラスがiava.lang.Objec
tとなるまで、クラスファイル検索部12によるクラス
ファイルの検索処理とバイト・コード解析部13のバイ
ト・コード解析処理とが繰り返される(ステップ204
〜206)。次に、クラス構造変更処理部14が、クラ
ス構造の変更処理を行う(ステップ207)。そして、
バイト・コード出力部15が、クラス構造変更処理部1
4による変更後のクラス情報に基づいて新たなクラスフ
ァイル60を生成し、バイト・コードを出力する(ステ
ップ208)。最後に、スキーマ登録部16が、クラス
構造変更処理部14による変更後のクラスファイルのス
キーマをデータベース80に登録する(ステップ20
9)。
【0030】
【実施例】次に、本発明の実施例について図面を参照し
て詳細に説明する。
て詳細に説明する。
【0031】図4は、Javaソースコードの記述例を
示す。図4を参照すると、Javaソースコード400
には、永続化の対象とするクラスEmployeeクラ
ス、及びその基底クラスPersonクラスの定義を記
述してある。以下、図示のJavaソースコード400
に対して永続化処理を行う場合について説明する。
示す。図4を参照すると、Javaソースコード400
には、永続化の対象とするクラスEmployeeクラ
ス、及びその基底クラスPersonクラスの定義を記
述してある。以下、図示のJavaソースコード400
に対して永続化処理を行う場合について説明する。
【0032】まず、Javaソースファイル400を、
Javaコンパイラ30によりコンパイルし、クラスフ
ァイルEmployee.class402及びPer
son.class401を生成する(図2、ステップ
201)。Employee.class402、Pe
rson.Class401には、それぞれクラスEm
ployee、クラスPersonに関するバイト・コ
ードが格納される。
Javaコンパイラ30によりコンパイルし、クラスフ
ァイルEmployee.class402及びPer
son.class401を生成する(図2、ステップ
201)。Employee.class402、Pe
rson.Class401には、それぞれクラスEm
ployee、クラスPersonに関するバイト・コ
ードが格納される。
【0033】次に、Employeeを指定してポスト
プロセッサを起動する(ステップ202)。そして、E
mployeeクラスのクラスファイル402を、環境
変数CLASSPATHに指定されたディレクトリから
の相対パスで検索可能な場所から検索し(ステップ20
4)、バイト・コードを読み込んで、クラス名、基底ク
ラス名、フィールド、メソッド等の情報を取得する(ス
テップ205)。Employeeクラスは基底クラス
としてPersonクラスを持つので、Personク
ラスに対しても、クラスファイルを検索しバイト・コー
ドを読み込む(ステップ206、204、205)。P
ersonクラスの基底クラスはiava.lang.
Objectであるため、クラス構造の変更処理に移行
する。
プロセッサを起動する(ステップ202)。そして、E
mployeeクラスのクラスファイル402を、環境
変数CLASSPATHに指定されたディレクトリから
の相対パスで検索可能な場所から検索し(ステップ20
4)、バイト・コードを読み込んで、クラス名、基底ク
ラス名、フィールド、メソッド等の情報を取得する(ス
テップ205)。Employeeクラスは基底クラス
としてPersonクラスを持つので、Personク
ラスに対しても、クラスファイルを検索しバイト・コー
ドを読み込む(ステップ206、204、205)。P
ersonクラスの基底クラスはiava.lang.
Objectであるため、クラス構造の変更処理に移行
する。
【0034】図5に、図4のJavaソースコード40
0に対して変更処理(ステップ207)を施したソース
コードレベルのイメージを示す。図5を参照して、変更
処理の具体的な内容を説明する。
0に対して変更処理(ステップ207)を施したソース
コードレベルのイメージを示す。図5を参照して、変更
処理の具体的な内容を説明する。
【0035】まず、上述のようにPersonクラスの
基底クラスはiava.lang.Objectなの
で、図5の501に示すように、基底クラスをPers
istentObjectクラスに変更する。
基底クラスはiava.lang.Objectなの
で、図5の501に示すように、基底クラスをPers
istentObjectクラスに変更する。
【0036】次に、フィールドの情報を参照し、各フィ
ールド値のデータ転送をするためのメソッド定義を追加
する。Personクラスは、Strlng型のフィー
ルドnameを持つため、Strlng型のデータのロ
ード、格納、クリアを行うように定義する。
ールド値のデータ転送をするためのメソッド定義を追加
する。Personクラスは、Strlng型のフィー
ルドnameを持つため、Strlng型のデータのロ
ード、格納、クリアを行うように定義する。
【0037】次に、各クラスに定義されたメソッドのコ
ード列についての情報を参照する。図6に、Perso
nクラスのgetNameメソッドのコード列を示す。
図6を参照すると、コード列601には、フィールド値
の参照を表すコードgetfield命令が含まれてい
ることがわかる。getfield命令の前に、データ
をJavaオブジェクトに転送するためのメソッドlo
adObjectを呼び出すコードを挿入する(コード
列602参照)。追加したコード(コード列602中の
第1行及び第2行)について説明すると、aload
0命令によりオペランドスタックに詰まれたthisの
ハンドルを、dup命令により複製し、invokev
irtual命令でloadObjectメソッドを呼
び出している。当該コード列602のソースレベルのイ
メージは、図5の502に示される。
ード列についての情報を参照する。図6に、Perso
nクラスのgetNameメソッドのコード列を示す。
図6を参照すると、コード列601には、フィールド値
の参照を表すコードgetfield命令が含まれてい
ることがわかる。getfield命令の前に、データ
をJavaオブジェクトに転送するためのメソッドlo
adObjectを呼び出すコードを挿入する(コード
列602参照)。追加したコード(コード列602中の
第1行及び第2行)について説明すると、aload
0命令によりオペランドスタックに詰まれたthisの
ハンドルを、dup命令により複製し、invokev
irtual命令でloadObjectメソッドを呼
び出している。当該コード列602のソースレベルのイ
メージは、図5の502に示される。
【0038】また、PersonクラスのsetNam
eメソッドのように、フィールド値の更新がある場合、
コード列603に示すように、putfield命令が
含まれるため、当該putfield命令の前にloa
dObject及びmarkModifiedメソッド
を呼び出すコードを挿入する(コード列604参照)。
挿入後のソースレベルのイメージは図5の504に示さ
れる。挿入後のコードが正常に実行されるためには、行
の先頭のコード番号や分岐先までのオフセット値を補正
する必要がある。例えば、コード列603の第4行で
は、第12行のreturnに分岐するということを表
すため、内部でオフセット値が8であるという情報を保
持しているが、コード列604の第8行では、オフセッ
ト値を17に訂正しなければ、return命令に分岐
することができない。
eメソッドのように、フィールド値の更新がある場合、
コード列603に示すように、putfield命令が
含まれるため、当該putfield命令の前にloa
dObject及びmarkModifiedメソッド
を呼び出すコードを挿入する(コード列604参照)。
挿入後のソースレベルのイメージは図5の504に示さ
れる。挿入後のコードが正常に実行されるためには、行
の先頭のコード番号や分岐先までのオフセット値を補正
する必要がある。例えば、コード列603の第4行で
は、第12行のreturnに分岐するということを表
すため、内部でオフセット値が8であるという情報を保
持しているが、コード列604の第8行では、オフセッ
ト値を17に訂正しなければ、return命令に分岐
することができない。
【0039】以上の変更処理を行った後、さらにポスト
プロセス処理を繰り返すことにより冗長なコードが挿入
されるのを防ぐため、ポストプロセス済みであることを
示す属性を付加して変更処理を終了する。
プロセス処理を繰り返すことにより冗長なコードが挿入
されるのを防ぐため、ポストプロセス済みであることを
示す属性を付加して変更処理を終了する。
【0040】次に、上記変更後のクラス情報に基づい
て、指定されたディレクトリ“./perslsten
t”に新しくクラスファイルPerson.class
及びEmployee.classを生成し、バイト・
コードを出力する(ステップ208)。
て、指定されたディレクトリ“./perslsten
t”に新しくクラスファイルPerson.class
及びEmployee.classを生成し、バイト・
コードを出力する(ステップ208)。
【0041】そして最後に、当該新たなクラスのスキー
マをデータベース80に登録する(ステップ209)。
マをデータベース80に登録する(ステップ209)。
【0042】以上好ましい実施例をあげて本発明を説明
したが、本発明は必ずしも上記実施例に限定されるもの
ではない。
したが、本発明は必ずしも上記実施例に限定されるもの
ではない。
【0043】
【発明の効果】以上説明したように、本発明のポストプ
ロセッサ及びポストプロセス方法によれば、Javaオ
ブジェクトの永続化のために必要な処理を、ポストプロ
セッサで全て行うことができる。これにより、ブログラ
マは通常のJavaプログラムの記述によりJavaオ
ブジェクトを永続化し操作できるようになるという効果
がある。
ロセッサ及びポストプロセス方法によれば、Javaオ
ブジェクトの永続化のために必要な処理を、ポストプロ
セッサで全て行うことができる。これにより、ブログラ
マは通常のJavaプログラムの記述によりJavaオ
ブジェクトを永続化し操作できるようになるという効果
がある。
【0044】また、Javaの仮想マシンのバイト・コ
ードを対象にしているため、様々なISV(lndep
endent Software Vender)の提
供する仮想マシンにおいて、汎用的に利用できるように
なるという効果がある。
ードを対象にしているため、様々なISV(lndep
endent Software Vender)の提
供する仮想マシンにおいて、汎用的に利用できるように
なるという効果がある。
【0045】さらに、永続化処理において元のソースに
対しては何ら影響を及ぼさないため、Javaソースの
デバッグ情報を維持することができ、ISVにて提供さ
れるJavaの開発環境をそのまま利用できるという効
果がある。
対しては何ら影響を及ぼさないため、Javaソースの
デバッグ情報を維持することができ、ISVにて提供さ
れるJavaの開発環境をそのまま利用できるという効
果がある。
【図1】 本発明の一実施形態によるポストプロセッサ
の構成を示す機能ブロック図である。
の構成を示す機能ブロック図である。
【図2】 本実施形態の動作を示すフローチャートであ
る。
る。
【図3】 本実施形態のポストプロセッサの起動コマン
ドの例を示す図である。
ドの例を示す図である。
【図4】 本発明の実施例の処理対象であるJavaソ
ースコードの記述例を示す図である。
ースコードの記述例を示す図である。
【図5】 図4のJavaソースコードに永続化処理を
行った場合のソースコードイメージを示す図である。
行った場合のソースコードイメージを示す図である。
【図6】 図5のソースコードイメージの要部のコード
列に対する処理の様子を示す図である。
列に対する処理の様子を示す図である。
10 ポストプロセッサ 11 コマンド引数解析部 12 クラスファイル検索部 13 バイト・コード解析部 14 クラス構造変更処理部 15 バイト・コード出力部 16 スキーマ登録部
─────────────────────────────────────────────────────
【手続補正書】
【提出日】平成10年1月28日
【手続補正1】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正内容】
【図3】
【図1】
【図2】
【図4】
【図5】
【図6】
Claims (9)
- 【請求項1】 入力コマンドの引数を解析するコマンド
引数解析手段と、前記コマンド引数解析手段の解析結果
に応じて、処理対象となるクラスファイルを環境変数C
LASSPATHで指定されたディレクトリからの相対
パスで検索するクラスファイル検索手段と、 前記クラスファイル検索手段による検索結果に基づい
て、クラスファイルのバイト・コードを取得し解析し
て、クラス情報を取得するバイト・コード解析手段と、 前記バイト・コード解析手段によって取得されたバイト
・コードのクラス情報に基づいて、クラス構造に対して
Javaオブジェクトの永続化に必要な変更処理を行う
クラス構造変更処理手段と、 前記クラス構造変更処理手段による変更処理後のクラス
情報を反映させた、新たなクラスファイルを生成し、バ
イト・コードを出力するバイト・コード出力手段と、 前記クラス構造変更処理手段による変更後のクラス情報
を反映させた新たなクラスのスキーマを、データベース
に登録するスキーマ登録手段とを備えることを特徴とす
るポストプロセッサ。 - 【請求項2】 前記クラスファイル検索手段による検索
処理と前記バイト・コード解析手段による解析処理と
を、処理対象であるクラスファイルの基底クラスがia
va.lang.Objectとなるまで再帰的に繰り
返すことを特徴とする請求項1に記載のポストプロセッ
サ。 - 【請求項3】 前記クラス構造変更処理手段が、 基底クラスとしてjava.lang.Objectク
ラスを持つクラスを、PersistentObjec
tクラスを直接継承させ、 実際に各フィールド毎にデータ転送を行うメソッドを必
要に応じて追加し、データ転送が必要な箇所に必要なコ
ードを挿入し、 ポストプロセス済みであることを示すフラグの役割を持
つ属性を追加することを特徴とする請求項1または請求
項2に記載のポストプロセッサ。 - 【請求項4】 入力コマンドの引数を解析する工程と、 前記コマンド引数解析工程の解析結果に応じて、処理対
象となるクラスファイルを環境変数CLASSPATH
で指定されたディレクトリからの相対パスで検索する工
程と、 前記クラスファイル検索工程による検索結果に基づい
て、クラスファイルのバイト・コードを取得し解析して
クラス情報を取得する工程と、 前記バイト・コード解析工程によって取得されたバイト
・コードのクラス情報に基づいて、クラス構造に対して
Javaオブジェクトの永続化に必要な変更処理を行う
工程と、 前記クラス構造変更処理工程による変更後のクラス情報
を反映させた、新たなクラスファイルを生成し、バイト
・コードを出力する工程と、 前記クラス構造変更処理工程による変更後のクラス情報
を反映させた新たなクラスのスキーマを、データベース
に登録する工程とを含むことを特徴とするポストプロセ
ス方法。 - 【請求項5】 前記クラスファイル検索工程と前記バイ
ト・コード解析工程とを、処理対象であるクラスファイ
ルの基底クラスがiava.lang.Objectと
なるまで、再帰的に繰り返すことを特徴とする請求項4
に記載のポストプロセス方法。 - 【請求項6】前記クラス構造変更処理工程が、 基底クラスとしてjava.lang.Objectク
ラスを持つクラスを、PersistentObjec
tクラスを直接継承させ、 実際に各フィールド毎にデータ転送を行うメソッドを必
要に応じて追加し、 データ転送が必要な箇所に必要なコードを挿入し、 ポストプロセス済みであることを示すフラグの役割を持
つ属性を追加することを特徴とする請求項4または請求
項5に記載のポストプロセス方法。 - 【請求項7】 入力コマンドの引数を解析するコマンド
引数解析手段と、 前記コマンド引数解析手段の解析結果に応じて、処理対
象となるクラスファイルを環境変数CLASSPATH
で指定されたディレクトリからの相対パスで検索するク
ラスファイル検索手段と、 前記クラスファイル検索手段による検索結果に基づい
て、クラスファイルのバイト・コードを取得し解析し
て、クラス情報を取得するバイト・コード解析手段と、 前記バイト・コード解析手段によって取得されたバイト
・コードのクラス情報に基づいて、クラス構造に対して
Javaオブジェクトの永続化に必要な変更処理を行う
クラス構造変更処理手段と、 前記クラス構造変更処理手段による変更処理後のクラス
情報を反映させた、新たなクラスファイルを生成し、バ
イト・コードを出力するバイト・コード出力手段と、 前記クラス構造変更処理手段による変更後のクラス情報
を反映させた新たなクラスのスキーマを、データベース
に登録するスキーマ登録手段とを備えることを特徴とす
るポストプロセッサを格納した記憶媒体。 - 【請求項8】 前記クラスファイル検索手段による検索
処理と前記バイト・コード解析手段による解析処理と
を、処理対象であるクラスファイルの基底クラスがia
va.lang.Objectとなるまで再帰的に繰り
返すことを特徴とする請求項7に記載のポストプロセッ
サを格納した記憶媒体。 - 【請求項9】 前記クラス構造変更処理手段が、 基底クラスとしてjava.lang.Objectク
ラスを持つクラスを、PersistentObjec
tクラスを直接継承させ、 実際に各フィールド毎にデータ転送を行うメソッドを必
要に応じて追加し、データ転送が必要な箇所に必要なコ
ードを挿入し、 ポストプロセス済みであることを示すフラグの役割を持
つ属性を追加することを特徴とする請求項7または請求
項8に記載のポストプロセッサを格納した記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9331057A JPH11149374A (ja) | 1997-11-14 | 1997-11-14 | ポストプロセッサ及びポストプロセス方法並びにポストプロセッサを格納した記憶媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9331057A JPH11149374A (ja) | 1997-11-14 | 1997-11-14 | ポストプロセッサ及びポストプロセス方法並びにポストプロセッサを格納した記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH11149374A true JPH11149374A (ja) | 1999-06-02 |
Family
ID=18239379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP9331057A Pending JPH11149374A (ja) | 1997-11-14 | 1997-11-14 | ポストプロセッサ及びポストプロセス方法並びにポストプロセッサを格納した記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH11149374A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7219341B2 (en) | 2002-10-31 | 2007-05-15 | International Business Machines Corporation | Code analysis for selective runtime data processing |
CN116502220A (zh) * | 2023-02-22 | 2023-07-28 | 安芯网盾(北京)科技有限公司 | 一种对抗性Java内存马的检测方法及处理方法 |
-
1997
- 1997-11-14 JP JP9331057A patent/JPH11149374A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7219341B2 (en) | 2002-10-31 | 2007-05-15 | International Business Machines Corporation | Code analysis for selective runtime data processing |
CN116502220A (zh) * | 2023-02-22 | 2023-07-28 | 安芯网盾(北京)科技有限公司 | 一种对抗性Java内存马的检测方法及处理方法 |
CN116502220B (zh) * | 2023-02-22 | 2023-10-03 | 安芯网盾(北京)科技有限公司 | 一种对抗性Java内存马的检测方法及处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6922827B2 (en) | Iterative software development environment with prioritized build rules | |
US8464225B2 (en) | Method and system for adaptive, generic code instrumentation using run-time or load-time generated inheritance information for diagnosis and monitoring application performance and failure | |
US6530079B1 (en) | Method for optimizing locks in computer programs | |
US6535903B2 (en) | Method and apparatus for maintaining translated routine stack in a binary translation environment | |
US6594783B1 (en) | Code verification by tree reconstruction | |
US6968540B2 (en) | Software instrumentation method and apparatus | |
KR100472807B1 (ko) | 데이터베이스객체처리명령어들을삽입하기위하여데이터베이스액세스방법들을자동적으로수정하기위한시스템및그방법 | |
US5956479A (en) | Demand based generation of symbolic information | |
US6226789B1 (en) | Method and apparatus for data flow analysis | |
US6766511B1 (en) | Apparatus and method for performing symbolic resolution of modules using static representations of a trace | |
JPH05197697A (ja) | ソフトウエア・システム構築装置及び方法 | |
JPH05135108A (ja) | データベースの編成方法及び装置 | |
CA2145671A1 (en) | Shared library locating system | |
JPH09269898A (ja) | 実行可能ファイルの実行効率を改善するための方法及びシステム | |
US6810519B1 (en) | Achieving tight binding for dynamically loaded software modules via intermodule copying | |
US6330714B1 (en) | Method and computer program product for implementing redundant lock avoidance | |
US7032219B2 (en) | System and method for implementing a project facility | |
US5963955A (en) | Bridge for exporting and importing objects between object oriented programming environments | |
JPH11149374A (ja) | ポストプロセッサ及びポストプロセス方法並びにポストプロセッサを格納した記憶媒体 | |
Bakay et al. | The UDM framework | |
JP3461185B2 (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
Kantrowitz | Portable utilities for Common Lisp user guide & implementation notes | |
Altman et al. | DAISY dynamic binary translation software | |
Souter et al. | Contextual def-use associations for object aggregation | |
JP3531728B2 (ja) | オブジェクト指向型プログラミング言語で記述されたプログラムの構成関係管理装置及び方法並びに記憶媒体 |