JP2006065462A - ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体 - Google Patents

ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体 Download PDF

Info

Publication number
JP2006065462A
JP2006065462A JP2004245094A JP2004245094A JP2006065462A JP 2006065462 A JP2006065462 A JP 2006065462A JP 2004245094 A JP2004245094 A JP 2004245094A JP 2004245094 A JP2004245094 A JP 2004245094A JP 2006065462 A JP2006065462 A JP 2006065462A
Authority
JP
Japan
Prior art keywords
program
stop
bundle
module
order
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.)
Withdrawn
Application number
JP2004245094A
Other languages
English (en)
Inventor
Toyohiko Ushiku
豊彦 牛久
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP2004245094A priority Critical patent/JP2006065462A/ja
Priority to US11/202,501 priority patent/US7665065B2/en
Publication of JP2006065462A publication Critical patent/JP2006065462A/ja
Withdrawn legal-status Critical Current

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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • 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

Landscapes

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

Abstract

【課題】 複数のソフトウェア・モジュールからなるソフトウェア・システムを停止する際に、安全に各ソフトウェア・モジュールを停止する方法を実現する。
【解決手段】 バンドル起動順リスト規定された起動された順番と逆の順番で、各ソフトウェア・モジュールを停止する。また、ソフトウェア・モジュールの静的な参照関係を木構造として表現したり、ソフトウェア・モジュールの動的な参照関係を木構造として表現したりして、深さ優先探索によって探索して得られた順番で、停止してもよい。
【選択図】 図8

Description

本発明は、複数のプログラム・モジュールからなるソフトウェア・システム、そのシステムを実現するためのプログラム、及びそのプログラムを格納した記憶媒体に関する。
従来複数のプログラム・モジュールから構成されるソフトウェア・システムにおいて、システムの起動時にそれらのプログラム・モジュールをどのような順番で起動していくかを制御するための起動順序制御手段を有するものがある(たとえば、特許文献1、特許文献2、特許文献3、非特許文献1参照)。
起動順序を制御する目的は、あるプログラム・モジュールが他のプログラム・モジュールの提供している機能を使用する際に、機能を提供するプログラム・モジュールが先に起動されていないと機能を利用するプログラム・モジュールの起動が失敗してしまうような依存関係を満足することであることが多い。
組み込み機器では、電源投入時にはシステム稼動に必要なプログラムを立ち上げ初期化を行なう初期化プログラムが起動される。
一方、システムの停止に関して従来の組み込み機器では、電源スイッチを切断することで電源供給を遮断してプログラムの実行を強制的に停止させてしまうことが多かった。
このように強制的に電源供給を遮断してしまうと、それまでダイナミックRAMなどの揮発性メモリ中に保存されていてスタティックRAMやハードディスクなどの不揮発性メモリに移動されていないデータは失われることになる。また、ハードディスクを搭載しているシステムでは、ハードディスクに書き込み中に電力供給が遮断されることに起因してハードディスクの物理的な破損や、記憶していたデータの消失などの事態を招くことがあった。
そこで、組み込み機器でもシステムの停止時にシステムの停止処理、いわゆるシャットダウン処理を行ない、プログラム・モジュールが実行している最中の処理を安全に停止させたり、揮発メモリ中にしか存在していないデータを不揮発性メモリに移動させたりする処理を実行しうるようにしたものが出てきている。
特開2002−196939号公報 特開2002−297403号公報 特開2002−351677号公報 「OSGi Service Platform Release 3」、Open Service Gateway Initiative、2003年3月
プログラム・モジュールを停止する際に、起動時と同様、他のプログラム・モジュールの提供している機能を停止処理中で利用しているプログラム・モジュールがあるような場合、機能を提供しているプログラム・モジュールを先に停止してしまうと、機能を利用しているプログラム・モジュールを停止する際に処理が正常に行なえず、停止処理に失敗してしまうという問題点が存在する。
また、特許文献1で提示されている方法では、システムの稼動中にシステムに追加されたプログラム・モジュールを対象にして起動・停止処理を行なう場合は、起動・停止処理の順序を規定する定義ファイルをその都度書き直して設定する必要があるという問題点が存在する。
本発明は、このような従来のシステムが有する問題点を解決しようとするものであり、簡便で安全なシステム停止方法を提供することを目的とするものである。
また、本発明は、上述したシステムを構築するソフトウェア、及びソフトウェアを格納した記憶媒体を提供することも目的とするものである。
本発明は上記目的を達成するため為されたもので、複数のプログラム・モジュールからなるソフトウェア・システムにおいて、プログラム・モジュールをソフトウェア・システムの起動後にソフトウェア・システムにインストールするインストール手段、前記インストール手段によってインストールされたプログラム・モジュールを個々に指定し起動するプログラム・モジュール起動手段、前記プログラム・モジュール起動手段によって起動されたプログラム・モジュールを個々に指定し停止するプログラム・モジュール停止手段、ソフトウェア・システムの起動時におけるプログラム・モジュールの起動順序を規定しその順番どおりにプログラム・モジュールを前記プログラム・モジュール起動手段によって起動する起動順序制御手段、ソフトウェア・システムの停止処理時にプログラム・モジュールの停止順序を規定しその順番どおりにプログラム・モジュールを前記プログラム・モジュール停止手段によって停止する停止順序制御手段を有することを特徴とするソフトウェア停止方式を実現するものである。
上述したように本発明のプログラム・モジュール停止制御システムでは、簡便な設定で依存関係を有するプログラム・モジュールの停止順序を、安全に停止できる順序とすることができ、安全性の高い装置を提供することができる。
本発明では、次のいずれかの順番で各ソフトウェア・モジュールの停止順番を決定する手段を実現する。
(1)起動された順番とは異なる順番
(2)起動された順番と逆の順番(実施例1)
(3)ソフトウェア・モジュールの静的な参照関係を木構造として表現し、深さ優先探索によって決められる順番(実施例2、3)
(4)(3)の木構造のノードの重みを計算し重みの大きさによる順番(実施例3)
(5)ソフトウェア・モジュールの動的な参照関係を木構造として表現し、深さ優先探索によって探索して得られた順番(実施例4)
(6)(5)の木構造のノードの重みを計算し重みの大きさによる順番(実施例4)
図を用いて本発明の第1の実施例について説明する。本実施例では、複数のプログラム・モジュールからなるソフトウェア・システムにおいて、各プログラム・モジュールがお互いに依存関係を持つとき、安全にソフトウェア・システムを停止させるために、各プログラム・モジュールの停止順序を制御するシステム、及びそのシステムを実現するためのソフトウェアを説明する。
図1は本発明を実施するシステム上で稼動するソフトウェアの構成を示したもので、非特許文献1に記載されているOSGiサービス・プラットフォームで規定されているものである。
同図において、1010はハードウェアやソフトウェアを制御するためのオペレーティングシステム、1020はオペレーティングシステム1010上で稼動しJava(登録商標)言語(Java(登録商標)はSun Microsystems,Inc.社の登録商標である)から生成された中間言語であるバイトコードを解釈実行するためのJava(登録商標)仮想マシン、1030はJava(登録商標)言語で記述された各種アプリケーション・プログラムを一つのJava(登録商標)仮想マシン1020の上で実行可能にするためのフレームワーク(フレームワーク1030も、Java(登録商標)言語で記述されている)、1040はフレームワーク1030上で動作するアプリケーションのフレームワーク上の管理単位であるバンドルである。
バンドル1040はアプリケーションを構成するJava(登録商標)言語によって記述されたプログラムやそのプログラムが使用する画像データや各種ファイルデータなどを内包している。フレームワーク1030はバンドル1040をおのおの独立してフレームワークに対してインストール/アンインストールする機能、インストールされているバンドルを新しいものに更新する機能、インストールされているバンドルを起動/停止する機能を有する。
図2は、フレームワーク1030を構成する主なJava(登録商標)言語のクラスの構成を記述した図である。同図において、2010はフレームワーク1030の主な機能を実現しているフレームワーク実装クラス、2015はフレームワーク実装クラスが実装している機能をフレームワーク以外からアクセスするためのインタフェースを定義しているBunleContextインタフェース、2020は他のバンドルからバンドル1040に対してアクセスするためのインタフェースを規定しているBundleインタフェース、2025はフレームワーク1030上でバンドル1040を管理するために生成されるバンドル制御実装クラス、2030はバンドル1040を起動/停止する際にフレームワーク1030が呼び出すメソッドを規定したインタフェースであるBundleActivatorインタフェース、2035はバンドル1040内でBundleActivatorインタフェース2030を実装しているバンドル実装、2040はバンドル1040が他のバンドルに対して提供しているサービスをフレームワーク1030上で管理するためのサービス制御実装、2045はバンドル1040内でバンドル1040が提供するサービスを実際に実装しているサービス実装、2050はサービス登録データにアクセスするためのインタフェースであるServiceRegistrationインタフェース、2055はサービスを使用する際にサービスのデータにアクセスするためのインタフェースであるServiceReferenceインタフェースである。
図3はバンドル1040をインストールする際に用いられるアーカイブファイルであるJarファイルの構造と、バンドルを構成するファイル(バンドル・ファイルと呼ぶ)の際にJarファイルのヘッダであるマニフェストヘッダに設定されるバンドルの属性を示したものである。ただし、これらのバンドル属性は必ずしも指定する必要はなく、順番も規定されているものではない。
同図において、3010はバンドル1040の名前を記述しているバンドル名、3020はバンドル1040が参照する他のバンドル1040が提供するJava(登録商標)パッケージのパッケージ名のリストである静的参照パッケージ、3030はバンドル1040が他のバンドルに対して提供しているJava(登録商標)パッケージ名のリストである提供パッケージ、3040は静的参照パッケージ3020と同様にバンドル1040が参照するJava(登録商標)パッケージ名のリストであるが、静的参照パッケージ3020がバンドル1040の起動時に参照関係の解決が必要なのに対し、実際に必要となるときに参照関係が解決できれば良い動的参照パッケージ、3050は他のバンドル1040が提供しているサービスのうちのどのサービスを使用するかを宣言する参照サービス、3060は他のバンドル1040に提供可能なサービスを宣言する提供サービス、3070はBundleActivatorインタフェース2030を実装しているクラスの名前を宣言するBundleActivator実装クラス名である。
以下、システムの停止時に参照されるデータが生成されるインストール処理、バンドルの起動/停止処理、システムの再起動処理、システム停止処理について説明する。
《インストール処理》
はじめにバンドル1040がフレームワーク1030にインストールされる際の処理について図4を用いて説明する。本実施例では、プログラム・モジュールをソフトウェア・システムの起動後にソフトウェア・システムにインストールする。
システムのオペレータがバンドル・ファイルの格納されている場所をURL(Uniform Resource Locators)を使用して指定し、指定された場所に格納されているバンドル・ファイルをフレームワーク1030にインストールすることをフレームワーク実装2010に指示する(410)。
フレームワーク実装2010は指定された格納場所からバンドル・ファイルを読み込み、読み込んだバンドル・ファイルのデータをフレームワーク内で参照しやすいように設けられたキャッシュに格納する(415)。
読み込まれたバンドル・ファイルのマニフェスト(Jarファイルの属性などを定義するヘッダ)から提供パッケージ・ヘッダ3030と静的参照パッケージ・ヘッダ3020を読み出す。各バンドル1040が提供しているJava(登録商標)パッケージは、提供しているバンドル1040のバンドルIDとともにフレームワーク実装2010の持つ提供パッケージ・レジストリに格納されている。静的参照パッケージ・ヘッダ3020に記述されている参照パッケージがこの提供パッケージ・レジストリにすでに登録されている、もしくは自身の提供パッケージ・ヘッダ3030に記述されている場合は処理を続行する。そうでない場合は、インストール処理が失敗したことを示す例外を発生させ処理を停止する(420)。
バンドル制御実装2025のオブジェクトを生成し(425)、バンドル・ファイルのマニフェストの情報によって初期化を行なう(430)。マニフェストの内容はバンドル制御実装2025によって管理され、各マニフェスト・ヘッダのエントリを表す文字列をキーにして参照可能となっている。また、バンドルにはバンドルを一意に特定するためのバンドルIDが付与される。
図8に示される構造をもったバンドル・リストがフレームワーク実装2010によって生成されている。新たにインストールされたバンドルに関するエントリをバンドルID、キャッシュ内の格納位置などの情報によって作成し、バンドル・リストの最後に追加する(435)。このバンドル・リストは、ハードディスクなどの不揮発なメモリに格納される。
バンドル制御実装2025にインストールされたことを示すINSTALLED状態を設定する(440)。
この状態をバンドル・リストからバンドルIDをキーにして対象となるバンドルに対するバンドル・リスト・エントリを検索し、そのエントリに登録されている状態をINSTALLEDに変更する(445)。
このようにしてバンドル1040がフレームワーク1030にインストールされる。
《バンドルの起動/停止処理》
次にバンドル1040が起動/停止されるときの処理について図5を用いて説明する。本実施例では、上記のインストール処理でインストールされたプログラム・モジュールを個々に指定して起動し、起動されたプログラム・モジュールを個々に指定して停止する。
オペレータからバンドルIDを指定して指定されたバンドルIDに対応するバンドルを起動するよう指示されたフレームワーク実装2010は(510)、バンドルIDからそのバンドルIDに対応するバンドル制御実装2025を検出する。
バンドル制御実装2025に対してBundleActivator実装クラス名ヘッダ3070を表す文字列をキーとして指定しBundleActivator実装クラス名3070のデータを取得する(515)。
BundleActivator実装クラス名3070が定義されている場合は、このBundleActivator実装クラス名3070が示すクラスをロードし、オブジェクト生成を行なう(520)。生成されたBundleActivatorオブジェクトはバンドル制御実装2025に記憶される。生成されたBundleActivatorオブジェクトに対してstartメソッドを呼び出し、バンドル1040ごとに定義されたバンドルの初期化ルーチンを実行する(525)。この初期化ルーチンの中で、バンドル1040が提供するサービスをフレームワーク実装2010に登録して(530)、登録されたサービスを表すServiceRegistrationオブジェクトを取得したり、フレームワーク実装2010に登録されているサービスからバンドル1040が使用するサービスを検索し、検索したサービスを表すServiceReferenceオブジェクトを取得しサービス・オブジェクトを取得したり(535)するなどの処理を行なうことが一般的である。
起動が成功すると、バンドル1040が起動されていることを示す状態であるACTIVE状態にバンドル制御実装が設定される(540)。
また、このACTIVE状態はバンドル・リストの対応するエントリの状態フィールドにも設定されて永続的に記憶される(545)。
さらに、フレームワーク実装2010は、図8に示すバンドル起動順リストを保持しており、このリストもバンドル・リストと同様に永続的に記憶される。このバンドル起動順リストの最後に起動したバンドルのバンドルIDを追加する(548)。このバンドル起動順リストは、ソフトウェア・システムの起動時におけるプログラム・モジュールの起動順序を規定する。
次に停止処理について説明する。本実施例では、上記のプログラム・モジュール起動処理で起動されたプログラム・モジュールを個々に指定して停止する。
オペレータからバンドルIDを指定して指定されたバンドルIDに対応するバンドルを停止するよう指示されたフレームワーク実装2010は(550)、バンドルIDからそのバンドルIDに対応するバンドル制御実装2025を検出する。
バンドル制御実装2025が記憶しているBundleActivatorオブジェクトを取得する。取得したBundleActivatorオブジェクトに対してstopメソッドを呼び出し、バンドル1040ごとに定義されたバンドルの停止ルーチンを実行する(555)。この停止ルーチンの中で、バンドル1040が登録したサービスの登録解除を行なったり(565)、使用していたサービスの開放を行なったりする(560)ことが一般的である。
停止が成功すると、バンドル1040が停止していることを示す状態であるRESOLVED状態にバンドル制御実装が設定される(570)。
また、このRESOLVED状態はバンドル・リストの対応するエントリの状態フィールドにも設定されて永続的に記憶される(575)。さらに、バンドル起動順リスト(図8)から停止したバンドルのバンドルIDが記述されているエントリを削除する(580)。こうすることによって、バンドル起動順リスト(図8)は起動されているバンドルがどのような順番で起動されたのかを保持することができる。
《システム再起動処理》
図6を用いてシステムが再起動するときの処理を説明する。本実施例では、ソフトウェア・システムの起動時におけるプログラム・モジュールの起動順序を規定し(バンドル起動順リスト)、その順番にしたがって(その順番どおりに)プログラム・モジュールを起動する。すなわち、このシステムはシステムの停止処理(後述)が開始するまで稼動していたバンドル1040をシステムの再起動時に自動的に起動するようになっている。その方法について説明する。
まず、システムが起動されると(610)、フレームワーク実装2010が生成される(615)。
フレームワーク実装2010が起動されると(620)、永続的に記憶されていたバンドル・リストを読み出す(625)。
バンドル・リストに記憶されていたバンドルの情報からバンドル制御実装2025を生成し(630)、生成されたバンドル制御実装2025を初期化する(635)。また、バンドル・リストに記憶されていた状態にバンドルの状態を設定する(640)。
さらに永続的に記憶されていたバンドル起動順リスト(図8)を読み出し(645)、リストに登録されている順番にバンドルIDを取得し、取得したバンドルIDのバンドル制御実装2025のオブジェクトを検索してバンドル1040の起動処理を行なう(650、655、660)。ここで行われる起動処理(650、655、660)は通常のバンドル1040の起動処理(515、520、525)と同等である。このようにして、バンドル起動順リストにしたがって、システムが停止される前と同じ順番でバンドル1040が再起動されていく。
《システム停止処理》
次に、システムを停止する際の処理について図7を用いて説明する。本実施例では、ソフトウェア・システムの停止処理時にプログラム・モジュールの停止順序を規定し、その順番にしたがって(その順番どおりに)プログラム・モジュールを停止する。停止順序は、プログラム・モジュールの起動順序に応じた順番(バンドル起動順リストで順序付けられた起動順番の逆順)である。
システムが停止しようとすると(710)、フレームワーク実装2010に対して停止メソッドが呼ばれる(715)。
フレームワーク実装2010がシステム起動時に永続的記憶領域から読み込んで保持しているバンドル起動順リスト(図8)を参照する。バンドル起動順リストは、バンドルの起動/停止処理時に更新されている。
このバンドル起動順リスト(図8)を逆に参照し、最も遅く起動されたバンドル1040から停止していく(720、725、730)。この停止処理方法(720、725、730)は、通常のバンドル1040の停止方法(555、560、565、570、575)と比較して、状態の保存(バンドル・リストの対応するエントリの状態フィールドへのRESOLVED状態の設定)を行なわないことを除いて同等である。再起動時には、このバンドル・リストの対応するエントリの状態フィールドに永続的に記憶された状態を見て、対象となるバンドルを起動するか否かを決める。したがって、もし、システムの停止処理中に操作者が明示的に指示して行なわれるバンドルの停止処理と同じように永続的に記憶されているバンドルの状態を停止状態であるRESOLVED状態にしてしまうと、次回システムが立ち上がったときに全てのバンドルが停止状態になってしまうので、それを避けるため、システムの停止時にはバンドルの状態を永続的に記憶することを止めている。
なお、次のバンドルの停止処理を開始する前には、前のバンドルの停止処理は完全に終了していなければならない。
本実施例においてはバンドル1040の起動順序を記憶しておくバンドル起動順リスト(図8)を設けたが、起動順序をインストール順序のままで起動順序の変更手段を持たないなどのシステムの条件によってはバンドル・リストを逆に参照して起動されているバンドルを停止することでも実現できる。
ただし、システムが動的参照パッケージをサポートしている場合は、この限りではない。なぜなら、バンドル1040が提供しているサービスのインタフェースはサービスを提供しているバンドル1040が提供パッケージ・ヘッダ3030にて他のバンドルに対して提供しているパッケージ内に存在し外部から参照できるようにするのが標準的な使用方法である。そのため、サービスを使用するバンドルは静的参照パッケージ・ヘッダ3020にサービスのインタフェースが定義されているパッケージを指定しなければならない。したがって、動的参照パッケージ3040がサポートされていないシステムでは、バンドル1040のインストール時にパッケージの参照関係が解決されるので、サービスを使用するバンドル1040はサービスとそのサービスのインタフェースを提供するバンドル1040よりあとにインストールされなければならない。このことにより、あとからインストールされたバンドルから停止していけばサービスを参照しているバンドル1040から先に停止していくことができる。逆に言えば動的参照パッケージがサポートされている場合、バンドルのインストール順の逆順では安全な停止順を規定できない可能性があるためである。
また、本実施例では起動順の逆順をそのまま停止順としたが、より細かな制御を行なうため、起動順リストからその逆順に停止順リストを生成し、システム管理者が停止順リストを変更して停止させる順番を調整できるよう構成することもできる。
次に第2の実施例について説明する。
本実施例において、ソフトウェア構成等、システムの停止時の処理以外は第1の実施例と同じである。
システム停止時の処理を図9の処理の流れと図10に示す2つの例を用いて説明する。本実施例では、プログラム・モジュール間の依存関係から各プログラム・モジュールの依存関係を表す木構造を導出し、木構造を探索しながら他のプログラム・モジュールに依存しているプログラム・モジュールから停止するように、停止順序を規定する。
システムが停止しようとすると(910)、フレームワーク実装2010に対して停止メソッドが呼ばれる(915)。
フレームワーク実装2010は、自身の停止順序決定メソッドを呼び出す(920)。
停止順序決定メソッドでは、バンドル制御実装2025よりインストールされている各バンドルの参照サービス3050と提供サービス3060を取得する。それらの参照サービス3050と提供サービス3060のデータからサービスの提供関係を有向グラフで表す。有向グラフの向きはサービスを提供しているバンドルから参照しているバンドルへとなるようにする。
これらの有向グラフの例を図10の左側に示す。この例ではA、B、C、Dの4つのバンドルがバンドルAの提供するサービスをバンドルBとバンドルDが参照し、バンドルBが提供するサービスをバンドルCとバンドルDが参照し、バンドルCの提供するサービスをバンドルDが参照している。バンドルのインストール順序はバンドルA、バンドルB、バンドルC、バンドルDの順であるものとする。
この有向グラフから図10の右側に示すような木構造を導出する。この木構造の導出のアルゴリズムは、以下のとおりである。
バンドル・リストを参照して、各バンドルをインストールされている順に処理する。
処理対象バンドルが有向グラフの辺の終端となっていない場合、すなわち他のバンドルのサービスを参照していない場合(たとえば、例1、例2のバンドルA、例2のバンドルCのような場合)、処理対象バンドルをルート・ノードとする新しい木構造を構築する。
そうでない場合(処理対象バンドルが有向グラフの辺の終端となっている場合(例えば、例1、例2のバンドルB))、生成されている木構造を生成された順に対象とし、各木構造を深さ優先探索して、処理対象バンドル(例えば、バンドルB)が登録されているノードを見つける。処理対象となっているバンドルが始点となっているグラフの指しているバンドル(例1では、バンドルBは、バンドルCとDを指している)をインストールされた順番に処理対象バンドルのノードの子ノードとして登録する。子ノードをインストールされた順番に、第1子、第2子、第3子のように考え、左から降順に並べる(例1のノードBの子ノードC、Dは、インストールされた順番に、左から降順に並べられる)。
このようにして生成した木構造群を生成した順(例2では、バンドルAをルート・ノードとする木構造がさきで、バンドルCをルート・ノードとする木構造があと)に使用し、各木構造は深さ優先探索して、停止順序リストを構成していく。各ノードにおいて、停止順序リストに存在していないバンドルの場合、停止順序リストの最後に追加する。すなわち、停止順序決定メソッドで取得された参照サービス3050と提供サービス3060で定義されたプログラム・モジュール間の依存関係を静的に定義し、この依存関係から各プログラム・モジュールの依存関係を表す木構造を導出し、木構造を探索しながら他のプログラム・モジュールに依存しているプログラム・モジュールから停止するように、停止順序リストを規定する。
このように生成した停止順序リストに登録されているバンドルを順に停止していく。停止処理方法(925、930、935)は通常のバンドル1040の停止方法(555、560、565、570、575と比較して状態の保存(バンドル・リストの対応するエントリの状態フィールドへのRESOLVED状態の設定)を行なわないことを除いて同等である。
以上のように、本実施例では、ソフトウェア・システムの停止処理時に、プログラム・モジュール間の依存関係から導出した各プログラム・モジュールの依存関係を表す木構造、各プログラム・モジュールの依存関係(から導出した各プログラム・モジュールの依存関係を表す木構造)に基づいて、他のプログラム・モジュールに依存しているプログラム・モジュールから順番に、プログラム・モジュールを停止する。
次に第3の実施例について説明する。本実施例でも、プログラム・モジュール間の依存関係から各プログラム・モジュールの依存関係を表す木構造を導出し、木構造を探索しながら他のプログラム・モジュールに依存しているプログラム・モジュールから停止するように、停止順序を規定する。
静的に決定されるサービスの参照関係から有向グラフを作成し、木構造を作成するまでは第2の実施例と同じである。すなわち、本実施例でも、停止順序決定メソッドで取得された参照サービス3050と提供サービス3060で定義されたプログラム・モジュール間の依存関係を静的に定義し、この依存関係から各プログラム・モジュールの依存関係を表す木構造を導出する。
本実施例では構築された木構造から次のアルゴリズムによってバンドルの停止順序を決定する。
本実施例の停止順序決定アルゴリズムを、図11を用いて説明する。本実施例において木構造のノードに正の整数値で表す重みを付加することができる。
木構造を深さ優先探索し、葉の部分(他のバンドルに参照されていないバンドルであり、この例では、CとD)には重みとして1を付加する。
ノードに対しては、すべての子ノード(当該バンドルが参照しているバンドル)に重みが付加されたときに、子ノードの重みの中で最も大きな重みに1加えた数を自ノードの重みとする。例えば、ノードAに対しては、子ノードB、Cの重み(2と1)の中で、最も大きな重み(2)に1を加えた数を、ノードAの重み(3)とする。
このようにして、すべてのノードに重み付けを行なう。
図11の左側に例として示すような有向グラフからは、同図の右側に示す木構造が導出され、各ノードの重みはノードの肩に書かれている数字のようになる。
停止順リストは、重みの小さなバンドルから並ぶように構成する。すなわち、各プログラム・モジュールの依存関係を表す木構造を探索しながら他のプログラム・モジュールに依存しているプログラム・モジュールから停止するように、停止順リストを規定する。本実施例では、導出される木構造の葉の部分に最小の重み(この例では、1)をつけ、子ノードの持つ重みのうち最大のものに決められた量(この例では、1)を加算した重みをつけ、最小の重みを持つプログラム・モジュールから重みの重くなる順番に並べて、停止順序を規定する。
バンドルの停止処理は、重みの小さい順に実行される。このリストのうちの同じ重みのバンドルの停止処理は、別のスレッドを生成してそのスレッドの中で実行することにより並列に処理することができる。ただし、次に小さな重みのバンドルの停止処理は、そのバンドルより小さい重みを持ったバンドルの停止処理を行っているスレッドの処理が停止するのを待ってから、行なう。
以上のように、本実施例では、ソフトウェア・システムの停止処理時に、プログラム・モジュール間の依存関係から導出した各プログラム・モジュールの依存関係を表す木構造、各プログラム・モジュールの依存関係(から導出した各プログラム・モジュールの依存関係を表す木構造)に基づいて、他のプログラム・モジュールに依存しているプログラム・モジュールから順番に、プログラム・モジュールを停止する。
次に第4の実施例について説明する。
実施例2および実施例3ではサービスの参照関係をバンドル・ファイルに定義されている静的な情報から導出したが、本実施例では動的に変化するサービスの参照関係により停止順序を決定する。
本実施例における停止順序決定方法を説明する前に、図12を用いてサービスの取得処理について説明する。
図5に示すようにバンドル1040が提供するサービスは、通常バンドル1040が起動されるときにフレームワーク実装2010に対して登録される。登録されたサービスはServiceReferenceクラス2055としてフレームワーク実装2010の中に構築されるサービス・レジストリに登録されて管理される。すなわち、フレームワーク実行2010の中に構築されるサービス・レジストリは、プログラム・モジュールの持つ機能を他のプログラム・モジュールから使用するいわゆるサービスを管理する。ServiceReference内には、サービスを提供しているバンドル1040に対するバンドル制御実装2025が記憶されている。
登録されたサービスを他のバンドル1040が使用する場合、最初にフレームワーク実装2010に対して使用するサービスを定義しているサービス・インタフェースの名前を指定してそのサービスのServiceReferenceの検索を依頼する(1210)。
フレームワーク実装2010はサービス・レジストリを検索して指定されたサービス・インタフェースを実装しているサービスのServiceReferenceオブジェクトを検索し(1215)、戻り値として返す(1220)。すなわち、バンドル制御実装2025は、フレームワーク実装2010の中に構築されるサービス・レジストリに登録されたサービスを検索してサービスを使用可能な形で取得する。
さらにサービス・インタフェースを実装したサービス・オブジェクトを取得してサービスを使用する場合は、検索して発見したServiceReference2055を引数にしてフレームワーク実装2010に対してサービス・オブジェクトの取得を依頼する(1225)。
フレームワーク実装2010では、引数として渡されたServiceReference2055に対してサービス・オブジェクトの取得を依頼しているバンドルがサービスを使用することを参照関係として記憶するよう、依頼しているバンドル1040のバンドル制御実装2025を引数として指定して指示する(1230)。その後、ServiceReference2055からサービス・オブジェクトを取得して(1235、1240)、サービス・オブジェクトを要求しているバンドルに返す(1245)。
このように、各ServiceReference2055内にこのServiceReference2055が管理しているサービスをどのバンドルで使用しているかを記憶している。
本実施例におけるシステム停止の際の処理を、図13を用いて説明する。
前述した実施例と同様、フレームワーク実装2010は停止メソッド(1310)でバンドル1040の停止順リストを作成する(1315)。本実施例において停止順リストは次のようにして作成される。
フレームワーク実装2010の中に構築されるサービス・レジストリに登録されているすべてのサービスに対して(1320)、そのサービスを登録したバンドルとそのサービスを使用しているバンドルを取得する(1325、1330、1335、1340)。すなわち、フレームワーク実装2010の中に構築されるサービス・レジストリに、サービスの登録元と使用先の組を問い合わせる。有向グラフにおいてサービスを登録しているバンドルのノードから使用しているバンドルのノードの向きにグラフを構築する。
構築された有向グラフから、停止順リストを構築する方法は実施例2もしくは実施例3と同様な処理を行なうことによって導出する。すなわち、サービス使用関係から各プログラム・モジュールのサービスの使用関係を表す木構造を導出し、木構造を探索しながら提供しているサービスを他のプログラム・モジュールから使用されていないプログラム・モジュールから停止するように、停止順リストを規定する。
構築された有向グラフから実施例3と同様な処理で停止順リストを構築する例では、導出される木構造の葉の部分に最小の重みをつけ、子ノードの持つ重みのうち最大のものに決められた量だけ加算された重みをつけ最小の重みを持つプログラム・モジュールから重みの重くなる順番に並べて停止順リストを規定する。また、同じ重みを持つプログラム・モジュールは並行して停止するようにしてもよい。
さらに、各ServiceRefence2055にサービスを参照しているバンドルを登録しているバンドルより先に停止する必要がないことを示すフラグを設け、このフラグが設定されているサービスに関しては有向グラフに参照関係を反映せずに停止順序を決めることも可能である。
以上のようにして、本実施例では、ソフトウェア・システムの停止処理時に、各プログラム・モジュールのサービスの使用関係(から導出した各プログラム・モジュールのサービスの使用関係を表す木構造)に基づいて、提供しているサービスが他のプログラム・モジュールから使用されていないプログラム・モジュールから順番に、プログラム・モジュールを停止する。
実施例におけるソフトウェア構成図である。 実施例におけるフレームワークのクラス構成図である。 Jarファイル及びマニフェストの構造図である。 バンドル・インストール処理フロー図である。 バンドル起動/停止処理フロー図である。 システム再起動処理フロー図である。 実施例1のシステム停止処理フロー図である。 バンドル・リストとバンドル停止順リストの構造図である。 実施例2のシステム停止処理フロー図である。 停止順を決定する有向グラフと木構造の例の図である。 実施例3における有向グラフと機構造の例の図である。 実施例4におけるサービス取得処理フロー図である。 実施例4のシステム停止処理フロー図である。
符号の説明
1010 オペレーティングシステム
1020 Java(登録商標)仮想マシン
1030 フレームワーク
1040 バンドル
2010 フレームワーク実装
2015 BundleContext
2020 Bundle
2025 バンドル制御実装
2030 BundleActivator
2035 バンドル実装
2040 サービス制御実装
2045 サービス実装
2050 ServiceRegistration
2055 ServiceReference

Claims (13)

  1. 複数のプログラム・モジュールからなるソフトウェア・システムにおいて、
    プログラム・モジュールをソフトウェア・システムの起動後にソフトウェア・システムにインストールするインストール手段、
    前記インストール手段によってインストールされたプログラム・モジュールを個々に指定し起動するプログラム・モジュール起動手段、
    前記プログラム・モジュール起動手段によって起動されたプログラム・モジュールを個々に指定し停止するプログラム・モジュール停止手段、
    ソフトウェア・システムの起動時におけるプログラム・モジュールの起動順序を規定しその順番にしたがってプログラム・モジュールを起動する起動順序制御手段、
    ソフトウェア・システムの停止処理時にプログラム・モジュールの停止順序を規定しその順番にしたがってプログラム・モジュールを停止する停止順序制御手段を有することを特徴とするソフトウェア・システム。
  2. 前記停止順序制御手段で規定される停止順番が、前記起動順序制御手段で順序付けられた起動順番の逆順であることを特徴とする請求項1に記載されたソフトウェア・システム。
  3. 請求項1のソフトウェア・システムにおいて、
    プログラム・モジュール間の依存関係を静的に定義する静的依存関係定義手段を有し、
    前記静的依存関係定義手段によって定義されている静的依存関係を抽出し、抽出した依存関係から各プログラム・モジュールの依存関係を表す木構造を導出し、木構造を探索しながら他のプログラム・モジュールに依存しているプログラム・モジュールから停止する順番に前記停止順序制御手段で規定することを特徴とするソフトウェア・システム。
  4. 前記停止順序制御手段おいて、導出される木構造の葉の部分に最小の重みをつけ、子ノードの持つ重みのうち最大のものに決められた量を加算した重みをつけ最小の重みを持つプログラム・モジュールから重みの重くなる順番に並べて停止順序を規定することを特徴とする請求項3に記載されたソフトウェア・システム。
  5. 同じ重みを持つプログラム・モジュールは並行して停止することを特徴とする請求項4に記載されたソフトウェア・システム。
  6. 請求項1のソフトウェア・システムにおいて、
    プログラム・モジュールの持つ機能を他のプログラム・モジュールから使用するいわゆるサービスを管理するサービス管理手段と、
    前記サービス管理手段に対してサービスを登録するサービス登録手段と、
    前記サービス管理手段に前記サービス登録手段で登録されたサービスを検索してサービスを使用可能な形で取得するサービス取得手段と、
    前記サービス管理手段に、サービスの登録元と使用先の組を問い合わせるサービス使用関係取得手段を有し、
    前記停止順序制御手段において、前記サービス使用関係取得手段によって取得したサービス使用関係から各プログラム・モジュールのサービスの使用関係を表す木構造を導出し、木構造を探索しながら提供しているサービスを他のプログラム・モジュールから使用されていないプログラム・モジュールから停止する順番に前記停止順序制御手段で規定することを特徴とするソフトウェア・システム。
  7. 前記停止順序制御手段において、導出される木構造の葉の部分に最小の重みをつけ、子ノードの持つ重みのうち最大のものに決められた量だけ加算された重みをつけ最小の重みを持つプログラム・モジュールから重みの重くなる順番に並べて停止順序を規定することを特徴とする請求項6に記載されたソフトウェア・システム。
  8. 同じ重みを持つプログラム・モジュールは並行して停止することを特徴とする請求項7に記載されたソフトウェア・システム。
  9. 請求項1から請求項8に記載されたソフトウェア・システムを実現するプログラムを格納した記憶媒体。
  10. 複数のプログラム・モジュールからなるソフトウェア・システムのソフトウェア停止方法において、
    プログラム・モジュールを個々に指定し起動するプログラム・モジュール起動工程、
    前記プログラム・モジュール起動工程で起動されたプログラム・モジュールを個々に指定し停止するプログラム・モジュール停止工程、
    ソフトウェア・システムの起動時におけるプログラム・モジュールの起動順序を規定しその順番にしたがってプログラム・モジュールを起動する起動順序制御工程、
    ソフトウェア・システムの停止処理時に、プログラム・モジュールの起動順序に応じた順番でプログラム・モジュールを停止する停止順序制御工程を有することを特徴とするソフトウェア停止方法。
  11. 複数のプログラム・モジュールからなるソフトウェア・システムのソフトウェア停止方法において、
    プログラム・モジュールをソフトウェア・システムの起動後にソフトウェア・システムにインストールするインストール工程、
    前記インストール工程でインストールされたプログラム・モジュールを個々に指定し起動するプログラム・モジュール起動工程、
    前記プログラム・モジュール起動工程で起動されたプログラム・モジュールを個々に指定し停止するプログラム・モジュール停止工程、
    ソフトウェア・システムの停止処理時に、各プログラム・モジュールの依存関係に基づいて、他のプログラム・モジュールに依存しているプログラム・モジュールから順番に、プログラム・モジュールを停止する停止順序制御工程を有することを特徴とするソフトウェア停止方法。
  12. 複数のプログラム・モジュールからなるソフトウェア・システムのソフトウェア停止方法において、
    プログラム・モジュールをソフトウェア・システムの起動後にソフトウェア・システムにインストールするインストール工程、
    前記インストール工程でインストールされたプログラム・モジュールを個々に指定し起動するプログラム・モジュール起動工程、
    前記プログラム・モジュール起動工程で起動されたプログラム・モジュールを個々に指定し停止するプログラム・モジュール停止工程、
    ソフトウェア・システムの停止処理時に、各プログラム・モジュールのサービスの使用関係に基づいて、提供しているサービスが他のプログラム・モジュールから使用されていないプログラム・モジュールから順番に、プログラム・モジュールを停止する停止順序制御工程を有することを特徴とするソフトウェア停止方法。
  13. 請求項10から請求項12に記載されたソフトウェア停止方法を実現するプログラム。
JP2004245094A 2004-08-25 2004-08-25 ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体 Withdrawn JP2006065462A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2004245094A JP2006065462A (ja) 2004-08-25 2004-08-25 ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体
US11/202,501 US7665065B2 (en) 2004-08-25 2005-08-12 Software termination method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004245094A JP2006065462A (ja) 2004-08-25 2004-08-25 ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体

Publications (1)

Publication Number Publication Date
JP2006065462A true JP2006065462A (ja) 2006-03-09

Family

ID=35944967

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004245094A Withdrawn JP2006065462A (ja) 2004-08-25 2004-08-25 ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体

Country Status (2)

Country Link
US (1) US7665065B2 (ja)
JP (1) JP2006065462A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009199303A (ja) * 2008-02-21 2009-09-03 Fuji Xerox Co Ltd 画像処理装置、画像処理プログラム
JP2011186637A (ja) * 2010-03-05 2011-09-22 Ntt Data Corp リソース連携システム及びリソース連携方法
JP2013140573A (ja) * 2011-12-08 2013-07-18 Fujitsu Ltd 関連推定プログラム,関連推定装置および関連推定方法
JP2013534659A (ja) * 2010-06-07 2013-09-05 アルカテル−ルーセント 発信メッセージの失敗を管理するためのフレームワーク
JP2017022568A (ja) * 2015-07-10 2017-01-26 ブラザー工業株式会社 画像処理装置

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060252406A1 (en) * 2005-04-25 2006-11-09 Nokia Corporation System and method for providing bundle group termination in an OSGi service platform
US7456743B2 (en) * 2005-12-07 2008-11-25 Datamars S.A. Combined low and high frequency RFID system
US20070282801A1 (en) * 2006-06-05 2007-12-06 Ajay A Apte Dynamically creating and executing an application lifecycle management operation
US8418165B2 (en) * 2009-05-27 2013-04-09 Microsoft Corporation Package design and generation
JP5460150B2 (ja) * 2009-07-06 2014-04-02 キヤノン株式会社 情報処理装置、情報処理装置の制御方法、及び、プログラム
KR102087395B1 (ko) * 2013-01-16 2020-03-10 삼성전자주식회사 전자 장치에서 응용프로그램을 실행하기 위한 장치 및 방법
US10432713B2 (en) * 2016-06-30 2019-10-01 Veritas Technologies Llc Application aware input/output fencing
US10073678B2 (en) * 2016-10-06 2018-09-11 International Business Machines Corporation Locating features in a layered software application

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4970639A (en) * 1988-05-20 1990-11-13 International Business Machines Corporation Virtual machine architecture independent program loader
US5247666A (en) * 1991-05-28 1993-09-21 Fawnwood, Inc. Data management method for representing hierarchical functional dependencies
JPH0695312B2 (ja) * 1991-11-21 1994-11-24 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータプログラムを処理する方法およびシステム
JP3613401B2 (ja) * 1992-07-06 2005-01-26 マイクロソフト コーポレーション オブジェクトの名称を付けて結び付ける方法及びシステム
JP3417984B2 (ja) * 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
US6487580B1 (en) * 1995-09-25 2002-11-26 International Business Machines Corporation Method and system for managing concurrently executable computer processes
US6226694B1 (en) * 1998-04-29 2001-05-01 Hewlett-Packard Company Achieving consistency and synchronization among multiple data stores that cooperate within a single system in the absence of transaction monitoring
US6910210B1 (en) * 1998-11-24 2005-06-21 Microsoft Corp. System and method for terminating applications
JP2002196939A (ja) 2000-12-27 2002-07-12 Nec Corp 常駐プロセスの起動・終了制御装置とその制御方法及びその方法を記録した記録媒体
JP2002297403A (ja) 2001-03-29 2002-10-11 Ricoh Co Ltd アプリケーション起動システム、アプリケーション起動方法、アプリケーション起動プログラム、およびアプリケーション起動プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2002351677A (ja) 2001-05-29 2002-12-06 Kawasaki Steel Systems R & D Corp アプリケーション・プログラム実行順序制御システム
US7346493B2 (en) * 2003-03-25 2008-03-18 Microsoft Corporation Linguistically informed statistical models of constituent structure for ordering in sentence realization for a natural language generation system
US7856624B2 (en) * 2003-09-15 2010-12-21 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US7386752B1 (en) * 2004-06-30 2008-06-10 Symantec Operating Corporation Using asset dependencies to identify the recovery set and optionally automate and/or optimize the recovery
US7596485B2 (en) * 2004-06-30 2009-09-29 Microsoft Corporation Module for creating a language neutral syntax representation using a language particular syntax tree

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009199303A (ja) * 2008-02-21 2009-09-03 Fuji Xerox Co Ltd 画像処理装置、画像処理プログラム
JP2011186637A (ja) * 2010-03-05 2011-09-22 Ntt Data Corp リソース連携システム及びリソース連携方法
JP2013534659A (ja) * 2010-06-07 2013-09-05 アルカテル−ルーセント 発信メッセージの失敗を管理するためのフレームワーク
JP2013140573A (ja) * 2011-12-08 2013-07-18 Fujitsu Ltd 関連推定プログラム,関連推定装置および関連推定方法
JP2017022568A (ja) * 2015-07-10 2017-01-26 ブラザー工業株式会社 画像処理装置

Also Published As

Publication number Publication date
US20060048108A1 (en) 2006-03-02
US7665065B2 (en) 2010-02-16

Similar Documents

Publication Publication Date Title
US7665065B2 (en) Software termination method
US20210349706A1 (en) Release lifecycle management system for multi-node application
US8112745B2 (en) Apparatus and method for capabilities verification and restriction of managed applications in an execution environment
JP4891225B2 (ja) 依存性グラフのパラメータのスコーピング
KR101574366B1 (ko) 가상 머신 및 애플리케이션 수명들의 동기화
US20100205604A1 (en) Systems and methods for efficiently running multiple instances of multiple applications
US7886270B2 (en) Methods, systems, and computer program products for file version control management
US9146756B2 (en) Java management extensions (JMX) bean custom service extension plugin agent for an application server
US8640121B2 (en) Facilitating multi-installer product installations
CN109614167B (zh) 一种管理插件的方法和系统
US8276125B2 (en) Automatic discovery of the java classloader delegation hierarchy
CN114651233A (zh) 即时容器
US20100043015A1 (en) Efficient management of customized functionality within shared data objects
JP2010541061A (ja) アプリケーション管理システム及び方法
US8819196B2 (en) Selection and configuration of servers
US11392364B2 (en) Adaptive hot reload for class changes
EP3243134A1 (en) Multi-tenant upgrading
JP2016051395A (ja) 画像形成装置およびリソース管理方法
US20100251236A1 (en) In-Process Intermediary To Create Virtual Processes
JP2008059482A (ja) 情報処理装置、情報処理方法
JP2005284925A (ja) コンピュータシステムおよびプログラム更新方法
JP2007323331A (ja) ソフトウェア・システム及びソフトウェア登録方法
Wu et al. Manage a Topology
JP2014059725A (ja) 情報処理装置およびプログラム
JP2006343796A (ja) ソースファイル変換方法、装置、プログラム及び記録媒体

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20071106