すでに配備されているコンポーネントの新しいバージョンを作成する際には、互換性が問題になります。コンポーネントの新しいバージョンを作成する際には、そのコンポーネントを使用または参照するそのほかのオブジェクトが、変更の結果として破損しないようにする必要があります。依存性、コンポーネント包含、継承、およびコンポーネントターゲッターを使用することで、コンポーネントの使用および参照を行うことができます。
プロビジョニングソフトウェア は、次の種類のコンポーネントの互換性をサポートしています。
呼び出しの互換性は、コンポーネントに対してユーザーが行える一連の変更を規定します。また呼び出しの互換性により、依存性とコンポーネントターゲッターを通じて存在する関係が保証されます。
インストールの互換性は、コンポーネントに対してユーザーが行える一連の変更を規定します。またコンポーネントの互換性により、継承とコンポーネント包含関係を通じて存在する関係が保証されます。
さまざまな時点で、データセンターのさまざまな部分に対して異なるバージョンのコンポーネントが配備できるため、開発者は互換性の要件に注意し、あるコンポーネントに対する変更がほかの既存コンポーネントに対してどのように影響するかを理解する必要があります。特定のケースでは、システムにより互換性の要件が強制される場合もあり、また開発者が新しいコンポーネントの互換性を確保しなければならない場合もあります。
あるコンポーネントに対して実施可能な変更の種類のリストは、付録 A 「コンポーネント変更の互換性」を参照してください。
あるコンポーネントが別のコンポーネントと呼び出し互換であるのは、以下の場合のように、最初のコンポーネントの使用を、別のコンポーネントの使用に安全に置き換えることができる場合です。
最初のコンポーネントの <control>、<uninstall>、または <snapshot> ブロックへの呼び出しを行う場合
<checkDependency> または <createDependency> を使用して、最初のコンポーネントの依存性を確認する場合
構成生成 :[component:AB:var] を使用することで、最初のコンポーネントの変数を参照する場合
呼び出しの互換性は、API の互換性やインタフェースの互換性と同じです。
通常、2 つの呼び出し互換コンポーネントは、同じバージョンツリー内のバージョンが異なるコンポーネントです。ただし、2 つ目のコンポーネントは、最初のコンポーネントのインスタンスである場合、別のバージョンツリー内に存在することも可能です。
プロビジョニングソフトウェアでは、システムサービスを提供するコンポーネントに対して、呼び出しの互換性が強制されます。システムサービスが新しいコンポーネントを参照するよう更新される場合、新しいコンポーネントが元のコンポーネントに対して呼び出し互換性を持つようにします。これにより、システムサービスのアップグレード時にも、システムサービスのクライアントが正常に機能し続けることを保証できます。
プロビジョニングソフトウェアは、一部のインストール済みコンポーネントターゲッターに参照されているコンポーネントを解釈処理するときにも、オプションで呼び出し互換性を検証します。詳細は、「インストール済みコンポーネントターゲッター」を参照してください。
コンポーネントがその旧バージョンに対して呼び出し互換である必要はありませんが、呼び出し互換性を持たせることをお勧めします。
コンポーネントは、別のコンポーネントとインストール互換になることが可能です。最初のコンポーネントは、もう一方のコンポーネントと呼び出し互換である必要があります。以下の場合、もう一方のコンポーネントの使用は、最初のコンポーネントの使用と安全に置き換えられる必要があります。
もう一方のコンポーネントのインストールブロックへの呼び出しを行う場合
コンポーネントがもう一方のコンポーネントから拡張される場合
コンポーネントがもう一方のコンポーネントへの参照を含む場合
インストールの互換性とは、構造上の互換性と同じです。
インストールの互換性の制約により、既存のインストール済みコンポーネントは、別のインストール互換コンポーネントに安全に置き換えることができる必要があります。オリジナルがどのようにインストールされたかを記述するデータ構造を変更する必要はありません。呼び出し互換のコンポーネントは、データ構造を適切に更新するために再インストールしなければならない場合があるので、呼び出し互換性はかなり弱いステートメントになります。
インストールの互換性を保つためには、両方のコンポーネントは同じバージョンツリーに属している必要があります。2 つの別々のバージョンツリーからのコンポーネントであってはなりません。
プロビジョニングソフトウェア は、コンポーネント型と呼ばれる、型として機能するコンポーネントだけにインストールの互換性を要求します。コンポーネント型が新しいバージョンのコンポーネントを参照するために更新されるときには、新しいバージョンは元のバージョンに対してインストール互換性を持ちます。 したがって、その型から派生するすべての既存コンポーネントを再構築や再インストールせずに、コンポーネント型に対してインストール互換の更新を実行できます。 インストール互換ではないコンポーネント型への変更は、独自の型名を持つ新しい別のコンポーネントバージョンツリーとして符号化する必要があります。このような場合、新しいコンポーネント型は、元のコンポーネント型から拡張することによって、呼び出し互換性を維持できます。 型間の関係を簡単に特定するには、コンポーネント型名を符号化するバージョン管理システムを使用します。 たとえば、コンポーネント名 EJB-1.0 と EJB-1.1 がある場合、EJB-1.1 は EJB-1.0 コンポーネント型の新しいバージョンであることを簡単に特定できます。
インストール互換である場合は呼び出し互換でもありますが、呼び出し互換であってもインストール互換であるとは限りません。また、コンポーネントが呼び出し互換でない場合は、インストール互換ではありません。