JP2016091460A - 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム - Google Patents

情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム Download PDF

Info

Publication number
JP2016091460A
JP2016091460A JP2014228181A JP2014228181A JP2016091460A JP 2016091460 A JP2016091460 A JP 2016091460A JP 2014228181 A JP2014228181 A JP 2014228181A JP 2014228181 A JP2014228181 A JP 2014228181A JP 2016091460 A JP2016091460 A JP 2016091460A
Authority
JP
Japan
Prior art keywords
information
load
library file
request
load request
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.)
Granted
Application number
JP2014228181A
Other languages
English (en)
Other versions
JP6409514B2 (ja
Inventor
圭祐 梶ヶ谷
Keisuke Kajigaya
圭祐 梶ヶ谷
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2014228181A priority Critical patent/JP6409514B2/ja
Priority to US14/879,305 priority patent/US9477498B2/en
Priority to CN201510761977.XA priority patent/CN105589715B/zh
Publication of JP2016091460A publication Critical patent/JP2016091460A/ja
Application granted granted Critical
Publication of JP6409514B2 publication Critical patent/JP6409514B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】複数のアプリケーションが、同名でロード要求され、かつ内容が異なる複数のライブラリを適切に利用する情報処理装置等を提供する。【解決手段】情報処理装置1は、ライブラリファイルの内容を識別する識別子情報を生成し、ライブラリファイルに含まれるロード要求11の対象となりうる部分を表す要求対象情報と識別子情報との対応関係を表すロード要求対応情報7を生成する識別子生成部2と、実行されているアプリケーションからのロード要求11及びロード要求対応情報7に基づいて、ロード要求11の対象を含むライブラリファイルの識別子情報を求めるロード要求解釈部4と、ライブラリファイルに含まれる各部のロード状態を表すロード状態情報8に基づいて、ロードを要求された部分がロードされていないと判断した場合に、求めた識別子情報が示すライブラリファイルから、ロードを要求された部分をロードし、応答を返すロード部3と、を備える。【選択図】図1

Description

本発明は、アプリケーションプログラムを実行可能な情報処理装置(コンピュータ)におけるライブラリのロード技術に関する。
アプリケーションプログラムを実行可能な情報処理装置において、機能を実行する際に、その機能を実現するプログラムを含むライブラリをロードする方法が存在する。例えば、Java(登録商標)においては、クラスローダと呼ばれるモジュールが、アプリケーションによるクラスのロード要求に応じて、ライブラリからプログラムをロードすることが一般的である。
また、ライブラリには、機能強化または提供元の違いなどによって、同名であっても内容の異なる様々なバージョンが存在することが知られている。例えば、アプリケーションの実行環境を提供するアプリケーションサーバが利用するライブラリと、アプリケーションが利用する同名のライブラリのバージョンが異なる場合がある。このような場合、クラスローダが、あるクラス名に対するロード要求に対して、同じクラス名のプログラムを含む異なるバージョンのライブラリをロードする可能性がある。もし、クラスローダが、アプリケーションのロード要求に対して、アプリケーションサーバのライブラリをロードした場合、アプリケーションが正常動作しないという問題が発生する。すなわち、クラスローダは、アプリケーションに応じて、複数の同名のライブラリから適正なライブラリを選んでロードしなければならない。
このような問題に対する関連技術として、特許文献1には、1つのJVM(Java Virtual Machine)において、複数のアプリケーションプログラムが、同名のクラスを含む異なるライブラリを利用できる情報処理装置が開示されている。この特許文献1に記載された情報処理装置においては、利用者等が、ライブラリおよびプログラムに関する属性を、あらかじめテーブル情報として設定する。そして、設定手段が、テーブル情報に基づいてプログラムの配給元を判別し、判別した配給元に応じて、ライブラリファイルのパスを設定する。このようにして、この情報処理装置は、プログラムの実行中に呼び出されるライブラリファイルのパスを切り替えることができる。
また、特許文献2には、実行するアプリケーションプログラムの配給元に応じて、ライブラリファイルのパスの設定を変更する情報処理装置が開示されている。この特許文献2に記載された情報処理装置においては、利用者が、ライブラリのバージョンに関する情報をあらかじめマニフェストファイルなどに記述する。そして、クラスローダが、要求されたクラスをロードする際に、バージョン情報に基づいて、アプリケーションが提供するクラスライブラリか、同名のシステムライブラリかのどちらかを選択する。
また、特許文献3には、オブジェクト指向プログラミング言語で記述されたプログラムを実行する情報処理装置において、希望するバージョンのクラスをロードする情報処理装置が開示されている。この特許文献3に記載された情報処理装置においては、外部定義記憶部が、クラスローダごとに、ロード対象にするクラスの完全修飾クラス名とロード元とが記録されている。そして、委譲モデル介入手段が、クラスローダを実現するためのクラスが生成されたときに、外部定義記憶部に定義されたロード元からクラスをロードする委譲モデル介入用のバイトコードを、生成された当該クラスに挿入する。このようにして、子の情報処理装置は、実行されるプログラムに応じて、クラスライブラリのロード元を切り替えることができる。
特開2010−113474号公報 特開2007−206965号公報 特開2013−196453号公報
しかしながら、特許文献1乃至3に開示された情報処理装置においては、複数のアプリケーションを実行する際、同じ内容のライブラリであってもアプリケーションごとにロードしてしまうので、メモリ使用量が増大するという問題がある。例えば、これらの情報処理装置において同じアプリケーションを複数実行した場合、クラスローダが、すでにロードされた同じライブラリを、後から実行されたアプリケーションに対してもロードしてしまう。
本発明の一つの目的は、同じ内容のライブラリを多重にロードすることによるメモリ使用量の増大を抑えつつ、複数のアプリケーションが、同名でロード要求され、かつ内容が異なる複数のライブラリを、適切に利用できる情報処理装置等を提供することにある。
上記の目的を達成すべく、本発明の一態様に係る情報処理装置は、以下の構成を備えることを特徴とする。
すなわち、本発明の一態様に係る情報処理装置は、
ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、前記識別子情報と前記ロード要求対応情報を記憶装置に保存出力する識別子生成手段と、
実行されているアプリケーションから前記ロード要求を受け付け、前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求め、前記ロード要求の対象を表す要求対象情報と、前記求めた識別子情報を出力するロード要求解釈手段と、
前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報を管理し、前記ロード状態情報に基づいて、前記ロードを要求の対象を表す要求対象情報および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記要求対象情報、および前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、前記ロード要求に対する応答を返すロード手段とを備える。
また、上記の同目的を達成すべく、本発明の一態様に係るライブラリロード方法は、情報処理装置によって、
ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、
前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、
前記ロード要求対応情報を記憶装置に保存し、
実行されているアプリケーションからロード要求を受け付けた際、
前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求め、
前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報に基づいて、前記ロード要求の対象を表す要求対象情報、および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、さらに、前記ロード状態情報にロードしたことを登録し、
前記ロード要求に対する応答を返す。
また、同目的は、上記の各構成を有する情報処理装置、並びに対応する方法をコンピュータによって実現するコンピュータ・プログラム、およびそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
本発明には、複数のアプリケーションが、メモリ使用量の増大を抑制しながら、同名かつ内容が異なる複数のライブラリを適切に利用できるという効果がある。
本発明の第1の実施形態に係る情報処理装置1の構成を示すブロック図である。 本発明の第2の実施形態に係るアプリケーションサーバの構成を示すブロック図である。 第2の実施形態におけるクラスロード部110の構成、および、クラスロード部110の各構成と記憶装置105に格納された情報との対応関係を示す図である。 第2の実施形態において、アプリケーション配備部101および固有ID生成部102が行うアプリケーションの配備動作を示すフローチャートである。 第2の実施形態において、アプリケーション120および130、並びにクラスロード部110が行うクラス要求に対するロード動作を示すフローチャートである。 第2の実施形態において、アプリケーション配備部101が行うアプリケーションの配備を解除する動作を示すフローチャートである。 第2の実施形態におけるパッケージ名対応テーブル127の一例を示す図である。 第2の実施形態におけるパッケージ名対応テーブル137の一例を示す図である。 第2の実施形態における固有IDテーブル106の一例を示す図である。 本発明の各実施形態、および、その変形例に係る情報処理装置またはアプリケーションサーバに適用可能なコンピュータ(情報処理装置)の構成を例示する図である。
次に、本発明の実施形態について図面を参照して詳細に説明する。
<第1の実施形態>
図1は、本発明の第1の実施形態に係る情報処理装置1の構成を示すブロック図である。図1を参照すると、本実施形態に係る情報処理装置1は、識別子生成部2、ロード部3、ロード要求解釈部4、および記憶装置5を含む。
情報処理装置1は、CPU(Central Processing Unit:図示せず)を用いて実行されるコンピュータ・プログラム(ソフトウェア・プログラム)の制御により動作する一般的な情報処理装置(コンピュータ)によって構成されても良い。または、情報処理装置1の各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、この情報処理装置1をコンピュータによって実現したハードウェア構成例については、図10を参照して後述する。
記憶装置5は、例えば、半導体メモリ装置やディスク装置により実現される。記憶装置5は、ロード要求対応情報7、ロード状態情報8を格納することができる。
識別子生成部2は、ライブラリファイル10ごとに、ライブラリファイル10の内容を識別する識別子情報を生成する。すなわち、識別子情報は、ライブラリファイル10の内容の違いを識別することができる情報である。識別子生成部2は、例えば、同名で異なるバージョン(すなわち、異なる内容)のライブラリファイル10に対して、異なる識別子情報を生成する。識別子生成部2がライブラリファイル10ごとの内容の違いを識別する方法としては、例えば、ハッシュの生成、または、ファイルの比較のように、良く知られた一般的な技術を採用することができる。
さらに、識別子生成部2は、ライブラリファイル10に含まれているロード要求の対象となりうる部分を表す要求対象情報と、生成した識別子情報との対応関係を表すロード要求対応情報7を生成する。ここで、「ロード要求の対象となりうる部分」とは、アプリケーションの実行中に、アプリケーションが発行するロード要求11において指定されるロードの対象であるライブラリファイル10の部分(プログラム)である。要求対象情報は、アプリケーションの言語に応じて、例えば、クラス名、関数名、または、それらの名前とライブラリ名の組み合わせなどとして表される。なお、ライブラリファイル10は、1つ以上のロード要求対象となるプログラムを含むことができる。識別子生成部2は、生成したロード要求対応情報7を記憶装置5に保存する。
ロード要求解釈部4は、実行されているアプリケーションから、ロード要求11を受け付ける。そして、ロード要求解釈部4は、ロード要求11の対象を表す要求対象情報およびロード要求対応情報7に基づいて、ロード要求11の対象を含むライブラリファイル10の識別子情報を求める。すなわち、ロード要求解釈部4は、ロード要求11が、どのライブラリファイル10に対して発行されたかを解釈し、解釈したライブラリファイル10を識別子情報として表す。
ロード部3は、ライブラリファイル10に含まれる各部のロード状態を表すロード状態情報8を、識別子情報ごとに管理する。そして、ロード部3は、ロード状態情報8に基づいて、ロード要求11の対象を表す要求対象情報と、ロード要求解釈部4が求めた識別子情報が示すライブラリファイル10の部分(以下、「ロードを要求された部分」と言う)がロードされているか否かを判断することができる。
ロード部3は、ロード要求11の対象を表す要求対象情報、ロード要求解釈部4が求めた識別子情報、およびロード状態情報8に基づいて、ロードを要求された部分がまだロードされていないと判断した場合は、識別子情報が示すライブラリファイル10から、少なくとも要求対象情報が示す部分をロードする。そして、ロード部3は、少なくともライブラリファイル10から要求対象情報が示す部分をロードしたことを、ロード状態情報8に登録する。なお、ロード部3は、ロード状態情報8を、記憶装置5に記憶する。そして、ロード部3は、ロード要求11に対する応答を返す。
一方、ロード部3は、ロードを要求された部分が既にロードされていると判断した場合は、何もロードせずに、ロード要求11に対する応答を返す。。すなわち、ロード部3は、識別子情報に基づいて、同じ内容のライブラリファイル10が多重にロードされることを防ぐ。
このように、本実施形態には、複数のアプリケーションが、同名でロード要求され、かつ内容が異なる複数のライブラリを、適切に利用できるという効果がある。また、本実施形態には、同じ内容のライブラリを多重にロードすることによるメモリ使用量の増大を抑えることができるという効果もある。すなわち、本実施形態によれば、同じ内容のライブラリを多重にロードすることによるメモリ使用量の増大を抑えつつ、複数のアプリケーションが、同名でロード要求され、かつ内容が異なる複数のライブラリを、適切に利用できる情報処理装置等を提供することができる。なお、この効果は、ロード要求における対象の名称、または、ライブラリファイルの名称が異なるが同じ内容である場合にも発揮される。すなわち、本実施形態は、どのようなロード要求がなされても、同じ内容のライブラリを多重にロードしないように制御することが可能である。
その理由は、識別子生成部2が生成する識別子情報によって、同名でロード要求されるライブラリファイル10の内容の違いを識別することができるからである。また、ロード要求解釈部4が、ロード要求11の対象を含むライブラリファイル10を、ライブラリファイルの名前ではなく、ライブラリファイルの内容ごとに割り当てられる識別子情報として解釈するからである。そして、ロード部3が、識別子情報に基づいて、同じ内容のライブラリファイル10が多重にロードされることを防ぐからである。
また、本実施形態には、ライブラリファイル10またはアプリケーションに関する事前情報を準備する必要がないという効果がある。「背景技術」欄において上述した特許文献1乃至3は、ライブラリおよびプログラムに関する属性、バージョン情報、またはロード元などの事前に準備した情報を情報処理装置に与える手間が掛かるという問題があった。しかし、本実施形態には、そのような事前情報を準備する手間は掛からない。
その理由は、識別子生成部2が、ライブラリファイル10に含まれているロード要求の対象を表す要求対象情報と、生成した識別子情報との対応関係を表すロード要求対応情報7を、自動的に生成するからである。
なお、本実施形態の変形例としては、以下のようなものが考えられる。
例えば、識別子生成部2は、ロード要求対象情報7を生成する際に、あらかじめ準備された、ライブラリファイル10に含まれるロード要求の対象となりうる部分に関する情報を利用してもよい。具体的には、例えば、良く使われるライブラリファイル10に関して、そのライブラリファイル10に含まれる関数名の一覧情報を作成しておく。識別子生成部2は、ライブラリファイル10と共にその一覧情報を取得する。そして、識別子生成部2は、ライブラリファイル10を調査する代わりに、その一覧情報に基づいて、ロード要求対象情報7を生成してもよい。このようにすれば、識別子生成部2は、ライブラリファイル10から関数名を取得する処理の時間を短縮することができる。なお、本変形例において準備する上記の情報は、例えば、時間を短縮する効果が高い一部のライブラリファイル10を選んで作成してもよい。
以上、説明したように本変形例には、アプリケーションからロード要求を受ける前に行う処理の時間が短縮できるという効果がある。
その理由は、識別子生成部2が、ロード要求対象情報7を生成する際に、ライブラリファイル10に対するロード要求の対象となりうる部分の調査を行わずに済むからである。
<第2の実施形態>
次に、上述した第1の実施形態を基本とする第2の実施形態について説明する。以下では、第2の実施形態に係る特徴的な部分を中心に説明し、第1の実施形態と同様な構成を有する第2の実施形態の構成要素には、第1の実施形態で付した参照符号と同一の参照符号を付し、その構成要素について重複する詳細な説明は省略する。
本実施形態は、一例として、Javaアプリケーションサーバ(以下、単に「アプリケーションサーバ」と言う)に本発明を適用した場合を説明する。本実施形態では、アプリケーションの配備および配備解除も含めて対応できる点が上述した第1の実施形態と異なる。アプリケーションの配備とは、情報処理装置において、アプリケーションに対するリソースの割り当て、およびメモリへのロードなどを行うことにより、アプリケーションを実行可能な状態にすることである。アプリケーションの配備解除とは、配備とは反対に、実行可能な状態にあるアプリケーションに割り当てられたメモリなどのリソースを解放することにより、実行可能な状態を解除することである。
まず、図2を参照して、以下に本実施形態の構成を説明する。図2は、本発明の第2の実施形態に係るアプリケーションサーバの構成を示すブロック図である。
図2を参照すると、本実施形態に係るアプリケーションサーバは、情報処理装置100、ライブラリ管理ディレクトリ140、および記憶装置150を含む。ライブラリ管理ディレクトリ140および記憶装置150は、情報処理装置100に接続される半導体記憶装置などの記憶装置であってもよい。ライブラリ管理ディレクトリ140および記憶装置150は、インターネットや構内LAN(ローカルエリアネットワーク)等の通信ネットワークを介して通信可能な外部装置であってもよい。また、ライブラリ管理ディレクトリ140と、記憶装置150とは、例えば、同じ記憶装置であってもよい。
情報処理装置100は、CPU(図示せず)を用いて実行されるコンピュータ・プログラム(ソフトウェア・プログラム)の制御により動作する一般的な情報処理装置(コンピュータ)によって構成されても良い。または、情報処理装置100の各部が、専用のハードウェアデバイス、または論理回路によって構成されても良い。なお、この情報処理装置100をコンピュータによって実現したハードウェア構成例については、図10を参照して後述する。
記憶装置150は、本実施形態に係るアプリケーションサーバにおいて配備、実行、および配備解除されるアプリケーションであるアプリケーション120および130を格納することができる。アプリケーション120(130)は、アプリケーションプログラム121(131)と、1つ以上のライブラリファイル122(132)を含む。
アプリケーションプログラム121(131)は、実行可能なプログラムである。アプリケーションプログラム121(131)は、自身の実行中に、第1の実施形態におけるロード要求11を発行することにより、ライブラリファイル122(132)を参照(利用)する。
ライブラリファイル122(132)は、アプリケーションプログラム121(131)に参照されるクラス群を含むライブラリファイルである。ライブラリファイル122(132)は、第1の実施形態におけるライブラリファイル10を基本とする。
情報処理装置100は、アプリケーション配備部101、固有ID生成部102、クラスロード部110、および記憶装置105を含む。記憶装置105は、例えば、半導体メモリ装置やディスク装置により実現される。記憶装置105は、固有IDテーブル(ライブラリ識別子管理情報)106、パッケージ対応テーブル127および137、およびクラス管理領域108を格納することができる。図3を参照すると、クラスロード部110は、上位クラスローダ群111、共通クラスローダ113、およびアプリケーションクラスローダ124および134を含む。図3は、第2の実施形態におけるクラスロード部110の構成、および、クラスロード部110の各構成と記憶装置105に格納された情報との対応関係を示す図である。
情報処理装置100は、第1の実施形態に係る情報処理装置1を基本とする各要素に加えて、アプリケーション配備部101および固有IDテーブル106を含む。本実施形態において、第1の実施形態における識別子情報は、一例として、ライブラリファイル122(132)のハッシュ情報に基づいて生成される「固有ID」として実現する。以下では、「識別子情報」を「固有ID」と読み替えて説明する。例えば、第1の実施形態における識別子生成部2を基本とする識別子生成部102は、以下では、固有ID生成部102と呼ばれる。また、本実施形態では、第1の実施形態におけるロード要求対応情報7は、アプリケーションごとにパッケージ対応テーブル127または137に格納される。
アプリケーション配備部101は、記憶装置150に格納されるアプリケーション120および130を配備することができる。アプリケーション配備部101は、アプリケーション120(130)を配備する際、アプリケーションごとにアプリケーションクラスローダ124(134)を生成する。アプリケーションクラスローダ124(134)の詳細は、クラスロード部110の説明において後述する。
また、アプリケーション配備部101は、固有ID生成部102に対してライブラリファイル122(132)を渡すことにより、固有IDおよびパッケージ対応テーブル127および137の生成を指示する。
また、アプリケーション配備部101は、固有ID生成部102によって生成された固有ID(識別子情報)と、固有IDに対応するライブラリファイル122(132)を参照するアプリケーションの数を表す参照数情報とを含むライブラリ識別子管理情報106を、記憶装置105に記憶する。本実施形態では、具体例の一つとして、ライブラリ識別子管理情報106を、固有IDテーブル106として実現する。図9は、第2の実施形態における固有IDテーブル106の一例を示す図である。図9を参照すると、固有IDテーブル106は、固有IDをキーとして、固有IDに対応するライブラリファイル122(132)を参照するアプリケーションの数を表す参照数情報を、そのキーに対する値として格納することができる。
さらに、アプリケーション配備部101は、ライブラリファイル122(132)のコピーを、ライブラリ管理ディレクトリ140に保存する。
また、アプリケーション配備部101は、配備されたアプリケーション120および130の配備を解除することができる。すなわち、アプリケーション配備部101は、ライブラリ識別子管理情報に基づいて、配備解除の結果、参照しているアプリケーション120(130)が無くなるライブラリファイル122(132)に関するリソースの削除を行う。その場合、さらに、アプリケーション配備部101は、配備を解除するアプリケーション120(130)に関するリソースの削除を行う。削除されるリソースには、記憶情報などが含まれる。削除されるリソースとは、具体的には、アプリケーションローダ124(134)、パッケージ名対応テーブル127(137)、および、ライブラリ管理ディレクトリ140にコピーされたライブラリファイル122(132)などが含まれる。
固有ID生成部102は、第1の実施形態における識別子生成部2を基本とする。本実施形態では、固有ID生成部102は、アプリケーション配備部101からライブラリファイル122(132)を受け取ることにより、固有ID(識別子情報)とロード要求対応情報7を生成する。なお、図9における「項番」の欄は、説明を明確にする目的で付した欄である。すなわち、「項番」の欄は、実際には設けられる必要はない。
固有ID生成部102は、生成したロード要求対応情報7を、アプリケーション120(130)ごとのパッケージ名対応テーブル127(137)(図3)に格納する。パッケージ名対応テーブル127(137)は、アプリケーション120(130)が利用するライブラリファイル122(132)を構成する、1つ以上のファイルに対するロード要求対応情報7を含むことができる。
パッケージ名対応テーブル127(137)は、ライブラリファイル122(132)が含むすべてのパッケージ名と、固有IDとの対応関係を表すロード要求対応情報107を含む。パッケージ名とは、一群のクラスを束ねるグループの名称である。1つのライブラリファイル122(132)は、複数のパッケージを含むことができる。Javaにおいて、ロード要求は、パッケージ名とクラス名とを含む完全修飾クラス名に対するクラスの要求(クラス要求)として発行される。すなわち、本実施形態において、クラス要求は、第1の実施形態におけるロード要求11に対応する。本実施形態におけるロード要求対応情報7は、ロード要求と、識別子情報(ライブラリファイル)との対応関係を、ロードが要求される単位であるクラスではなく、クラスが含まれるパッケージ名(グループ名)によって管理する事例の一つである。
パッケージ名対応テーブル127(137)の一例を、図7および図8に示す。図7は、第2の実施形態におけるパッケージ名対応テーブル127の一例を示す図である。図8は、第2の実施形態におけるパッケージ名対応テーブル137の一例を示す図である。パッケージ名対応テーブル127(137)に含まれる各ロード要求対応情報107は、図7および図8に示すように、「パッケージ名」をキーとして、そのパッケージ(クラスのグループ)を含むライブラリファイル122(132)に対応する「固有ID」を、そのキーに対する値として格納することができる。なお、図7および図8における「項番」の欄は、説明を明確にする目的で付した欄である。すなわち、「項番」の欄は、実際には設けられる必要はない。
固有ID生成部102の構造と内容は、上述した点以外は、第1の実施形態における識別子生成部2と同様であるので、重複する詳細な説明は省略する。
クラスロード部110は、上述した通り、上位クラスローダ群111、共通クラスローダ113、およびアプリケーションクラスローダ124および134を含む。クラスロード部110のこの構造は、Javaにおけるクラスローダの階層構造に対応している。Javaにおける一般的なクラスローダにおける動作と問題点の詳細については、後述する。ここでは、クラスローダ110に含まれる各部における、本実施形態の実現に関連する動作に関して説明する。
上位クラスローダ群111は、アプリケーション120(130)が動作する際に使用するクラスのうち、ライブラリファイル122(132)に含まれないシステムライブラリなどからロードするクラスに関するロード要求に対応する。すなわち、上位クラスローダ群111は、Javaにおける一般的なクラスローダに含まれる、共通クラスローダより上位のクラスローダと同等である。動作の詳細は、後述するJavaにおける一般的なクラスローダにおける動作と問題点の詳細にて説明する。
共通クラスローダ113は、第1の実施形態におけるロード部3を基本とする。また、アプリケーションクラスローダ124(134)は、第1の実施形態におけるロード要求解釈部4を基本とする。
本実施形態では、アプリケーションクラスローダ124(134)は、アプリケーション配備部101によるアプリケーション120(130)の配備の後、実行されたアプリケーション120(130)から、クラス要求を受ける。アプリケーションクラスローダ124(134)は、クラス要求とパッケージ名対応テーブル127(137)とに基づいて、クラス要求に対応するライブラリファイル122(132)の固有IDを求める。アプリケーションクラスローダ124(134)は、クラス要求の対象である完全修飾クラス名(第1の実施形態における「ロード要求11の対象を表す要求対象情報」)と、求めた固有IDとを共通クラスローダ113に対して出力する。
共通クラスローダ113は、クラス管理領域108に基づいて、第1の実施形態におけるロード部3と同様に、クラス要求の対象であるクラスのロード状況に応じた処理を行う。
クラス管理領域108は、第1の実施形態におけるロード状態情報8を基本とする。本実施形態において、共通クラスローダ113は、一例として、クラス管理領域108にクラスをロードすることによって、そのクラスがロードされたということを登録する。すなわち、クラス管理領域108は、クラスをロード済みであるという情報に加えて、さらにロードされたクラスの実体であるプログラムコードを含む。
さらに、本実施形態では、アプリケーションクラスローダ124(134)および共通クラスローダ113は、ライブラリファイル122(132)に含まれないクラスに対するクラス要求の処理を含む。すなわち、アプリケーションクラスローダ124(134)および共通クラスローダ113は、そのようなクラス要求への対応を、上位クラスローダ群111に委譲する(任せる)ことによって、処理する。
アプリケーションクラスローダ124(134)、および共通クラスローダ113の構造と内容は、上述した点以外は、第1の実施形態におけるロード要求解釈部4およびロード部3と同様であるので、重複する詳細な説明は省略する。
次に、ライブラリ管理ディレクトリ140について説明する。ライブラリ管理ディレクトリ140は、アプリケーション配備部101によってコピーされるライブラリファイル122(132)を格納することができる。また、ライブラリ管理ディレクトリ140は、共通クラスローダ113がクラスをロードする際に、格納したライブラリファイル122(132)を共通クラスローダ113に対して出力することができる。
次に、上述した構成を備える本実施形態の動作について詳細に説明する。以下の動作の説明においては、ロード要求11を「クラス要求」と呼ぶ。本実施形態における動作は、アプリケーションを配備する動作(配備動作)、クラス要求に対するロードの動作(ロード動作)、および、アプリケーションの配備を解除する動作(配備解除動作)がある。
まず、図4を参照して、アプリケーションの配備動作を説明する。図4は、アプリケーション配備部101および固有ID生成部102が行うアプリケーションの配備動作を示すフローチャートである。
はじめに、以下において説明する具体例における前提条件を述べる。本実施形態では、具体例として、アプリケーション120および130は、2つの同名のライブラリファイル122および132を含むことを前提とする。そして、2つの同名のライブラリファイル122および132のうちの一方のファイルは、内容が異なることを前提とする。また、2つの同名のライブラリファイル122および132のうちの他方のファイルは、同じ内容であることを前提とする。
また、アプリケーション配備動作を開始する時点で、クラスロード部110における上位クラスローダ群111および共通クラスローダ113が、図示しない主記憶装置などにおいて常駐していることを前提とする。アプリケーション配備部101および固有ID生成部102は、動作を行うときに起動してもよい。また、固有IDテーブル106、パッケージ対応テーブル127および137、および、クラス管理領域108には、何も記憶されていないことを前提とする。
こうした前提条件下で、アプリケーション120の配備を行う場合の動作を説明する。
まず、アプリケーション配備部101が、図示しない入力装置等を介して、利用者から、アプリケーション120の配備の指示を受ける。すると、アプリケーション配備部101は、クラスロード部110の共通クラスローダ113の配下として、アプリケーション120に対応するアプリケーションローダ124を生成する(ステップS10)。
ライブラリファイル122が複数ある場合は、ステップS11からS15までの動作は、各ライブラリファイル122ごとに実行してもよい。本具体例では、ライブラリファイル122は2つあるので、ステップS11からS15までの動作は、各ライブラリファイル122に対して、計2回が実行される。以下、ステップS11からステップS15までにおいて、「ライブラリファイル122」を「ライブラリファイル122の1つ」と読み替えることができる。
次に、アプリケーション配備部101は、固有ID生成部102に対して、アプリケーション120に含まれるライブラリファイル122を渡すとともに、固有IDおよびロード要求対応情報7(パッケージ対応テーブル127)の生成を指示する。固有ID生成部102は、まず、ライブラリファイル122ごとの固有IDを生成する(ステップS11)。具体的には、固有ID生成部102は、一例として、ハッシュ関数によって、ライブラリファイル122に対するハッシュ情報を求める。そして、固有ID生成部102は、求めたハッシュ情報を、そのライブラリファイル122に対する固有IDとする。
次に、固有ID生成部102は、ライブラリファイル122に含まれるパッケージ名と固有IDとの対応関係をパッケージ名対応テーブル127に登録する(ステップS12)。具体的には、固有ID生成部102は、まず、ライブラリファイル122に含まれる全てのクラスのパッケージ名を抽出する。そして、固有ID生成部102は、抽出したパッケージ名をキーとして、ステップS11で生成した固有IDをそのキーに対する値として、パッケージ対応テーブル127に登録する。パッケージ対応テーブル127は、初めて情報が登録される前に、固有ID生成部102よって生成してもよい。
ステップS12の最後として、固有ID生成部102は、固有IDをアプリケーション配備部101に返す。アプリケーション配備部101は、生成された固有IDが固有IDテーブル106に登録済みであるかどうかを調べる(ステップS13)。この具体例では、ライブラリファイル122に対応する固有IDは、固有IDテーブル106に登録されていない。
まだ、固有IDが登録されていない場合(ステップS13のNO)、アプリケーション配備部101は、参照数情報を「1」として、生成した固有IDを固有IDテーブル106に登録する。(ステップS20)。そして、アプリケーション配備部101は、ライブラリファイル122をライブラリ管理ディレクトリ140にコピーする(ステップS21)。ライブラリファイル122をコピーする際、アプリケーション配備部101は、固有IDに基づいて、ライブラリファイル122を検索できるようにコピーする。一例として、アプリケーション配備部101は、ライブラリファイル122をコピーしたファイルを、固有IDを含む名前のファイルとして保存する。さらに、アプリケーション配備部101は、固有IDに対応するクラス管理領域108を生成する(ステップS22)。
このような処理の後、まだ処理していないライブラリファイル122があれば、アプリケーション配備部101は、未処理のライブラリファイル122に対して、ステップS11以降の処理を行う(ステップS15)。
図7は、このようにして生成されたアプリケーション120に対応するパッケージ対応テーブル127の一例である。例えば、図7において「項番」欄が「A1」のロード要求対応情報7(以下、「A1の項」のように言う)は、固有IDが「0c41fee1b50b22ac23ac99388f649b9a634e8346」のライブラリファイル122に、「org.apache.commons.beanutils.converters」というパッケージ名のパッケージが含まれていたことを表す。固有ID欄が同一であるA1からA4の4つの項は、固有IDが「0c41fee1b50b22ac23ac99388f649b9a634e8346」のライブラリファイル122に含まれる4つのパッケージに関する情報である。また、A5およびA6の項は、固有IDが「f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f」のライブラリファイル122に含まれる2つのパッケージに対する情報である。
このようにして、アプリケーション120は配備される。
アプリケーション120の配備に続いて、アプリケーション130が配備される場合の動作を説明する。上述した通り、アプリケーション130は、ライブラリファイル122と同名であるが、内容が異なるライブラリファイル132を含む。また、アプリケーション130は、ライブラリファイル122と同名で内容も同じ、もう1つのライブラリファイル132を、さらに含む。
ライブラリファイル122と同名で同内容のライブラリファイル132に対する配備の動作は、アプリケーション120の配備動作と同様である。また、ライブラリファイル122と同名で内容が異なるライブラリファイル132に対するステップS10からS12までの動作は、上述したアプリケーション120の配備と同様である。なお、ステップS11において、固有ID生成部102は、ライブラリファイル122と同名で内容が異なるライブラリファイル132に対しては、新たな固有IDを生成する。また、固有ID生成部102は、ライブラリファイル122と同名同内容のライブラリファイル132に対しては、そのライブラリファイル122と同じ固有IDを生成する。
ステップS13において、ライブラリファイル122と同名で内容が異なるライブラリファイル132に対する固有IDは、固有IDテーブル106に既に登録されている。固有IDが登録されていた場合(ステップS13のYES)、アプリケーション配備部101は、その固有IDに対応する参照数情報に「1」を加えて、固有IDテーブル106を更新する(ステップS14)。図9は、アプリケーション130の配備後における固有IDテーブル106の一例である。図9におけるC1の項が、ライブラリファイル122およびライブラリファイル132の両方に含まれる、同名同内容のライブラリファイル122(132)に対して、参照数を「2」として更新した情報である。そして、アプリケーション配備部101は、まだ処理していないライブラリファイル132があれば、ステップS11以降の処理を行う(ステップS15)。
図8は、このようにして生成されたアプリケーション130に対応するパッケージ対応テーブル137の一例である。図8において、B1からB4の項は、アプリケーション120のライブラリファイル122と同名同内容のライブラリファイル132に対する情報である。また、B5およびB6の項は、ライブラリファイル122と同名で内容が異なるライブラリファイル132(固有ID「37c659e57293656ebef1a247fc6ceb738ebdfc74」)に含まれる2つのパッケージに対する情報である。
このようにして、アプリケーション130は配備される。
なお、アプリケーション配備部101は、図4に示す一連のアプリケーション配備動作の前後を含む任意のタイミングにおいて、一般的なJavaのアプリケーションサーバにおいて実行されるアプリケーション配備の動作を行ってもよい。
以上が、アプリケーションの配備動作である。
次に、図5を参照して、クラス要求に対するロード動作を説明する。図5は、第2の実施形態において、アプリケーション120および130、並びにクラスロード部110が行うクラス要求に対するロード動作を示すフローチャートである。クラス要求は、配備されたアプリケーションプログラム121および131がそれぞれ起動された後に発行される。なお、以下では、「実行されたアプリケーションプログラム121(131)」を、簡単に「アプリケーション120(130)」と記述する。
まず、内容が異なるライブラリファイルに対して、複数のアプリケーションから同名でクラス要求された場合における、ロード動作を説明する。始めに、アプリケーション120が、「org.apache.commons.logging.LogFactory」クラスを要求したときのロード動作を説明する。このクラス要求における完全修飾クラス名は、「org.apache.commons.logging.LogFactory」である。また、このクラス要求におけるパッケージ名は、末尾の「.LogFactory」を除いた前方の部分である「org.apache.commons.logging」である。
このクラスを含むライブラリファイル122および132は、同名であるが内容が異なる。したがって、このクラス要求におけるパッケージ名は、パッケージ名対応テーブル127(図7)のA5の項、およびパッケージ名対応テーブル137(図8)のB5の項に、異なる固有IDと対応づけて登録されている。以下では、パッケージ名対応テーブル127および137、または固有IDテーブル106から得られた項目を、図7〜9における項番によって、簡易的に記述する。例えば、パッケージ名対応テーブル127のA1の項から得られた「固有ID」欄の情報を、「A1項の固有ID」と言う。
アプリケーション120が、上記のクラスを要求する(ステップS30)。
クラスロード部110においては、まず各アプリケーション120(130)に対応するアプリケーションクラスローダ124(134)が、クラスの要求を受ける(ステップS40)。具体的には、アプリケーションクラスローダ124が、アプリケーション120が発行したクラスの要求を受ける。
アプリケーションクラスローダ124(134)は、対応するパッケージ名対応テーブル127(137)に要求されたクラスのパッケージ名があるかどうかを調べる(ステップS41)。具体的には、アプリケーションクラスローダ124が、アプリケーション120に対応するパッケージ名対応テーブル127を、要求されたクラスのパッケージ名「org.apache.commons.logging」をキーとして検索する。アプリケーションクラスローダ124は、図7のA5の項から、固有ID(A5項の固有ID)が得られることにより、パッケージ名対応テーブル127に要求されたクラスのパッケージ名が含まれていると判断する。
クラスのパッケージ名がパッケージ名対応テーブル127(137)にある場合(ステップS41のYES)、アプリケーションクラスローダ124(134)は、クラス要求の対象である完全修飾クラス名と、求めた固有IDとを、共通クラスローダ113に対して出力する。共通クラスローダ113は、固有IDに対応するクラス管理領域108に、クラス要求の対象のクラスがロードされているかどうかを調べる(ステップS42)。具体例では、クラス管理領域108には、まだ何もロードされていない。したがって、共通クラスローダ113は、要求されたクラスはロードされていないと判断する。
要求されたクラスがロードされていない場合(ステップS42のNO)、共通クラスローダ113は、固有IDに対応するライブラリファイル122(132)から、クラスをロードする(ステップS43)。具体的には、共通クラスローダ113は、ライブラリ管理ディレクトリ140から、A5項の固有IDをファイル名としてコピーされているライブラリファイル122を取得する。そして、共通クラスローダ113は、取得したライブラリファイル122から、要求されたクラスを含むプログラムを、クラス管理領域108にロードする。
最後に、共通クラスローダ113は、アプリケーションクラスローダ124(134)を介して、クラス要求に対する応答を返す(ステップS44)。具体的には、共通クラスローダ113は、クラスがロードされた位置の情報を含むオブジェクトを、アプリケーションクラスローダ124を介して、アプリケーション120に対して返す。
アプリケーション120(130)は、クラス要求に対する応答を受ける(ステップS31)。
続いて、アプリケーション130が、上記と同じ「org.apache.commons.logging.LogFactory」クラスを要求したときのロード動作を説明する。以下では、上記の動作と異なる点について、簡単に説明する。
まず、アプリケーション130が、アプリケーション120と同じ完全修飾クラス名に対するクラスを要求する(ステップS30)。
クラスロード部110においては、アプリケーションクラスローダ134がクラスの要求を受ける(ステップS40)。
アプリケーションクラスローダ134は、パッケージ名対応テーブル137から、要求されたクラスのパッケージ名に対応する固有ID(B5項の固有ID)を得ることにより、要求されたクラスのパッケージ名が含まれていると判断する(ステップS41)。そして、アプリケーションクラスローダ134は、共通クラスローダ113に対して、完全修飾クラス名とB5項の固有IDを出力する(ステップS41のYES)。なお、上述の通り、B5項の固有IDは、A5項の固有IDとは異なる。
共通クラスローダ113は、B5項の固有IDに対応するクラス管理領域108に、まだ完全修飾クラス名に対応するクラスがロードされていないと判断する(ステップS42)。
要求されたクラスがロードされていない場合(ステップS42のNO)、共通クラスローダ113は、上記と同様に、B5項の固有IDに対応するライブラリファイル132から、要求されたクラスを含むプログラムを、クラス管理領域108にロードする(ステップS43)。
最後に、共通クラスローダ113は、アプリケーションクラスローダ134を介して、クラスが新たにロードされた位置の情報を含むオブジェクトを、クラス要求に対する応答として返す(ステップS44)。
このようにして、クラスロード部110は、内容が異なるライブラリファイルに対して、複数のアプリケーションから同名でクラス要求された場合に、それぞれのアプリケーションに対応するライブラリファイルを区別してロードすることができる。
次に、複数のアプリケーションから同じ内容のライブラリファイルに対するロードが要求された場合における、ロード動作を説明する。一例として、アプリケーション120および130が、続けて「org.apache.commons.beanutils.converters.DateConverter」クラスを要求したときのロード動作を説明する。
このクラスを含むライブラリファイル122および132は、同名かつ同内容である。したがって、このパッケージ名「org.apache.commons.beanutils.converters」は、パッケージ名対応テーブル127(図7)のA1の項、およびパッケージ名対応テーブル137(図8)のB1の項に、同じ固有IDと対応づけて登録されている。
まず、アプリケーション120が、上記のクラスを要求する(ステップS30)。
クラスロード部110において、アプリケーションクラスローダ124が、クラスの要求を受け(ステップS40)、さらに、パッケージ名対応テーブル127から、要求されたクラスのパッケージ名に対応する固有ID(A1項の固有ID)を得る(ステップS41)。そして、アプリケーションクラスローダ124は、共通クラスローダ113に対して、完全修飾クラス名とA1項の固有IDを出力する(ステップS41のYES)。
共通クラスローダ113は、クラス管理領域108に、まだ当該クラスがロードされていないと判断し(ステップS42)、A1項の固有IDに対応するライブラリファイル122から、そのクラスを含むプログラムをロードする(ステップS43)。そして、共通クラスローダ113は、アプリケーションクラスローダ124を介して、クラス要求に対する応答を返す(ステップS44)。
続いて、アプリケーション130が、アプリケーション120と同じ「org.apache.commons.beanutils.converters.DateConverter」クラスを要求したときのロード動作を説明する。
まず、アプリケーション130が、アプリケーション120と同じ完全修飾クラス名に対するクラスを要求する(ステップS30)。
クラスロード部110において、アプリケーションクラスローダ134が、クラスの要求を受け(ステップS40)、パッケージ名対応テーブル137から、要求されたクラスのパッケージ名に対応する固有ID(B1項の固有ID)を得る(ステップS41)。そして、アプリケーションクラスローダ134は、共通クラスローダ113に対して、完全修飾クラス名とB1項の固有IDを出力する(ステップS41のYES)。なお、上述の通り、B1項の固有IDは、A1項の固有IDと同じである。
共通クラスローダ113は、B1項の固有IDに対応するクラス管理領域108に、すでに完全修飾クラス名に対応するクラスがロードされていると判断する(ステップS42)。
要求されたクラスがロードされている場合(ステップS42のYES)、共通クラスローダ113は、アプリケーションクラスローダ134を介して、クラスがロードされた位置の情報を含むオブジェクトを、クラス要求に対する応答として返す(ステップS44)。この応答に含まれるクラスがロードされた位置の情報は、先にアプリケーション120から受けたクラスをロードした際(ステップS43)に、A1項の固有IDに対応するライブラリファイル122からロードされた位置の情報である。
このようにして、クラスロード部110は、同じ内容のライブラリファイル122(132)を多重にロードすることを回避することができる。
次に、ライブラリファイル122および132に含まれないクラスが要求された場合における、ロード動作を説明する。一例として、アプリケーション120または130が、「foo.Bar」クラスを要求したときのロード動作を説明する。なお、「foo」というクラスは、ライブラリファイル122にも132にも含まれていない。
アプリケーション120が、上記のクラスを要求する(ステップS30)。
クラスロード部110においては、アプリケーションクラスローダ124(134)が、クラスの要求を受け(ステップS40)、さらに、パッケージ名対応テーブル127(137)を「foo」というパッケージ名で検索する(ステップS41)。しかし、アプリケーションクラスローダ124(134)は、「foo」というパッケージ名に対応する固有IDが得られないので(ステップS41のNO)、共通クラスローダ113を介して、上位クラスローダ群111にロード処理を委譲する(ステップS50)。具体的には、アプリケーションクラスローダ124(134)は、共通クラスローダ113に対して、要求されたクラスの完全修飾クラス名「foo.Bar」のみを通知する。共通クラスローダ113は、固有IDが通知されない場合、「foo.Bar」クラスのロードを、さらに上位にある上位クラスローダ群111に委譲する。
これ以降の動作は、一般的なJavaクラスローダの動作に従う。すなわち、その後、共通クラスローダ113は、上位クラスローダ群111からクラス要求に対する応答を受ける(ステップS51)。そして、共通クラスローダ113は、その応答に基づき、アプリケーションクラスローダ124(134)を介して、アプリケーション120(130)に対する応答を返す(ステップS44)。
このようにして、クラスロード部110は、一般的なJavaのクラスロードの仕組みと、本実施形態の動作を併存させることができる。
以上が、クラス要求に対するロード動作である。
次に、図6を参照して、アプリケーションの配備解除動作を説明する。図6は、第2の実施形態において、アプリケーション配備部101が行うアプリケーションの配備を解除する動作を示すフローチャートである。以下では、上述したアプリケーション120および130が配備された状態から、アプリケーション120または130の配備が解除される場合の動作である。
まず、アプリケーション配備部101が、図示しない入力装置等を介して、利用者から、アプリケーション120または130の配備を解除する指示を受ける。すると、アプリケーション配備部101は、配備を解除するアプリケーション120または130に対応するパッケージ名対応テーブル127または137に対して、そこに含まれる未処理の固有IDを選択する(ステップS60)。すなわち、アプリケーション配備部101は、パッケージ名対応テーブル127または137に含まれる固有IDごとに、ステップS61からS63までの動作を行う。
アプリケーション配備部101は、固有ID管理テーブル106において、選択した固有IDに対応する参照数情報から「1」を減らす(ステップS61)。
次に、アプリケーション配備部101は、ステップS61で減算した結果、その参照数情報が「1」以上であるかどうかを判断する(ステップS62)。
参照数情報が「1」以上の場合(ステップS62のYES)、アプリケーション配備部101は、当該固有IDに対応するライブラリファイル122または132を含むアプリケーション120または130があるので、その固有IDに関連する配備処理を終了する。そして、まだ処理していない固有IDがあれば、アプリケーション配備部101は、未処理の固有IDに対して、ステップS61に戻る(ステップS63)。
一方、参照数情報が「1」以上でない(すなわち「0」である)場合(ステップS62のNO)、アプリケーション配備部101は、当該固有IDに対応するライブラリファイル122または132を含むアプリケーションがなくなるので、そのライブラリファイル122または132に関する情報やリソースを削除する。
すなわち、アプリケーション配備部101は、固有ID管理テーブル106から、当該固有IDのエントリを削除する(ステップS70)。また、アプリケーション配備部101は、当該固有ID管理テーブルに対応するクラス管理領域108を破棄する(ステップS71)。これにより、ロードされていたライブラリファイル122または132が占有するメモリが解放される。さらに、アプリケーション配備部101は、ライブラリ管理ディレクトリ140から、当該固有IDに対応するライブライファイル122または132を削除する(ステップS72)。そして、まだ処理していない固有IDがあれば、アプリケーション配備部101は、未処理の固有IDに対して、ステップS61に戻る(ステップS63)。
具体的には、アプリケーション120または130の一方の配備を解除する際、図9に示す固有IDテーブル106におけるC1の項のエントリと、C1の固有IDに対応するライブラリファイル122(132)およびクラス管理領域108とは、削除されない。そして、固有IDテーブル106におけるC2またはC3の項のどちらかのエントリと、C2またはC3の固有IDに対応するライブラリファイル122または132、およびクラス管理領域108のそれぞれ一方とが、削除される。
パッケージ名対応テーブル127または137に含まれるすべての固有IDの処理の後(ステップS63のNO)、アプリケーション配備部101は、配備を解除されるアプリケーション120または130に対応するアプリケーションクラスローダ124または134、およびパッケージ名対応テーブル127または137を削除する(ステップS64)。
このようにして、アプリケーション120または130の配備が解除される。アプリケーション配備部101は、アプリケーションに対する配備の解除の際、固有IDテーブル106に基づいて、ライブラリファイル122および132に関連するリソースの残留と削除を制御することができる。
なお、アプリケーション配備部101は、図6に示す一連のアプリケーション配備解除動作の前後を含む任意のタイミングにおいて、一般的なJavaのアプリケーションサーバにおいて実行されるアプリケーションの配備解除の動作を行ってもよい。
以上が、アプリケーションの配備解除動作である。
動作の説明の最後として、Javaにおける一般的なクラスローダにおける動作と問題点の詳細について説明する。
Javaアプリケーションサーバにおいては、一般に、複数のクラスローダが、階層構造を形成している。クラスをロードする際には、以下のような委譲モデルが用いられる。
委譲モデルにおいては、ロード対象とするライブラリファイルが、クラスローダごとに定義(関連付け)される。そして、アプリケーションから、あるクラスローダに対してクラスの要求が発行されたとき、そのクラスローダは、要求されたクラスがロード済みであれば対応するクラス(オブジェクト)を返す。
しかし、要求されたクラスがロードされていなければ、そのクラスローダは、上位のクラスローダに対してロードを委譲する。上位のクラスローダも、同様の動作を再帰的に行う。階層の最上位のクラスローダにおいても、要求されたクラスがロード済みでない場合、最上位のクラスローダは、そのクラスが定義されたライブラリファイルに含まれているならば、そのクラスをロードする。そして、最上位のクラスローダは、ロードしたクラスを、1階層下の子クラスローダに返す。要求されたクラスが定義されたライブラリファイルに含まれない場合、最上位のクラスローダは、ロードできなかったことを示す応答を子クラスローダに返す。以下、子クラスローダにおいても、同様の動作を再帰的に行う。
同名のクラスを含むライブラリが複数ある場合、このようにして、階層構造における上位のクラスローダのロード対象のライブラリファイルに含まれるクラスが優先的にロードされる。
また、クラスローダの階層構造の末端部においては、アプリケーションのクラスローダが、アプリケーションサーバに配備された複数のアプリケーションごとに生成される。アプリケーションのクラスローダは、アプリケーションモジュールに含まれるプログラムおよびライブラリファイルをロード対象とする。アプリケーションごとのクラスローダは、アプリケーションごとにクラスの名前空間を分けることを可能とする。例えば、アプリケーションAのライブラリファイルとアプリケーションBのライブラリファイルとに同じ名前で異なる内容のクラスが存在する場合にも、2つのアプリケーションのクラスローダが、それぞれ同じ名前のクラスを別々にロードすることができる。
この一般的なクラスローダの構造には、「背景技術」欄において記述したような問題がある。問題の1つは、下位のクラスローダのロード対象のライブラリファイルに含まれる同名で異なる内容のクラスがロードできないことである。すなわち、一般的なクラスローダは、ある場合にはアプリケーションごとのライブラリファイルからロードし、その他の場合には、上位のクラスローダのロード対象であるシステムのライブラリファイルからロードするという切り替えができない。これは、常に上位のクラスローダのロード対象のライブラリファイルが優先されることが原因である。もう1つの問題は、各アプリケーションのクラスローダが、まったく同じ内容のライブラリファイルを、アプリケーションごとにロードしてしまうことである。その結果、メモリ使用量が増大する。これは、アプリケーションのクラスローダが、ロードするライブラリファイルを統一的に管理する仕組みがないからである。
本実施形態は、このような一般的なクラスローダの構造における問題を解決することができる。すなわち、本実施形態におけるクラスロード部110は、アプリケーション120(130)に含まれるライブラリファイル122(132)を優先的にロードすることができる。すなわち、本実施形態に係る情報処理装置100は、アプリケーション120(130)にライブラリファイル122(132)を含めるかどうかによって、優先的にロードするライブラリファイルを切り替えることができる。同時に、クラスロード部110は、同じ内容のライブラリファイルを多重にロードすることを回避できる。
以上が、Javaにおける一般的なクラスローダにおける動作と問題点の詳細である。
以上、説明したように、本実施形態には、上述した第1の実施形態と同様の効果に加えて、さらに、アプリケーションの配備および配備の解除において、ライブラリファイルとメモリ等のリソースを適切に管理できるという効果もある。
その理由は、アプリケーション配備部101が、固有IDテーブル106に基づいて、固有IDごとのライブラリファイルを参照しているアプリケーションの数を管理するからである。
(第2の実施形態の変形例)
なお、本実施形態の変形例としては以下のようなものが考えられる。
例えば、上述したアプリケーション配備部101の機能の一部は、他の機能部が実行してもよい。例えば、Javaの一般的な慣習に合わせて、クラスロード部110が、記憶装置105に格納される情報類を以下のように管理してもよい。すなわち、アプリケーション配備部101は、固有IDが生成された(図4のステップS11)後、生成された固有IDとライブラリファイル122(132)のパスを、共通クラスローダ113に通知する。そして、共通クラスローダ113が、固有ID管理テーブル106およびクラス管理領域108の生成を含む管理と、ライブラリ管理ディレクトリ140へのライブラリファイル122(132)のコピーとを行ってもよい。同様に、アプリケーションの配備の解除においても、共通クラスローダ113が、固有ID管理テーブル106、クラス管理領域108、および、ライブラリ管理ディレクトリ140に対する処理を行ってもよい。
<ハードウェア構成例の説明>
なお、上述した各実施形態において図1乃至図3に示した各部は、それぞれ独立したハードウェア回路で構成されていてもよいし、ソフトウェアプログラムの機能(処理)単位(ソフトウェアモジュール)と捕らえることができる。ただし、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。このような場合のハードウェア環境の一例を、図10を参照して説明する。
図10は、本発明の各実施形態、および、その変形例に係る情報処理装置またはアプリケーションサーバに適用可能なコンピュータ(情報処理装置)の構成を例示する図である。すなわち、図10は、上述した各実施形態における情報処理装置1および100の少なくとも何れかを実現可能なコンピュータの構成であって、上述した各実施形態における各機能を実現可能なハードウェア環境を示す。
図10に示したコンピュータ900は、CPU(Central Processing Unit)901、ROM(Read Only Memory)902、RAM(Random Access Memory)903、通信インタフェース(I/F)904、ディスプレイ905、およびハードディスク装置(HDD)906を備え、これらがバス907を介して接続された構成を有する。なお、図10に示したコンピュータが情報処理装置1および100として機能する場合、ディスプレイ905は常時設けられる必要はない。
また、通信インタフェース904は、上述した各実施形態において、当該各コンピュータ間における通信を実現する一般的な通信手段である。ハードディスク装置906には、プログラム群906Aと、各種の記憶情報906Bとが格納されている。プログラム群906Aは、例えば、上述した図1乃至図3に示した各ブロック(各部)に対応する機能を実現するためのコンピュータ・プログラムである。各種の記憶情報906Bは、例えば、図1乃至図3に示したロード要求対応情報7、ロード状態情報8、ライブラリ10、122、および132、固有IDテーブル106、クラス管理領域108、および、パッケージ名対応テーブル127および137などである。このようなハードウェア構成において、CPU901は、コンピュータ900の全体の動作を司る。
そして、上述した各実施形態を例に説明した本発明は、各実施形態の説明において参照したブロック構成図(図1乃至図3)あるいはフローチャート(図4乃至図6)の機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、当該ハードウェアのCPU901に読み出して実行することによって達成される。また、このコンピュータ内に供給されたコンピュータ・プログラムは、読み書き可能な一時記憶メモリ903またはハードディスク装置906などの不揮発性の記憶デバイス(記憶媒体)に格納すれば良い。
また、前記の場合において、当該各装置内へのコンピュータ・プログラムの供給方法は、フロッピーディスク(登録商標)やCD−ROM等の各種記録媒体を介して当該装置内にインストールする方法や、インターネット等の通信ネットワーク1000を介して外部よりダウンロードする方法等のように、現在では一般的な手順を採用することができる。そして、このような場合において、本発明は、係るコンピュータ・プログラムを構成するコード、或いは係るコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
なお、上述した実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下の付記に限定されるものではない。
(付記1)
ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、前記ロード要求対応情報を記憶装置に保存する識別子生成手段と、
実行されているアプリケーションからロード要求を受け付け、前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求めるロード要求解釈手段と、
前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報を管理し、前記ロード状態情報に基づいて、前記ロード要求の対象を表す要求対象情報および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、前記ロード要求に対する応答を返すロード手段と
を備える情報処理装置。
(付記2)
前記ロード手段は、前記ロード状態情報に基づいて、前記ロードを要求された部分がロードされていると判断した場合に、前記ロード要求に対して前記ロードを要求された部分をロードせずに、前記応答を返す
付記1記載の情報処理装置。
(付記3)
前記アプリケーションを実行可能な状態にする配備を行う際、前記識別子情報と、前記識別子情報に対応する前記ライブラリファイルを参照するアプリケーションの数を表す参照数情報とを含むライブラリ識別子管理情報を生成する、アプリケーション配備手段を、
さらに備える付記1または2記載の情報処理装置。
(付記4)
前記アプリケーション配備手段は、前記アプリケーションの前記実行可能な状態を解除する配備解除の際、前記ライブラリ識別子管理情報に基づいて、配備解除の結果、参照している前記アプリケーションが無くなる前記ライブラリファイルと、配備を解除される前記アプリケーションとに関する記憶情報を含むリソースを削除する
付記1乃至3のいずれか1つに記載の情報処理装置。
(付記5)
前記識別子生成手段は、前記ライブラリファイルに含まれるパッケージ名を前記要求対象情報として前記ロード要求対応情報を生成し、
前記ロード要求解釈手段は、前記ロード要求の対象であるクラスのパッケージ名と、前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求める
付記1乃至4のいずれか1つに記載の情報処理装置。
(付記6)
前記識別子生成手段は、前記ライブラリファイルのハッシュ情報を求め、前記ハッシュ情報に基づいて前記識別義情報を生成する
付記1乃至5のいずれか1つに記載の情報処理装置。
(付記7)
ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、
前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、
前記ロード要求対応情報を記憶装置に保存し、
実行されているアプリケーションからロード要求を受け付けた際、
前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求め、
前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報に基づいて、前記ロード要求の対象を表す要求対象情報、および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、さらに、前記ロード状態情報にロードしたことを登録し、
前記ロード要求に対する応答を返す
ライブラリロード方法。
(付記8)
前記ロード要求を受け付けた際、前記ロードを要求された部分がロードされていないと判断した場合に、
前記ロード要求に対して前記ロードを要求された部分をロードせずに、前記応答を返す
付記7記載のライブラリロード方法。
(付記9)
前記識別子情報を生成するより後、かつ、前記ロード要求を受け付ける前に、
前記識別子情報と、前記識別子情報に対応する前記ライブラリファイルを参照する参照するアプリケーションの数を表す参照数情報とを含むライブラリ識別子管理情報を生成し、
前記アプリケーションの実行可能な状態を解除する配備解除の際、
前記ライブラリ識別子管理情報に基づいて、前記配備解除の結果、参照している前記アプリケーションが無くなる前記ライブラリファイルと、前記配備解除をされる前記アプリケーションとに関する記憶情報を含むリソースを削除する
付記7または8記載のライブラリロード方法。
(付記10)
前記ロード要求対応情報を生成する際に、前記ライブラリファイルに含まれるパッケージ名を前記要求対象情報とし、
前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求める際に、前記ロード要求の対象であるクラスのパッケージ名と、前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求める
付記7乃至9のいずれか1つに記載のライブラリロード方法。
(付記11)
前記識別子情報を生成する前に、前記ライブラリファイルのハッシュ情報を求め、
前記ハッシュ情報に基づいて前記識別子情報を生成する
付記7乃至10のいずれか1つに記載のライブラリロード方法。
(付記12)
ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、前記ロード要求対応情報を記憶装置に保存する識別子生成処理と、
実行されているアプリケーションからロード要求を受け付け、前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求めるロード要求解釈処理と、
前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報を管理し、前記ロード状態情報に基づいて、前記ロード要求の対応を表す要求対象情報および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、前記ロード要求に対する応答を返すロード処理と
をコンピュータに実行させるコンピュータ・プログラム。
(付記13)
前記ロード処理は、前記ロード状態情報に基づいて、前記ロードを要求された部分がロードされていると判断した場合に、前記ロード要求に対して前記ロードを要求された部分をロードせずに、前記応答を返す
付記12記載のコンピュータ・プログラム。
(付記14)
前記識別子生成処理より後に、
前記識別子情報と、前記識別子情報に対応する前記ライブラリファイルを参照するアプリケーションの数を表す参照数情報とを含むライブラリ識別子管理情報を生成するアプリケーション配備処理を、
前記アプリケーションの実行可能な状態を解除する配備解除の際に、
前記ライブラリ識別子管理情報に基づいて、配備解除の結果、参照している前記アプリケーションが無くなる前記ライブラリファイルと、配備を解除される前記アプリケーションとに関する記憶情報を含むリソースを削除するアプリケーション配備解除処理を、
さらに実行する付記12または13記載のコンピュータ・プログラム。
(付記15)
前記識別子生成処理は、前記ライブラリファイルに含まれるパッケージ名を前記要求対象情報として前記ロード要求対応情報を生成し、
前記ロード要求解釈処理は、前記ロード要求の対象であるクラスのパッケージ名と、前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求める
付記12乃至14のいずれか1つに記載のコンピュータ・プログラム。
(付記16)
前記識別子生成処理は、前記ライブラリファイルのハッシュ情報を求め、前記ハッシュ情報に基づいて前記識別義情報を生成する
付記12乃至15のいずれか1つに記載のコンピュータ・プログラム。
1、100 情報処理装置
2 識別子生成部
3 ロード部
4 ロード要求解釈部
5、105、150 記憶装置
7 ロード要求対応情報
8 ロード状態情報
10、122、132 ライブラリファイル
11 ロード要求
101 アプリケーション配備部
102 固有ID生成部(識別子生成部)
106 固有IDテーブル(ライブラリ識別子管理情報)
108 クラス管理領域(ロード状態情報)
110 クラスロード部
111 上位クラスローダ群
113 共通クラスローダ(ロード部)
120、130 アプリケーション
121、131 アプリケーションプログラム
124、134 アプリケーションクラスローダ(ロード要求解釈部)
127、137 パッケージ名対応テーブル
140 ライブラリ管理ディレクトリ
900 情報処理装置(コンピュータ)
901 CPU
902 ROM
903 RAM
904 通信インタフェース(I/F)
905 ディスプレイ
906 ハードディスク装置(HDD)
906A プログラム群
906B 各種の記憶情報
907 バス
1000 ネットワーク(通信ネットワーク)

Claims (10)

  1. ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、前記識別子情報と前記ロード要求対応情報を記憶装置に保存出力する識別子生成手段と、
    実行されているアプリケーションから前記ロード要求を受け付け、前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求め、前記ロード要求の対象を表す要求対象情報と、前記求めた識別子情報を出力するロード要求解釈手段と、
    前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報を管理し、前記ロード状態情報に基づいて、前記ロードを要求の対象を表す要求対象情報および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記要求対象情報、および前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、前記ロード要求に対する応答を返すロード手段と
    を備える情報処理装置。
  2. 前記ロード手段は、前記ロード状態情報に基づいて、前記ロードを要求された部分がロードされていると判断した場合に、前記ロード要求に対して前記ロードを要求された部分を何もロードせずに、前記応答を返す
    請求項1記載の情報処理装置。
  3. 前記アプリケーションを実行可能な状態にする配備を行う際、前記識別子情報と、前記識別子情報に対応する前記ライブラリファイルを参照するアプリケーションの数を表す参照数情報とを含むライブラリ識別子管理情報を生成するアプリケーション配備手段を、
    さらに備える請求項1または2記載の情報処理装置。
  4. 前記アプリケーション配備手段は、前記アプリケーションの前記実行可能な状態を解除する配備解除の際、前記ライブラリ識別子管理情報に基づいて、配備解除の結果、参照している前記アプリケーションが無くなる前記ライブラリファイルと、配備を解除される前記アプリケーションとに関する記憶情報を含むリソースを削除する
    請求項1乃至3のいずれか1つに記載の情報処理装置。
  5. 前記識別子生成手段は、前記ライブラリファイルに含まれるパッケージ名を前記要求対象情報として前記ロード要求対応情報を生成し、
    前記ロード要求解釈手段は、前記ロード要求の対象であるクラスのパッケージ名と、前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求める
    請求項1乃至4のいずれか1つに記載の情報処理装置。
  6. 前記識別子生成手段は、前記ライブラリファイルのハッシュ情報を求め、前記ハッシュ情報に基づいて前記識別義情報を生成する
    請求項1乃至5のいずれか1つに記載の情報処理装置。
  7. ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、
    前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、
    前記ロード要求対応情報を記憶装置に保存し、
    実行されているアプリケーションからロード要求を受け付けた際、
    前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求め、
    前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報に基づいて、前記ロード要求の対象を表す要求対象情報、および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、さらに、前記ロード状態情報にロードしたことを登録し、
    前記ロード要求に対する応答を返す
    ライブラリロード方法。
  8. 前記ロード要求を受け付けた際、前記ロードを要求された部分がロードされていないと判断した場合に、
    前記ロード要求に対して前記ロードを要求された部分をロードせずに、前記応答を返す
    請求項7記載のライブラリロード方法。
  9. 前記識別子情報を生成するより後、かつ、前記ロード要求を受け付ける前に、
    前記識別子情報と、前記識別子情報に対応する前記ライブラリファイルを参照する参照するアプリケーションの数を表す参照数情報とを含むライブラリ識別子管理情報を生成し、
    前記アプリケーションの実行可能な状態を解除する配備解除の際、
    前記ライブラリ識別子管理情報に基づいて、前記配備解除の結果、参照している前記アプリケーションが無くなる前記ライブラリファイルと、前記配備解除をされる前記アプリケーションとに関する記憶情報を含むリソースを削除する
    請求項7または8記載のライブラリロード方法。
  10. ライブラリファイルごとに、前記ライブラリファイルの内容を識別する識別子情報を生成し、前記ライブラリファイルに含まれるロード要求の対象となりうる部分を表す要求対象情報と前記識別子情報との対応関係を表すロード要求対応情報を生成し、前記ロード要求対応情報を記憶装置に保存する識別子生成処理と、
    実行されているアプリケーションからロード要求を受け付け、前記ロード要求、および前記ロード要求対応情報に基づいて、前記ロード要求の対象を含む前記ライブラリファイルの識別子情報を求めるロード要求解釈処理と、
    前記ライブラリファイルに含まれる各部のロード状態を表すロード状態情報を管理し、前記ロード状態情報に基づいて、前記ロード要求の対応を表す要求対象情報および前記求めた識別子情報が示すロードを要求された部分がロードされていないと判断した場合に、前記求めた識別子情報が示す前記ライブラリファイルから、少なくとも前記ロードを要求された部分をロードし、前記ロード要求に対する応答を返すロード処理と
    をコンピュータに実行させるコンピュータ・プログラム。
JP2014228181A 2014-11-10 2014-11-10 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム Active JP6409514B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014228181A JP6409514B2 (ja) 2014-11-10 2014-11-10 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム
US14/879,305 US9477498B2 (en) 2014-11-10 2015-10-09 Information processing device, library loading method, and computer readable medium
CN201510761977.XA CN105589715B (zh) 2014-11-10 2015-11-10 信息处理设备、库加载方法和计算机可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014228181A JP6409514B2 (ja) 2014-11-10 2014-11-10 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2016091460A true JP2016091460A (ja) 2016-05-23
JP6409514B2 JP6409514B2 (ja) 2018-10-24

Family

ID=55912287

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014228181A Active JP6409514B2 (ja) 2014-11-10 2014-11-10 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム

Country Status (3)

Country Link
US (1) US9477498B2 (ja)
JP (1) JP6409514B2 (ja)
CN (1) CN105589715B (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2017056194A1 (ja) * 2015-09-29 2017-10-05 株式会社東芝 情報機器または情報通信端末および、情報処理方法
JP2017157103A (ja) * 2016-03-03 2017-09-07 キヤノン株式会社 情報処理装置およびライブラリ管理方法
US10564959B2 (en) * 2017-03-14 2020-02-18 Google Llc Shared software libraries for computing devices
CN107038045B (zh) * 2017-03-30 2022-10-14 腾讯科技(深圳)有限公司 加载库文件的方法及装置
CN108668162B (zh) * 2018-03-20 2021-06-04 海信视像科技股份有限公司 视频文件播放的处理方法、装置及智能终端
CN110874246A (zh) * 2018-08-28 2020-03-10 Tcl集团股份有限公司 一种模块加载方法、系统及设备
CN110673869B (zh) * 2019-09-24 2023-09-12 聚好看科技股份有限公司 库文件的加载方法、装置及系统
CN113111291B (zh) * 2021-05-12 2023-03-31 杭州网易再顾科技有限公司 一种页面加载方法、装置、介质和计算设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001154831A (ja) * 1999-11-25 2001-06-08 Nec Software Hokkaido Ltd ダイナミックリンクライブラリ制御方式,方法および記録媒体
JP2007206965A (ja) * 2006-02-01 2007-08-16 Canon Inc 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム
US20080243965A1 (en) * 2007-03-29 2008-10-02 Microsoft Corporation Cooperative dll unload
JP2010113474A (ja) * 2008-11-05 2010-05-20 Sony Corp 情報処理装置、情報処理方法及びプログラム
JP2012141973A (ja) * 2010-12-31 2012-07-26 Internatl Business Mach Corp <Ibm> 動的ソフトウエア・バージョン選択のための方法およびコンピュータ・プログラム
JP2013196453A (ja) * 2012-03-21 2013-09-30 Nec Corp 情報処理装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5615400A (en) * 1993-06-30 1997-03-25 Apple Computer, Inc. System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US6430569B1 (en) * 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
KR100518584B1 (ko) * 2003-07-12 2005-10-04 삼성전자주식회사 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US7415704B2 (en) * 2004-05-20 2008-08-19 Sap Ag Sharing objects in runtime systems
US7680758B2 (en) * 2004-09-30 2010-03-16 Citrix Systems, Inc. Method and apparatus for isolating execution of software applications
FR2888351A1 (fr) * 2005-07-08 2007-01-12 Gemplus Sa Arborescence de chargeurs de classes mappee sur l'arborescence de repertoires
WO2011143181A2 (en) * 2010-05-10 2011-11-17 Tibco Software Inc. Managing static data structures of legacy software in dynamic class loader environments
US8739147B2 (en) * 2011-04-15 2014-05-27 International Business Machines Corporation Class isolation to minimize memory usage in a device

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001154831A (ja) * 1999-11-25 2001-06-08 Nec Software Hokkaido Ltd ダイナミックリンクライブラリ制御方式,方法および記録媒体
JP2007206965A (ja) * 2006-02-01 2007-08-16 Canon Inc 情報処理装置及び当該装置におけるオブジェクト指向プログラムの実行方法とそのプログラム
US20080243965A1 (en) * 2007-03-29 2008-10-02 Microsoft Corporation Cooperative dll unload
JP2010113474A (ja) * 2008-11-05 2010-05-20 Sony Corp 情報処理装置、情報処理方法及びプログラム
JP2012141973A (ja) * 2010-12-31 2012-07-26 Internatl Business Mach Corp <Ibm> 動的ソフトウエア・バージョン選択のための方法およびコンピュータ・プログラム
JP2013196453A (ja) * 2012-03-21 2013-09-30 Nec Corp 情報処理装置

Also Published As

Publication number Publication date
CN105589715B (zh) 2019-11-05
US9477498B2 (en) 2016-10-25
CN105589715A (zh) 2016-05-18
JP6409514B2 (ja) 2018-10-24
US20160132343A1 (en) 2016-05-12

Similar Documents

Publication Publication Date Title
JP6409514B2 (ja) 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム
US8078649B2 (en) Method and system for centrally deploying and managing virtual software applications
US7530079B2 (en) Managing application customization
US8302077B2 (en) Method and system for configuring software modules to execute in an execution environment
US9223568B2 (en) Designing and cross-configuring software
US9959160B2 (en) Fault handling in a distributed IT environment
US9639558B2 (en) Image building
EP2438515A2 (en) System and method for converting a java application into a virtual server image for cloud deployment
US11704133B2 (en) Isolating applications at the edge
US11595299B2 (en) System and method of suppressing inbound payload to an integration flow of an orchestration based application integration
CN108121594A (zh) 一种进程管理方法及装置
Adamczyk The anthology of the finite state machine design patterns
US20080271002A1 (en) System and method for providing a filtering classloader in a computer environment
JP5511874B2 (ja) セキュリティサービスに実装するシステムおよび方法
US20130305211A1 (en) Multiple project areas in a development environment
US20200053150A1 (en) Network topology templates for internal states of management and control planes
JP4931134B2 (ja) セキュアosのセキュリティポリシ追加設定方法及びシステム
JP2013186779A (ja) 情報処理装置およびプログラム実行方法
WO2020158347A1 (ja) 情報処理装置、方法およびプログラム
JP2023159710A (ja) 情報処理装置とインストール方法およびプログラム
JP2013054485A (ja) 設定支援システム、これを構成するサーバ装置、管理装置、設定支援方法およびプログラム
JP2007510210A (ja) コンピュータ装置におけるダイナミック・リンク・ライブラリのマッピング
JP5664348B2 (ja) 仮想マシンシステム、仮想マシンサーバ、仮想マシン運用方法、及び仮想マシン運用プログラム
JP2017010081A (ja) 情報処理装置およびその制御方法、並びにプログラム
Jankowski et al. Grid Checkpointing Service

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171016

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180510

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180522

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180718

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180828

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180910

R150 Certificate of patent or registration of utility model

Ref document number: 6409514

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150