Service Registry 3 2005Q4 開発者ガイド

オブジェクト間の関係の作成: 関連付け

Association オブジェクトを作成し、それを使って任意の 2 つのオブジェクト間の関係を指定することができます。ebXML 仕様で規定されている AssociationType 分類スキーマには、Association 作成時に使用可能な標準的な概念が、数多く含まれています。AssociationType 分類スキーマ内に独自の概念を作成することもできます。

標準的な関連付けタイプは、次のとおりです。

レジストリは、これらの関連付けタイプの一部を自動的に使用します。たとえば、ServiceOrganization に追加する場合、レジストリは、その Organization をソースに、Service をターゲットに持つ OffersService 関連付けを作成します。

関連付けには方向があります。各 Association オブジェクトは 1 つのソースと 1 つのターゲットを持ちます。2 つのオブジェクト間の関連付けを確立する操作は、次の 3 つの手順から成ります。

  1. 使用する AssociationType 概念を検索するか、作成します。

  2. LifeCycleManager.createAssociation メソッドを使って関連付けを作成します。このメソッドは 2 つの引数を取ります。ターゲットオブジェクトと関係を識別する概念の 2 つです。

  3. RegistryObject.addAssociation メソッドを使って関連付けをソースオブジェクトに追加します。

たとえば、2 つのオブジェクト obj1obj2 があり、それらの間に RelatedTo の関係を確立するとします。この関係の場合、どちらのオブジェクトをソースにし、どちらのオブジェクトをターゲットにするかは、自由に決めてかまいません。まず、RelatedTo 概念を検索します。


// Find RelatedTo concept for Association
String concString = 
    CanonicalConstants.CANONICAL_ASSOCIATION_TYPE_ID_RelatedTo;
Concept relConcept = (Concept) bqm.getRegistryObject(concString);

obj2 をターゲットとして指定して関連付けを作成します。


Association relAssoc =
     blcm.createAssociation(obj2, relConcept);

その関連付けをソースオブジェクト obj1 に追加します。


obj1.addAssociation(relAssoc);

最後に、その関連付けを保存します。


Collection associations = new ArrayList();
associations.add(relAssoc1);
BulkResponse response = blcm.saveObjects(associations);

関連付けには区域内と区域外の 2 種類があります。ユーザーがソースオブジェクトとターゲットオブジェクトの両方を所有している場合、「区域内関連付け」が作成されます。これらのオブジェクトの少なくとも一方を所有していない場合は、「区域外関連付け」を作成します。オブジェクトの所有者は、アクセス制御ポリシーを使用して、そのオブジェクトをソースまたはターゲットに持つ区域外関連付けを作成する権限を制限できます。

関連付けの作成: 例

関連付けの作成の例については、<INSTALL>/registry/samples/publish-association/src/ ディレクトリにある JAXRPublishAssociation.java を参照してください。このサンプルは、指定した一意の識別子を持つ任意の 2 つのオブジェクト間の RelatedTo 関連付けを作成します。たとえば、「組織階層の作成と取得: 例」で作成された 2 つの子組織を指定することができます。

ProcedureJAXRPublishAssociation サンプルを実行するには

手順
  1. <INSTALL>/registry/samples/organizations ディレクトリに移動します。

  2. 次のコマンドを実行して組織階層を取得します。


    asant search-fam
    

    2 つの子組織のキーとなる ID 文字列に注意してください。

  3. <INSTALL>/registry/samples/publish-association ディレクトリに移動します。

  4. 次のコマンドを入力します。


    asant run -Did1=string1 -Did2=string2
    

    string1string2 を 2 つの子組織の ID 文字列に置き換えてください。

    関連付けが区域内、区域外のいずれになるかは、2 つのオブジェクトの所有者によって決まります。この場合の関連付けは、区域内になります。