(57)【要約】【課題】同一種バンドルを複数同時に起動・実行し且つこれら複数の同一種バンドルを相互に連携させることができるようにする。【解決手段】ＯＳＧｉフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルと、個別機能パッケージに基づく個別バンドルとを生成し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するようにした。【選択図】図５
2014238754.tif 000002
【特許請求の範囲】
【請求項１】
ＯＳＧｉフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、前記個別機能パッケージの前記クラスが実装するインタフェース、及び、これらインタフェースが継承すると共に前記共通処理パッケージの前記抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、前記共通処理パッケージ及び前記共通インタフェースパッケージに基づく共通バンドルと、前記個別機能パッケージに基づく個別バンドルとを生成し、前記個別バンドルが必要とするクラスの定義情報を前記共通バンドルが提供することを特徴とするバンドル制御方法。
【請求項２】
前記制御対象の機能に対応するクラス及び前記個別機能パッケージが二つ以上であることを特徴とする請求項１記載のバンドル制御方法。
【請求項３】
前記個別バンドルを前記個別機能パッケージの各々に基づいて別個に生成することを特徴とする請求項２記載のバンドル制御方法。
【請求項４】
ＪＡＲファイルの取得の度に当該ＪＡＲファイルのもとのロケーションに少なくとも通し番号を付加して当該ＪＡＲファイルのロケーションを仮想のものに変更することを特徴とする請求項１記載のバンドル制御方法。
【請求項５】
ＯＳＧｉフレームワーク上における複数のバンドルの制御装置であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、前記個別機能パッケージの前記クラスが実装するインタフェース、及び、これらインタフェースが継承すると共に前記共通処理パッケージの前記抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、前記共通処理パッケージ及び前記共通インタフェースパッケージに基づく共通バンドルを生成する手段と、前記個別機能パッケージに基づく個別バンドルを生成する手段とを有し、前記個別バンドルが必要とするクラスの定義情報を前記共通バンドルが提供することを特徴とするバンドル制御装置。
【請求項６】
前記制御対象の機能に対応するクラス及び前記個別機能パッケージが二つ以上であることを特徴とする請求項５記載のバンドル制御方法。
【請求項７】
前記個別バンドルを前記個別機能パッケージの各々に基づいて別個に生成することを特徴とする請求項６記載のバンドル制御方法。
【請求項８】
ＪＡＲファイルの取得の度に当該ＪＡＲファイルのもとのロケーションに少なくとも通し番号を付加して当該ＪＡＲファイルのロケーションを仮想のものに変更することを特徴とする請求項５記載のバンドル制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バンドル制御方法及びバンドル制御装置に関する。さらに詳述すると、本発明は、ＯＳＧｉフレームワーク上におけるバンドルに纏わる処理を行う技術に関する。
【背景技術】
【０００２】
ＯＳＧｉは、プラットフォームであるフレームワークとその上でサービスとして動作するプログラムモジュールであるバンドルとで構成された、Ｊａｖａ(登録商標)言語に基づくサービス指向アーキテクチャベースのサービスプラットフォームであり、ＯＳＧｉ  Ａllianceが仕様を定めている。そして、ＯＳＧｉは、Ｊａｖａモジュールの動的な追加や実行を管理するための基盤システムであり、Ｊａｖａモジュールの動的な追加が可能であることから機能の加除修正を容易に実現可能であること、元々の設計対象が家庭や小規模オフィス向けのゲートウェイ装置であること、仕様が公開されていることなどの特徴がある。
【０００３】
ＯＳＧｉフレームワーク上におけるプログラムモジュールであるバンドルに纏わる処理を行う従来の情報処理装置としては、例えば、演算処理部と記憶部とを備え、演算処理部が記憶部に記憶してあるプログラムを読み込んで実行することによってプログラムモジュールの実行プラットフォームとしてそれぞれ稼働する第一及び第二のフレームワークが作動されるようにしてある情報処理装置において、演算処理部は第一及び第二のフレームワーク上でそれぞれ稼働して互いに通信可能な第一及び第二の管理手段として機能し、第一の管理手段はプログラムモジュールを受信すると共に受信したプログラムモジュールを第一又は第二のフレームワーク用のプログラムモジュールに分別して保存するものがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１２３５７０号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の情報処理装置では、受信したバンドルの分別整理を行うことはできても、同一種バンドル（プログラムモジュール）を複数同時に起動させ実行させることはできず、したがって、複数の同一種バンドル（プログラムモジュール）を相互に連携させることもできない。このため、汎用性が高いとは言い難い。
【０００６】
なお、ＯＳＧｉのRelease 4.3(以降)ではフレームワークのパラメータである bsnversion の値を multiple とすることによって複数のバンドル起動が可能であるものの、委譲関係のない異なるクラスローダによってロードされたクラスは別のものとして認識されるため、同一クラスから生成された複数の同一種バンドルを連携させることはできない。
【０００７】
そこで、本発明は、同一種バンドル（プログラムモジュール）を複数同時に起動・実行し且つこれら複数の同一種バンドル（プログラムモジュール）を相互に連携させることができるバンドル制御方法及びバンドル制御装置を提供することを目的とする。
【０００８】
ここで、バンドルの連携とは、バンドル同士で直接のデータ交換を行ったり、他のバンドルの状況も考慮しながらメソッドの起動を行ったりすることをいう。
【課題を解決するための手段】
【０００９】
かかる目的を達成するため、本発明のバンドル制御方法は、ＯＳＧｉフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルと、個別機能パッケージに基づく個別バンドルとを生成し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するようにしている。
【００１０】
また、本発明のバンドル制御装置は、ＯＳＧｉフレームワーク上における複数のバンドルの制御装置であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルを生成する手段と、個別機能パッケージに基づく個別バンドルを生成する手段とを有し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するようにしている。
【００１１】
したがって、これらのバンドル制御方法及びバンドル制御装置によると、個別機能パッケージに基づいて生成された同一種のバンドル（即ち、同一の Bundle-SymbolicName と Bundle-Version との対を持つバンドル）を複数同時に起動することができ、且つ、これらを利用する別のバンドルにおいて同じインタフェースを通じてアクセスすることができる。
【００１２】
また、本発明のバンドル制御方法及びバンドル制御装置は、制御対象の機能に対応するクラス及び個別機能パッケージが二つ以上であるようにしても良く、さらにこの場合に、個別バンドルを個別機能パッケージの各々に基づいて別個に生成するようにしても良い。この場合には、必要な個別機能のみを有するバンドル（プログラムモジュール）を生成してそれをＯＳＧｉフレームワークに追加（インストール）し動作させるようにすることができる。また、プログラムモジュールのアップデートも個別機能単位で行うことができるので、アップデートに関連する機能(処理)を一旦停止した上でアップデートを行う必要がある場合に、アップデートに関係ない個別機能までも停止させなければならないという不便を回避することができる。
【００１３】
また、本発明のバンドル制御方法及びバンドル制御装置は、ＪＡＲファイルの取得の度に当該ＪＡＲファイルのもとのロケーションに少なくとも通し番号を付加して当該ＪＡＲファイルのロケーションを仮想のものに変更するようにしても良い。この場合には、バンドルを識別する情報の一つであるＪＡＲファイルのロケーションの値が複数のバンドルで同一になることが確実に防止される。
【発明の効果】
【００１４】
本発明のバンドル制御方法及びバンドル制御装置によれば、個別機能パッケージに基づいて生成された同一種のバンドルを複数同時に起動することができ、且つ、これらを利用する別のバンドルにおいて同じインタフェースを通じてアクセスすることができるので、同一種バンドル（プログラムモジュール）を複数同時に起動・実行し且つこれら複数の同一種バンドル（プログラムモジュール）を相互に連携させることが可能になり、ＯＳＧｉフレームワーク上におけるバンドル制御の利便性及び汎用性の向上を図ることが可能になる。
【００１５】
さらに、本発明のバンドル制御方法及びバンドル制御装置は、制御対象の機能に対応するクラス及び個別機能パッケージが二つ以上であると共に個別バンドルを個別機能パッケージの各々に基づいて別個に生成するようにした場合には、ＯＳＧｉフレームワークへのインストール及び動作を個別機能単位で行うことができるので、例えばＣＰＵやメモリ等の資源を無駄に消費してしまうことがなく、効率的な運用を可能にし、ＯＳＧｉフレームワーク上におけるバンドル制御の利便性及び汎用性の更なる向上を図ることが可能になる。また、プログラムモジュールのアップデートの際の影響を最小限に抑えることができるので、この点においてもＯＳＧｉフレームワーク上におけるバンドル制御の利便性及び汎用性の更なる向上を図ることが可能になる。
【００１６】
また、本発明のバンドル制御方法及びバンドル制御装置は、ＪＡＲファイルのロケーションに少なくとも通し番号を付加して仮想のものに変更するようにした場合には、ＪＡＲファイルのロケーションの値が複数のバンドルで同一になることを確実に防止することができ、同一種のバンドルを複数同時にインストールする際の支障を確実に排除することが可能になる。
【図面の簡単な説明】
【００１７】
【図１】本発明のバンドル制御方法及びバンドル制御装置の実施形態におけるホームゲートウェイのハードウェア構成を示す図である。
【図２】実施形態におけるホームゲートウェイのソフトウェア構成を示す図である。
【図３】実施形態におけるクラスローダの委譲モデルを示す図である。
【図４】実施形態におけるクラス及びパッケージ構成を示す図である。
【図５】本発明のバンドル制御方法及びバンドル制御装置におけるクラス及びパッケージ構成の一例を示す図である。
【発明を実施するための形態】
【００１８】
以下、本発明の構成を図面に示す実施の形態の一例に基づいて詳細に説明する。
【００１９】
図１から図５に、本発明のバンドル制御方法及びバンドル制御装置の実施形態の一例を示す。本実施形態では、図１及び図２に概要を示すホームゲートウェイ１０に本発明のバンドル制御方法及びバンドル制御装置を適用した場合を例に挙げて説明する。
【００２０】
本実施形態のバンドル制御方法は、ＯＳＧｉフレームワーク２上における複数のバンドル３の制御方法であり、制御対象機器１２の機能に対応する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パッケージに基づくバンドルＡと、acパッケージに基づくバンドルＢ及びtempパッケージに基づくバンドルＣとを生成し、acパッケージに基づくバンドルＢやtempパッケージに基づくバンドルＣが必要とするクラスの定義情報をabstパッケージ及びcommonパッケージに基づいて生成されたバンドルＡが提供するものである。
【００２１】
また、本実施形態のバンドル制御装置は、ＯＳＧｉフレームワーク２上における複数のバンドル３の制御装置であり、制御対象機器１２の機能に対応する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パッケージに基づくバンドルＡを生成する手段と、acパッケージに基づくバンドルＢ及びtempパッケージに基づくバンドルＣを生成する手段とを有し、acパッケージに基づくバンドルＢやtempパッケージに基づくバンドルＣが必要とするクラスの定義情報をabstパッケージ及びcommonパッケージに基づいて生成されたバンドルＡが提供するものである。
【００２２】
（１）ホームゲートウェイの構成
（１−１）機能の構成
例えば宅内や事務所内に設置されるホームゲートウェイ１０は、本実施形態では、必須機能と拡張機能との二種類の機能を有する。必須機能とは対象とするホームゲートウェイ１０が常時備えるべき機能であり、一方、拡張機能とは対象とするホームゲートウェイ１０に適宜追加・削除される機能である。
【００２３】
（１−２）ハードウェアの構成
ホームゲートウェイ１０は、図１に示すように、必須機能用ハードウェア１０Ａと拡張機能用ハードウェア１０Ｂとの二つのハードウェアから構成され、それぞれのハードウェア１０Ａ，１０Ｂに中央演算処理装置(ＣＰＵ)を搭載してそれぞれが独立に動作する。なお、これら二つのハードウェア１０Ａ，１０Ｂ同士の間はＵＳＢ，イーサネット（登録商標），ＲＳ−２３２などの、有線若しくは電子回路間を接続するための無線を用いて接続され、二つのハードウェア１０Ａ，１０Ｂ間でのデータ交換が可能になっている。
【００２４】
必須機能用ハードウェア１０Ａには、ホームゲートウェイ１０が常時備えるべき機能に必要とされる諸機能が搭載される。併せて、広域側の通信機能（例えば、インターネットによる通信機能）を有し、広域側に設置された外部サーバ等の機器１１とのデータ交換を行う。なお、拡張機能用ハードウェア１０Ｂに自律的に回復することができない障害が発生した場合に、拡張機能用ハードウェア１０Ｂを強制的に再起動させる機能を備えるようにしても良い。
【００２５】
一方、拡張機能用ハードウェア１０Ｂには、ホームゲートウェイ１０に適宜追加・削除される機能に必要とされる諸機能が搭載される。併せて、宅内やオフィス内の機器１２或いはＨＥＭＳ（Ｈome  Ｅnergy  Ｍanagement  Ｓystem の略）とのデータ交換機能を備える。
【００２６】
拡張機能用ハードウェア１０Ｂが広域側の通信を利用する際には、必須機能用ハードウェア１０Ａが有する広域側の通信機能を利用する。必須機能用ハードウェア１０Ａと拡張機能用ハードウェア１０Ｂとの間のデータの転送は、物理層，データリンク層，ネットワーク層のうちのいずれかにおいて行われる。
【００２７】
また、必須機能用ハードウェア１０Ａが時刻情報を取得し、当該時刻情報を拡張機能用ハードウェア１０Ｂに提供することによって二つのハードウェア１０Ａ，１０Ｂの時刻を同期させる。なお、時刻情報の取得は、例えばインターネット上の時刻サーバから取得することによって行われる。
【００２８】
（１−３）ソフトウェアの構成
ホームゲートウェイ１０は、図２に示すように、必須機能用ハードウェア１０Ａに搭載される必須機能用ソフトウェア９Ａと、拡張機能用ハードウェア１０Ｂに搭載される拡張機能用ソフトウェア９Ｂとの、二つのソフトウェアを備える。
【００２９】
必須機能用ソフトウェア９Ａは、必須機能に関連する機器を制御するためのデバイスドライバ４と、外部サーバ等の機器１１及び拡張機能用ハードウェア１０Ｂと通信するための通信用ドライバ５Ａと、必須機能用のアプリケーション６と、拡張機能用ハードウェア１０Ｂを管理するため（具体的には、拡張機能用ハードウェア１０Ｂに自律的に回復することができない障害が発生した場合に、拡張機能用ハードウェア１０Ｂを強制的に再起動させる機能）のソフトウェア７とから構成される。
【００３０】
なお、必須機能用ソフトウェア９Ａでは、メモリを固定的に割り当てるなどの対策を施し、長期間の連続動作が可能になる構成を採用することが好ましい。
【００３１】
一方、拡張機能用ソフトウェア９Ｂは、必須機能用ハードウェア１０Ａと通信するための通信用ドライバ５Ｂと、宅内・オフィス内機器１２と通信するための通信用ドライバ８と、Ｊａｖａ仮想機械(バーチャルマシン)１と、ＯＳＧｉフレームワーク２とからなる。
【００３２】
そして、拡張機能用ソフトウェア９Ｂでは、ＯＳＧｉを活用し、ソフトウェアの追加・削除が可能になる構成を採用し、ソフトウェアの拡張性を確保する。
【００３３】
ここで、ＯＳＧｉではＪａｖａ言語を用いたプログラムにおいてバンドルと呼ばれる単位でのソフトウェアの追加・削除が可能であり、本発明では、拡張機能としての個別の機能はＯＳＧｉにおけるバンドル３として実装され、併せて、拡張機能用ソフトウェア９Ｂの自律的な管理を行うための機能や外部サーバ等の機器１１や宅内・オフィス内機器１２などとの通信における上位層プロトコルの機能もバンドル３として実装される。
【００３４】
（２）ＯＳＧｉの全体構成
ＯＳＧｉに従ったソフトウェアは大きく分けてバンドル３とフレームワーク２とから構成される。
【００３５】
バンドル３は、追加・削除の単位であり、複数のクラスファイルとリソースファイルとをアーカイブとして一つにまとめたＪＡＲ(ＪavaＡＲchive)ファイルである。ＪＡＲファイルの中には、実行コードに相当する classファイル（以下、クラスファイルと表記する）や、設定情報が保存されているMANIFEST.MFファイル（以下、マニフェストファイルと表記する）などが含まれる。
【００３６】
マニフェストファイルには、以下の項目が記載されている。
ａ）Bundle-SymbolicName
バンドルの名前。下記Bundle-Versionとのペアで、バンドルを一意に識別する情報として利用される。
【００３７】
ｂ）Bundle-Version
バンドルのバージョン。上記Bundle-SymbolicNameとのペアで、バンドルを一意に識別する情報として利用される。
【００３８】
ｃ）Import-Package
他のバンドルに依存するパッケージを宣言する。これにより、ＪＡＲファイルに含まれないクラスファイルの機能を利用することが可能になる。
【００３９】
ｄ）Export-Package
他のバンドルが利用するパッケージを宣言する。
【００４０】
ｅ）Bundle-Activator
バンドル起動時に最初に呼び出されるクラス(class)。
【００４１】
一方、フレームワークは、バンドルの実行基盤であり、一つのフレームワーク上で複数のバンドルを実行することができる。また、バンドル間の通信を可能にするため、各バンドルが提供するサービスを登録したり、別のバンドルが提供しているサービスを検索したりする機能も提供する。
【００４２】
（３）クラスローダ
Ｊａｖａプログラムでは、仮想機械(バーチャルマシン)に対して実行ファイルであるクラス(class)をロードする必要がある。このクラスロードを担当するものがクラスローダ(Class Loader)である。一つのＪａｖａ仮想機械においては複数のクラスローダが動作する。これらのクラスローダ間には委譲関係が設定される。その関係を図３に示す。クラスを検索する場所の順番は、<１>クラスローダのキャッシュ、<２>委譲関係における親（図３における矢印の先）、<３>自分自身、である。
【００４３】
或るバンドルでそのバンドルのＪＡＲファイルに収容されているユーザ定義クラスをロードするようユーザプログラムから依頼された場合、そのバンドルにおける Bundle Class Loader は、まず、同じクラスを以前にロードしたことがあるか否かを判断し、ロードしたことがある場合には、キャッシュからクラスをロードする。一方、ロードしたことがない場合には、親である System Class Loader にロードを委譲する。
【００４４】
ロード対象であるユーザ定義クラスが、検索範囲である$CLASSPATH内に、存在する場合には System Class Loader がそのクラスをロードし、存在しない場合には Extension Class Loader にロードを委譲する。なお、CLASSPATHは、クラスをサーチするパスの設定であり、ネイティブの環境変数として設定される。
【００４５】
Extension Class Loader の検索範囲はＪａｖａ実行環境にてインストールされた拡張ファイルであるため、システム管理者が事前にインストールしている場合には対象であるユーザ定義クラスを Extension Class Loader がロードするが、通常はここにそのクラスが事前にインストールされていることはない。そこで Extension Class Loader は Bootstrap Class Loader に委譲するが、これは実行環境そのもののクラスファイルのみをロードするため、対象となるユーザ定義クラスはここでもロードされない。このため、最初の Bundle Class Loader が、自らの検索範囲であるＪＡＲファイル内から指定されたユーザ定義クラスをロードする。
【００４６】
なお、異なるバンドルの Bundle Class Loader は、通常は System Class Loader を親に持ち、相互に委譲関係を構築しない。
【００４７】
以上のとおり、Ｊａｖａでは、バンドルが自らの Class Loader を有し、委譲関係のない異なる Class Loader によってロードされたクラスは同じ定義でも別のものと認識される。
【００４８】
（４）ＯＳＧｉにおける同一種バンドルの複数起動方法
ＯＳＧｉのRelease 4.3(以降)では、フレームワークのパラメータである bsnversion の値を multiple とすること（具体的には、org.osgi.framework.bsnversion=multiple とすること）によって複数のバンドル起動が可能である。
【００４９】
ただし、上記（３）の通り、委譲関係のない異なる Class Loader によってロードされたクラスは、たとえ同じ機能を持つものでも、別のものとして認識される。すなわち、それらを利用する側から見ると、別々のものとして認識した上で実行可能な処理手順を用意する必要がある。しかし、実際にどのようなバンドルを何個起動させるかを事前に予測することは不可能である。このため、bsnversion の値を multiple にするだけでは、同一クラスから生成された複数の同一種バンドルを連携させることはできない。
【００５０】
（５）同一種バンドルの連携方法
本発明では、クラス構成，バンドル化とその依存関係，バンドル間サービス検索に関連するロケーションの変更の三つにおいて特有の構成を備えさせることにより、同一種バンドルの連携を可能にする。
【００５１】
（５−１）クラス構成
同一種バンドルの連携を可能にするクラス構成を、ＵＭＬ（Ｕnified Ｍodeling Ｌanguage の略）のクラス図記法に従って図４に示す。この図では、宅内・オフィス内機器１２であるエアコンを監視制御対象機器として監視制御を行うために、エアコン自体に関係するクラスである Air Conditioner Impl 及びエアコンと関連する温度センサに関係するクラスである Temperature Sensor Impl を示している。さらに、common，abst，ac，temp の四つのパッケージ（即ち、バンドルのＪＡＲファイルに収容される最小単位）を示している。
【００５２】
abstパッケージには、パッケージ（厳密には、パッケージの定義に基づいて生成される複数のインスタンス）に共通する処理手順を定義する抽象クラスが収容され、図４の例ではObject Implクラスが収容される。
【００５３】
なお、Object Implクラスの getId() はバンドルの識別子を取得するためのメソッドであり、byte は戻り値のデータ型を８ビットサイズの整数型に宣言するプロパティである。
【００５４】
commonパッケージには、複数のバンドルで共通的に利用されるインタフェースが収容される。ここでいうインタフェース(interface)とは、メソッドのシグネチャ（即ち、メソッド名及び戻り値や引数を示したもの）を定義する一方で具体的な処理手順は定義していないＪａｖａの要素である。
【００５５】
図４の例では、Air Conditioner はエアコンの監視制御用インタフェースであり、このAir Conditionerインタフェースには、冷房を開始するためのメソッドである startCooling のシグネチャが定義されている。なお、temp はエアコンの設定温度であり、byte は戻り値のデータ型を８ビットサイズの整数型に宣言するプロパティである。また、Temperature Sensor は温度センサの監視制御用インタフェースであり、このTemperature Sensorインタフェースには、センサによる検知温度を更新するためのメソッドである update のシグネチャが定義されている。なお、integer は戻り値のデータ型を３２ビットサイズの整数型に宣言するプロパティである。
【００５６】
Air Conditionerインタフェース自体やTemperature Sensorインタフェース自体には具体的な処理手順は定義されておらず，これらのインタフェースを実現する Air Conditioner ImplクラスやTemperature Sensor Implクラスにおいて具体的な処理手順が定義される。すなわち、具体的な処理手順はそのインタフェースを実装するクラスにおいて定義される。
【００５７】
commonパッケージには、さらに、バンドルの識別子を取得するためのメソッドである getId() が定義されている Objectインタフェースが収容される。
【００５８】
そして、Air Conditionerインタフェースは Objectインタフェースを継承し、Temperature Sensorインタフェースも Objectインタフェースを継承している。また、abstパッケージに収容されているObject ImplクラスもObjectインタフェースを継承している。
【００５９】
そして、上述の構成により、全ての実装クラス（即ち、XXX Impl）が、commonパッケージに収容されているObjectインタフェースによって定義される getId() を有することになる。これにより、いかなるバンドルに対しても、同一の方法（即ち、getId() の呼び出し）によって識別子の取得が可能になる。
【００６０】
commonパッケージには、また、バンドルとして実行可能にするための Bundle-Activator として Common Activator が収容される。
【００６１】
具体的な制御対象を表すパッケージ（即ち、エアコン関係のacパッケージと温度センサ関係のtempパッケージ）には、commonパッケージ内に収容されている対応するインタフェース（即ち、Air Conditionerインタフェース や Temperature Sensorインタフェース）を実現するためのクラス（即ち、Air Conditioner Implクラス や Temperature Sensor Implクラス）が収容される。併せて、バンドルとして実行可能にするための Bundle-Activator（即ち、Air Conditioner Activator と Temperature Sensor Activator ）がそれぞれに収容される。
【００６２】
なお、複数のエアコンが存在する場合は、common，abst，ac の各パッケージの定義に基づき、エアコンの台数分の Air Conditioner Impl のインスタンス（ソフトウェア）及び Air Conditioner Activator のインスタンス（ソフトウェア）が生成される。
【００６３】
（５−２）バンドル化とその依存関係
本発明では、個別具体的なパッケージに基づいてバンドルが生成され、さらに、共通的なパッケージに基づいてバンドルが生成される。
【００６４】
図４に示したクラス構成の場合には以下の三つのバンドルが生成される。
〈バンドルＡ〉共通的なパッケージであるcommonパッケージ及びabstパッケージに
基づいて生成されるバンドル
〈バンドルＢ〉個別具体的なパッケージであるacパッケージに基づいて生成される
バンドル
〈バンドルＣ〉個別具体的なパッケージであるtempパッケージに基づいて生成される
バンドル
【００６５】
バンドルの依存関係としては、個別具体的なパッケージが共通的なパッケージに依存する関係が各バンドルのマニフェストファイルに記述される。上述の場合には、バンドルＡにおいてcommonパッケージ及びabstパッケージがExport-Packageに記載され、バンドルＢ及びバンドルＣにおいてcommonパッケージ及びabstパッケージがImport-Packageに記載される。
【００６６】
また、共通的なパッケージであるcommonパッケージ及びabstパッケージに基づいて生成されたバンドルから、個別具体的なパッケージであるacパッケージに基づいて生成されたバンドルに対し、Objectインタフェース及びAir ConditionerインタフェースとObject Implクラスとの定義が提供される。
【００６７】
以上のクラス構成とバンドル化を、bsnversion の値を multiple にすることと組み合わせて使用することにより、例えば、acパッケージに基づいて生成された同一種のバンドル（即ち、同一の Bundle-SymbolicName と Bundle-Version との対を持つバンドル）を複数同時に起動することができ、且つ、これらを利用する別のバンドル（例えばアプリケーションバンドル）において同じインタフェース（即ち、Air Conditionerインタフェース）を通じてアクセス可能にすることができる。
【００６８】
つまり、同一種バンドルの連携が可能になる。ここで、バンドルの連携とは、バンドル同士で直接のデータ交換を行ったり、他のバンドルの状況も考慮しながらメソッドの起動を行ったりすることをいう。具体的には例えば、複数のエアコンが存在する場合に、エアコン同士が自分の設定温度や運転モードや消費電力などを交換し、複数のエアコン群として適切な運転を行うようにエアコン毎の温度設定や運転・停止が調整されたりする。
【００６９】
（５−３）ロケーションの変更
バンドルを識別するためのもう一つの情報にロケーションが存在する。このロケーションの値が同一であると、bsnversion の値が multiple に指定されていても、同一種のバンドルを複数同時にインストールすることができない。
【００７０】
本発明では、同一種のバンドルが既にインストールされている場合には、もとは同じロケーションからＪＡＲファイルを取得しつつ、取得の度にそのロケーションを仮想的なものに変更することによって上記問題を回避するようにする。このとき、仮想的なロケーションからオリジナルのロケーションを特定できるような値に変更することが好ましい。例えば、オリジナルのロケーションが http://codebase/dir/sample.jar である場合には、ＪＡＲファイルの名前に「_pseudo#」（なお、＃は１以上の整数でＪＡＲファイルの取得の度に増加させる）を付加する（例えば、sample_pseudo1.jar とする）。これにより、仮想的なロケーションとしたときに付加した文字列を除けば、オリジナルのロケーションを特定することができる。なお、同一種のバンドルが既にインストロールされているか否かを判断することなく、常に、ＪＡＲファイルの取得の度に当該ＪＡＲファイルのもとのロケーションに少なくとも通し番号（言い換えると、通し番号を含むダミーの値）を付加して当該ＪＡＲファイルのロケーションを仮想のものに変更するようにしても良い。
【００７１】
上述の処理内容を、上述の実施形態における構成に基づきながら本発明のバンドル制御方法及びバンドル制御装置として一般化すると以下のようになる。
【００７２】
まず、上述の実施形態において制御対象とする個別具体的な機能に働きかけるメソッドである startCooling や update を定義するクラスである Air Conditioner Impl や Temperature Sensor Impl を収容する acパッケージや tempパッケージのことを、個別機能パッケージと呼ぶ。
【００７３】
また、上述の実施形態において上記個別機能パッケージである acパッケージ及び tempパッケージに共通する処理手順を定義する抽象クラスである Object Implクラスを収容する abstパッケージのことを、共通処理パッケージと呼ぶ。
【００７４】
また、上述の実施形態において複数のバンドルで共通的に利用されるインタフェースを収容する commonパッケージのことを、共通インタフェースパッケージと呼ぶ。
【００７５】
また、上述の実施形態において上記共通処理パッケージである abstパッケージ及び上記共通インタフェースパッケージである commonパッケージに基づいて生成されるバンドルであるバンドルＡを、共通バンドルと呼ぶ。
【００７６】
さらに、上述の実施形態において上記個別機能パッケージであるacパッケージに基づいて生成されるバンドルであるバンドルＢや同じく上記個別機能パッケージであるtempパッケージに基づいて生成されるバンドルであるバンドルＣのことを、個別バンドルと呼ぶ。
【００７７】
なお、上述の実施形態においては制御対象とする個別具体的な機能に働きかけるメソッドを定義するクラスを Air Conditioner Impl と Temperature Sensor Impl との二つとしているが、本発明において（言い換えると、本発明の適用に際して）当該クラスは一つでも良いし三つ以上でも良い。すなわち、本発明において個別機能パッケージは一つでも良いし三つ以上でも良い。本発明の効果が発揮され得るのは、上述の実施形態において複数のエアコンが存在する場合のように、複数の制御対象機能が存在して複数のバンドルが一つのＯＳＧｉフレームワーク上で起動する場合である。
【００７８】
上述も踏まえると、制御対象機能の状況によって当該機能に働きかけるメソッドを定義するクラスが任意に一つ以上作成され、当該クラスを収容する個別機能パッケージも任意に一つ以上構成され、一方、共通処理パッケージ及び共通インタフェースパッケージは必須のパッケージとしてそれぞれ一つずつ構成される。
【００７９】
また、上述の実施形態ではホームゲートウェイ１０の具体的な監視制御対象機器としてエアコンを挙げてエアコンの温度設定や運転・停止を制御対象機能としているが、本発明はＯＳＧｉフレームワーク上においてバンドルの制御が必要な場合に広く適用可能であり、例えばコンピュータ内部の処理を担う機能を制御対象機能としても本発明は適用され得る。
【００８０】
上記を踏まえると、本発明のバンドル制御方法は、ＯＳＧｉフレームワーク上における複数のバンドルの制御方法であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルと、個別機能パッケージに基づく個別バンドルとを生成し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するものである（図５参照）。
【００８１】
また、本発明のバンドル制御装置は、ＯＳＧｉフレームワーク上における複数のバンドルの制御装置であり、制御対象の機能に対応するクラスを収容する個別機能パッケージと、当該個別機能パッケージに共通する処理手順を定義する抽象クラスを収容する共通処理パッケージと、個別機能パッケージのクラスが実装するインタフェース、及び、これらインタフェースが継承すると共に共通処理パッケージの抽象クラスが実装するインタフェース、を収容する共通インタフェースパッケージとが構成されると共に、共通処理パッケージ及び共通インタフェースパッケージに基づく共通バンドルを生成する手段と、個別機能パッケージに基づく個別バンドルを生成する手段とを有し、個別バンドルが必要とするクラスの定義情報を共通バンドルが提供するものである（図５参照）。
【００８２】
上述の処理は、Ｊａｖａ言語を用いて記述されてホームゲートウェイ１０の拡張機能用ハードウェア１０Ｂ内若しくは拡張機能用ハードウェア１０Ｂがアクセス可能な記憶装置に格納されたプログラムがホームゲートウェイ１０の起動に合わせて実行されることによって実現される。なお、上述の各種バンドルを生成する手段は、概念的には、プログラムが実行されることによってＪａｖａ仮想機械(バーチャルマシン)１とＯＳＧｉとの組み合わせによって提供される。
【００８３】
また、上述において、個別バンドルは、個別機能パッケージの各々に基づいて別個に生成する（言い換えると、一つの個別バンドルには一つの個別機能パッケージを収容する）ようにしても良いし、複数の個別機能パッケージに基づいて生成する（言い換えると、一つの個別バンドルに複数の個別機能パッケージを収容する）ようにしても良い。
【００８４】
以上のように構成された本発明のバンドル制御方法及びバンドル制御装置によれば、個別機能パッケージに基づいて生成された同一種のバンドルを複数同時に起動することができ、且つ、これらを利用する別のバンドルにおいて同じインタフェースを通じてアクセスすることができるので、同一種バンドル（プログラムモジュール）を複数同時に起動・実行し且つこれら複数の同一種バンドル（プログラムモジュール）を相互に連携させることが可能になる。
【００８５】
なお、上述の形態は本発明の好適な形態の一例ではあるが本発明の実施の形態が上述の形態に限定されるものではなく、本発明はその要旨を逸脱しない範囲において種々変形実施可能である。例えば、上述の実施形態ではホームゲートウェイ１０が必須機能と拡張機能との二種類の機能を有して必須機能用ハードウェア１０Ａと拡張機能用ハードウェア１０Ｂとの二つのハードウェアから構成され且つ必須機能用ソフトウェア９Ａと拡張機能用ソフトウェア９Ｂとの二つのソフトウェアを備えるものであるが、本発明の適用対象が上述の実施形態におけるホームゲートウェイ１０に限られるものではなく、必須機能を有していなくても良いし、二つのハードウェアから構成されていなくても良いし、二つのソフトウェアを備えていなくても良い。
【００８６】
さらに言えば、本発明の適用対象は、所謂ホームゲートウェイに限られるものではなく、ＯＳＧｉフレームワーク上でバンドル（プログラムモジュール）の追加・実行を行う機器であればいずれでも構わない。
【００８７】
また、上述の実施形態では宅内機器１２としてエアコンとそれに関連する温度センサとを例に挙げてacパッケージ及びAir Conditioner Implクラス等やtempパッケージ及びTemperature Sensor Implクラス等を設定して説明したが、本発明における具体的なパッケージ，クラス，インタフェース等の設定内容が上述の実施形態におけるものに限られないことは勿論である。
【符号の説明】
【００８８】
１  Ｊａｖａ仮想機械(バーチャルマシン)
２  ＯＳＧｉフレームワーク
３  バンドル
【図１】
2014238754.tif 000003
【図２】
2014238754.tif 000004
【図３】
2014238754.tif 000005
【図４】
2014238754.tif 000006
【図５】
2014238754.tif 000007