Association オブジェクトを作成し、それを使って任意の 2 つのオブジェクト間の関係を指定することができます。ebXML 仕様で規定されている AssociationType 分類スキーマには、Association 作成時に使用可能な標準的な概念が、数多く含まれています。AssociationType 分類スキーマ内に独自の概念を作成することもできます。
AccessControlPolicyFor
AffiliatedWith (サブ概念 EmployeeOf と MemberOf を持つ)
Contains
ContentManagementServiceFor
EquivalentTo
Extends
ExternallyLinks
HasFederationMember
HasMember
Implements
InstanceOf
InvocationControlFileFor (サブ概念 CatalogingControlFileFor と ValidationControlFileFor を持つ)
OffersService
OwnerOf
RelatedTo
Replaces
ResponsibleFor
SubmitterOf
Supersedes
Uses
レジストリは、これらの関連付けタイプの一部を自動的に使用します。たとえば、Service を Organization に追加する場合、レジストリは、その Organization をソースに、Service をターゲットに持つ OffersService 関連付けを作成します。
関連付けには方向があります。各 Association オブジェクトは 1 つのソースと 1 つのターゲットを持ちます。2 つのオブジェクト間の関連付けを確立する操作は、次の 3 つの手順から成ります。
使用する AssociationType 概念を検索するか、作成します。
LifeCycleManager.createAssociation メソッドを使って関連付けを作成します。このメソッドは 2 つの引数を取ります。ターゲットオブジェクトと関係を識別する概念の 2 つです。
たとえば、2 つのオブジェクト obj1 と obj2 があり、それらの間に 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 つの子組織を指定することができます。
<INSTALL>/registry/samples/organizations ディレクトリに移動します。
次のコマンドを実行して組織階層を取得します。
asant search-fam |
2 つの子組織のキーとなる ID 文字列に注意してください。
<INSTALL>/registry/samples/publish-association ディレクトリに移動します。
次のコマンドを入力します。
asant run -Did1=string1 -Did2=string2 |
string1 と string2 を 2 つの子組織の ID 文字列に置き換えてください。
関連付けが区域内、区域外のいずれになるかは、2 つのオブジェクトの所有者によって決まります。この場合の関連付けは、区域内になります。