『Sun Java Enterprise System 5 技術の概要』で説明されているように、Java ES コンポーネントはさまざまなタイプにグループ分けされています。それによると、主な Java ES インフラストラクチャーサービスはシステムサービスコンポーネントによって提供されており、システムサービスはサービス品質コンポーネントによって機能が強化されています。この 2 種類の Java ES コンポーネントをここでは製品コンポーネント (Java ES インストーラ内で選択可能なコンポーネント) と呼ぶことにします。
どちらの製品コンポーネントも、Java ES 共有コンポーネントというローカルに共用される 1 つ以上のライブラリに依存します。共有コンポーネントは、Java ES インストーラで製品コンポーネントのインストール時に、インストールされる製品コンポーネントに応じて自動的にインストールされます。Java ES 製品コンポーネントの配備中に、それらが個別に選択されてインストールされたり、設定されることはありません。
「Java ES にゾーンを使用する理由」では、Java ES 製品コンポーネントによるゾーンの使用について論じました。製品コンポーネントは Java ES インストーラで明示的に選択することができ、それぞれ異なるゾーンにインストールして設定することで、希望する配備アーキテクチャーと機能を実現することができます。しかし、製品コンポーネントが依存する共有コンポーネントを使用することにより、Java ES を複数ゾーン環境に配備する方法にいくらかの制限が生じます。Java ES 共有コンポーネントとゾーンに関して、次の 2 つの問題があります。
Java ES 共有コンポーネントと Java ES 製品コンポーネントとの間には複雑な対話が 30 ほどもあり、それらをテストおよびサポートすることは難しいため、単一のオペレーティングシステムインスタンス内のすべての共有コンポーネントは必ず同じ Java ES バージョンに同期されなければなりません。言い換えると、非ゾーン環境にインストールされている、または Solaris 10 環境内の特定のゾーンにインストールされている、すべての Java ES 共有コンポーネントは同じバージョンでなければなりません。この要件によって、複数ゾーン環境で Java ES を使用できる方法に一定の制限が加えられます。
したがって、この同期要件は次のことをも意味します。
バージョンの異なる Java ES 共有コンポーネントは、別々のゾーンにしか配置できません。たとえば、Java ES Release 4 共有コンポーネントと Java ES Release 5 共有コンポーネントをそれぞれ別のゾーンにインストールすることはできますが、それらを組み合わせて 1 つのゾーンにインストールすることはできません。
あるゾーンのいずれかの共有コンポーネントをアップグレードするか、上位バージョンの新しい共有コンポーネントを導入する場合は、そのゾーンのすべての共有コンポーネントも同時にアップグレードする必要があります。共有コンポーネントは下位互換性が保たれている必要があるので、Release 4 製品コンポーネントが Release 5 共有コンポーネントと連動する上での問題はありません。たとえば、Release 5 製品コンポーネントが、1 つ以上の Release 4 製品コンポーネントが配置されているあるゾーンにインストールされているとします。Release 5 製品コンポーネントはいくつかの Release 5 共有コンポーネントを必要とするので、この場合の同期要件は、このゾーンに配置されているすべての Release 4 共有コンポーネントは Release 5 製品コンポーネントのインストールと同時に Release 5 にアップグレードする必要があるということになります。インストール中の Release 5 製品コンポーネントがゾーンにすでにインストールされているものとは異なる共有コンポーネントを必要とする場合であっても、この要件が適用されます。
共有コンポーネントが大域ゾーンにインストールされそこから伝播されるようになったなら (伝播ポリシーについては「Java ES 伝播ポリシー」を参照)、すべてのゾーンで共有コンポーネントの同期が保たれるよう細心の注意を払う必要があります。このことを怠ると、非大域ゾーンにある旧バージョンの共有コンポーネントと大域ゾーンから伝播された Release 5 共有コンポーネントとが混在しかねません。通常、「細心の注意を払う」とは、共有コンポーネントのライフサイクル管理が大域ゾーン内でのみ行われるようにすることを意味します。詳細については、表 A–2、および 「共有コンポーネントの特殊ケース」を参照してください。
共有コンポーネントの同期要件によって、Java ES インストーラが複数ゾーン環境で実行すべき内容に制限が課せられ (詳細は「Java ES インストーラでのゾーンサポート」を参照)、複数ゾーン環境で Java ES 製品コンポーネントをインストールおよびアップグレードする手順に影響が及びます。
複数ゾーン環境での Java ES の使用に影響するもう一つの問題は、疎ルートゾーンの読み取り専用ファイルシステムのために、多数の共有コンポーネントを疎ルートゾーンにインストールできないということです。そのため、ベースディレクトリが /usr (デフォルトで大域ゾーンによって共有されるディレクトリ) である共有コンポーネントを大域ゾーンにインストールして、疎ルートゾーンで使用できるようにする必要があります。
多数の Java ES 共有コンポーネントを疎ルートゾーンにインストールできないということは、それらの共有コンポーネントへの依存関係がある製品コンポーネントを疎ルートゾーンに正常にインストールする場合、まず共有コンポーネントを大域ゾーンにインストールして非大域ゾーンに伝播させなければならないということを意味します。
「Java ES にゾーンを使用する理由」で論じられた複数ゾーン環境での Java ES の使用の目的、およびそれに伴う使用のシナリオは、大域ゾーンの伝播機能を活用して Java ES 製品コンポーネントのライフサイクル管理を簡素化するものでした。たとえば、そのような使用のシナリオでは、Java ES 製品コンポーネントのライフサイクル管理を大域管理者が大域ゾーンで実行し、それらのコンポーネントの設定およびランタイム管理はゾーン管理者が非大域ゾーンで実行することが必要になります。
言い換えると、製品コンポーネントは大域ゾーンでインストールおよびアップグレードし、インスタンスは非大域ゾーンで設定および実行するということです。この使用シナリオは、ライフサイクル集中管理の利点と非大域ゾーンが提供する孤立化とセキュリティーとを兼ね備えています。
しかし、このシナリオは各製品コンポーネントを大域ゾーンにインストールし、非大域ゾーンで設定および実行できることを前提としています。このように処理を分けられるかどうかは、各製品コンポーネントの設定方法、設定と動的アプリケーションデータの格納場所、バイナリを実行して設定データを検出する方法、およびアップグレードの実行方法に依存します。たとえば、インストールまたはアップグレードの前後にスクリプトが何を実行するかによって左右される場合があります。スクリプトがコンポーネントインスタンスを開始または停止するか、設定データへのリンクを作成するか、それ以外にライフサイクル管理と設定管理との区別を付きにくくさせるタスクを実行するかというようなことです。
また、完全ルートゾーンと疎ルートゾーンのどちらで設定が実行されるかによって左右される場合もあります。たとえば、製品コンポーネントの設定スクリプトが読み取り専用ファイルシステムを /usr などの疎ルートゾーンに書き込んでいる場合や、/opt などの非デフォルトファイルシステムが疎ルートゾーンで共有されている場合には、コンポーネントの設定が失敗することがあります。
ほとんどすべての Java ES 製品コンポーネントは、デフォルトでは疎ルートゾーン内で書き込み可能である、/opt の下にインストールされます。詳細は、『Sun Java Enterprise System 5 インストールリファレンス (UNIX 版)』を参照してください。
現時点で、おおよそ 20 個の Java ES 製品コンポーネントについて、大域ゾーンと非大域ゾーンとの間でライフサイクル管理と設定/ランタイム管理の分離をサポートできるようになっていません。各種製品コンポーネントで設定とアップグレードに異なる方法が採用されています。このような事情により、Message Queue 以外の Java ES 製品コンポーネントの伝播は、現時点ではサポートされていません。詳細は、「Java ES 伝播ポリシー」を参照してください。