「レジストリとリポジトリについて」で説明したように、レジストリには、電子コンテンツの格納が可能なリポジトリが含まれています。リポジトリに格納するすべての項目について、まず ExtrinsicObject を作成する必要があります。ExtrinsicObject をレジストリに保存すると、関連付けられたリポジトリ項目も保存されます。
ExtrinsicObject を作成するには、まず、リポジトリ項目に対して javax.activation.DataHandler オブジェクトを作成する必要があります。LifeCycleManager.createExtrinsicObject メソッドは DataHandler 引数を取ります。
引数を取らない、実装に固有の形式の createExtrinsicObject メソッドを使用することもできます。この形式を使用する場合、DataHandler オブジェクトをあとで作成し、ExtrinsicObject.setRepositoryItem メソッドを使ってそのリポジトリ項目を指定することができます。また、関連付けられたリポジトリ項目を持たない付帯オブジェクトを作成することもできます。
たとえば、リポジトリ内にファイルを格納するには、まず、java.io.File オブジェクトを作成します。その File オブジェクトから javax.activation.FileDataSource オブジェクトを作成し、それを使って DataHandler オブジェクトのインスタンスを生成します。
String filename = "./MyFile.xml"; File repositoryItemFile = new File(filename); DataHandler repositoryItem = new DataHandler(new FileDataSource(repositoryItemFile));
次に、その DataHandler を引数に指定して createExtrinsicObject を呼び出します。
ExtrinsicObject eo = blcm.createExtrinsicObject(repositoryItem); eo.setName("My Graphics File");
オブジェクトにアクセスできるように、オブジェクトの MIME タイプを指定します。デフォルトの MIME タイプは application/octet-stream です。ファイルが XML ファイルである場合、次のように設定します。
eo.setMimeType("text/xml");
最後に、ExtrinsicObject を Service Registry の適切な領域に格納するために、実装に固有の ExtrinsicObjectImpl.setObjectType メソッドを呼び出します。このメソッドのシグニチャーは、次のとおりです。
public void setObjectType(Concept objectType) throws JAXRException
特定のタイプのファイルに対する適切な概念を見つけるもっとも簡単な方法は、Web コンソールの探索機能を使用することです。ObjectType 分類スキーマの下で、さまざまなタイプの ExtrinsicObject 概念の中から探します。目的の概念の ID を getRegistryObject の引数として指定し、その概念を setObjectType の引数として指定します。
String conceptId = "urn:oasis:names:tc:ebxml-regrep:ObjectType:RegistryObject:ExtrinsicObject:XML"; Concept objectTypeConcept = (Concept) bqm.getRegistryObject(conceptId); ((ExtrinsicObjectImpl)eo).setObjectType(objectTypeConcept);
最後に、ExtrinsicObject をレジストリに保存します。
Collection extobjs = new ArrayList(); extobjs.add(eo); BulkResponse response = blcm.saveObjects(extobjs);
ExtrinsicObject にはメタデータが含まれており、ファイルのコピーがリポジトリ内に格納されます。
レジストリに格納するファイルの種類の概念が存在しない場合には、その概念を自分で作成し、保存できます。
付帯オブジェクトの作成方法の例については、<INSTALL>/registry/samples/publish-extrinsic/src ディレクトリにある JAXRPublishExtrinsicObject.java を参照してください。このサンプルは、1 つの XML ファイル (独自の build.xml ファイル) を Service Registry に発行します。
ExtrinsicObject は単独でも発行できますが、ServiceBinding オブジェクトに対する SpecificationLink の specificationObject 属性として使用する目的で ExtrinsicObject を作成することも、一般的に行われます。「サービスとサービスバインディングの作成」を参照してください。ExtrinsicObject は通常、WSDL ファイルを参照します。
SpecificationLink オブジェクトを作成します。
WSDL 文書をリポジトリ内に格納し、それを参照する ExtrinsicObject を作成します。付帯オブジェクトのオブジェクト型を WSDL に、MIME タイプを text/xml に、それぞれ設定します。
この付帯オブジェクトを、SpecificationLink オブジェクトの specificationObject 属性として指定します。
この SpecificationLink オブジェクトを ServiceBinding オブジェクトに追加します。
この ServiceBinding オブジェクトを Service オブジェクトに追加します。
Service オブジェクトを保存します。
Service と ServiceBinding を作成してから、SpecificationLink を作成します。
SpecificationLink specLink = blcm.createSpecificationLink(); specLink.setName("Spec Link Name"); specLink.setDescription("Spec Link Description"); |
「付帯オブジェクトの作成」で説明した方法で ExtrinsicObject を作成します。WSDL 概念の ID と text/xml MIME タイプを使用します。
String conceptId = "urn:oasis:names:tc:ebxml-regrep:ObjectType:RegistryObject:ExtrinsicObject:WSDL"; Concept objectTypeConcept = (Concept) bqm.getRegistryObject(conceptId); ((ExtrinsicObjectImpl)eo).setObjectType(objectTypeConcept); eo.setMimeType("text/xml"); |
ExtrinsicObject を、SpecificationLink の仕様オブジェクトとして設定します。
specLink.setSpecificationObject(eo); |
SpecificationLink を ServiceBinding に追加してからオブジェクトをそのコレクションに追加し、サービスを保存します。
binding.addSpecificationLink(specLink); serviceBindings.add(binding); ... |
Service Registry からサービスを削除すると、そのサービスバインディングと仕様リンクも削除されます。ただし、仕様リンクに関連付けられていた付帯オブジェクトは削除されません。
仕様リンクで使用する付帯オブジェクトの作成方法の例については、 < INSTALL>/registry/samples/publish-service/src ディレクトリにある JAXRPublishService.java を参照してください。このサンプルは、レジストリに WSDL ファイルを発行します。