説明

情報処理装置、情報処理方法および情報処理プログラム

【課題】アプリケーションサーバフレームワークにおける同期実行・非同期実行制御を容易にして利用し易くする。
【解決手段】コントローラ211は、同期処理の実行と非同期処理の実行のうち少なくとも一方で処理することを指示されたデータをアプリケーション201から入力する。そして、入力されたデータから同期処理のデータを抽出する。そして、同期処理のデータが抽出された場合、同期処理のデータを同期処理し、同期処理された同期処理のデータと非同期処理のデータのうち少なくとも一方を、各データの処理に対応したコンポーネント220で実行させる。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、コンポーネントにおける処理を制御する情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【0002】
近年、コンポーネントの開発効率を高めることを目的として、HPC(ハイパフォーマンスコンピューティング)環境の提供を視野に入れた開発環境の提供が進んでいる。この開発環境として、サーバ・クライアントにより呼び出されるアプリケーションサーバフレームワークがある。
【0003】
このフレームワークは、厳密にはJAVA(登録商標)プログラムの生成および管理を行う超Lightweightコンテナというものに分類されており、単独で各種アプリケーションを構築するのではなく、EJBを用いたWebアプリケーションフレームワークやデスクトップアプリケーションの場合は、SwingなどのAPIと組み合わせて利用するのが一般的である。このフレームワークは、J2EEの機能に依存しているわけではないので、クライアントマシン上で動作するスタンドアロンアプリケーションやアプレットなどから利用することも可能である。
【0004】
こういった問題点を解決するため、従来技術として、JAVA(登録商標)の開発環境であるJ2 SE5(Java 2 Platform Standard Edition 5.0)では、Concurrency UtilitiesというAPI群が用意され、これによりある程度の簡略化は実現されていた。
【0005】
また、一般にデザインパターンと呼ばれるアルゴリズムのパターン群が広く知られており、これらはプログラミングにおける典型的な問題の効率的な解決策を示している。さらに、先述したHPC環境も視野に入れたデザインパターンも存在している(たとえば、非特許文献1参照。)。
【0006】
【非特許文献1】結城浩、「Java言語で学ぶデザインパターン入門 マルチスレッド編」、p.149−163、2002年
【発明の開示】
【発明が解決しようとする課題】
【0007】
しかしながら、以上のようなフレームワークを採用する場合、いくつかの問題が挙げられる。まず、MPI(Message Passing Interface)やサーバ・クライアントモデルのネットワークアプリケーション開発などでは、同期実行・非同期実行の制御機構が必要となる。しかし、非同期実行を行うためには、アプリケーション開発者は、別スレッドを作成し、その別スレッドの上で何らかの処理を行う必要があった。また、処理結果をアプリケーションに出力するためのリスナー(Listener)までを作成する必要があり、手間がかかっていた。
【0008】
また、コンポーネント(Component)の開発者は、同時生成されるインスタンスの数を意識してコンポーネントを開発する必要があり手間であった。また、コンポーネントの利用者は、コンポーネントの開発者が想定した範囲を超えた利用ができなかった。
【0009】
分散ネットワークを実現するためには、アプリケーション開発者はネットワーク関連のプログラミング知識を必要とされ、難しかった。また、分散ネットワーク環境に、処理速度の遅いマシンと速いマシンが混在すると、全体として処理速度の遅いマシンに足を引っ張られることになり、全体としてのパフォーマンスが低下するという問題があった。
【0010】
この発明は、上述した従来技術による問題点を解消するため、利用しやすくパフォーマンスの高いフレームワークを備えた情報処理装置、情報処理方法および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
上述した課題を解決し、目的を達成するため、請求項1の発明にかかる情報処理装置は、同期処理の実行と非同期処理の実行のうち少なくとも一方で処理することを指示されたデータを入力する入力手段と、前記入力手段によって入力されたデータから同期処理のデータを抽出する抽出手段と、前記抽出手段によって同期処理のデータが抽出された場合、前記同期処理を実行する処理手段と、前記処理手段によって実行された同期処理のデータと前記抽出手段によって抽出された非同期処理のデータのうち少なくとも一方を、各処理のデータに対応したコンポーネントで実行させる制御手段と、を備えたことを特徴とする。
【0012】
この請求項1の発明によれば、同期実行・非同期実行の処理をフレームワーク側で吸収することにより、同一のコンポーネントを必要に応じて同期実行・非同期実行を呼び分けることができる。
【0013】
また、請求項2の発明にかかる情報処理装置は、請求項1に記載の発明において、前記データは、複数のスレッドにより処理され、前記処理手段は、前記複数のスレッドをそれぞれ保持し、各入力データをそれぞれのタイミングにおいて各スレッドに対応した
コンポーネントに実行させることを特徴とする。
【0014】
この請求項2の発明によれば、プーリングするコンポーネントのインスタンスの数をコンポーネント毎のプロパティファイルで制御できる。これにより、コンポーネントの利用者は、実装に依存せずにインスタンスの数を制御することができる。
【0015】
また、請求項3の発明にかかる情報処理装置は、請求項1または2に記載の発明において、前記データは、複数のスレッドにより処理され、前記処理手段は、前記複数のスレッドをそれぞれ保持し、各前記データをそれぞれのタイミングにおいて各前記データに対応したサーバに送り、前記サーバからは受信した前記データの実行結果を受け取ることを特徴とする。
【0016】
請求項3の発明によれば、同期・非同期の制御をスタンドアローンに近い構成でネットワーク対応することができる。また、サーバ側のコンポーネントをスタンドアローンと同様に分散して処理することができる。
【0017】
請求項4の発明にかかる情報処理方法は、同期処理の実行と非同期処理の実行のうち少なくとも一方で処理することを指示されたデータを入力する入力工程と、前記入力工程によって入力されたデータから同期処理のデータを抽出する抽出工程と、前記抽出工程によって同期処理のデータが抽出された場合、前記同期処理のを実行する処理工程と、前記処理工程によって実行された同期処理のデータと前記抽出工程によって抽出された非同期処理のデータのうち少なくとも一方を、各処理のデータに対応したコンポーネントで実行させる制御工程と、含むことを特徴とする。
【0018】
この請求項4の発明によれば、同期実行・非同期実行の処理をフレームワーク側で吸収することにより、同一のコンポーネントを必要に応じて同期実行・非同期実行を呼び分けることができる。
【0019】
請求項5の発明にかかる情報処理方法は、請求項4に記載の情報処理方法において、前記データは、複数のスレッドにより処理され、前記処理工程は、前記複数のスレッドをそれぞれ保持し、各入力データをそれぞれのタイミングにおいて各スレッドに対応したコンポーネントに実行させることを特徴とする。
【0020】
この請求項5の発明によれば、プーリングするコンポーネントのインスタンスの数をコンポーネント毎のプロパティファイルで制御できる。これにより、コンポーネントの利用者は、実装に依存せずにインスタンスの数を制御することができる。
【0021】
請求項6の発明にかかる情報処理方法は、請求項4または5に記載の情報処理方法において、前記データは、複数のスレッドにより処理され、前記処理工程は、前記複数のスレッドをそれぞれ保持し、各前記データをそれぞれのタイミングにおいて各前記データに対応したサーバに送り、前記サーバからは受信した前記データの実行結果を受け取ることを特徴とする。
【0022】
請求項6の発明によれば、同期・非同期の制御をスタンドアローンに近い構成でネットワーク対応することができる。また、サーバ側のコンポーネントをスタンドアローンと同様に分散して処理することができる。
【0023】
請求項7の発明にかかる情報処理プログラムによれば、請求項4〜6に記載の情報処理方法をコンピュータに実行させることができる。
【発明の効果】
【0024】
本発明にかかる情報処理装置、情報処理方法および情報処理プログラムによれば、同期処理・非同期処理の制御にあたって余計な処理を必要とせず、利用しやすくパフォーマンスの高いフレームワークを提供することができるという効果を奏する。
【発明を実施するための最良の形態】
【0025】
以下に添付図面を参照して、この発明による情報処理装置、情報処理方法および情報処理プログラムの実施の形態を詳細に説明する。
【0026】
(実施の形態)
図1は、この発明の実施の形態による情報処理装置のハードウエア構成の一例を示すブロック図である。図中、CPU101は装置全体を制御する。ROM102は基本入出力プログラムを記憶する。RAM103はCPU101のワークエリアとして使用される。また、HDD(ハードディスクドライブ)104はCPU101の制御にしたがってHD(ハードディスク)105に対するデータのリード/ライトを制御する。HD105はHDD104の制御にしたがって書き込まれたデータを記憶する。
【0027】
また、FDD(フレキシブルディスクドライブ)106はCPU101の制御にしたがってFD(フレキシブルディスク)107に対するデータのリード/ライトを制御する。FD107は、着脱自在であり、FDD106の制御にしたがって書き込まれたデータを記憶する。また、CD−RWドライブ108はCPU101の制御にしたがってCD−RW(または、CD−R、CD−ROM)109に対するデータのリード/ライトを制御する。CD−RW109は着脱自在であり、CD−RWドライブ108の制御にしたがって書き込まれたデータを記憶する。
【0028】
また、ディスプレイ110はカーソル、メニュー、ウィンドウ、あるいは文字や画像などの各種データを表示する。キーボード111は文字、数値、各種指示などの入力のための複数のキーを備える。マウス112は各種指示の選択や実行、処理対象の選択、マウスポインタの移動などを行う。
【0029】
また、ネットワークI/F113は、通信ケーブル114を介してLANやWANなどのネットワークに接続され、当該ネットワークとCPU101とのインターフェースとして機能する。バス120は上記各部を接続する。
【0030】
図2は、同期・非同期を管理するための待ち行列の制御機構の構成を説明するブロック図である。このシステムは、指示処理部200、フレームワーク210、コンポーネント220によって構成されている。指示処理部200からのコンポーネント220への処理要求をフレームワーク210が管理する形になっている。図2において、指示処理部200、フレームワーク210、コンポーネント220は、それぞれ機能的な構成を示しており、図1に示したCPU101が、ROM102から読み出されてプログラムに基づいて、RAM103をワークエリアとして使用することにより実行する。
【0031】
指示処理部200は、アプリケーション201およびリスナー202によって構成されている。アプリケーション201は、フレームワーク210にデータを出力する。そして、フレームワーク210を介して実行された結果が戻ってくるので、リスナー202は、その結果を受け取ってアプリケーション201に通知する。
【0032】
フレームワーク210は、コントローラ211、キュー212、リスナー213によって構成される。コントローラ211は、APIによって構成され、アプリケーション201からのデータを受け取る。データは複数のスレッドにより構成される。コントローラ211は、受け取ったスレッドをキュー212に入力し、順次コンポーネント220に出力する。キュー212は、コントローラ211からのスレッドを保持する。同期の場合は一定のタイミングが経過したら、非同期の場合はリスナー213からのフィードバックが入力されたら、コンポーネント220に出力する。
【0033】
コンポーネント220は、処理を受け取って実行する。非同期処理の場合は、処理後にリスナー213に、処理の終了を通知する。そして、リスナー213が、リスナー202に通知する。同期処理の場合は、リスナー212がタイミングを管理し、コントローラ211に通知する。
【0034】
コントローラ211は、同期・非同期用APIを介して適切にスレッド管理を実行する。同期呼び出しは、非同期処理を同期化することで実現する。同期呼び出しの場合は、結果をリスナー213へコールバックする。同期呼び出しの場合:結果をコントローラ211でフックしてアプリケーション201へ返す。
【0035】
図3は、同期・非同期を管理するための待ち行列の制御処理を説明するフローチャートである。図3を用いて、図2のフレームワーク210の制御処理を説明する。まず、アプリケーション201からの処理の呼び出しにより、処理が開始する。コントローラ211は、この呼び出しを受けて、非同期処理のためにキュー212にプッシュ(push)処理を実行する(ステップS301)。なお、ここではキュー212のうち、非同期処理の待ち行列にプッシュする。
【0036】
次に、この処理が同期処理か否かを判定する(ステップS302)。同期処理でない場合(ステップS302:No)、処理をキュー212から取り出し、FIFOを用いることによりポップ(pop)処理を実行する(ステップS303)。なお、ここではキュー212のうち、非同期処理の待ち行列にプッシュされていたスレッドの処理をプッシュする。同期処理の場合(ステップS302:Yes)、同期化のため、キュー212にプッシュ処理を実行する(ステップS305)。なお、ここではキュー212のうち、同期処理の待ち行列にプッシュする。
【0037】
そして、キュー212において、処理が行列の先頭であるか否かを判定する(ステップS306)。行列の先頭の場合(ステップS306:Yes)、ステップS303に進む。行列の先頭でない場合(ステップS306:No)、終了通知まで待機して、LIFOを用いることによりポップ処理を実行する(ステップS307)。なお、ここではキュー212のうち、同期処理の待ち行列にプッシュされていた処理の実行をポップする。そして、ステップS306に戻る。ステップS303の実行後、取り出した処理をコンポーネント220で実行し、結果を返す(ステップS304)。それにより、一連の処理を終了する。終了後、結果が出力される。
【0038】
以上のように、同期実行・非同期実行の処理をフレームワーク側で吸収することにより、アプリケーションの開発者は同一のコンポーネントを必要に応じて同期実行・非同期実行を呼び分けることができるようになる。これは、フレームワーク210の内部で、別スレッドの管理や入力データの待ち行列の管理を行うことにより実現されている。フレームワーク210では、すべての処理は非同期に行われるが、非同期処理をフックすることにより、同期実行をサポートしている。
【0039】
図4は、コンポーネントのインスタンスをプーリングする機構の構成を説明するブロック図である。このシステムは、指示処理部400、フレームワーク410、コンポーネント420、コンポーネント421によって構成されている。図2と異なり、コンポーネントが1つではなく複数を含む構成となっており、この複数のコンポーネントにそれぞれ処理させる。指示処理部400からのコンポーネント420およびコンポーネント421への処理要求をフレームワーク410が管理する。図4において、指示処理部400、フレームワーク410、コンポーネント420、コンポーネント421は、それぞれ機能的な構成を示しており、図1に示したCPU101が、ROM102から読み出されてプログラムに基づいて、RAM103をワークエリアとして使用することにより実行する。
【0040】
指示処理部400は、アプリケーション401およびリスナー402によって構成されている。アプリケーション401は、フレームワーク410にデータを出力する。そして、フレームワーク410を介して実行された結果が戻ってくるので、リスナー402は、その結果を受け取ってアプリケーション401に通知する。
【0041】
フレームワーク410は、コントローラ411、キュー412、ダイレクトリスナー413、ソートリスナー414によって構成される。コントローラ411は、APIによって構成され、アプリケーション401からのデータを受け取る。データは複数のスレッドにより構成される。コントローラ411は、受け取ったスレッドをキュー412に入力する。キュー412は、コントローラ411によって入力されたスレッドを保持する。
【0042】
そして、スレッドがキュー412からコンポーネント420またはコンポーネント421に出力される。図4の場合、インスタンスは複数設定されており、インスタンス数に応じた数のコンポーネントが生成されるので、スレッドも、コンポーネント420〜421のそれぞれ対応したところに出力される。設定されたインスタンス数のコンポーネントが生成されプーリングされる。また、キュー412に積まれたスレッドは、各コンポーネントにより自律的に処理される。
【0043】
コンポーネント420〜421は、スレッドを受け取り、処理を実行する。非同期処理の場合は、処理後にソートリスナー413に、処理の終了を通知する。そして、ソートリスナー413が、リスナー402に通知する。ダイレクトリスナー412は、処理結果を終了順でリスナー402へコールバックする。ソートリスナー413は、処理結果を依頼順(順番保証)でリスナー402へコールバックする。
【0044】
図5は、コンポーネントのインスタンスをプーリングする制御処理を説明するフローチャートである。図5を用いて、図4のフレームワーク410の制御処理を説明する。まず、データを非同期処理のためにキュー412にプッシュする(ステップS501)。次に、このデータが同期処理か否かを判定する(ステップS502)。同期処理でない場合(ステップS502:No)、ステップS504に進む。同期処理の場合(ステップS502:Yes)、キュー412において待ち行列を用いて同期化処理を実行する(ステップS503)。
【0045】
次に、キュー412から処理を取り出し、FIFOでプッシュされていた処理をポップする(ステップS504)。そして待機中スレッドで処理を実行する(ステップS505)。そして、処理を実行して結果を返す(ステップS506)。すなわち、コンポーネント420〜421のうち各データに対応するところでスレッドの処理を実行する。結果は、ソートリスナー414に返される。次に、処理結果について、キャッシュソートを実行して出力する(ステップS507)。そして、一連の処理を終了する。終了後、結果が出力される。
【0046】
以上のように、フレームワーク410により生成されたコンポーネントは、フレームワーク410内にプーリングされることにより、MPI(Message Passing Interface)やサーバ・クライアントモデルのネットワークアプリケーションなどにおいて効率的に処理できる。フレームワーク410では、プーリングするコンポーネントのインスタンスの数をコンポーネント毎のプロパティファイルで制御できる。これにより、コンポーネントの利用者は、実装に依存せずにインスタンスの数を制御できる。
【0047】
図6は、分散ネットワークを実現するためのエージェント機構の構成を説明するブロック図である。このシステムは、指示処理部600、クライアントフレームワーク610、分散フレームワーク620、分散フレームワーク630によって構成されている。指示処理部600からの分散フレームワーク620および分散フレームワーク630への処理要求を、クライアントフレームワーク610が管理する。図6において、指示処理部600、クライアントフレームワーク610、分散フレームワーク620、分散フレームワーク630は、それぞれ機能的な構成を示しており、図1に示したCPU101が、ROM102から読み出されてプログラムに基づいて、RAM103をワークエリアとして使用することにより実行する。
【0048】
指示処理部600は、アプリケーション601およびリスナー602によって構成されている。アプリケーション601は、クライアントフレームワーク610にデータを出力する。そして、クライアントフレームワーク610を介して実行された結果が戻ってくるので、リスナー602は、その結果を受け取ってアプリケーション601に通知する。
【0049】
クライアントフレームワーク610は、コントローラ611、キュー612、ダイレクトリスナー613、ソートリスナー614によって構成される。コントローラ611は、APIによって構成され、アプリケーション601からのデータを受け取る。データは複数の処理のデータにより構成される。コントローラ611は、受け取った処理をキュー612に入力し、順次分散フレームワーク620および分散フレームワーク630に出力する。キュー612は、コントローラ611によって入力された処理のデータを保持する。そして、処理が、キュー612から分散フレームワーク620または分散フレームワーク630の処理に対応するところに出力される。
【0050】
分散フレームワーク620および630は、処理を受け取って実行する。分散フレームワーク620は、サーバ621、コンポーネント622〜623によって構成されている。分散フレームワーク630も同様の構成である。サーバ621は、キュー612から処理要求を受け取り、コンポーネント622〜623の対応するものに出力する。コンポーネント622〜623は、それぞれ処理を実行してサーバ621に返す。そして、処理の終了をリスナー613に返す。そして、リスナー613は、処理結果を受け取るとリスナー602に通知する。
【0051】
この図6に示した分散ネットワークを実現するためのエージェント機構の処理は、図5に示したフローチャートと同様である。図5においては複数のコンポーネントへの処理を制御していたが、ここでは複数のサーバに対して制御を実行する。各サーバにおいてはそれぞれ複数のコンポーネントを持つ場合があり、各サーバにおいて処理を制御する。
【0052】
このように、スタンドアローンとほとんど同じ構成でネットワーク対応が可能である。また、サーバ側のコンポーネントをスタンドアローンと同様に分散可能である。クライアント側では、クライアント側でのAPI実装の変更は最小限にする。一方、サーバ側では、スタンドアローン構成と同じものをサーバ起動する。
【0053】
以上のように、ネットワーク関連処理をすべてクライアントフレームワーク610および分散フレームワーク620〜630側で吸収する。それにより、アプリケーション601の開発者は同一のコンポーネントを必要に応じてスタンドアローンとしても、分散ネットワークとしても処理することができる。また、コンポーネント622〜623毎に入力データをキュー612で一括管理することにより、処理性能が異なるマシンが混在する環境においても、優れたパフォーマンスを示すことができる。
【0054】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【産業上の利用可能性】
【0055】
以上のように、本発明にかかる情報処理装置、情報処理方法および情報処理プログラムは、パフォーマンスの高いナレッジコンポーネントの利用にあたって有用である。
【図面の簡単な説明】
【0056】
【図1】この発明の実施の形態による情報処理装置のハードウエア構成の一例を示すブロック図である。
【図2】同期・非同期を管理するための待ち行列の制御機構の構成を説明するブロック図である。
【図3】同期・非同期を管理するための待ち行列の制御処理を説明するフローチャートである。
【図4】コンポーネントのインスタンスをプーリングする機構の構成を説明するブロック図である。
【図5】コンポーネントのインスタンスをプーリングする制御処理を説明するフローチャートである。
【図6】分散ネットワークを実現するためのエージェント機構の構成を説明するブロック図である。
【符号の説明】
【0057】
101 CPU
102 ROM
103 RAM
104 HDD
105 HD
106 FDD
107 FD
108 CD−RWドライブ
109 CD−RW
110 ディスプレイ
111 キーボード
112 マウス
113 ネットワークI/F
114 通信ケーブル
120 バス
200 指示処理部
201 アプリケーション
210 フレームワーク
211 コントローラ
212 キュー
220 コンポーネント

【特許請求の範囲】
【請求項1】
同期処理の実行と非同期処理の実行のうち少なくとも一方で処理することを指示されたデータを入力する入力手段と、
前記入力手段によって入力されたデータから同期処理のデータを抽出する抽出手段と、
前記抽出手段によって同期処理のデータが抽出された場合、前記同期処理を実行する処理手段と、
前記処理手段によって実行された同期処理のデータと前記抽出手段によって抽出された非同期処理のデータのうち少なくとも一方を、各データの処理に対応したコンポーネントで実行させる制御手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記データは、複数のスレッドにより処理され、前記処理手段は、前記複数のスレッドをそれぞれ保持し、各入力データをそれぞれのタイミングにおいて各スレッドに対応したコンポーネントに実行させることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記データは、複数のスレッドにより処理され、前記処理手段は、前記複数のスレッドをそれぞれ保持し、各前記データをそれぞれのタイミングにおいて各前記データに対応したサーバに送り、前記サーバからは受信した前記データの実行結果を受け取ることを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
同期処理の実行と非同期処理の実行のうち少なくとも一方で処理することを指示されたデータを入力する入力工程と、
前記入力工程によって入力されたデータから同期処理の処理のデータを抽出する抽出工程と、
前記抽出工程によって同期処理のデータが抽出された場合、前記同期処理を実行する処理工程と、
前記処理工程によって同期処理された同期処理のデータと前記抽出工程によって抽出された非同期処理のデータのうち少なくとも一方を、各処理のデータに対応したコンポーネントで実行させる制御工程と、
を含むことを特徴とする情報処理方法。
【請求項5】
前記データは、複数のスレッドにより処理され、前記処理工程は、前記複数のスレッド
をそれぞれ保持し、各入力データをそれぞれのタイミングにおいて各スレッドに対応した
コンポーネントに実行させることを特徴とする請求項4に記載の情報処理方法。
【請求項6】
前記データは、複数のスレッドにより処理され、前記処理工程は、前記複数のスレッドをそれぞれ保持し、各前記データをそれぞれのタイミングにおいて各前記データに対応したサーバに送り、前記サーバからは受信した前記データの実行結果を受け取ることを特徴とする請求項4または5に記載の情報処理方法。
【請求項7】
請求項4〜6のいずれか一つに記載の情報処理方法をコンピュータに実行させることを特徴とする情報処理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2007−114902(P2007−114902A)
【公開日】平成19年5月10日(2007.5.10)
【国際特許分類】
【出願番号】特願2005−303713(P2005−303713)
【出願日】平成17年10月18日(2005.10.18)
【出願人】(390024350)株式会社ジャストシステム (123)