JP5895616B2 - 情報処理装置およびプログラム実行方法 - Google Patents
情報処理装置およびプログラム実行方法 Download PDFInfo
- Publication number
- JP5895616B2 JP5895616B2 JP2012052638A JP2012052638A JP5895616B2 JP 5895616 B2 JP5895616 B2 JP 5895616B2 JP 2012052638 A JP2012052638 A JP 2012052638A JP 2012052638 A JP2012052638 A JP 2012052638A JP 5895616 B2 JP5895616 B2 JP 5895616B2
- Authority
- JP
- Japan
- Prior art keywords
- class
- name
- storage unit
- stored
- fully qualified
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 17
- 230000010365 information processing Effects 0.000 title claims description 15
- 230000008859 change Effects 0.000 claims description 55
- 238000012545 processing Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 description 16
- 238000004891 communication Methods 0.000 description 8
- 230000001419 dependent effect Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Landscapes
- Stored Programmes (AREA)
Description
ロード済のクラスを記憶する第1の記憶部と、前記第1の記憶部に記憶されているクラスの完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を記憶する第2の記憶部と、前記第1および第2の記憶部に接続されたプロセッサとを備え、
前記プロセッサは、
前記第1の記憶部に記憶されているクラスから参照されているクラスが前記第1の記憶部に記憶されているか否かを、参照先のクラスの完全修飾クラス名に一致する完全修飾クラス名が上記第2の記憶部に記憶されており、且つ、当該記憶されている完全修飾クラス名と同じ組の格納場所情報と参照元のクラスの定義ファイルに記述されている参照先のクラスのロード元を示す格納場所情報とが一致するか否かによって判断し、
上記参照されているクラスが上記第1の記憶部に記憶されていない場合、参照元のクラスに対応する定義ファイルに記述されている参照先のクラスの格納場所情報で示される場所から参照先のクラスを上記第1の記憶部にロードし、
上記ロードした参照先のクラスの完全修飾クラス名が上記第2の記憶部に記憶されていれば、上記参照先のクラスのバイトコードに出現する、上記参照先のクラスの完全修飾クラス名におけるパッケージ名を、異なるパッケージ名に、上記第1の記憶部上で変更すると共に、上記参照元のクラスのバイトコードに出現する、上記参照先のクラスの完全修飾クラス名におけるパッケージ名を、上記異なるパッケージ名に、上記第1の記憶部上で変更し、
上記ロードした参照先のクラスに関して、当該クラスの完全修飾クラス名が上記第2の記憶部に記憶されていなかったならば、当該クラスの完全修飾クラス名とロード元を示す格納場所情報とを含み変更前パッケージ名を有しない組を上記第2の記憶部に記憶し、当該クラスの完全修飾クラス名が上記第2の記憶部に記憶されていたならば、当該クラスのパッケージ名変更後の完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を上記第2の記憶部に記憶する
ようにプログラムされている。
[第1の実施形態]
図1を参照すると、本発明の第1の実施形態にかかる情報処理装置は、記憶部101〜103と、記録媒体104と、記憶部101〜103および記録媒体104に接続されたプロセッサ105とを有する。また、通信I/F部(通信インターフェース部)106、操作入力部107、および画面操作部108を有していてもよい。
・ライブラリ113のパッケージ名はcom.abc、クラス151のクラス名はBとする。即ち、ライブラリ112、113のクラス141、151は同じ完全修飾クラス名を持つ。このような例は、ライブラリ112、113がバージョンのみ相違するような場合にしばしば発生する。ライブラリ113は、フォルダlib配下に存在する、ファイル名が/lib/L1-2のフォルダに記憶されている。
・定義ファイル131は、クラス121がライブラリ112を使用することを、ライブラリ112の格納場所を示すファイル名/lib/L1-1をクラスパスとして記述することで明らかにしている。
・定義ファイル132は、クラス122がライブラリ113を使用することを、ライブラリ113の格納場所を示すファイル名/lib/L1-2をクラスパスとして記述することで明らかにしている。
・定義ファイル133は、クラス123がライブラリ113を使用することを、ライブラリ113の格納場所を示すファイル名/lib/L1-2をクラスパスとして記述することで明らかにしている。
・アプリケーション111の実行が既に開始されており、記憶部101、102の内容は図3に示すようになっているものとする。即ち、クラス121、このクラス121が使用するライブラリ112のクラス141、および、クラス122が、記憶部101にロードされており、記憶部102にクラス121、141、122の完全修飾クラス名とその格納場所情報との組が記憶されている。また、これらロード済のクラスのパッケージ名の変更は行われていないため、変更前パッケージ名は何れもNULLである。
[本実施形態が解決しようとする課題]
近年様々なコミュニティでオープンソースソフトウェア(OSS)の開発が盛んに行われており、ソフトウェア開発においてもそれらのソースコードの一部を使用したり、様々なライブラリ(成果物)を利用する機会が増えてきた。特にアプリケーションサーバでは、サーバ自体がそういったOSSのライブラリを使用するうえに、アプリケーションごとに使用するライブラリのバージョンが異なったりする構成をプロセス上で実行することがあるため、ライブラリの競合が問題となってきている。
オブジェクト指向言語において、クラスのパッケージ名の別名をあらかじめ定義しておき、クラスローダによるロードにおいて完全修飾クラス名の競合が発生した場合に動的に変更することで競合を回避して、同じ完全修飾クラス名を持つクラスを1つのクラスローダツリー上で同時に複数ロードすることを可能とする。
本実施形態の構成図を図6に示す。図6を参照すると、アプリケーションプログラムがクラスP1,P2から構成されており(そのようなアプリケーションプログラムをAとする)、クラスP1はライブラリL1-1のAPIを呼び出して処理を行い、クラスP2はライブラリL1-2のAPIを呼び出して処理を行う。それぞれのクラスでは、そのクラスの定義ファイル内でクラスパスとしてライブラリL1-1とライブラリL1-2をそれぞれファイル名で指定しており、P1とL1-1、P2とL1-2はそれぞれ独立した環境では実行可能とする。
プログラムAでクラスP1が実行されると、クラスローダCLはクラスP1の定義ファイルを確認し、依存するライブラリL1-1をロードして実行を完了する。
本実施形態によれば、ライブラリ間で完全修飾クラス名の競合が発生しても、実行時にパッケージ名を動的に置換することで競合を回避し、競合する両方のクラスの使用が可能となる。その結果、プログラム間で重複しないライブラリは共有でき、競合するライブラリは独立性が確保できる。
本実施形態は、ライブラリ内の定義ファイルに複数の別名を定義する例である。或る一つの別名に変更してもパッケージ名がなおも競合した場合に、さらに他の名前に変更して競合を回避する。
本実施形態は、ライブラリ内の定義ファイルではなく、外部定義ファイルにパッケージ名の命名規則を定義する例である。
本実施形態は、パッケージ名の変更をライブラリ内の全クラスではなく、条件に合う一部のパッケージのみに対して行う例である。
本実施形態は、クラスローダが階層構成の委譲モデルの形を取っており、競合するライブラリL1-1,L1-2が異なるフォルダに置かれている場合の例である。
(2)クラスP1を実行する
(3)プログラムがクラスP2を実行するとき、クラスP2の定義ファイルから、必要とするライブラリL1-2を確認し、またロード済みライブラリ一覧を確認して、ライブラリL1-1がロードされていることを確認する。その後、クラスローダCL2からクラスのロードを委譲していき、CL1でロードしたライブラリL1-1のパッケージは無視して、クラスの探索を続ける。そしてクラスローダCL2でライブラリL1-2をロードする。このときL1-1とL1-2でライブラリの競合が発生するので、パッケージ名の置換を行い、競合を回避する。パッケージ名の置換後、変更記録表T1に置換を行ったライブラリファイルパス名と命名規則を追加する。
(4)クラスP2を実行する。
104…記録媒体
105…プロセッサ
106…通信I/F部
107…操作入力部
108…画面表示部
111…アプリケーション
112、113…ライブラリ
121、122、123…アプリケーションのクラス
131、132、133…定義ファイル
141、151…ライブラリのクラス
161…Java仮想マシン
171…インタプリタ
172…クラスローダ
Claims (8)
- ロード済のクラスを記憶する第1の記憶部と、前記第1の記憶部に記憶されているクラスの完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を記憶する第2の記憶部と、前記第1および第2の記憶部に接続されたプロセッサとを備え、
前記プロセッサは、
前記第1の記憶部に記憶されているクラスから参照されているクラスが前記第1の記憶部に記憶されているか否かを、参照先のクラスの完全修飾クラス名に一致する完全修飾クラス名が前記第2の記憶部に記憶されており、且つ、当該記憶されている完全修飾クラス名と同じ組の格納場所情報と参照元のクラスの定義ファイルに記述されている参照先のクラスのロード元を示す格納場所情報とが一致するか否かによって判断し、
前記参照されているクラスが前記第1の記憶部に記憶されていない場合、参照元のクラスに対応する定義ファイルに記述されている参照先のクラスの格納場所情報で示される場所から参照先のクラスを前記第1の記憶部にロードし、
前記ロードした参照先のクラスの完全修飾クラス名が前記第2の記憶部に記憶されていれば、前記参照先のクラスのバイトコードに出現する、前記参照先のクラスの完全修飾クラス名におけるパッケージ名を、異なるパッケージ名に、前記第1の記憶部上で変更すると共に、前記参照元のクラスのバイトコードに出現する、前記参照先のクラスの完全修飾クラス名におけるパッケージ名を、前記異なるパッケージ名に、前記第1の記憶部上で変更し、
前記ロードした参照先のクラスに関して、当該クラスの完全修飾クラス名が前記第2の記憶部に記憶されていなかったならば、当該クラスの完全修飾クラス名とロード元を示す格納場所情報とを含み変更前パッケージ名を有しない組を前記第2の記憶部に記憶し、当該クラスの完全修飾クラス名が前記第2の記憶部に記憶されていたならば、当該クラスのパッケージ名変更後の完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を前記第2の記憶部に記憶する
ようにプログラムされている、情報処理装置。 - 前記プロセッサは、さらに、
前記ロードした参照先のクラスが参照する他のクラスに関して、当該他のクラスの完全修飾クラス名と同一となる変更前完全修飾クラス名に相当する完全修飾クラス名と変更前パッケージ名とを含む組であって、当該組の格納場所情報が前記ロードした参照先のクラスの定義ファイルに記述されている当該他のクラスのロード元を示す格納場所情報と一致する組が存在するか否かを判断し、存在する場合、前記ロードした参照先のクラスのバイトコードに出現する、参照している当該他のクラスの完全修飾クラス名を、前記第1の記憶部上で、前記存在した組における完全修飾クラス名に変更する
ようにプログラムされている請求項1に記載の情報処理装置。 - 前記パッケージ名の変更が行われるクラスは、クラスライブラリのクラスである
請求項1または2に記載の情報処理装置。 - 前記クラスライブラリの定義ファイルに、当該クラスライブラリのクラスのパッケージ名を変更する規則が記述されており、前記パッケージ名の変更では、前記規則に従って前記パッケージ名の変更を行う
請求項3に記載の情報処理装置。 - 外部定義ファイルに、前記クラスライブラリのクラスのパッケージ名を変更する規則が記述されており、前記パッケージ名の変更では、前記規則に従って前記パッケージ名の変更を行う
請求項3に記載の情報処理装置。 - 前記規則が、複数種類記述されている
請求項4または5に記載の情報処理装置。 - ロード済のクラスを記憶する第1の記憶部と、前記第1の記憶部に記憶されているクラスの完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を記憶する第2の記憶部と、前記第1および第2の記憶部に接続されたプロセッサとを備えた情報処理装置が実行するプログラム実行方法であって、
前記プロセッサが、
前記第1の記憶部に記憶されているクラスから参照されているクラスが前記第1の記憶部に記憶されているか否かを、参照先のクラスの完全修飾クラス名に一致する完全修飾クラス名が前記第2の記憶部に記憶されており、且つ、当該記憶されている完全修飾クラス名と同じ組の格納場所情報と参照元のクラスの定義ファイルに記述されている参照先のクラスのロード元を示す格納場所情報とが一致するか否かによって判断し、
前記参照されているクラスが前記第1の記憶部に記憶されていない場合、参照元のクラスに対応する定義ファイルに記述されている参照先のクラスの格納場所情報で示される場所から参照先のクラスを前記第1の記憶部にロードし、
前記ロードした参照先のクラスの完全修飾クラス名が前記第2の記憶部に記憶されていれば、前記参照先のクラスのバイトコードに出現する、前記参照先のクラスの完全修飾クラス名におけるパッケージ名を、異なるパッケージ名に、前記第1の記憶部上で変更すると共に、前記参照元のクラスのバイトコードに出現する、前記参照先のクラスの完全修飾クラス名におけるパッケージ名を、前記異なるパッケージ名に、前記第1の記憶部上で変更し、
前記ロードした参照先のクラスに関して、当該クラスの完全修飾クラス名が前記第2の記憶部に記憶されていなかったならば、当該クラスの完全修飾クラス名とロード元を示す格納場所情報とを含み変更前パッケージ名を有しない組を前記第2の記憶部に記憶し、当該クラスの完全修飾クラス名が前記第2の記憶部に記憶されていたならば、当該クラスのパッケージ名変更後の完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を前記第2の記憶部に記憶する
プログラム実行方法。 - ロード済のクラスを記憶する第1の記憶部と、前記第1の記憶部に記憶されているクラスの完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を記憶する第2の記憶部とに接続されたプロセッサに、
前記第1の記憶部に記憶されているクラスから参照されているクラスが前記第1の記憶部に記憶されているか否かを、参照先のクラスの完全修飾クラス名に一致する完全修飾クラス名が前記第2の記憶部に記憶されており、且つ、当該記憶されている完全修飾クラス名と同じ組の格納場所情報と参照元のクラスの定義ファイルに記述されている参照先のクラスのロード元を示す格納場所情報とが一致するか否かによって判断するステップと、
前記参照されているクラスが前記第1の記憶部に記憶されていない場合、参照元のクラスに対応する定義ファイルに記述されている参照先のクラスの格納場所情報で示される場所から参照先のクラスを前記第1の記憶部にロードするステップと、
前記ロードした参照先のクラスの完全修飾クラス名が前記第2の記憶部に記憶されていれば、前記参照先のクラスのバイトコードに出現する、前記参照先のクラスの完全修飾クラス名におけるパッケージ名を、異なるパッケージ名に、前記第1の記憶部上で変更すると共に、前記参照元のクラスのバイトコードに出現する、前記参照先のクラスの完全修飾クラス名におけるパッケージ名を、前記異なるパッケージ名に、前記第1の記憶部上で変更するステップと、
前記ロードした参照先のクラスに関して、当該クラスの完全修飾クラス名が前記第2の記憶部に記憶されていなかったならば、当該クラスの完全修飾クラス名とロード元を示す格納場所情報とを含み変更前パッケージ名を有しない組を前記第2の記憶部に記憶し、当該クラスの完全修飾クラス名が前記第2の記憶部に記憶されていたならば、当該クラスのパッケージ名変更後の完全修飾クラス名とロード元を示す格納場所情報と変更前パッケージ名との組を前記第2の記憶部に記憶するステップと
を行わせるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012052638A JP5895616B2 (ja) | 2012-03-09 | 2012-03-09 | 情報処理装置およびプログラム実行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012052638A JP5895616B2 (ja) | 2012-03-09 | 2012-03-09 | 情報処理装置およびプログラム実行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013186779A JP2013186779A (ja) | 2013-09-19 |
JP5895616B2 true JP5895616B2 (ja) | 2016-03-30 |
Family
ID=49388124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012052638A Expired - Fee Related JP5895616B2 (ja) | 2012-03-09 | 2012-03-09 | 情報処理装置およびプログラム実行方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5895616B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017126293A (ja) * | 2016-01-15 | 2017-07-20 | キヤノン株式会社 | 情報処理装置及びリソース管理方法 |
CN107423103A (zh) * | 2017-05-09 | 2017-12-01 | 成都市宏山科技有限公司 | 同时运行多个软件的手机系统 |
CN110941443B (zh) * | 2019-12-12 | 2023-03-17 | 支付宝(中国)网络技术有限公司 | 修改sdk中文件名的方法、装置及电子设备 |
CN111198710B (zh) * | 2020-01-03 | 2022-08-26 | 厦门美图之家科技有限公司 | 程序安装包处理方法、装置和电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000293377A (ja) * | 1999-04-08 | 2000-10-20 | Nec Software Chubu Ltd | 共存環境構築方法及び共存環境構築プログラムを記録した記録媒体 |
JP3570940B2 (ja) * | 1999-11-25 | 2004-09-29 | 北海道日本電気ソフトウェア株式会社 | ダイナミックリンクライブラリ制御方式,方法および記録媒体 |
JP2003058378A (ja) * | 2001-08-20 | 2003-02-28 | Canon Inc | 情報処理装置およびプログラムインストール方法および記憶媒体およびプログラム |
JP2005301403A (ja) * | 2004-04-07 | 2005-10-27 | Matsushita Electric Ind Co Ltd | プログラム実行装置およびプログラム実行方法 |
-
2012
- 2012-03-09 JP JP2012052638A patent/JP5895616B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2013186779A (ja) | 2013-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110275722B (zh) | 用于升级应用的方法、装置、设备和存储介质 | |
RU2601198C2 (ru) | Система среды выполнения | |
US10684846B2 (en) | Using semantic annotations to control compatibility behaviors | |
US20080005719A1 (en) | Methods, systems, and computer program products for providing a program execution environment | |
CN105159788B (zh) | 一种Android应用间动态共享资源的方法及系统 | |
JP2006092544A (ja) | プリオペレーティングシステム環境におけるモジュールの動的リンク | |
US9772865B2 (en) | On-demand loading of dynamic scripting language code for reduced memory usage | |
JP5895616B2 (ja) | 情報処理装置およびプログラム実行方法 | |
JP6338713B2 (ja) | 柔軟性の高いメタデータの合成 | |
US9183011B2 (en) | Method and system for runtime environment emulation | |
US8606766B2 (en) | Method and system to handle java class versioning | |
WO2007145428A1 (en) | Methods of generating, linking, and updating component-based software and information storage medium having such software recorded thereon | |
US20100058305A1 (en) | Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information | |
US10387142B2 (en) | Using annotation processors defined by modules with annotation processors defined by non-module code | |
US20140089909A1 (en) | Dynamically building locale objects at run-time | |
CN108228266B (zh) | 一种Android插件框架下不同插件间启动Fragment组件的方法和装置 | |
JP2007510211A (ja) | コンピュータ装置におけるダイナミック・リンク・ライブラリのマッピング | |
US10922107B2 (en) | Apparatus and method for realizing runtime system for programming language | |
JP5506936B2 (ja) | 意味論的値を利用するオブジェクト・レベルの互換性及びクラスのサイズ変更 | |
US10310871B2 (en) | Non-transitory computer-readable recording medium storing control program, control device and control method | |
CN113495727B (zh) | 业务组件开发方法、装置、电子设备及介质 | |
US20080307446A1 (en) | Interoperable Managed and Unmanaged Code in a Document Environment | |
US9778917B2 (en) | Dynamically building subsections of locale objects at run-time | |
CN117111958A (zh) | 增量编译方法、装置、存储介质及电子设备 | |
CN114185556A (zh) | 一种智能合约部署方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150210 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20151007 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20151013 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20151210 |
|
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: 20160202 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160215 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5895616 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |