(57)【要約】【課題】アプリケーション型プログラム（JAVAプログラム）の配信の仕組みを使って書庫ファイルに含まれるホスト機械語コードを展開、実行、監視・制御することが可能なプログラム、方法およびシステムを提供する。【解決手段】本発明に係るコンピュータシステムは、JAVA仮想マシン(JAVA VM)１０、JAVAフレームワーク２０、JAVAアプリケーション３０、ホスト機械語コード４０，４０’、JAVAアプリケーション３０とホスト機械語コード４０を含むJARファイル５０、および、ラッパーライブラリ６０の各機能ブロックで構成され、各機能ブロックを構成するプログラムによりホスト機械語コードを展開、実行、監視・制御する。なおホスト機械語コード４０はJAVAアプリケーション３０により展開されてホスト機械語コード４０’となる。【選択図】図１
2007213349.tif 000002
【特許請求の範囲】
【請求項１】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、および、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、を実現させるためのプログラム。
【請求項２】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可／不許可を返す機能、を実現させるためプログラム。
【請求項３】
ホスト機械語コード、および、前記書庫ファイルのデジタル署名が証明されたとき及びホスト環境と前記ホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合する前記ホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、前記ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可／不許可を返す機能、を実現させるためプログラム。
【請求項４】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、仮想マシンを自プラットフォーム上に生成し動作させるステップと、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御するステップと、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行うステップと、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御するステップと、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせるステップと、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可／不許可を返すステップを含んでなるホスト機械語コードを展開、実行、監視・制御する方法。
【請求項５】
ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを含む書庫ファイルと、自プラットフォーム上に生成され動作可能にされる仮想マシンと、該仮想マシン上で前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで前記アプリケーション型プログラムを実行制御する制御手段を備え、さらに、
前記制御手段により実行制御される前記アプリケーション型プログラムと該アプリケーション型プログラムにより展開され実行された前記ホスト機械語コードのプロセスとの間で通信を可能とする手段と、
前記制御手段により実行制御される前記アプリケーション型プログラムが展開し実行した前記ホスト機械語コードを監視・制御する手段と、
前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる手段と、
前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可／不許可を返す手段と、
を備えることを特徴とするホスト機械語コードを展開、実行、監視・制御するシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、JARファイル（JAVA（登録商標）プログラム用書庫ファイル）に含まれるホスト機械語コードをJAVA言語で書かれたプログラムを用いて展開、実行、監視・制御するプログラム、方法およびシステムに関わる。なお、JAVAは、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。
【背景技術】
【０００２】
JARファイル（Java ARchiver）は、普及しているZIPファイル形式に基づくファイル形式であり、多数のファイルを１つにまとめるために使用されるものである。そしてJARファイルは、基本的にはオプションのMETA-INFディレクトリを格納するZIPファイルとして認識されているものである。なお詳しくは、下記のURLを参照されたい。
「JSR 200: Network Transfer Format for JavaTM Archives」
http://jcp.org/en/jsr/detail?id=200（閲覧確認2006.02.09）
【０００３】
またホスト機械語コードの実行について、下記に示す特許文献１を関連する技術文献として挙げることができる。特許文献１は、JAVAアプリケーションをコンピュータ・システムにインストールする方法およびシステムについて記している。
【特許文献１】特開平１０−２２２３４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
JAVA言語は周知のように実行環境がホストに依存しないという利点から普及しており、特にネットワークを介したアプリケーションに利用されている。JAVA実行環境は、JAVAプログラムの書庫ファイルであるJARファイルを、HTTP(Hypertext Transfer Protocol)などのプロトコルを用いて、ネットワーク越しにダウンロードし、ホストマシン上のJAVA仮想マシン（JAVA VMとも称す）で実行する機能がある。
【０００５】
このようなJAVAプログラムのネットワーク配信技術にはOSGi(http://www.osgi.org/参照)のような業界団体で標準化されているものもある。一方、すでにC言語などで書かれたプログラムがあって、労力、資金の面でJAVA言語に移植するのが困難であり、JAVA実行環境のサポートしないホストマシン固有の機能を使いたいという要請があり、またホスト機械語コードはパフォーマンスが良い、などの理由でホスト機械語コードを使いたいという要求もある。
【０００６】
しかしホスト機械語コードのネットワーク配信技術は、JAVAプログラムのネットワーク配信技術と比較して標準化や普及が遅れている。また、一つのホストマシンにJAVAプログラム用とホスト機械語コード用の配信システムを備えることは冗長で不経済にもなる。
【０００７】
ところで現状では配信されたホスト機械語コードを実行する際には、セキュリティの問題がある。すなわち配信されたJAVAプログラムがJAVAのセキュリティマネージャの存在のもとで実行される場合、ホストのリソースなどへのアクセス制限をかけることができるが、ホスト機械語コードの実行においてJAVAのセキュリティマネージャに相当するしくみは無いという問題点がある。
【０００８】
本発明の目的は、アプリケーション型プログラム（JAVAプログラム）の配信の仕組みを使って書庫ファイルに含まれるホスト機械語コードを展開、実行、監視・制御することが可能なプログラム、方法およびシステムを提供することである。また、ホスト機械語コードの実行中の動作を監視してセキュリティを確保することが可能なプログラム、方法およびシステムを提供することである。
【課題を解決するための手段】
【０００９】
本発明のプログラムは、ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、および、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、を実現させることを特徴とする。
【００１０】
また本発明のプログラムは、ホスト機械語コードおよび該ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可／不許可を返す機能、を実現させることを特徴とする。
【００１１】
また本発明のプログラムは、ホスト機械語コード、および、前記書庫ファイルのデジタル署名が証明されたとき及びホスト環境と前記ホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合する前記ホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、前記ホスト機械語コードを展開し実行するアプリケーション型プログラムを書庫ファイルに含み、コンピュータに、仮想マシンを自プラットフォーム上に生成し動作させる機能、前記仮想マシン上で動作し前記書庫ファイル中の前記アプリケーション型プログラムを読み込んで実行制御する機能、実行制御された前記アプリケーション型プログラムと前記ホスト機械語コードのプロセスとの間で通信を行う機能、実行制御された前記アプリケーション型プログラムが前記ホスト機械語コードを監視・制御する機能、前記ホスト機械語コードにホストのリソースに直接アクセスする標準ライブラリ関数をラップするラッパーライブラリを強制的にリンクさせる機能、および、前記ホスト機械語コードのプロセスからのセキュリティ問い合わせに対し前記仮想マシンのセキュリティポリシーに従って許可／不許可を返す機能、を実現させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、アプリケーション型プログラム（JAVAプログラム）の配信機能を利用して書庫ファイル（JARファイル）に含まれるホスト機械語コードの配信、展開、実行ができる。また、アプリケーション型プログラム（JAVAプログラム）からホスト機械語コードの実行中の制御、および、実行中の動作を監視することができる。さらに、書庫ファイル（JARファイル）のデジタル署名が証明されたとき及びホスト環境とホスト機械語コードとが適合したとき若しくはいくつかのホスト環境に適合するホスト機械語コードの中からそのホストの環境に適合するホスト機械語コードを選択できたとき、ホスト機械語コードを展開し実行することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態を、図面を参照しながら説明する。
［第１の実施形態］
図１は本発明の第１の実施形態に係るコンピュータシステム全体の構成を示す図である。図１の全体構成図において本発明の第１の実施形態に係るコンピュータシステムは、JAVA仮想マシン(JAVA VM)１０、JAVAフレームワーク２０、JAVAアプリケーション３０、ホスト機械語コード４０，４０’、JAVAアプリケーション３０とホスト機械語コード４０を含むJARファイル５０、および、ラッパーライブラリ６０の各機能ブロックで構成され、各機能ブロックを構成するプログラムによりホスト機械語コードを展開、実行、監視・制御する。なおホスト機械語コード４０はJAVAアプリケーション３０により展開されてホスト機械語コード４０’となる。またラッパーライブラリ６０は、JAVA VM１０がインストールされている自プラットフォームに一緒にインストールされていても良いし、またはJARファイル５０の中に持っていても良い。またJAVAは、サン・マイクロシステムズ・インコーポレーテッドの登録商標である。
【００１４】
JAVAフレームワーク２０は、JAVA VM１０上で動作するJAVAプログラムであり、JAVAフレームワーク２０上でさらに１個以上のJAVAアプリケーションを動作させることができる。JAVAフレームワーク２０には、たとえばOSGiサービスプラットフォームに準拠したOSGiフレームワークなどがある。
【００１５】
ホスト機械語コード４０は初期状態では圧縮されてJARファイル５０に格納されており、JAVAアプリケーション３０により展開される。
JAVAアプリケーション３０はJAVAフレームワーク２０により制御される。JAVAフレームワーク２０としてOSGiフレームワークを使用する場合、バンドルと呼ばれるJAVAアプリケーションは当該フレームワークによりインストール、アンインストール、スタート、ストップ、アップデートを行うことができる。
【００１６】
展開されたホスト機械語コード４０’は、JAVAアプリケーション３０から別プロセスとして起動される。起動されるとき、JAVAアプリケーション３０との間に相互の通信経路を作る。例えば、JAVAクラスライブラリのjava.lang.Runtime#exec()により起動されると、java.lang.Processオブジェクトがホスト機械語コード４０’のハンドルとして返される。このハンドルによって通信経路を作ることができる。JAVAアプリケーション３０がホスト機械語コード４０’を制御するのに、この通信経路を通じて行う。
【００１７】
ラッパーライブラリ６０は、ホスト機械語コード４０’が起動される時に強制的にホスト機械語コード４０’にリンクさせられ、Cの標準ライブラリをラップする。ホスト機械語コード４０’がラップされたライブラリ関数を呼び出すと、最初にラッパーライブラリ６０の関数が呼び出される。ラッパー関数はその呼び出しが許可されるかどうか、通信経路およびJAVAフレームワーク２０を通じてJAVA VM１０に問い合わせる。JAVA VM１０は指定されたセキュリティポリシに従って許可または不許可をJAVAフレームワーク２０および通信経路を通じてラッパー関数に返す。許可の場合ラッパー関数は、標準ライブラリ関数を呼び出し、結果をホスト機械語コード４０’に返す。このようにしてホスト機械語コード４０’の動作を監視する（これについては図５の説明で再説する）。
【００１８】
図２は、本発明の第１の実施形態に係るJARファイルのデータ構造を示す図である。図２に示すJARファイルには、マニフェストファイル５１、デジタル署名５２、JAVAアプリケーション３０、ホスト機械語コード４０が含まれている。そして図２に示すホスト機械語コード４０としては、メインのプログラム(bin/musicplayer)４１と、メインのプログラム４１が動的にリンクするプラグイン(lib/libmpg.so)４２、プラグイン(lib/libwav.so)４３及びプラグイン(lib/libmidi.so)４４とが含まれている。
【００１９】
図３は本発明の第１の実施形態に係るコンピュータシステムの動作を説明するフローおよびシーケンスの動作図である。図３においてまず、JAVAフレームワーク２０はユーザの操作などに応じてJARファイル５０を読み込む（ステップ２１）。例えばネットワークからダウンロードしたり、ローカルファイルシステムから読み込んだりする。
【００２０】
次にJAVAフレームワーク２０はJARファイル５０の読み込みが終了するとJARファイル５０中の、マニフェストファイル５１で指定されたJAVAアプリケーション３０の動作を開始する（ステップ２２、Ｔ１）。JAVAアプリケーション３０はまずホスト機械語コード４０の展開を行う（ステップ３１）。展開にあたりJAVAフレームワーク２０はファイルハンドルをJAVAアプリケーション３０に与える（ステップ２３、Ｔ２）。
【００２１】
図４は本発明の第１の実施形態に係るホスト機械語コード４０の展開の動作をさらに詳しく示したフローチャートである。図４においてJAVAアプリケーション３０は、まずデジタル署名の真正性を証明し（ステップ１）、証明されたら次にホスト環境（OS、アーキテクチャ）にホスト機械語コードが適合するかどうか調べ（ステップ２）、適合する場合は展開を行う（ステップ３）。そして展開ができたら正常終了する（ステップ４）。上記ステップ１において証明されないときは異常終了する（ステップ５）。また上記ステップ２で適合しない場合は同じく異常終了する（ステップ５）。
【００２２】
上記ステップ２におけるOSとアーキテクチャの適合検査の例を具体的に説明する。例えば、JAVAフレームワーク２０としてOSGiフレームワークを使う場合で、JARファイル５０に含まれるホスト機械語コードlib/libmpg.soが、OSがLinux、アーキテクチャがx86に適合する場合には、図２のマニフェストファイル５１にこれらを
Bundle-NativeCode:/lib/libmpg.so;
osname=linux;
processor=x86
と記述しておくと、JAVAアプリケーション３０はこれらの値をプロパティorg.osgi.framework.os.name, org.osgi.framework.processorで参照できる。またJAVA VM１０の動作している環境のOSとアーキテクチャはJAVA VM１０のプロパティのos.nameとos.archから参照できる。これらのプロパティを比較し、OSとアーキテクチャが一致したならば適合性ありと判定する（図４のステップ２）。
【００２３】
OSGiフレームワークをJAVAフレームワーク２０として使った場合、JAVAアプリケーション３０はosg.osgi.framework.Bundle#getResource()およびjava.net.URL#openStream()を用いて、ホスト機械語コードを読み込むためのハンドル(java.io.InputStreamのオブジェクト)を取得する。また、org.osgi.framework.BundleContext#getDataFile()より書き込むためのハンドル(java.io.Fileのオブジェクト)を取得する。これらから読み込み書き出しを行うことで、ホスト機械語コード４０の展開を行う（図３のステップ３２）。
【００２４】
上記ではホスト機械語コード４０がJAVAアプリケーション３０からのみ使用される場合の展開方法について述べた。上記例では書き込みはJAVAフレームワーク２０が与えたディレクトリに対して行われ、それは相対パスで与えられる。一方、OSにインストールされるホスト機械語コードの場合、JAVAアプリケーション３０は上記getDataFile()ではなく、絶対パスを伴ったjava.io.Fileのコンストラクタによって書き込みハンドルを取得する。
【００２５】
図３に戻る。次にJAVAアプリケーション３０はjava.lang.Runtime#exec()を用いてホスト機械語コード４０’を実行する（ステップ３３、Ｔ３）。この時、実行されたホスト機械語コード４０’がラッパーライブラリ６０を最初にロードするように指定する（ステップ４１）。OSがLinuxの場合、環境変数LD_PRELOADを与えると、指定されたライブラリがすべてのライブラリに先立ってロードされる。そこでLD_PRELOADにラッパーライブラリ６０を指定する。java.lang.Runtime#exec()の戻り値はjava.lang.Processのオブジェクトだが、これは実行されたホスト機械語コード４０’のプロセスへのハンドルとなる。
【００２６】
次にJAVAアプリケーション３０はホスト機械語コード４０’の制御・監視を行う（ステップ３４）。そのために通信経路を作る。
例として、通信経路をUnix（登録商標）のパイプで実現する例を述べる。
InputStream is = process.getInputStream();
OutputStream os = process.getOutputStream();
【００２７】
ここでprocessは前述の実行されたホスト機械語コードプロセスへのハンドルである。InputStreamとOutputStreamはそれぞれ読み出し、書き込みハンドルである。これらはホスト機械語コードのプロセスの標準入出力とつながる。すなわちJAVAアプリケーション３０からOutputStreamを通じて書き出したデータはホスト機械語コード４０’の標準入力から読み込むことができ、またホスト機械語コード４０’の標準出力へ書き出したデータはJAVAアプリケーション３０のInputStreamから読むことができる。これを使ってJAVAアプリケーション３０とホスト機械語コード４０’が相互に通信する。
【００２８】
図５は本発明の第１の実施形態に係るホスト機械語コードの監視の動作をさらに詳しく説明するタイムチャートである。具体的には、図３に示したJAVAアプリケーション３０における「ホスト機械語コードの監視」（ステップ３４）に係る動作を詳しく説明するものである。図５においてまず、ホスト機械語コード４０’がラップされたライブラリ関数を呼び出す（Ｔ１１）と、最初にラッパーライブラリ６０の関数が呼び出される。例えばファイルをオープンする関数であるfopen()がラップされているとすると、最初にラッパーライブラリ６０のfopen()が呼び出される。fopen()は引数にオープンするファイルの名前とモード（読み込みか、書き込みか、読み書きかなど）をとる。
【００２９】
次にラッパーライブラリ６０のfopen()はこのファイルがこのモードでオープン可能かどうか、上述した通信経路を通じてJAVAアプリケーション３０に、さらにそこからJAVAフレームワーク２０を通じてJAVA VM１０に問い合わせる（Ｔ１２）。JAVA VM１０はパーミションチェックを行って許可または不許可をJAVAフレームワーク２０を介してJAVAアプリケーション３０に（Ｔ１３）、さらに上述した通信経路を通じてラッパーライブラリ６０のfopen()に返す（Ｔ１４）。なお、図５では、JAVAアプリケーション３０でパーミションチェックを行うように見えるが、実際のところは図５には示されていないJAVAフレームワーク２０を介してJAVA VM１０に問い合わせることに注意を要する。そしてパーミション許可の場合、ラッパーライブラリ６０のfopen()はさらに標準ライブラリのfopen()を呼び出し、結果をホスト機械語コード４０’に返す（Ｔ１５）。またパーミション不許可の場合（Ｔ１６）、ラッパーライブラリ６０のfopen()はホスト機械語コード４０’に失敗を返す（Ｔ１７）。
【００３０】
以上の動作を図３に戻って説明すると、ホスト機械語コード４０が実行される（ステップ４２）と、最初にラッパーライブラリ６０のfopen()が呼び出され、次いでラッパーライブラリ６０のfopen()は、オープン可能かどうか、通信経路を介してJAVAアプリケーション３０にさらにJAVAフレームワーク２０を通じてJAVA VM１０に問い合わせる（Ｔ４）。JAVA VM１０はセキュリティポリシーによるパーミションチェックを行って許可または不許可をJAVAフレームワーク２０に返し、JAVAフレームワーク２０はセキュリティポリシーに基づく許可または不許可をJAVAアプリケーション３０に与える（ステップ２４、Ｔ５）。JAVAアプリケーション３０は通信経路を介してラッパーライブラリ６０のfopen()に返す（Ｔ４）。これによりJAVAアプリケーション３０はホスト機械語コードの制御・監視を行う（ステップ３４）。
【００３１】
図６は本発明の第１の実施形態に係るラッパーライブラリのfopenの動作を説明するフローチャートである。fopenは呼び出し時にファイル名と読み出しモード“r”を指定して開始する（ステップ６１）。fopenはファイル操作なので、パーミションクラス名にjava.io.FilePermissionを指定し、fopen呼び出し時に与えられたファイル名とモードを指定して、JAVAアプリケーション３０に問い合せを行い（ステップ６２）、JAVAアプリケーション３０から結果を取得する（ステップ６３）。問い合せと結果取得は上述の通信経路を介して行う。パーミションの結果がOKならば（ステップ６４）、標準ライブラリをオープンし、標準ライブラリのfopenを呼び出し（ステップ６５）、ホスト機械語コード４０’にその結果を返す（ステップ６６）。パーミションの結果がOKでなければfopenの失敗を示すNULLをホスト機械語コード４０’に返す。パーミションの結果は、例えば整数の0をOKであると決めておく。
【００３２】
図７は本発明の第１の実施形態に係るJAVAアプリケーションとホスト機械語コードプロセスとの通信ループにおける動作を説明するためのフローチャートである。図７に示す通信ループでの動作フローでは、上述のInputStreamより一行入力されるのを待ち受け、次いで入力された行を語に分割する（ステップ７１）。そして最初の語がパーミションクラス名でなければ（ステップ７２）、ステップ７１の一行入力待ちに戻り、パーミションクラス名であれば（ステップ７２）、それに続く語をターゲットとアクションのパラメータとしてパーミションオブジェクトを作る（ステップ７３）。文字列からオブジェクトを作るにはJAVAのリフレクション機能を使う。
【００３３】
次に、できたパーミションオブジェクトに対してパーミションチェックを行う。パーミションチェックには例えばjava.security.AccessController#checkPermission()を使う。もし指定のターゲットに対して指定のアクションの許可が出ていなかったら例外が発生し、許可が出ていたら例外が発生しない（ステップ７４）。次に、上述のOutputStreamにパーミションチェックの結果を書き込む（ステップ７５，７６）。例えば、もし整数の0をOKであると決めておけば、例外が出なければ0、出たら0以外を書き込む。最後に再び一行入力待ちに戻る（ステップ７１）。ステップ７１でもしホスト機械語コード４０’のプロセスが終了したなどの原因で一行読み込みが失敗した時にはループを抜ける、すなわち終了する。
【００３４】
図８は本発明の第１の実施形態に係るホスト機械語コードの制御の動作をさらに詳しく説明するタイムチャートである。具体的には図３に示したJAVAアプリケーション３０における「ホスト機械語コードの制御」（ステップ３４）および「ホスト機械語コードの終了の検知」（ステップ３５）に係る動作を詳しく説明するものである。図８に示す例は、JAVAフレームワーク２０がJAVAアプリケーション３０を停止しようとした時、JAVAアプリケーション３０が子プロセスであるホスト機械語コード４０’を停止するものである。
【００３５】
JAVAフレームワーク２０がJAVAアプリケーション３０を停止したい場合、OSGiフレームワークならばorg.osgi.framework.Bundle#stop()を呼び出す（Ｔ２１）。するとJAVAアプリケーション３０がホスト機械語コード４０’のプロセスを停止させる（Ｔ２２）。これには上述の通信経路のOutputStreamに、あらかじめホスト機械語コード４０’との間で決められた形式のデータを書き込む。例えば、終了コマンドを”stop”という文字列と決め、”stop”という文字列を送ればホスト機械語コード４０’のプロセスが停止するように構成する。
【００３６】
JAVAアプリケーション３０によるホスト機械語コード４０’のプロセス停止の検知はjava.lang.Process#waitFor()を使えばよい。このメソッドはホスト機械語コード４０’のプロセスが実行している間はブロックされ、ホスト機械語コード４０’のプロセスが終了すると復帰する。ホスト機械語コード４０’のプロセス停止の検知がなされると（Ｔ２３）、JAVAアプリケーション３０は停止し、JAVAアプリケーション３０の停止はJAVAフレームワーク２０によって検知される（Ｔ２４）。
【００３７】
［第２の実施形態］
本発明の第２の実施形態に係るコンピュータシステム全体の構成は、図１に示した本発明の第１の実施形態に係るコンピュータシステム全体の構成と同じなので割愛する。しかし本発明の第２の実施形態は、第１の実施形態のJAVAアプリケーション３０の動作に、さらにいくつかのホスト機械語コードの中からホスト環境（OS、アーキテクチャ）に適合するものを選んで展開、実行する動作が追加されたものである。
【００３８】
図９は本発明の第２の実施形態に係るJARファイル構造を示す図である。図９に示すJAR(Java ARchiver)ファイルは、マニフェストファイル５１、デジタル署名５２、JAVAアプリケーション３０にさらに、ホスト機械語コード(x86-Linux用)４５とホスト機械語コード(SH-ITRON用)４６の二種類のホスト機械語コードを含む。
【００３９】
図１０(Ａ)は本発明の第２の実施形態におけるホスト機械語コードの展開における動作を説明するためのフローチャートを示す図であり、また図１０(Ｂ)は本発明の第２の実施形態におけるホスト環境（OS、アーキテクチャ）とホスト機械語コードの対応を示す表である。
【００４０】
図１０(Ａ)において、JAVAアプリケーション３０は、まずデジタル署名の真正性を証明し（ステップ８１）、証明されたら次にホスト環境（OS、アーキテクチャ）とホスト機械語コードの対応表に基づいてホスト環境のOSがLinuxでアーキテクチャがx86かを調べ（ステップ８２）、ホスト環境のOSがLinuxでアーキテクチャがx86であれば、ステップ８３においてa-x86-linuxを展開し、展開ができたら正常終了する（ステップ８４）。
【００４１】
一方、ステップ８２でホスト環境のOSがLinuxでアーキテクチャがx86ではなく、ホスト環境（OS、アーキテクチャ）とホスト機械語コードの対応表に基づいてホスト環境のOSがITRONでアーキテクチャがSHであれば、ステップ８６においてa-sh-itronを展開する。そして展開ができたら正常終了する（ステップ８４）。上記ステップ８１において証明されないときは異常終了する（ステップ８７）。また上記ステップ８５でホスト環境のOSがITRONでアーキテクチャがSHでなければ異常終了する（ステップ８７）。
【図面の簡単な説明】
【００４２】
【図１】本発明の第１の実施形態に係るコンピュータシステム全体の構成を示す図である。
【図２】本発明の第１の実施形態に係るJARファイルのデータ構造を示す図である。
【図３】本発明の第１の実施形態に係るコンピュータシステムの動作を説明するフローおよびシーケンスの動作図である。
【図４】本発明の第１の実施形態に係るホスト機械語コードの展開の動作をさらに詳しく説明するフローチャートである。
【図５】本発明の第１の実施形態に係るホスト機械語コードの監視の動作をさらに詳しく説明するタイムチャートである。
【図６】本発明の第１の実施形態に係るラッパーライブラリのfopenの動作を説明するフローチャートである。
【図７】本発明の第１の実施形態に係るJAVAアプリケーションとホスト機械語コードプロセスとの通信ループにおける動作を説明するためのフローチャートである。
【図８】本発明の第１の実施形態に係るホスト機械語コードの制御の動作をさらに詳しく説明するタイムチャートである。
【図９】本発明の第２の実施形態に係るJARファイルのデータ構造を示す図である。
【図１０Ａ】本発明の第２の実施形態におけるホスト機械語コードの展開における動作を説明するためのフローチャートを示す図である。
【図１０Ｂ】本発明の第２の実施形態におけるホスト環境（OS、アーキテクチャ）とホスト機械語コードの対応を示す表である。
【符号の説明】
【００４３】
１０  JAVA VM(JAVA仮想マシン)
２０  JAVAフレームワーク
３０  JAVAアプリケーション
４０  ホスト機械語コード(展開前)
４１  メインプログラム
４２〜４４  プラグイン
４５  ホスト機械語コード(x86-Linux用)
４６  ホスト機械語コード(SH-ITRON用)
４０’  ホスト機械語コード(展開後)
５０  JARファイル
５１  マニフェストファイル
５２  デジタル署名
６０  ラッパーライブラリ
【図１】
2007213349.tif 000003
【図２】
2007213349.tif 000004
【図３】
2007213349.tif 000005
【図４】
2007213349.tif 000006
【図５】
2007213349.tif 000007
【図６】
2007213349.tif 000008
【図７】
2007213349.tif 000009
【図８】
2007213349.tif 000010
【図９】
2007213349.tif 000011
【図１０Ａ】
2007213349.tif 000012
【図１０Ｂ】
2007213349.tif 000013