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