(58)【調査した分野】(Int.Cl.,DB名)
OSGiフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、前記個別機能パッケージの前記クラスが実装するインタフェース、及び、これらインタフェースが継承すると共に前記共通処理パッケージの前記抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、前記共通処理パッケージ及び前記共通インタフェースパッケージに基づく共通バンドルと、前記個別機能パッケージに基づく個別バンドルとを生成し、前記個別バンドルが必要とするクラスの定義情報を前記共通バンドルが提供することを特徴とするバンドル制御方法。
JARファイルの取得の度に当該JARファイルのもとのロケーションに少なくとも通し番号を付加して当該JARファイルのロケーションを仮想のものに変更することを特徴とする請求項1記載のバンドル制御方法。
OSGiフレームワーク上における複数のバンドルの制御装置であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、前記個別機能パッケージの前記クラスが実装するインタフェース、及び、これらインタフェースが継承すると共に前記共通処理パッケージの前記抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、前記共通処理パッケージ及び前記共通インタフェースパッケージに基づく共通バンドルを生成する手段と、前記個別機能パッケージに基づく個別バンドルを生成する手段とを有し、前記個別バンドルが必要とするクラスの定義情報を前記共通バンドルが提供することを特徴とするバンドル制御装置。
JARファイルの取得の度に当該JARファイルのもとのロケーションに少なくとも通し番号を付加して当該JARファイルのロケーションを仮想のものに変更することを特徴とする請求項5記載のバンドル制御装置。
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1の情報処理装置では、受信したバンドルの分別整理を行うことはできても、同一種バンドル(プログラムモジュール)を複数同時に起動させ実行させることはできず、したがって、複数の同一種バンドル(プログラムモジュール)を相互に連携させることもできない。このため、汎用性が高いとは言い難い。
【0006】
なお、OSGiのRelease 4.3(以降)ではフレームワークのパラメータである bsnversion の値を multiple とすることによって複数のバンドル起動が可能であるものの、委譲関係のない異なるクラスローダによってロードされたクラスは別のものとして認識されるため、同一クラスから生成された複数の同一種バンドルを連携させることはできない。
【0007】
そこで、本発明は、同一種バンドル(プログラムモジュール)を複数同時に起動・実行し且つこれら複数の同一種バンドル(プログラムモジュール)を相互に連携させることができるバンドル制御方法及びバンドル制御装置を提供することを目的とする。
【0008】
ここで、バンドルの連携とは、バンドル同士で直接のデータ交換を行ったり、他のバンドルの状況も考慮しながらメソッドの起動を行ったりすることをいう。
【課題を解決するための手段】
【0009】
かかる目的を達成するため、本発明のバンドル制御方法は、OSGiフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルと、個別機能パッケージに基づく個別バンドルとを生成し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するようにしている。
【0010】
また、本発明のバンドル制御装置は、OSGiフレームワーク上における複数のバンドルの制御装置であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルを生成する手段と、個別機能パッケージに基づく個別バンドルを生成する手段とを有し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するようにしている。
【0011】
したがって、これらのバンドル制御方法及びバンドル制御装置によると、個別機能パッケージに基づいて生成された同一種のバンドル(即ち、同一の Bundle-SymbolicName と Bundle-Version との対を持つバンドル)を複数同時に起動することができ、且つ、これらを利用する別のバンドルにおいて同じインタフェースを通じてアクセスすることができる。
【0012】
また、本発明のバンドル制御方法及びバンドル制御装置は、制御対象の機能に対応するクラス及び個別機能パッケージが二つ以上であるようにしても良く、さらにこの場合に、個別バンドルを個別機能パッケージの各々に基づいて別個に生成するようにしても良い。この場合には、必要な個別機能のみを有するバンドル(プログラムモジュール)を生成してそれをOSGiフレームワークに追加(インストール)し動作させるようにすることができる。また、プログラムモジュールのアップデートも個別機能単位で行うことができるので、アップデートに関連する機能(処理)を一旦停止した上でアップデートを行う必要がある場合に、アップデートに関係ない個別機能までも停止させなければならないという不便を回避することができる。
【0013】
また、本発明のバンドル制御方法及びバンドル制御装置は、JARファイルの取得の度に当該JARファイルのもとのロケーションに少なくとも通し番号を付加して当該JARファイルのロケーションを仮想のものに変更するようにしても良い。この場合には、バンドルを識別する情報の一つであるJARファイルのロケーションの値が複数のバンドルで同一になることが確実に防止される。
【発明の効果】
【0014】
本発明のバンドル制御方法及びバンドル制御装置によれば、個別機能パッケージに基づいて生成された同一種のバンドルを複数同時に起動することができ、且つ、これらを利用する別のバンドルにおいて同じインタフェースを通じてアクセスすることができるので、同一種バンドル(プログラムモジュール)を複数同時に起動・実行し且つこれら複数の同一種バンドル(プログラムモジュール)を相互に連携させることが可能になり、OSGiフレームワーク上におけるバンドル制御の利便性及び汎用性の向上を図ることが可能になる。
【0015】
さらに、本発明のバンドル制御方法及びバンドル制御装置は、制御対象の機能に対応するクラス及び個別機能パッケージが二つ以上であると共に個別バンドルを個別機能パッケージの各々に基づいて別個に生成するようにした場合には、OSGiフレームワークへのインストール及び動作を個別機能単位で行うことができるので、例えばCPUやメモリ等の資源を無駄に消費してしまうことがなく、効率的な運用を可能にし、OSGiフレームワーク上におけるバンドル制御の利便性及び汎用性の更なる向上を図ることが可能になる。また、プログラムモジュールのアップデートの際の影響を最小限に抑えることができるので、この点においてもOSGiフレームワーク上におけるバンドル制御の利便性及び汎用性の更なる向上を図ることが可能になる。
【0016】
また、本発明のバンドル制御方法及びバンドル制御装置は、JARファイルのロケーションに少なくとも通し番号を付加して仮想のものに変更するようにした場合には、JARファイルのロケーションの値が複数のバンドルで同一になることを確実に防止することができ、同一種のバンドルを複数同時にインストールする際の支障を確実に排除することが可能になる。
【発明を実施するための形態】
【0018】
以下、本発明の構成を図面に示す実施の形態の一例に基づいて詳細に説明する。
【0019】
図1から
図5に、本発明のバンドル制御方法及びバンドル制御装置の実施形態の一例を示す。本実施形態では、
図1及び
図2に概要を示すホームゲートウェイ10に本発明のバンドル制御方法及びバンドル制御装置を適用した場合を例に挙げて説明する。
【0020】
本実施形態のバンドル制御方法は、OSGiフレームワーク2上における複数のバンドル3の制御方法であり、制御対象機器12の機能に対応するAir Conditioner Implクラスを収容するacパッケージ及びTemperature Sensor Implクラスを収容するtempパッケージと、これらacパッケージとtempパッケージとに共通する処理手順を定義する抽象クラスであるObject Implクラスを収容するabstパッケージと、acパッケージのAir Conditioner Implクラスが実装するAir Conditionerインタフェース及びtempパッケージのTemperature Sensor Implクラスが実装するTemperature Sensorインタフェース、並びに、これらAir Conditionerインタフェース及びTemperature Sensorインタフェースが継承すると共にabstパッケージの抽象クラスであるObject Implクラスが実装するObjectインタフェース、を収容するcommonパッケージとが構成されると共に、abstパッケージ及びcommonパッケージに基づくバンドルAと、acパッケージに基づくバンドルB及びtempパッケージに基づくバンドルCとを生成し、acパッケージに基づくバンドルBやtempパッケージに基づくバンドルCが必要とするクラスの定義情報をabstパッケージ及びcommonパッケージに基づいて生成されたバンドルAが提供するものである。
【0021】
また、本実施形態のバンドル制御装置は、OSGiフレームワーク2上における複数のバンドル3の制御装置であり、制御対象機器12の機能に対応するAir Conditioner Implクラスを収容するacパッケージ及びTemperature Sensor Implクラスを収容するtempパッケージと、これらacパッケージとtempパッケージとに共通する処理手順を定義する抽象クラスであるObject Implクラスを収容するabstパッケージと、acパッケージのAir Conditioner Implクラスが実装するAir Conditionerインタフェース及びtempパッケージのTemperature Sensor Implクラスが実装するTemperature Sensorインタフェース、並びに、これらAir Conditionerインタフェース及びTemperature Sensorインタフェースが継承すると共にabstパッケージの抽象クラスであるObject Implクラスが実装するObjectインタフェース、を収容するcommonパッケージとが構成されると共に、abstパッケージ及びcommonパッケージに基づくバンドルAを生成する手段と、acパッケージに基づくバンドルB及びtempパッケージに基づくバンドルCを生成する手段とを有し、acパッケージに基づくバンドルBやtempパッケージに基づくバンドルCが必要とするクラスの定義情報をabstパッケージ及びcommonパッケージに基づいて生成されたバンドルAが提供するものである。
【0022】
(1)ホームゲートウェイの構成
(1−1)機能の構成
例えば宅内や事務所内に設置されるホームゲートウェイ10は、本実施形態では、必須機能と拡張機能との二種類の機能を有する。必須機能とは対象とするホームゲートウェイ10が常時備えるべき機能であり、一方、拡張機能とは対象とするホームゲートウェイ10に適宜追加・削除される機能である。
【0023】
(1−2)ハードウェアの構成
ホームゲートウェイ10は、
図1に示すように、必須機能用ハードウェア10Aと拡張機能用ハードウェア10Bとの二つのハードウェアから構成され、それぞれのハードウェア10A,10Bに中央演算処理装置(CPU)を搭載してそれぞれが独立に動作する。なお、これら二つのハードウェア10A,10B同士の間はUSB,イーサネット(登録商標),RS−232などの、有線若しくは電子回路間を接続するための無線を用いて接続され、二つのハードウェア10A,10B間でのデータ交換が可能になっている。
【0024】
必須機能用ハードウェア10Aには、ホームゲートウェイ10が常時備えるべき機能に必要とされる諸機能が搭載される。併せて、広域側の通信機能(例えば、インターネットによる通信機能)を有し、広域側に設置された外部サーバ等の機器11とのデータ交換を行う。なお、拡張機能用ハードウェア10Bに自律的に回復することができない障害が発生した場合に、拡張機能用ハードウェア10Bを強制的に再起動させる機能を備えるようにしても良い。
【0025】
一方、拡張機能用ハードウェア10Bには、ホームゲートウェイ10に適宜追加・削除される機能に必要とされる諸機能が搭載される。併せて、宅内やオフィス内の機器12或いはHEMS(Home Energy Management System の略)とのデータ交換機能を備える。
【0026】
拡張機能用ハードウェア10Bが広域側の通信を利用する際には、必須機能用ハードウェア10Aが有する広域側の通信機能を利用する。必須機能用ハードウェア10Aと拡張機能用ハードウェア10Bとの間のデータの転送は、物理層,データリンク層,ネットワーク層のうちのいずれかにおいて行われる。
【0027】
また、必須機能用ハードウェア10Aが時刻情報を取得し、当該時刻情報を拡張機能用ハードウェア10Bに提供することによって二つのハードウェア10A,10Bの時刻を同期させる。なお、時刻情報の取得は、例えばインターネット上の時刻サーバから取得することによって行われる。
【0028】
(1−3)ソフトウェアの構成
ホームゲートウェイ10は、
図2に示すように、必須機能用ハードウェア10Aに搭載される必須機能用ソフトウェア9Aと、拡張機能用ハードウェア10Bに搭載される拡張機能用ソフトウェア9Bとの、二つのソフトウェアを備える。
【0029】
必須機能用ソフトウェア9Aは、必須機能に関連する機器を制御するためのデバイスドライバ4と、外部サーバ等の機器11及び拡張機能用ハードウェア10Bと通信するための通信用ドライバ5Aと、必須機能用のアプリケーション6と、拡張機能用ハードウェア10Bを管理するため(具体的には、拡張機能用ハードウェア10Bに自律的に回復することができない障害が発生した場合に、拡張機能用ハードウェア10Bを強制的に再起動させる機能)のソフトウェア7とから構成される。
【0030】
なお、必須機能用ソフトウェア9Aでは、メモリを固定的に割り当てるなどの対策を施し、長期間の連続動作が可能になる構成を採用することが好ましい。
【0031】
一方、拡張機能用ソフトウェア9Bは、必須機能用ハードウェア10Aと通信するための通信用ドライバ5Bと、宅内・オフィス内機器12と通信するための通信用ドライバ8と、Java仮想機械(バーチャルマシン)1と、OSGiフレームワーク2とからなる。
【0032】
そして、拡張機能用ソフトウェア9Bでは、OSGiを活用し、ソフトウェアの追加・削除が可能になる構成を採用し、ソフトウェアの拡張性を確保する。
【0033】
ここで、OSGiではJava言語を用いたプログラムにおいてバンドルと呼ばれる単位でのソフトウェアの追加・削除が可能であり、本発明では、拡張機能としての個別の機能はOSGiにおけるバンドル3として実装され、併せて、拡張機能用ソフトウェア9Bの自律的な管理を行うための機能や外部サーバ等の機器11や宅内・オフィス内機器12などとの通信における上位層プロトコルの機能もバンドル3として実装される。
【0034】
(2)OSGiの全体構成
OSGiに従ったソフトウェアは大きく分けてバンドル3とフレームワーク2とから構成される。
【0035】
バンドル3は、追加・削除の単位であり、複数のクラスファイルとリソースファイルとをアーカイブとして一つにまとめたJAR(JavaARchive)ファイルである。JARファイルの中には、実行コードに相当する classファイル(以下、クラスファイルと表記する)や、設定情報が保存されているMANIFEST.MFファイル(以下、マニフェストファイルと表記する)などが含まれる。
【0036】
マニフェストファイルには、以下の項目が記載されている。
a)Bundle-SymbolicName
バンドルの名前。下記Bundle-Versionとのペアで、バンドルを一意に識別する情報として利用される。
【0037】
b)Bundle-Version
バンドルのバージョン。上記Bundle-SymbolicNameとのペアで、バンドルを一意に識別する情報として利用される。
【0038】
c)Import-Package
他のバンドルに依存するパッケージを宣言する。これにより、JARファイルに含まれないクラスファイルの機能を利用することが可能になる。
【0039】
d)Export-Package
他のバンドルが利用するパッケージを宣言する。
【0040】
e)Bundle-Activator
バンドル起動時に最初に呼び出されるクラス(class)。
【0041】
一方、フレームワークは、バンドルの実行基盤であり、一つのフレームワーク上で複数のバンドルを実行することができる。また、バンドル間の通信を可能にするため、各バンドルが提供するサービスを登録したり、別のバンドルが提供しているサービスを検索したりする機能も提供する。
【0042】
(3)クラスローダ
Javaプログラムでは、仮想機械(バーチャルマシン)に対して実行ファイルであるクラス(class)をロードする必要がある。このクラスロードを担当するものがクラスローダ(Class Loader)である。一つのJava仮想機械においては複数のクラスローダが動作する。これらのクラスローダ間には委譲関係が設定される。その関係を
図3に示す。クラスを検索する場所の順番は、<1>クラスローダのキャッシュ、<2>委譲関係における親(
図3における矢印の先)、<3>自分自身、である。
【0043】
或るバンドルでそのバンドルのJARファイルに収容されているユーザ定義クラスをロードするようユーザプログラムから依頼された場合、そのバンドルにおける Bundle Class Loader は、まず、同じクラスを以前にロードしたことがあるか否かを判断し、ロードしたことがある場合には、キャッシュからクラスをロードする。一方、ロードしたことがない場合には、親である System Class Loader にロードを委譲する。
【0044】
ロード対象であるユーザ定義クラスが、検索範囲である$CLASSPATH内に、存在する場合には System Class Loader がそのクラスをロードし、存在しない場合には Extension Class Loader にロードを委譲する。なお、CLASSPATHは、クラスをサーチするパスの設定であり、ネイティブの環境変数として設定される。
【0045】
Extension Class Loader の検索範囲はJava実行環境にてインストールされた拡張ファイルであるため、システム管理者が事前にインストールしている場合には対象であるユーザ定義クラスを Extension Class Loader がロードするが、通常はここにそのクラスが事前にインストールされていることはない。そこで Extension Class Loader は Bootstrap Class Loader に委譲するが、これは実行環境そのもののクラスファイルのみをロードするため、対象となるユーザ定義クラスはここでもロードされない。このため、最初の Bundle Class Loader が、自らの検索範囲であるJARファイル内から指定されたユーザ定義クラスをロードする。
【0046】
なお、異なるバンドルの Bundle Class Loader は、通常は System Class Loader を親に持ち、相互に委譲関係を構築しない。
【0047】
以上のとおり、Javaでは、バンドルが自らの Class Loader を有し、委譲関係のない異なる Class Loader によってロードされたクラスは同じ定義でも別のものと認識される。
【0048】
(4)OSGiにおける同一種バンドルの複数起動方法
OSGiのRelease 4.3(以降)では、フレームワークのパラメータである bsnversion の値を multiple とすること(具体的には、org.osgi.framework.bsnversion=multiple とすること)によって複数のバンドル起動が可能である。
【0049】
ただし、上記(3)の通り、委譲関係のない異なる Class Loader によってロードされたクラスは、たとえ同じ機能を持つものでも、別のものとして認識される。すなわち、それらを利用する側から見ると、別々のものとして認識した上で実行可能な処理手順を用意する必要がある。しかし、実際にどのようなバンドルを何個起動させるかを事前に予測することは不可能である。このため、bsnversion の値を multiple にするだけでは、同一クラスから生成された複数の同一種バンドルを連携させることはできない。
【0050】
(5)同一種バンドルの連携方法
本発明では、クラス構成,バンドル化とその依存関係,バンドル間サービス検索に関連するロケーションの変更の三つにおいて特有の構成を備えさせることにより、同一種バンドルの連携を可能にする。
【0051】
(5−1)クラス構成
同一種バンドルの連携を可能にするクラス構成を、UML(Unified Modeling Language の略)のクラス図記法に従って
図4に示す。この図では、宅内・オフィス内機器12であるエアコンを監視制御対象機器として監視制御を行うために、エアコン自体に関係するクラスである Air Conditioner Impl 及びエアコンと関連する温度センサに関係するクラスである Temperature Sensor Impl を示している。さらに、common,abst,ac,temp の四つのパッケージ(即ち、バンドルのJARファイルに収容される最小単位)を示している。
【0052】
abstパッケージには、パッケージ(厳密には、パッケージの定義に基づいて生成される複数のインスタンス)に共通する処理手順を定義する抽象クラスが収容され、
図4の例ではObject Implクラスが収容される。
【0053】
なお、Object Implクラスの getId() はバンドルの識別子を取得するためのメソッドであり、byte は戻り値のデータ型を8ビットサイズの整数型に宣言するプロパティである。
【0054】
commonパッケージには、複数のバンドルで共通的に利用されるインタフェースが収容される。ここでいうインタフェース(interface)とは、メソッドのシグネチャ(即ち、メソッド名及び戻り値や引数を示したもの)を定義する一方で具体的な処理手順は定義していないJavaの要素である。
【0055】
図4の例では、Air Conditioner はエアコンの監視制御用インタフェースであり、このAir Conditionerインタフェースには、冷房を開始するためのメソッドである startCooling のシグネチャが定義されている。なお、temp はエアコンの設定温度であり、byte は戻り値のデータ型を8ビットサイズの整数型に宣言するプロパティである。また、Temperature Sensor は温度センサの監視制御用インタフェースであり、このTemperature Sensorインタフェースには、センサによる検知温度を更新するためのメソッドである update のシグネチャが定義されている。なお、integer は戻り値のデータ型を32ビットサイズの整数型に宣言するプロパティである。
【0056】
Air Conditionerインタフェース自体やTemperature Sensorインタフェース自体には具体的な処理手順は定義されておらず,これらのインタフェースを実現する Air Conditioner ImplクラスやTemperature Sensor Implクラスにおいて具体的な処理手順が定義される。すなわち、具体的な処理手順はそのインタフェースを実装するクラスにおいて定義される。
【0057】
commonパッケージには、さらに、バンドルの識別子を取得するためのメソッドである getId() が定義されている Objectインタフェースが収容される。
【0058】
そして、Air Conditionerインタフェースは Objectインタフェースを継承し、Temperature Sensorインタフェースも Objectインタフェースを継承している。また、abstパッケージに収容されているObject ImplクラスもObjectインタフェースを継承している。
【0059】
そして、上述の構成により、全ての実装クラス(即ち、XXX Impl)が、commonパッケージに収容されているObjectインタフェースによって定義される getId() を有することになる。これにより、いかなるバンドルに対しても、同一の方法(即ち、getId() の呼び出し)によって識別子の取得が可能になる。
【0060】
commonパッケージには、また、バンドルとして実行可能にするための Bundle-Activator として Common Activator が収容される。
【0061】
具体的な制御対象を表すパッケージ(即ち、エアコン関係のacパッケージと温度センサ関係のtempパッケージ)には、commonパッケージ内に収容されている対応するインタフェース(即ち、Air Conditionerインタフェース や Temperature Sensorインタフェース)を実現するためのクラス(即ち、Air Conditioner Implクラス や Temperature Sensor Implクラス)が収容される。併せて、バンドルとして実行可能にするための Bundle-Activator(即ち、Air Conditioner Activator と Temperature Sensor Activator )がそれぞれに収容される。
【0062】
なお、複数のエアコンが存在する場合は、common,abst,ac の各パッケージの定義に基づき、エアコンの台数分の Air Conditioner Impl のインスタンス(ソフトウェア)及び Air Conditioner Activator のインスタンス(ソフトウェア)が生成される。
【0063】
(5−2)バンドル化とその依存関係
本発明では、個別具体的なパッケージに基づいてバンドルが生成され、さらに、共通的なパッケージに基づいてバンドルが生成される。
【0064】
図4に示したクラス構成の場合には以下の三つのバンドルが生成される。
〈バンドルA〉共通的なパッケージであるcommonパッケージ及びabstパッケージに
基づいて生成されるバンドル
〈バンドルB〉個別具体的なパッケージであるacパッケージに基づいて生成される
バンドル
〈バンドルC〉個別具体的なパッケージであるtempパッケージに基づいて生成される
バンドル
【0065】
バンドルの依存関係としては、個別具体的なパッケージが共通的なパッケージに依存する関係が各バンドルのマニフェストファイルに記述される。上述の場合には、バンドルAにおいてcommonパッケージ及びabstパッケージがExport-Packageに記載され、バンドルB及びバンドルCにおいてcommonパッケージ及びabstパッケージがImport-Packageに記載される。
【0066】
また、共通的なパッケージであるcommonパッケージ及びabstパッケージに基づいて生成されたバンドルから、個別具体的なパッケージであるacパッケージに基づいて生成されたバンドルに対し、Objectインタフェース及びAir ConditionerインタフェースとObject Implクラスとの定義が提供される。
【0067】
以上のクラス構成とバンドル化を、bsnversion の値を multiple にすることと組み合わせて使用することにより、例えば、acパッケージに基づいて生成された同一種のバンドル(即ち、同一の Bundle-SymbolicName と Bundle-Version との対を持つバンドル)を複数同時に起動することができ、且つ、これらを利用する別のバンドル(例えばアプリケーションバンドル)において同じインタフェース(即ち、Air Conditionerインタフェース)を通じてアクセス可能にすることができる。
【0068】
つまり、同一種バンドルの連携が可能になる。ここで、バンドルの連携とは、バンドル同士で直接のデータ交換を行ったり、他のバンドルの状況も考慮しながらメソッドの起動を行ったりすることをいう。具体的には例えば、複数のエアコンが存在する場合に、エアコン同士が自分の設定温度や運転モードや消費電力などを交換し、複数のエアコン群として適切な運転を行うようにエアコン毎の温度設定や運転・停止が調整されたりする。
【0069】
(5−3)ロケーションの変更
バンドルを識別するためのもう一つの情報にロケーションが存在する。このロケーションの値が同一であると、bsnversion の値が multiple に指定されていても、同一種のバンドルを複数同時にインストールすることができない。
【0070】
本発明では、同一種のバンドルが既にインストールされている場合には、もとは同じロケーションからJARファイルを取得しつつ、取得の度にそのロケーションを仮想的なものに変更することによって上記問題を回避するようにする。このとき、仮想的なロケーションからオリジナルのロケーションを特定できるような値に変更することが好ましい。例えば、オリジナルのロケーションが http://codebase/dir/sample.jar である場合には、JARファイルの名前に「_pseudo#」(なお、#は1以上の整数でJARファイルの取得の度に増加させる)を付加する(例えば、sample_pseudo1.jar とする)。これにより、仮想的なロケーションとしたときに付加した文字列を除けば、オリジナルのロケーションを特定することができる。なお、同一種のバンドルが既にインストロールされているか否かを判断することなく、常に、JARファイルの取得の度に当該JARファイルのもとのロケーションに少なくとも通し番号(言い換えると、通し番号を含むダミーの値)を付加して当該JARファイルのロケーションを仮想のものに変更するようにしても良い。
【0071】
上述の処理内容を、上述の実施形態における構成に基づきながら本発明のバンドル制御方法及びバンドル制御装置として一般化すると以下のようになる。
【0072】
まず、上述の実施形態において制御対象とする個別具体的な機能に働きかけるメソッドである startCooling や update を定義するクラスである Air Conditioner Impl や Temperature Sensor Impl を収容する acパッケージや tempパッケージのことを、個別機能パッケージと呼ぶ。
【0073】
また、上述の実施形態において上記個別機能パッケージである acパッケージ及び tempパッケージに共通する処理手順を定義する抽象クラスである Object Implクラスを収容する abstパッケージのことを、共通処理パッケージと呼ぶ。
【0074】
また、上述の実施形態において複数のバンドルで共通的に利用されるインタフェースを収容する commonパッケージのことを、共通インタフェースパッケージと呼ぶ。
【0075】
また、上述の実施形態において上記共通処理パッケージである abstパッケージ及び上記共通インタフェースパッケージである commonパッケージに基づいて生成されるバンドルであるバンドルAを、共通バンドルと呼ぶ。
【0076】
さらに、上述の実施形態において上記個別機能パッケージであるacパッケージに基づいて生成されるバンドルであるバンドルBや同じく上記個別機能パッケージであるtempパッケージに基づいて生成されるバンドルであるバンドルCのことを、個別バンドルと呼ぶ。
【0077】
なお、上述の実施形態においては制御対象とする個別具体的な機能に働きかけるメソッドを定義するクラスを Air Conditioner Impl と Temperature Sensor Impl との二つとしているが、本発明において(言い換えると、本発明の適用に際して)当該クラスは一つでも良いし三つ以上でも良い。すなわち、本発明において個別機能パッケージは一つでも良いし三つ以上でも良い。本発明の効果が発揮され得るのは、上述の実施形態において複数のエアコンが存在する場合のように、複数の制御対象機能が存在して複数のバンドルが一つのOSGiフレームワーク上で起動する場合である。
【0078】
上述も踏まえると、制御対象機能の状況によって当該機能に働きかけるメソッドを定義するクラスが任意に一つ以上作成され、当該クラスを収容する個別機能パッケージも任意に一つ以上構成され、一方、共通処理パッケージ及び共通インタフェースパッケージは必須のパッケージとしてそれぞれ一つずつ構成される。
【0079】
また、上述の実施形態ではホームゲートウェイ10の具体的な監視制御対象機器としてエアコンを挙げてエアコンの温度設定や運転・停止を制御対象機能としているが、本発明はOSGiフレームワーク上においてバンドルの制御が必要な場合に広く適用可能であり、例えばコンピュータ内部の処理を担う機能を制御対象機能としても本発明は適用され得る。
【0080】
上記を踏まえると、本発明のバンドル制御方法は、OSGiフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルと、個別機能パッケージに基づく個別バンドルとを生成し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するものである(
図5参照)。
【0081】
また、本発明のバンドル制御装置は、OSGiフレームワーク上における複数のバンドルの制御装置であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルを生成する手段と、個別機能パッケージに基づく個別バンドルを生成する手段とを有し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するものである(
図5参照)。
【0082】
上述の処理は、Java言語を用いて記述されてホームゲートウェイ10の拡張機能用ハードウェア10B内若しくは拡張機能用ハードウェア10Bがアクセス可能な記憶装置に格納されたプログラムがホームゲートウェイ10の起動に合わせて実行されることによって実現される。なお、上述の各種バンドルを生成する手段は、概念的には、プログラムが実行されることによってJava仮想機械(バーチャルマシン)1とOSGiとの組み合わせによって提供される。
【0083】
また、上述において、個別バンドルは、個別機能パッケージの各々に基づいて別個に生成する(言い換えると、一つの個別バンドルには一つの個別機能パッケージを収容する)ようにしても良いし、複数の個別機能パッケージに基づいて生成する(言い換えると、一つの個別バンドルに複数の個別機能パッケージを収容する)ようにしても良い。
【0084】
以上のように構成された本発明のバンドル制御方法及びバンドル制御装置によれば、個別機能パッケージに基づいて生成された同一種のバンドルを複数同時に起動することができ、且つ、これらを利用する別のバンドルにおいて同じインタフェースを通じてアクセスすることができるので、同一種バンドル(プログラムモジュール)を複数同時に起動・実行し且つこれら複数の同一種バンドル(プログラムモジュール)を相互に連携させることが可能になる。
【0085】
なお、上述の形態は本発明の好適な形態の一例ではあるが本発明の実施の形態が上述の形態に限定されるものではなく、本発明はその要旨を逸脱しない範囲において種々変形実施可能である。例えば、上述の実施形態ではホームゲートウェイ10が必須機能と拡張機能との二種類の機能を有して必須機能用ハードウェア10Aと拡張機能用ハードウェア10Bとの二つのハードウェアから構成され且つ必須機能用ソフトウェア9Aと拡張機能用ソフトウェア9Bとの二つのソフトウェアを備えるものであるが、本発明の適用対象が上述の実施形態におけるホームゲートウェイ10に限られるものではなく、必須機能を有していなくても良いし、二つのハードウェアから構成されていなくても良いし、二つのソフトウェアを備えていなくても良い。
【0086】
さらに言えば、本発明の適用対象は、所謂ホームゲートウェイに限られるものではなく、OSGiフレームワーク上でバンドル(プログラムモジュール)の追加・実行を行う機器であればいずれでも構わない。
【0087】
また、上述の実施形態では宅内機器12としてエアコンとそれに関連する温度センサとを例に挙げてacパッケージ及びAir Conditioner Implクラス等やtempパッケージ及びTemperature Sensor Implクラス等を設定して説明したが、本発明における具体的なパッケージ,クラス,インタフェース等の設定内容が上述の実施形態におけるものに限られないことは勿論である。