(57)【特許請求の範囲】
【請求項１】
通常の動作モードと、前記通常の動作モードよりもバンドルの機能を制限して動作するセーフモードとを備える情報処理装置であって、
ホストバンドルをインストールし、前記ホストバンドルの機能を拡張するために前記ホストバンドルに追加されるフラグメントバンドルを仮インストールとして無効化して第一のメモリ領域に格納するインストール手段と、
前記仮インストールされたフラグメントバンドルを、前記情報処理装置が前記セーフモードで起動した際に有効化するか無効化するかを定義したリストを保持する保持手段と
を有し、
前記インストール手段は、前記情報処理装置が前記セーフモードで起動した際に、前記仮インストールされたフラグメントバンドルのうち、前記リストに有効化することが定義されたフラグメントバンドルを有効化するために第二のメモリ領域へ移動させることを特徴とする情報処理装置。
【請求項２】
前記セーフモードにて起動した際に、前記リストに基づいて、フラグメントバンドルの有効化もしくは無効化の状態を切り替えた場合、当該フラグメントバンドルの切り替え前の状態を記録する記録手段を更に有し、
前記セーフモードの動作の後に、前記情報処理装置が前記通常の動作モードで起動した場合、前記インストール手段は、前記記録手段にて記録した切り替え前の状態にて、前記フラグメントバンドルを有効化もしくは無効化することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記フラグメントバンドルを有効化もしくは無効化する指示をユーザから受け付ける受け付け手段を更に有し、
前記セーフモードで動作している際に、前記受け付け手段にて前記フラグメントバンドルの有効化もしくは無効化する指示を受け付けた場合、前記インストール手段は、前記記録手段にて記録した状態に関わらず、前記情報処理装置が前記通常の動作モードで起動した際には、前記受け付け手段にて受け付けた指示の状態にて前記フラグメントバンドルを有効化もしくは無効化することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記リストにおいて、ユーザによって新たに追加されたフラグメントバンドルは、前記情報処理装置が前記セーフモードで起動した際には無効化するとして扱われることを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項５】
前記フラグメントバンドルに所定の形式のファイルが含まれているか否かを判定する判定手段を更に有し、
前記インストール手段は、前記情報処理装置が前記セーフモードで起動した際に、前記判定手段により前記所定の形式のファイルが含まれていると判定されたフラグメントバンドルは無効化し、前記判定手段により前記所定の形式のファイルが含まれていないと判定されたフラグメントバンドルは有効化することを特徴とする請求項１乃至３のいずれか一項に記載の情報処理装置。
【請求項６】
前記所定の形式のファイルは、処理が定義されたバイトコードを含むクラスファイルであることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記判定手段は、前記フラグメントバンドルがリソースファイルのみから構成されている場合には、前記所定の形式のファイルが含まれていないと判定することを特徴とする請求項５または６に記載の情報処理装置。
【請求項８】
前記インストール手段は、前記情報処理装置が前記セーフモードで起動した際に、前記リストに基づいてフラグメントバンドルを有効化した後、当該フラグメントバンドルが追加されているホストバンドルの開始に失敗した場合、当該フラグメントバンドルを前記第一のメモリ領域に移動して無効化した上で、再度、当該ホストバンドルを開始させることを特徴とする請求項１乃至７のいずれか一項に記載の情報処理装置。
【請求項９】
通常の動作モードと、前記通常の動作モードよりもバンドルの機能を制限して動作するセーフモードとを備える情報処理装置の制御方法であって、
ホストバンドルをインストールし、前記ホストバンドルの機能を拡張するために前記ホストバンドルに追加されるフラグメントバンドルを仮インストールとして無効化して第一のメモリ領域に格納するインストール工程を有し、
前記インストール工程において、前記情報処理装置が前記セーフモードで起動した際に、前記仮インストールされたフラグメントバンドルのうち、前記情報処理装置が前記セーフモードで起動した際に有効化するか無効化するかを定義したリストにて有効化することが定義されたフラグメントバンドルを有効化するために第二のメモリ領域へ移動させることを特徴とする情報処理装置の制御方法。
【請求項１０】
通常の動作モードと、前記通常の動作モードよりもバンドルの機能を制限して動作するセーフモードとを備えるコンピュータを、
ホストバンドルをインストールし、前記ホストバンドルの機能を拡張するために前記ホストバンドルに追加されるフラグメントバンドルを仮インストールとして無効化して第一のメモリ領域に格納するインストール手段、
前記仮インストールされたフラグメントバンドルを、前記コンピュータが前記セーフモードで起動した際に有効化するか無効化するかを定義したリストを保持する保持手段
として機能させ、
前記インストール手段は、前記コンピュータが前記セーフモードで起動した際に、前記仮インストールされたフラグメントバンドルのうち、前記リストに有効化することが定義されたフラグメントバンドルを有効化するために第二のメモリ領域へ移動させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびその制御方法、並びにプログラムに関する。
【背景技術】
【０００２】
近年、画像形成装置においては、Ｊａｖａ（登録商標）環境に代表されるようなアプリケーション（以降、「アプリ」）動作環境が提供されている。画像形成装置の機能やユーザビィリティの向上を図るために、Ｊａｖａ（登録商標）環境などの環境下で動作するアプリを作成し、画像形成装置にインストールすることで、所望の機能を実現できる。アプリプラットフォームとしては、組み込み機器向けのＪａｖａ（登録商標）アプリプラットフォームである、ＯＳＧｉ（Ｏｐｅｎ  Ｓｅｒｖｉｃｅｓ  Ｇａｔｅｗａｙ  Ｉｎｉｔｉａｔｉｖｅ）がある（非特許文献１）。ＯＳＧｉでは、ソフトウェアモジュールの管理単位としてバンドルを定義しており、インストール／開始／停止／更新／アンインストールからなるライフサイクルを管理するための仕様を定義している。
【０００３】
従来、パーソナルコンピュータ（ＰＣ）などで稼動するオペレーティングシステム（ＯＳ）では、アプリやドライバなどの設定の誤りによって、システム自体がクラッシュしたり、挙動が不安定になったりすることがある。例えば、同一のハードウェア資源を使用する複数のドライバがインストールされた場合、起動の際にハードウェア資源をドライバ同士で競合することにより、このような事態に陥る可能性がある。また、この状態を解消したくてもシステム自体が起動できずシステムを復旧出来ない事態に陥ることもある。
【０００４】
上記のような事態に陥るのを防ぐために、ＯＳは、通常の動作モード（以降、「通常モード」と呼ぶ）とは別に、必要最低限のドライバ、システムサービスなどで構成されたシステムを立ち上げるモード（以降、「セーフモード」と呼ぶ）を備えている。セーフモードで起動することにより、不具合を起こしているドライバを削除したり、ドライバやアプリの設定を変更したりでき、システムクラッシュや動作不安定の要因を回避できる。
【０００５】
一方、画像形成装置のような組込み機器においても、ユーザがアプリをインストールすることにより、アプリ間の資源の競合、サービスの登録や利用順序などが要因で、動作不安定な状態に陥る場合がある。その復旧手段として、セーフモードで起動する仕組みが提案されている（特許文献１）。しかしながら、ＯＳＧｉのバンドルの種類には、ホストバンドルとフラグメントバンドルという仕組みがあり、これらのアプリを取り扱う場合には、以下に述べるようなフラグメントバンドルの制限を考慮する必要がある。フラグメントバンドルとは、ホストバンドルのクラスローダ空間にバンドル自身を追加（アタッチ）する形式のバンドルである。フラグメントバンドルは単体で動作することはなく、ホストバンドルが開始状態となることで、フラグメントバンドルも開始状態にすることができる。また、フラグメントバンドルを停止状態にするためには、ホストバンドルを停止状態にする、あるいはフラグメントバンドルをアンインストールすることが必要となる。この仕様はＯＳＧｉの規約として求められており、開始状態にあるホストバンドルに対して、停止状態のフラグメントバンドルをインストールすることは出来ない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−００９５５３号公報
【非特許文献】
【０００７】
【非特許文献１】ＯＳＧｉ  Ａｌｌｉａｎｃｅ、２００５年１０月、“ＯＳＧｉ  Ｓｅｒｖｉｃｅ  Ｐｌａｔｆｏｒｍ  Ｒｅｌｅａｓｅ４”、［online］、［平成２６年１１月２７日検索］、インターネット＜ＵＲＬ：http://www.osgi.org/Download/Release4V40＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記のような仕様において、ホストバンドル自体に問題が無かったとしてもフラグメントバンドルに問題があった場合、ホストバンドルの開始に失敗し、正常にシステムを起動出来ず、システムが復旧出来ない事態に陥るという課題があった。例えば、システムにプレインストールされたセーフモード起動で開始するホストバンドルに対して、ユーザによって問題があるフラグメントバンドルがインストールされるようなケースが挙げられる。
【０００９】
上記のような課題を鑑み、本願発明は、問題のあるフラグメントバンドルがインストールされた場合でもセーフモードにて安全にシステムを起動できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために本願発明は以下の構成を有する。すなわち、通常の動作モードと、前記通常の動作モードよりもバンドルの機能を制限して動作するセーフモードとを備える情報処理装置であって、ホストバンドルをインストールし、前記ホストバンドルの機能を拡張するために前記ホストバンドルに追加されるフラグメントバンドルを仮インストールとして無効化して第一のメモリ領域に格納するインストール手段と、前記仮インストールされたフラグメントバンドルを、前記情報処理装置が前記セーフモードで起動した際に有効化するか無効化するかを定義したリストを保持する保持手段とを有し、前記インストール手段は、前記情報処理装置が前記セーフモードで起動した際に、前記仮インストールされたフラグメントバンドルのうち、前記リストに有効化することが定義されたフラグメントバンドルを有効化するために第二のメモリ領域へ移動させる。
【発明の効果】
【００１１】
本発明によれば、問題のあるフラグメントバンドルがインストールされていた場合でも、ユーザの利便性を低下させずに、セーフモード起動でシステムを安全に起動することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】画像形成装置のハードウェア構成例を示す図。
【図２】画像形成装置のソフトウェアモジュール階層図。
【図３】アプリのインストールする流れを示す図。
【図４】各バンドルの構成及び関係を説明するための図。
【図５】アプリ管理ｂａｓｅおよびインストール画面の構成例を示す図。
【図６】フラグメントバンドルの仮インストール状態を説明するための図。
【図７】フラグメントバンドルの有効化／無効化を説明するための図。
【図８】サービス起動順リストの構成例を示す図。
【図９】セーフモード起動時のホストバンドルの開始処理のフローチャート。
【図１０】第一の実施形態に係るサービス起動順リストの構成例を示す図。
【図１１】第一の実施形態に係るセーフモード起動時の処理のフローチャート。
【図１２】第一の実施形態に係るセーフモード起動時の処理を説明するためのシーケンス図。
【図１３】第二の実施形態に係るセーフモード有効無効管理ファイルの構成例を示す図。
【図１４】第二の実施形態に係るセーフモード起動時の処理のフローチャート。
【図１５】第二の実施形態に係る通常モード起動時の処理のフローチャート。
【図１６】第三の実施形態に係るマニフェストファイルの構成例を示す図。
【図１７】第三の実施形態に係るラグメントバンドルのファイルの構成例を示す図。
【図１８】第三の実施形態に係るセーフモード起動時の処理のフローチャート。
【図１９】第四の実施形態に係るセーフモード起動時の処理のフローチャート。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面を用いて説明する。まず、本明細書にて利用する用語の定義を行う。
【００１４】
「ホストバンドル」とは、フラグメントバンドルの追加対象となるバンドルである。なお、「バンドル」とは、Ｊａｖａ（登録商標）モジュールのことを指し、本明細書においては、アプリと同義であるとして用いる。
【００１５】
「フラグメントバンドル」とは、単独では動作せず、ホストバンドルのクラスローダ空間に自分自身を追加するバンドルである。
【００１６】
ホストバンドルへフラグメントバンドルを追加すること、つまりホストバンドルへアタッチすることを、「フラグメントバンドルのインストール」と呼ぶ。更にこの状態を「フラグメントバンドルが有効化されている」と呼ぶ。
【００１７】
ホストバンドルに追加状態にあるフラグメントバンドルを削除することを、「フラグメントバンドルのアンインストール」と呼ぶ。
【００１８】
ホストバンドルにアタッチされていない状態でフラグメントバンドルをインストールすることを、「フラグメントバンドルの仮インストール」と呼ぶ。更にこの状態を「フラグメントバンドルが無効化されている」と呼ぶ。
【００１９】
「一般アプリ」とは、システムにプレイントールされたバンドルではなく、ユーザによってインストールされたバンドルを指す。
【００２０】
「システムアプリ」とは、システムにプレイントールされたバンドルを指す。
【００２１】
＜第一の実施形態＞
図１〜図７を用いて、以下に示す各実施形態に共通のフラグメントバンドルのインストール、有効化／無効化について説明する。また、図８、図９を用いて、セーフモードの基本形であるホストバンドルの開始について説明する。
【００２２】
［システム構成］
図１は、情報処理装置としての画像形成装置１３０のハードウェア構成例を示す図である。画像形成装置１３０は、印刷機能やスキャン機能、ネットワーク通信機能などを備える。コントローラ１００は、画像形成装置１３０のコントローラである。コントローラ１００は、スキャナ部１１３やプリンタ部１１４と電気的に接続され、一方でＬＡＮ１１６を介して外部機器と接続される。ＣＰＵ１０１は、ＲＯＭ１０２に記憶された制御プログラム等に基づいて接続中の各種ハードウェアとのアクセスを統括的に制御する。また、ＣＰＵ１０１は、コントローラ１００内部で行われる各種処理についても統括的に制御する。
【００２３】
ＲＯＭ１０２は、読み出し専用の不揮発記憶領域であり、画像形成装置１３０のブートプログラムなどを格納する。ＲＡＭ１０３は、ＣＰＵ１０１が動作するためのシステムワークメモリであり、各種データを一時記憶するためのメモリである。ＲＡＭ１０３は、記憶した内容を電源ｏｆｆ後も保持可能なＦＲＡＭおよびＳＲＡＭ、電源ｏｆｆ後に記憶内容が消去されるＤＲＡＭなどにより構成される。ＨＤＤ１０４は、不揮発記憶領域であり、システムアプリなどを格納する。図３で説明するインストールするアプリを含むファームウェアは、ＨＤＤ１０４に格納される。
【００２４】
操作部Ｉ／Ｆ１０５は、システムバス１１９と操作部１１８を接続するインタフェース部である。具体的には、操作部Ｉ／Ｆ１０５は、操作部１１８に表示するデータをシステムバス１１９から受け取って表示すると共に、操作部１１８からの入力情報をシステムバス１１９へ出力する。画像形成装置１３０に対するユーザの指示や情報提示は、操作部１１８を介して行われる。ネットワークＩ／Ｆ１０６は、ＬＡＮ１１６、ＷＡＮ１１７、及びシステムバス１１９に接続し、外部との情報の入出力を行う。スキャナＩ／Ｆ１０８は、スキャナ部１１３から受け取った画像データに対して、補正、加工、及び編集を行う。
【００２５】
画像形成部１０９は、画像データの方向変換、画像圧縮、伸張部などを行う。プリンタＩ／Ｆ１１０は、画像形成部１０９から送られた画像データを受け取り、印刷動作を行うプリンタ部１１４に出力する。ＵＳＢインタフェース１２０は、種々の周辺機器を画像形成装置１３０に接続する汎用インタフェースであり、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  ｂｕｓ）への接続制御を行う。ここでは、ＵＳＢインタフェース１２０には、フラッシュメモリ１２１が接続される。
【００２６】
図２は、画像形成装置１３０のソフトウェアモジュール階層２００の概念図である。なお、図２以降に示す各ソフトウェアはＲＯＭ１０２、もしくは、ＨＤＤ１０４に保存され、ＣＰＵ１０１にて実行される。また、実行時に使用する各種情報は、ＲＡＭ１０３もしくはＨＤＤ１０４に保持され、ソフトウェアによる機能間での各種情報のやりとりが行われる。さらに、外部機器との通信は、ネットワークＩ／Ｆ１０６を用いて行われる。
【００２７】
次に各ソフトウェアの説明をする。画像形成装置１３０は、ＯＳプラットフォーム２０１を有し、ＯＳプラットフォーム２０１上にソフトウェアプラットフォーム２０２が構成されている。ソフトウェアプラットフォーム２０２は、Ｊａｖａ（登録商標）の仮想マシンであるＪａｖａＶＭ２０３のランタイム環境として構成され、インタプリタとしてのＪａｖａＶＭ２０３、フレームワーク群２０４、およびライブラリ２０５を備えて構成される。ライブラリ２０５は、標準のＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）ライブラリを含んで構成される。フレームワーク群２０４は、ＯＳＧｉ２０６を含んで構成される。ＯＳＧｉ２０６は、単一のＪａｖａＶＭ２０３上に複数のアプリを動作させる。更に、ＯＳＧｉ拡張部２１１は、ＯＳＧｉ２０６に対し必要に応じて機能を拡張可能であることを示す。ＯＳＧｉ２０６は、アプリのライフサイクルの管理やアプリ間通信機能などを提供する。ＯＳＧｉ２０６上には、複数のシステムサービスがプリインストールされている。システムサービスとしては、複数のアプリ群を管理し、新たなアプリの追加、更新、削除をするためのアプリ管理サービス２０８がある。アプリ管理サービス２０８は、インストール制御サービス２０７を利用して、アプリの追加、更新、削除を行う。画像形成装置１３０の起動時に、ＯＳＧｉ２０６は、ＨＤＤ１０４に保存されたサービス起動順リストに従い、ログインアプリ２０９、インストール制御サービス２０７、およびアプリ管理サービス２０８などのサービスを順次起動していく。本願発明に係るサービス起動順リストについては後述する。
【００２８】
ログインアプリ２０９は、ログインユーザを管理する。ログインアプリ２０９は、ログイン中に任意のアプリから任意のタイミングでログイン情報の問い合わせの可能性を考慮して、停止できない特性を有する。仮にログインアプリ２０９が停止していた場合、ログイン情報の取得ができなくなるため、例えば、ログイン情報に関連付けられたデータを利用するアプリがあった場合、データの取得に失敗し、その動作に支障が生じる。ここで、ログイン情報とは、現在、画像形成装置１３０にログインしているユーザのログイン名やメールアドレスなどの情報を指す。ログインアプリ２０９は、上記のような特性を持つため、画像形成装置１３０が起動中において、少なくとも１つが動作する。
【００２９】
一般アプリ２１０は、画像形成装置１３０において各種機能をユーザに提供する。一般アプリ２１０の例としては、画像の加工や圧縮アプリ、印刷制限などの部門管理を行うアプリなどがある。一般アプリ２１０は、アプリ管理サービス２０８の管理下で動作する。アプリ管理サービス２０８は、管理対象として追加されたアプリのバージョン情報を含むアプリ情報や、ライセンス情報などを保持する。さらに、アプリ管理サービス２０８は、画像形成装置１３０内のアプリのアンインストール指示に応答し、一般アプリ２１０を管理対象から外す。一般アプリ２１０、およびログインアプリ２０９は、図４で述べるようなホストバンドルとフラグメントバンドルという形態で、提供することが可能である。
【００３０】
図３は、ユーザが、ＰＣ３００から画像形成装置１３０へ、アプリをインストールする際の流れを示す図である。
【００３１】
図５のインストール画面５３０で示すＷＥＢページで構成されたアプリのインストールＵＩ３０１がＰＣ３００のＷＥＢブラウザ（不図示）に表示される。ユーザは、インストールＵＩ３０１からインストールしたいアプリを指定し、インストールの指示を行う。アプリ管理サービス２０８は、インストールＵＩ３０１で指定されたアプリのインストール指示を受信し、それをインストール制御サービス２０７に渡す。インストール制御サービス２０７は、受け付けた指示に基づき、アプリファイルを取得し、ＯＳＧｉ２０６にインストールを依頼する。ＯＳＧｉ２０６は、取得したアプリファイルを用いて、アプリのインストールを行う。インストールされたアプリは、アプリ管理サービス２０８によって管理される。
【００３２】
図４は、各バンドルの構成及び関係を説明するための図である。ここでは、ホストバンドル４００に対して、２つの言語ローカライズリソース（ＪＰ、ＣＮ）を有するフラグメントバンドル４０１、４０２をインストールする例を示している。ホストバンドルにフラグメントバンドルをインストールするためには、ＯＳＧｉ２０６の規約上、以下のマニフェストファイル、及びバンドルパーミッションの指定が必要となる。
・ホストバンドルのマニフェストファイル４０３
Ｂｕｎｄｌｅ−ＭａｎｉｆｅｓｔＶｅｒｓｉｏｎに“２”を指定
Ｂｕｎｄｌｅ−ＳｙｍｂｏｌｉｃＮａｍｅには、フレームワーク内で一意な名前を付与
・フラグメントバンドルのマニフェストファイル４０５
Ｂｕｎｄｌｅ−ＭａｎｉｆｅｓｔＶｅｒｓｉｏｎに“２”を指定
Ｆｒａｇｍｅｎｔ−Ｈｏｓｔには、ホストバンドルのマニフェストファイル４０３に記載された＜ホストのバンドルシンボリック名＞を指定する。本値が一致することでホストバンドルとフラグメントバンドルが同一アプリの構成要素であることを示す。
・ホストバンドルのパーミッション４０４
ＢｕｎｄｌｅＰｅｒｍｉｓｓｉｏｎ  ［バンドルシンボリック名，ＨＯＳＴ］
・フラグメントバンドルのパーミッション４０６
ＢｕｎｄｌｅＰｅｒｍｉｓｓｉｏｎ  ［バンドルシンボリック名，ＦＲＡＧＭＥＮＴ］
【００３３】
上記条件を満たす状態で、フラグメントバンドルをインストールすると、ＯＳＧｉ２０６がフラグメントバンドルのマニフェスト情報に基づいて、対応するホストバンドルを特定し、ホストバンドルのクラスパスにフラグメントバンドルのクラスパスの追加を行う。「クラスパス」とは、Ｊａｖａアプリ実行する際に、ＪａｖａＶＭ２０３がどの場所からクラスファイルを読み込めばよいかを、指定するための情報である。クラスファイルは、ＪａｖａＶＭ２０３上で実行可能なＪａｖａバイトコードを含む。更に、ホストバンドルのクラスローダ（不図示）によって、フラグメントバンドル内の全てのクラスとリソースがロードされる。「クラスローダ」とは、クラスのロードやリソースの検索を担当するオブジェクトであり、全てのクラスはクラスローダによってＪａｖａＶＭ２０３にロードされ、アプリから利用可能となる。このホストバンドルのクラスローダによるロードの実行は、ホストバンドル起動時に行われるため、必ずホストバンドルを一度停止し、クラスパスを追加した上でロードする必要がある。よって、ホストバンドルが停止していない場合は、フラグメントバンドルのインストールに失敗する。フラグメントバンドルがインストールされた後は、ホストバンドルの一部として利用可能となる。
【００３４】
本例では、フラグメントバンドル４０１、４０２として日本語リソース、中国語リソースが本体であるホストバンドル４００にインストールされ、その後、ホストバンドル４００は、これらの言語リソースを利用して、ＵＩ表示の言語切り替えが可能となる。つまり、ホストバンドル４００のＵＩ上の標準の表示は英語であるが、新たな言語リソースをインストールし、ＵＩ上でリソース切替え指定をすることで、日本語や中国語を表示するようにホストバンドル４００の機能を拡張することができる。
【００３５】
ホストバンドルがログインアプリの場合の例を挙げる。この場合、ホストバンドルが認証に関する基本的な処理を担い、フラグメントバンドルが、例えばＩＣカードがかざされた際にそのＩＣカードが保持する情報によりログインするといったＵＩの機能を補う、といった構成が可能となる。
【００３６】
［アプリ管理］
図５〜図７を用いて、アプリ管理サービス２０８が提供するアプリ管理画面における、ホストバンドル、およびフラグメントバンドルの管理方法について説明する。また、フラグメントバンドルの仮インストールとフラグメントバンドルの有効化／無効化について説明する。
【００３７】
図５は、アプリ管理サービス２０８における、一般アプリの管理画面５００とインストール画面５３０の構成例を示す図である。ここでは、一般アプリの管理画面で説明するが、ログインアプリの管理画面についても同様の画面とする。
【００３８】
まず、一般アプリの管理画面５００について説明する。アプリケーション名５０１は、管理されている一般アプリ名を表示する。図５に示す例の場合、アプリケーションＡ５０５とアプリケーションＢ５０６の２つが管理されている。更に、アプリケーションＡ５０５をホストバンドルとして、フラグメントバンドルＡ５０７、およびフラグメントバンドルＢ５０８が管理されている。また、各フラグメントバンドルが関連付けられているホストバンドルが分かるように表示される。ここでは、フラグメントバンドルＡ５０７およびフラグメントバンドルＢ５０８がアプリケーションＡ５０５と関連付けて表示されている。
【００３９】
インストール日５０２は、各アプリがインストールされた日付を示す。アプリケーションＩＤ５０３は、各アプリに一意に割り振られたアプリケーションＩＤ（識別情報）を表示する。状態５０４は、各アプリの状態を示す。アプリが開始状態であれば「開始」、停止状態であれば「停止」と表示する。また、対象がフラグメントバンドルの場合に、状態５０４では、フラグメントバンドルがホストバンドルにインストールされている場合は「有効」と表示し、図６で示す仮インストール状態の場合は「無効」と表示する。開始ボタン５１６、停止ボタン５１３は、アプリの開始／停止を切り替える指示ボタンである。開始状態のアプリに対しては停止ボタンが表示され、停止状態のアプリに対しては開始ボタンが表示される。有効化ボタン５１５、無効化ボタン５１４は、フラグメントバンドルの有効／無効を切り替える指示ボタンである。開始状態のアプリ（本例では、「アプリケーションＡ５０５」）の停止ボタン５１３が押下されると、その状態５０４は「停止」に変更される。一方、停止状態のアプリ（本例では、「アプリケーションＢ５０６」）の開始ボタン５１６が押下されると、その状態５０４は「開始」に変更される。有効状態のアプリ（本例では、「フラグメントバンドルＡ５０７」）の無効化ボタン５１４が押下されると、その状態５０４は「無効」に変更される。一方、無効状態のアプリ（本例では、「フラグメントバンドルＢ５０８」）の有効化ボタン５１５が押下されると、その状態５０４は「有効」に変更される。
【００４０】
アンインストールボタン５１７〜５２０は、各アプリをアンインストールするための指示ボタンである。フラグメントバンドルのアンインストールはフラグメントバンドルのみがアンインストール対象となる。例えば、フラグメントバンドルＡ５０７のアンインストールボタン５１８が押下された場合、フラグメントバンドルＡ５０７だけがアンインストールされる。一方、ホストバンドルであるアプリケーションＡ５０５のアンインストールボタン５１７が押下された場合、アプリケーションＡ５０５に加え、関連付けられたフラグメントバンドルＡ５０７とフラグメントバンドルＢ５０８も同時にアンインストールされる。
【００４１】
次に、インストール画面５３０について説明する。参照ボタン５３３が押下されると、ファイルパスを選択する画面（不図示）が表示される。その選択画面でアプリファイルが指定されると、アプリケーションファイルのパス５３１にアプリファイルへのパスが入力される。アプリは、セキュリティやビジネス上の観点からインストール処理において、アプリを復号するためのライセンスファイルが必要となる場合がある。その場合に、参照ボタン５３４が押下されると、ファイルパスを選択する画面（不図示）が表示される。その選択画面でライセンスファイルが指定されると、ライセンスファイルのパス５３２にライセンスファイルへのパスが入力される。インストールボタン５３５が押下されると、アプリケーションファイルのパス５３１で指定したアプリのインストールが開始される。フラグメントバンドルがインストールに指定された場合、フラグメントバンドルは、一旦、仮インストールされる。
【００４２】
図６は、フラグメントバンドルの仮インストール状態を説明するための図である。ホストバンドルである一般アプリＡ６００に、フラグメントバンドルであるフラグメントバンドルＸ６０１を仮インストールする場合を示す。
【００４３】
インストール制御サービス２０７は、同時に指定されたライセンスファイルを用いてフラグメントバンドルＸ６０１を復号化し、インストール作業フォルダ６０２に配置する。その後、インストール制御サービス２０７は、復号化されたフラグメントバンドルＸ６０５のマニフェストファイルに記載されているホストバンドル情報に基づき、関連付けられるホストバンドルが一般アプリＡ６００であることを特定する。その上で、インストール制御サービス２０７は、フラグメントバンドルＸ６０６をメモリ領域である仮インストールフォルダ６０４に配置する。仮インストールフォルダ６０４に配置されているフラグメントバンドルは、仮インストール状態であり、ＯＳＧｉ２０６の管理下にはない。また６０７で示すように、ホストバンドルである一般アプリＡ６００のユニークなアプリＩＤをフォルダ名とするフォルダの配下に、フラグメントバンドルＸ６０６を配置する。
【００４４】
図７は、図６で仮インストールされたフラグメントバンドルＸ６０６の有効化／無効化を説明するための図である。ユーザの有効化指示７０１により、インストール制御サービス２０７は、無効状態で仮インストールされているフラグメントバンドルＸ６０６の有効化処理を行う。インストール制御サービス２０７は、フラグメントバンドルＸ６０６を有効化、つまりホストバンドル（ここでは、一般アプリＡ６００）にインストールすることにより、メモリ領域であるアプリフォルダ６０３に移動させてインストールする。この状態では、ＯＳＧｉ２０６の管理下にあり、一般アプリＡ６００とフラグメントバンドルＸ６０６の関連性をＯＳＧｉ２０６が保持している。なお、フラグメントバンドルＸ６０６が有効化された後は、フラグメントバンドルＸ６０６は、一般アプリＡ６００の一部として利用可能となる。この状態では、一般アプリＡ６００を開始することによりフラグメントバンドルＸ６０６も開始している状態となる。
【００４５】
一方、ユーザの無効化指示７０２により、インストール制御サービス２０７は、有効状態でインストールされているフラグメントバンドルＸ７００の無効化処理を行う。無効化処理により、フラグメントバンドルＸ７００は、再び仮インストールフォルダ６０４に移動させることで、無効状態として配置される。この状態では、ＯＳＧｉ２０６の管理下にないため、一般アプリＡ６００とフラグメントバンドルＸ６０６の関連性をＯＳＧｉ拡張部２１１が保持している。なお、フラグメントバンドルＸ７００が無効化された後は、フラグメントバンドルＸ７００は、一般アプリＡ６００の一部としての利用が不可となる。つまり、この状態になると、一般アプリＡ６００を開始したとしても、フラグメントバンドルＸ６０６は停止している状態となる。なお、本明細書において、便宜上、仮インストールフォルダ６０４を「第一のメモリ領域」と称し、アプリフォルダ６０３を「第二のメモリ領域」とも記載する。
【００４６】
図８は、サービス起動順リスト８００の内容例を示す。項目８０１は、アプリを特定するための名称である。なお、名称の代わりに、アプリを一意に特定するためのユニークなアプリＩＤ（識別情報）などを指定してもよい。項目８０２は、アプリの初期状態が開始／停止を指定する設定である。開始／停止については、ホストバンドルが対象となる。項目８０３は、アプリのスタートレベルを示し、この数値の若い順番にＯＳＧｉ２０６は、ファームに配置されたバンドルをインストールし、項目８０２の設定に従った初期状態へと制御する。項目８０４は、セーフモード起動時のアプリの状態を開始／停止で指定する設定であり、“ｏｎ”が指定された場合はアプリは開始され、“ｏｆｆ”が指定された場合はアプリは停止される。開始／停止については、ホストバンドルが対象となり、フラグメントバンドルは指定の対象外である。また、ユーザがインストールする一般アプリは、セーフモード起動時の設定が“ｏｆｆ”として扱われる。
【００４７】
図９は、セーフモード起動において、ホストバンドルを開始する処理を説明するためのフローチャートである。本処理は、ＣＰＵ１０１がＨＤＤ１０４等に格納されたプログラムを読み出して実行することにより実現される。
【００４８】
セーフモード起動処理が開始すると、Ｓ９０１にて、ＯＳＧｉ２０６は、サービス起動順リスト８００を読み込み、リストの先頭行から順に処理を開始する。Ｓ９０２にて、ＯＳＧｉ２０６は、バンドルの種類を取得する。Ｓ９０３にて、ＯＳＧｉ２０６は、Ｓ９０２で取得したバンドルの種類がフラグメントバンドルに該当するか否かを確認する。フラグメントバンドルに該当する場合は（Ｓ９０３にてＹＥＳ）Ｓ９０６へ進み、フラグメントバンドルに該当しない場合、すなわちホストバンドルである場合は（Ｓ９０３にてＮＯ）Ｓ９０３に進む。Ｓ９０４にて、ＯＳＧｉ拡張部２１１は、着目しているバンドルの項目８０４が“ｏｎ”であるか否か（すなわち、ｓａｆｅｍｏｄｅ＝ｏｎか否か）を確認する。ｓａｆｅｍｏｄｅ＝ｏｆｆの場合は（Ｓ９０４にてＮＯ）Ｓ９０６へ進み、ｓａｆｅｍｏｄｅ＝ｏｎの場合は（Ｓ９０４にてＹＥＳ）Ｓ９０５に進む。Ｓ９０５にて、ＯＳＧｉ２０６は、対象のバンドル（つまり、ホストバンドル）を開始する。Ｓ９０６にて、ＯＳＧｉ２０６は、リストの最終行であるか否かを確認する。最終行でない場合は（Ｓ９０６にてＮＯ）、Ｓ９０２に戻り、次の行（次のバンドル）を処理対象として処理を繰り返す。サービス起動順リストの全てのバンドルに対して処理が完了した場合（Ｓ９０６にてＹＥＳ）、セーフモード起動の処理を終了する。
【００４９】
以上、ホストバンドルを対象としたセーフモード起動について説明した。次にフラグメントバンドルを含んだセーフモード起動における実施形態を示す。
【００５０】
図１０は、サービス起動順リスト１０００の内容例を示す。サービス起動順リスト１０００の中の項目１００１〜１００４は、図８で示した項目８０１〜８０４と同じであるため説明を省略する。項目１００５は、フラグメントバンドルを特定するための名称である。なお、名称の代わりに、フラグメントバンドルを一意に特定するためのユニークなアプリＩＤなどを指定してもよい。項目１００６は、フラグメントバンドルの初期状態を有効／無効で指定する設定である。項目１００７は、セーフモード起動時のフラグメントバンドルの状態を有効／無効で指定する設定であり、“ｏｎ”が指定された場合はフラグメントバンドルは有効化され、“ｏｆｆ”が指定された場合はフラグメントバンドルは無効化される。また、ユーザがインストールする一般アプリは、セーフモード起動時の設定が“ｏｆｆ”として扱われる。
【００５１】
図１１は、ホストバンドルとフラグメントバンドルを含むセーフモード起動時の処理を説明するためのフローチャートである。
【００５２】
セーフモード起動処理が開始すると、Ｓ１１０１にて、ＯＳＧｉ２０６は、サービス起動順リスト１０００を読み込み、リストの先頭行から処理を開始する。Ｓ１１０２にて、ＯＳＧｉ拡張部２１１は、バンドルの種類を取得する。Ｓ１１０３にて、ＯＳＧｉ拡張部２１１は、Ｓ１１０２で取得したバンドルの種類がフラグメントバンドルに該当するか否かを確認する。フラグメントバンドルに該当しない場合は（Ｓ１１０３にてＮＯ）Ｓ１１１０へ進み、フラグメントバンドルに該当する場合は（Ｓ１１０３にてＹＥＳ）Ｓ１１０４に進む。
【００５３】
Ｓ１１０４にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルの有効化／無効化状態を取得する。Ｓ１１０５にて、ＯＳＧｉ拡張部２１１は、項目１００７が“ｏｎ”であるか否か（すなわち、ｓａｆｅｍｏｄｅ＝ｏｎか否か）を確認する。ｓａｆｅｍｏｄｅ＝ｏｆｆの場合は（Ｓ１１０５にてＮＯ）Ｓ１１０６に進み、ｓａｆｅｍｏｄｅ＝ｏｎの場合は（Ｓ１１０５にてＹＥＳ）Ｓ１１０８に進む。Ｓ１１０６にて、ＯＳＧｉ拡張部２１１は、Ｓ１１０４で取得したフラグメントバンドルの状態が有効化されているか否かを確認する。具体的には、フラグメントバンドルが仮インストールフォルダ６０４に格納されている場合には無効化されていると判定され、フラグメントバンドルがアプリフォルダ６０３に格納されている場合には無効化されていると判定される。有効化されていない場合は（Ｓ１１０６にてＮＯ）Ｓ１１１０へ進み、有効化されている場合は（Ｓ１１０６にてＹＥＳ）Ｓ１１０７へ進む。Ｓ１１０７にて、ＯＳＧｉ拡張部２１１は、無効化処理を行う。その後、Ｓ１１１０へ進む。
【００５４】
Ｓ１１０８にて、ＯＳＧｉ拡張部２１１は、Ｓ１１０４で取得したフラグメントバンドルの状態が無効化されているか否かを確認する。無効化されていない場合は（Ｓ１１０８にてＮＯ）Ｓ１１１０へ進み、無効化されている場合は（Ｓ１１０８にてＹＥＳ）Ｓ１１０９へ進む。Ｓ１１０９にて、ＯＳＧｉ拡張部２１１は、有効化処理を行う。その後、Ｓ１１１０へ進む。
【００５５】
Ｓ１１１０にて、ＯＳＧｉ拡張部２１１は、リストの最終行であるか否かを確認する。最終行でない場合は（Ｓ１１１０にてＮＯ）、Ｓ１１０２に戻り、次の行（次のバンドル）を処理対象として処理を繰り返す。サービス起動順リストの全てのバンドルに対して処理が完了した場合（Ｓ１１１０にてＹＥＳ）、Ｓ１１１１に進む。Ｓ１１１１の処理については、図９で示したＳ９０１〜Ｓ９０６までと同じ説明であるため説明を省略する。そして、セーフモード起動の処理を終了する。
【００５６】
図１２は、画像形成装置１３０をセーフモードで起動した場合の、フラグメントバンドルを仮インストールするまでの各サービスの処理の流れ、および、データの流れを示す図である。
【００５７】
Ｓ１２００にて、ユーザ１２５０がセーフモード起動で画像形成装置１３０の電源をＯＮすると、Ｓ１２０１のセーフモード起動処理が開始する。Ｓ１２０２にて、画像形成装置１３０は、ＯＳＧｉ２０６のフレームワーク起動処理を呼び出す。Ｓ１２０３にて、ＯＳＧｉ拡張部２１１は、サービス起動順リスト１０００を読み込む。Ｓ１２０４にて、ＯＳＧｉ拡張部２１１は、バンドルの種類を取得する。バンドルの種類がフラグメントバンドルの場合、Ｓ１２０５にて、ＯＳＧｉ拡張部２１１は、バンドルの状態の情報を取得する。項目１００７が“ｏｎ”で、かつ、フラグメントバンドルの状態が無効化状態である場合は、Ｓ１２０６にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルのインストールを行う。Ｓ１２０７にて、ＯＳＧｉ拡張部２１１は、仮インストールフォルダ６０４に配置されたアプリファイル１２５１をアプリフォルダ６０３にアプリファイル１２５２としてコピーする。Ｓ１２０８にて、ＯＳＧｉ拡張部２１１は、仮インストールフォルダ６０４に配置されたアプリファイル１２５１を削除する。以上の流れにより、無効化状態のフラグメントバンドルは有効化状態になる。
【００５８】
一方、項目１００７が“ｏｆｆ”で、かつ、フラグメントバンドルの状態が有効化状態である場合は、Ｓ１２０９にて、ＯＳＧｉ拡張部２１１は、ファイル退避指示を行う。Ｓ１２１０にて、ＯＳＧｉ拡張部２１１は、アプリフォルダ６０３に配置されたアプリファイル１２５３を、アプリファイル１２５４として仮インストールフォルダ６０４にコピーする。Ｓ１２１１にて、ＯＳＧｉ２０６は、アンインストール処理を行い、アプリフォルダ６０３に配置されたアプリファイル１２５３を削除する。以上の流れにより、有効化状態のフラグメントバンドルは無効化状態になる。
【００５９】
以上、本実施形態により、セーフモード起動時において、問題を含む可能性のあるフラグメントバンドルを無効化することで、システムを安全に起動するとともに、必要なフラグメントバンドルを有効化することで利便性を高めることが可能となる。
【００６０】
＜第二の実施形態＞
本実施形態では、セーフモード起動時にフラグメントバンドルを無効化あるいは有効化した後、再度、通常の動作モード（通常モード）で画像形成装置を起動した場合を考える。セーフモード起動時にフラグメントバンドルを利用できなくした場合、システムによって利用を止められたフラグメントバンドルは、次回の通常モード起動時においても利用できなくなるという課題がある。これに対し、例えば、ユーザがインストールして利用を開始したフラグメントバンドルがセーフモード起動時に利用を止められた場合でも、次回通常モード起動時には利用を再開したいという要望があると考えられる。
【００６１】
図１３は、本実施形態に係るセーフモード有効無効管理ファイル１３００の内容例を示す。項目１３０１は、フラグメントバンドルを特定するための名称である。なお、名称の代わりに、アプリを一意に特定するためのユニークなアプリＩＤを指定してもよい。項目１３０２は、フラグメントバンドルの元の状態（セーフモード起動前の状態）を記録するものであり、“ｅｆｆｅｃｔｉｖｅ”は元の状態が有効状態であったことを示し、“ｉｎｖａｌｉｄ”は元の状態が無効状態であったことを示す。上記のセーフモード起動時に記録した内容に基づいて、次回通常モード起動時に、フラグメントバンドルをどの状態に戻せばよいかについて判定を行う。
【００６２】
なお、セーフモード起動中に、管理画面５００上でフラグメントバンドルの有効化ボタン５１５／無効化ボタン５１４が押下された場合には、ＯＳＧｉ拡張部２１１は、セーフモード有効無効管理ファイルから操作対象のフラグメントバンドルの情報を削除する。これは、セーフモード起動中に行われたユーザ操作を優先するために行うものである。また、管理画面５００上でアンインストールボタン５１８、５１９が押下された場合も、ＯＳＧｉ拡張部２１１は、セーフモード有効無効管理ファイル１３００から操作対象のフラグメントバンドルの情報を削除する。更に、ホストバンドルのアンインストールボタン５１７、５２０が押下された場合も同様である。言い換えると、セーフモード有効無効管理ファイル１３００から情報が削除されることにより、次回の通常モードでの起動時には、サービス起動順リスト１０００にて指定された状態で各バンドルは起動されることとなる。
【００６３】
［処理フロー］
図１４は、本実施形態に係るセーフモード起動時の処理のフローチャートである。なお、Ｓ１４０１〜１４０７、Ｓ１４０９〜１４１０、およびＳ１４１２〜１４１３の処理それぞれについては、第一実施形態の図１１で示したＳ１１０１〜１１０７、Ｓ１１０８〜１１１１と同じであるため、説明は省略する。つまり、ここでは、Ｓ１４０８、Ｓ１４１１の処理が新たに追加されている。
【００６４】
Ｓ１４０８にて、ＯＳＧｉ拡張部２１１は、セーフモード有効無効管理ファイル１３００に無効化したフラグメントバンドルの名称、および元の状態を示す“ｅｆｆｅｃｔｉｖｅ”を記録する。
【００６５】
一方、Ｓ１４１１にて、ＯＳＧｉ拡張部２１１は、セーフモード有効無効管理ファイル１３００に有効化したフラグメントバンドルの名称、および元の状態を示す“ｉｎｖａｌｉｄ”を記録する。
【００６６】
図１５は、本実施形態に係る通常モード起動時の処理のフローチャートである。
【００６７】
通常モード起動処理が開始すると、Ｓ１５０１にて、ＯＳＧｉ拡張部２１１は、セーフモード有効無効管理ファイル１３００を読み込み、リストの先頭行から処理を開始する。Ｓ１５０２にて、ＯＳＧｉ拡張部２１１は、項目１３０１に該当するフラグメントバンドルの有効化／無効化状態を取得する。Ｓ１５０３にて、ＯＳＧｉ拡張部２１１は、項目１３０２の値を確認し、“ｉｎｖａｌｉｄ”か否かを判定する。ｏｒｉｇｉｎａｌ＿ｓｔａｔｕｓ＝ｉｎｖａｌｉｄの場合は（Ｓ１５０３にてＹＥＳ）Ｓ１５０４に進み、ｏｒｉｇｉｎａｌ＿ｓｔａｔｕｓ＝ｅｆｆｅｃｔｉｖｅの場合は（Ｓ１５０３にてＮＯ）Ｓ１５０６に進む。
【００６８】
Ｓ１５０４にて、ＯＳＧｉ拡張部２１１は、Ｓ１５０２で取得したフラグメントバンドルの状態が有効化されているか否かを確認する。フラグメントバンドルが有効化されていない場合は（Ｓ１５０４にてＮＯ）Ｓ１５０８へ進み、フラグメントバンドルが有効化されている場合は（Ｓ１５０４にてＹＥＳ）Ｓ１５０５に進む。Ｓ１５０５にて、ＯＳＧｉ拡張部２１１は、無効化処理を行う。その後、Ｓ１５０８へ進む。
【００６９】
Ｓ１５０６にて、ＯＳＧｉ拡張部２１１は、Ｓ１５０２で取得したフラグメントバンドルの状態が無効化されているか否かを確認する。フラグメントバンドルが無効化されていない場合は（Ｓ１５０６にてＮＯ）Ｓ１５０８へ進み、無効化されている場合は（Ｓ１５０６にてＹＥＳ）Ｓ１５０７へ進む。Ｓ１５０７にて、ＯＳＧｉ拡張部２１１は、有効化処理を行う。その後、Ｓ１５０８へ進む。
【００７０】
Ｓ１５０８にて、ＯＳＧｉ拡張部２１１は、リストの最終行であるか否かを確認する。最終行でない場合は（Ｓ１５０８にてＮＯ）、Ｓ１５０２に戻り、セーフモード有効無効管理ファイル１３００の次の行を処理対象として処理を繰り返す。セーフモード有効無効管理ファイル１３００の全てのフラグメントバンドルに対して処理が完了した場合（Ｓ１５０８にてＹＥＳ）、Ｓ１５０９へ進む。
【００７１】
Ｓ１５０９にて、ＯＳＧｉ拡張部２１１は、セーフモード有効無効管理ファイル１３００を削除する。Ｓ１５１０にて、ＯＳＧｉ２０６は、サービス起動順リスト１０００を読み込み、リストの先頭行から処理を開始する。Ｓ１５１１にて、ＯＳＧｉ２０６は、バンドルの種類を取得する。Ｓ１５１２にて、ＯＳＧｉ２０６は、Ｓ１５１１で取得したバンドルの種類がフラグメントバンドルに該当するか否かを確認する。フラグメントバンドルに該当する場合は（Ｓ１５１２にてＹＥＳ）Ｓ１５１４へ進み、フラグメントバンドルに該当しない場合は（Ｓ１５１２にてＮＯ）Ｓ１５１３へ進む。Ｓ１５１３にて、ＯＳＧｉ２０６は、バンドルを開始する。Ｓ１５１４にて、ＯＳＧｉ２０６は、リストの最終行であるか否かを確認する。最終行でない場合は（Ｓ１５１４にてＮＯ）、Ｓ１５１１に戻り、サービス起動順リスト１０００の次の行を処理対象として処理を繰り返す。最終行である場合、すなわち、サービス起動順リスト１０００の全てのバンドルに対して処理が完了した場合（Ｓ１５１４にてＹＥＳ）、通常モード起動の処理を終了する。
【００７２】
以上、本実施形態により、セーフモード起動時にフラグメントバンドルを無効化あるいは有効化したとしても、その後、通常モードで起動した際にはセーフモード起動前の状態に戻すことが可能となる。
【００７３】
＜第三の実施形態＞
本実施形態では、ユーザによってインストールされたフラグメントバンドルを、セーフモード起動時に有効化する場合について考える。セーフモード起動において、ユーザがインストールしたフラグメントバンドルを全て無効化した場合、有効化したいフラグメントバンドルがあった場合でも利用出来なくなるため、使い勝手が低下するという課題がある。例えば、セーフモード起動で開始するシステムアプリであるホストバンドルに対して、ユーザインターフェースの表示言語をローカライズするフラグメントバンドルが無効化された場合、ユーザの操作性が低下することが考えられる。
【００７４】
図１６は、本実施形態に係るアプリのマニフェストファイル１６００の内容例を示す。項目１６０１は、ユーザがインストールするフラグメントバンドルについて、セーフモード起動時の状態を有効／無効で指定する設定である。有効化する場合は“ｏｎ”、無効化する場合は“ｏｆｆ”を指定する。項目１６０１を省略した場合は、“ｏｆｆ”が指定されたものとして扱う。また、システムアプリについて項目１６０１が指定されていたとしても、サービス起動順リスト８００の項目８０４の指定が“ｏｎ”であれば、項目８０４の指定を優先する。
【００７５】
図１７は、アプリのファイル構成例を示し、ここではＪａｒファイル内の構成を示す。ファイル１７０１は、アプリのマニフェストファイルである。ファイル１７０２は設定ファイルである。ファイル１７０３は画像ファイルである。ファイル１７０４は、ＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイルである。ファイル１７０５は、ＪａｖａＳｃｒｉｐｔ（登録商標）で記述されたスクリプトファイルである。ファイル１７０６は、ＪａｖａＶＭ２０３上で実行可能なＪａｖａ（登録商標）バイトコードを含むクラスファイルである。つまり、クラスファイルは、実行する処理が定義されたバイトコードを含むプログラムファイルである。一方、画像ファイルなどは、処理に用いられるリソースファイルである。なお、図１７のファイル構成はあくまで１つの例であり、ＪａｖａＡｒｃｈｉｖｅのファイルフォーマットとしての要件を満たせばよく、ファイルの構成について特に制限するものではない。また、本実施形態では、所定の形式のファイルとして、クラスファイルを対象とするが、これに限定するものではない。
【００７６】
［処理フロー］
図１８は、本実施形態に係るセーフモード起動時の処理のフローチャートである。
【００７７】
セーフモード起動処理が開始されると、Ｓ１８０１にて、ＯＳＧｉ拡張部２１１は、サービス起動順リスト１０００を読み込み、リストの先頭行から処理を開始する。Ｓ１８０２にて、ＯＳＧｉ拡張部２１１は、バンドルの種類を取得する。Ｓ１８０３にて、ＯＳＧｉ拡張部２１１は、Ｓ１８０２で取得したバンドルの種類がフラグメントバンドルに該当するか否かを確認する。フラグメントバンドルに該当しない場合は（Ｓ１８０３にてＮＯ）Ｓ１８１３へ進み、フラグメントバンドルに該当する場合は（Ｓ１８０３にてＹＥＳ）Ｓ１８０４に進む。
【００７８】
Ｓ１８０４にて、ＯＳＧｉ拡張部２１１は、サービス起動順リスト８００の項目８０４の指定が“ｏｎ”であるか否かを確認する。ｓａｆｅｍｏｄｅ＝ｏｆｆの場合は（Ｓ１８０４にてＮＯ）Ｓ１８０５に進み、ｓａｆｅｍｏｄｅ＝ｏｎの場合は（Ｓ１８０４にてＹＥＳ）Ｓ１８１１に進む。
【００７９】
Ｓ１８０５にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルの有効化／無効化状態を取得する。Ｓ１８０６にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルについての情報を取得する。具体的には、ファイル１７０１の項目１６０１と、ファイル１７０２〜１７０６にＪａｖａ（登録商標）のバイトコードを含むクラスファイルが存在するか否かに関する情報を取得する。Ｓ１８０７にて、ＯＳＧｉ拡張部２１１は、Ｓ１８０６で取得した項目１６０１が“ｏｎ”か否かを確認する。ｓａｆｅｍｏｄｅ＝ｏｆｆの場合は（Ｓ１８０７にてＮＯ）Ｓ１８０９へ進み、ｓａｆｅｍｏｄｅ＝ｏｎの場合は（Ｓ１８０７にてＹＥＳ）Ｓ１８０８へ進む。
【００８０】
Ｓ１８０８にて、ＯＳＧｉ拡張部２１１は、Ｓ１８０６で取得したファイルにＪａｖａ（登録商標）のバイトコードを含むクラスファイルが存在するか否かを確認する。存在する場合は（Ｓ１８０８にてＹＥＳ）Ｓ１８０９に進み、存在しない場合は（Ｓ１８０８にてＮＯ）Ｓ１８１１に進む。ここでクラスファイル（所定の形式のファイル）が存在するか否かをチェックする理由としては、ホストバンドルのクラスローダによって問題のあるクラスファイルが読み込まれることで、後述のホストバンドルの開始に失敗することを回避するためである。つまり、クラスファイル以外のファイルから構成されている場合（例えば、リソースファイルのみ）にはフラグメントバンドルをインストールしてもホストバンドルの開始に失敗することが避けられる。
【００８１】
Ｓ１８０９〜Ｓ１８１４の処理それぞれについては、第一の実施形態にて示した図１１のＳ１１０６〜Ｓ１１１１と同じであるため、説明を省略する。
【００８２】
以上、本実施形態により、セーフモード起動時において、ユーザがインストールしたフラグメントバンドルを有効化したとしても、システムを安全に起動しつつ、ユーザの利便性が低下することを防止することが可能となる。
【００８３】
＜第四の実施形態＞
本実施形態では、ユーザによってインストールされたフラグメントバンドルを有効化した際、そのフラグメントバンドルに問題があった場合について考える。第三の実施形態では、ＪａｖａＶＭ上で実行可能なＪａｖａ（登録商標）のバイトコードを含むクラスファイルが存在する場合は有効化しない。しかしながら、Ｊａｖａ（登録商標）のバイトコードを含むクラスファイルは存在するが、セーフモード起動に影響を与えないことが分かっている場合、ユーザは有効化したいとの要望がある。そこで、本実施形態では、問題の生じないフラグメントバンドルおよびそのホストファイルは有効化する。その一方で、問題の生じるフラグメントバンドルについては無効化した上で、そのホストバンドルを有効化するように制御する。
【００８４】
［処理フロー］
図１９は、本実施形態に係るセーフモード起動時の処理のフローチャートである。
【００８５】
まず、図１９（Ａ）において、セーフモード起動処理が開始されると、Ｓ１９０１にて、ＯＳＧｉ拡張部２１１は、サービス起動順リスト１０００を読み込み、リストの先頭行から処理を開始する。Ｓ１９０２にて、ＯＳＧｉ拡張部２１１は、バンドルの種類を取得する。Ｓ１９０３にて、ＯＳＧｉ拡張部２１１は、Ｓ１９０２で取得したバンドルの種類がフラグメントバンドルに該当するか否かを確認する。フラグメントバンドルに該当しない場合は（Ｓ１９０３にてＮＯ）Ｓ１９１２へ進み、フラグメントバンドルに該当する場合は（Ｓ１９０３にてＹＥＳ）Ｓ１９０４に進む。
【００８６】
Ｓ１９０４にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルの有効化／無効化状態を取得する。Ｓ１９０５にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルのマニフェストファイル１６００の項目１６０１を取得する。Ｓ１９０６にて、ＯＳＧｉ拡張部２１１は、サービス起動順リスト８００の項目８０４の指定が“ｏｎ”であるか否かを確認する。ｓａｆｅｍｏｄｅ＝ｏｆｆの場合は（Ｓ１９０６にてＮＯ）Ｓ１９０７に進み、ｓａｆｅｍｏｄｅ＝ｏｎの場合は（Ｓ１９０６にてＹＥＳ）Ｓ１９１０に進む。
【００８７】
Ｓ１９０７にて、ＯＳＧｉ拡張部２１１は、Ｓ１９０５で取得した項目１６０１が“ｏｆｆ”であるか否かを確認する。ｓａｆｅｍｏｄｅ＝ｏｆｆの場合は（Ｓ１９０７にてＮＯ）Ｓ１９０８に進み、ｓａｆｅｍｏｄｅ＝ｏｎの場合は（Ｓ１９０７にてＹＥＳ）Ｓ１９１０に進む。
【００８８】
Ｓ１９０８〜Ｓ１９１２の処理それぞれについては、第一の実施形態に示した図１１のＳ１１０６〜Ｓ１１１０と同じであるため、説明を省略する。Ｓ１９１３のステップとして、図１９（Ｂ）を用いて詳細に説明する。
【００８９】
図１９（Ｂ）において、ホストバンドルの開始処理が開始されると、Ｓ１９５１にて、ＯＳＧｉ拡張部２１１は、サービス起動順リスト８００を読み込み、リストの先頭行から処理を開始する。なお、Ｓ１９５１〜Ｓ１９５５の処理それぞれについては、第一の実施形態にて示した図９のＳ９０１〜Ｓ９０５と同じであるため、説明を省略する。
【００９０】
Ｓ１９５６にて、ＯＳＧｉ拡張部２１１は、Ｓ１９５５で行ったバンドルの開始が成功したか否かを確認する。成功した場合は（Ｓ１９５６にてＹＥＳ）Ｓ１９６４に進み、失敗した場合は（Ｓ１９５６にてＮＯ）Ｓ１９５７に進む。Ｓ１９５７にて、ＯＳＧｉ拡張部２１１は、開始に失敗したホストバンドルに関係するフラグメントバンドルの情報を取得する。Ｓ１９５８にて、ＯＳＧｉ拡張部２１１は、Ｓ１９５７で取得したフラグメントバンドルが存在するか否かを確認する。存在しない場合は（Ｓ１９５８にてＮＯ）Ｓ１９６４に進み、存在する場合は（Ｓ１９５８にてＹＥＳ）Ｓ１９５９に進む。
【００９１】
Ｓ１９５９にて、ＯＳＧｉ拡張部２１１は、開始に失敗したホストバンドルに関係するフラグメントバンドルのリスト（不図示）を取得し、リストの先頭行から処理を開始する。Ｓ１９６０にて、ＯＳＧｉ拡張部２１１は、フラグメントバンドルの有効化／無効化状態を取得する。Ｓ１９６１にて、ＯＳＧｉ拡張部２１１は、Ｓ１９６０で取得したフラグメントバンドルの状態が有効化されているか否かを確認する。フラグメントバンドルが有効化されていない場合は（Ｓ１９６１にてＮＯ）Ｓ１９６３へ進み、有効化されている場合は（Ｓ１９６１にてＹＥＳ）Ｓ１９６２に進む。Ｓ１９６２にて、ＯＳＧｉ拡張部２１１は、無効化処理を行う。その後、Ｓ１９６３へ進む。
【００９２】
Ｓ１９６３にて、ＯＳＧｉ拡張部２１１は、リストの最終行であるか否かを確認する。最終行でない場合は（Ｓ１９６３にてＮＯ）、Ｓ１９６０に戻り、次の行（次のフラグメントバンドル）を処理対象として処理を繰り返す。最終行である場合、すなわち、開始に失敗したホストバンドルに関係する全てのフラグメントバンドルに対して無効化の処理が完了した場合（Ｓ１９６３にてＹＥＳ）、Ｓ１９５５に進む。そして、Ｓ１９５５にて、ＯＳＧｉ拡張部２１１は、開始が失敗したホストバンドルに対して、再度開始を試みる。
【００９３】
Ｓ１９６４にて、ＯＳＧｉ２０６は、サービス起動順リストの最終行であるか否かを確認する。最終行でない場合は（Ｓ１９６４にてＮＯ）Ｓ１９５２に戻り、次の行を処理対象として処理を繰り返す。最終行である場合、すなわち、サービス起動順リストの全てのバンドルに対して処理が完了した場合（Ｓ１９６４にてＹＥＳ）、ホストバンドルの開始処理を終了し、図１９（Ａ）の処理に戻る。
【００９４】
以上、本実施形態により、セーフモード起動時において、ユーザがインストールしたフラグメントバンドルに問題があった場合でも、ユーザの利便性を低下させずに、システムを安全に起動することが可能となる。
【００９５】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９６】
１０１…ＣＰＵ、１３０…画像形成装置、２０１…ＯＳプラットフォーム、２０２…ソフトウェアプラットフォーム、２０４…フレームワーク群、２１１…ＯＳＧｉ拡張部、２０８…アプリ管理サービス
【図１】
0006403559.tif 000002
【図２】
0006403559.tif 000003
【図３】
0006403559.tif 000004
【図４】
0006403559.tif 000005
【図５】
0006403559.tif 000006
【図６】
0006403559.tif 000007
【図７】
0006403559.tif 000008
【図８】
0006403559.tif 000009
【図９】
0006403559.tif 000010
【図１０】
0006403559.tif 000011
【図１１】
0006403559.tif 000012
【図１２】
0006403559.tif 000013
【図１３】
0006403559.tif 000014
【図１４】
0006403559.tif 000015
【図１５】
0006403559.tif 000016
【図１６】
0006403559.tif 000017
【図１７】
0006403559.tif 000018
【図１８】
0006403559.tif 000019
【図１９】
0006403559.tif 000020