|
この章では、SPI 実装の書き込みに役立つ情報について説明します。節の内容は以下のとおりです。
以下のFAQでは、NodeOpsV1 インタフェースの実装に役立つ情報について説明します。FAQ には以下の質問、回答および例があります。
NodeOpsV1 インタフェースはノード、プロパティ、または値のすべての操作をサポートします。
SPI 層で使用されるパスは、パス デリミタ (/) で始まる必要があり、またリポジトリ パスに基づいて拡張する必要があります。たとえば、 /foo/bar/basVCR 連合のパスと異なりパスにリポジトリ名が含まれません。たとえば、/MyRepository/foo/bar/bas は有効な SPI パスではなく有効な VCR パスです。
SPI 実装は以下のコンストラクタを介して Node を直接インスタンス化できます。
new Node( Calendar createdDate, String createdBy, boolean hasChildren, ID id, String modifiedBy, Calendar modifiedDate, ObjectClass objectClass, ID parentId, String path, Property[] properties )
Node ID は null 以外の UUID セットが必要です。ただし、VCR はこの機能を扱うので Node ID は repositoryName セットが不要です。
WebLogic Portal の以前のバージョンには「node type」の概念があります。WebLogic Portal 10.2 を開始して、ノード タイプが必要な場合、SPI 実装は Node.CONTENT のノード タイプを使用する必要があります。
ノードに ObjectClass がある場合、ObjectClass の任意の PropertyDefinition で Node に Property を作成できます。
パフォーマンスを最適化するために、SPI 実装は Property[] プロパティに対して null を必要に応じて渡します。これにより、必要に応じて、VCR がプロパティーをレイジーロードできます。また、必要に応じて、SPI 実装は null ObjectClass を使用し、ObjectClass ID をセットするには setObjectClassId() を呼び出します。これにより、必要に応じて、VCR により objectClass がレイジーロードされます。
これらの方法は、メソッド単位で使用できます。一般に、これらの方法はノードの多数集合を返すメソッドのために使用します。単一ノードを返すメソッドの場合、一般に、プロパティのレイジーロードはお勧めしません。
SPI 実装は以下のコンストラクタを介して各 Property を直接インスタンス化できます。
new Property( ID id, String name, int type, Value[] values )
Property ID に対して null 以外の UUID セットが必要です。ただし、VCR はこの機能を扱うので、repositoryName セットは不要です。
メタデータ (作成者、変更日など) が使用可能でない場合の SPI 実装要件は、VCR クライアントが使用するデータに依存します。ライアントの最大限の柔軟性を実現するには、SPI 実装が null ではなく定数値を返す必要があります。たとえば、SPI は「作成者」や「変更者」String として system を返したり、作成日や変更日として定数 Date を返します。
Property ID の粒度は Node ID より高く、ノード内のデータを表します。正確な関係はバックエンド システムとその表す方法およびノードとプロパティ データにアクセスできるかに依存します。
Node UUID は暗黙リポジトリ内のノードをユニークに識別する必要があります。特定のノードのすべてのプロパティ (および値) を取得するには Node UUID を使用します。
Property UUID は暗黙リポジトリ内の単一ノードの単一プロパティをユニークに識別する必要があります。ノードの単一プロパティを取得するには Property UUID を使用します。
プロパティを取得する場合、常に Node UUID が提供されるとは限りません。たとえば、NodeOpsV1.getPropertyBytes( ID propertyId ) で Property UUID は「スタンド アロン」であり、単独で操作することが必要です。ID をリンクするための 1 つのオプションは、Property ID に Node ID を含めることです。たとえば、Node UUID が「41431」の場合、Property UUID は「41431/stringProperty」です。
一般的に、ノード名は空白でない文字列である必要があり、スラッシュまたはバック スラッシュを含まず、ノードの階層パス内の最後のトークンがノード名である必要があります。詳細については、WebLogic Portal 「Javadoc」を参照してください。
コード リスト 5-1 に ObjectClass なしでノードを作成する方法を示します。
ID id = new ID(uid);
ID parentId = new ID(parentUid);
Node node = new Node(createDate, createdBy, false, id, createdBy,
createDate, null /* no ObjectClass */, parentId, path, null);
コード リスト 5-2 に ObjectClass およびプロパティ値を持つノードを作成する方法を示します。
ID id = new ID(uid);
ID parentId = new ID(parentUid);
Property [] props = getPropertiesToUse();
Node node = new Node(createDate, createdBy, false, id, createdBy, createDate, null /* レイジーロード ObjectClass */, parentId, path, props);
ID ocId = new ID(objectClassUid);
node.setObjectClassId(ocId); //レイジーロード ObjectClass
この節では、ObjectClassOpsV1 の実装についての情報を説明します。節の内容は以下のとおりです。
ObjectClassOpsV1 インタフェースは以下の ObjectClasses、PropertyDefinitions および PropertyChoices でのすべての操作をサポートします。
タイプ継承をサポートするには、objectClasses は階層構造をサポートします。ObjectClasses にある Name および ID を使用して識別を行います。パスも含まれています。タイプ継承を使用する場合、ObjectClass パスは他の ObjectClasses との関係を示します。
SPI 実装は以下のコンストラクタを介して各 ObjectClass を直接インスタンス化できます。
new ObjectClass( ID id, String name, PropertyDefinition
primaryPropertyDefinition, PropertyDefinition[] propertyDefinitions,
boolean hasPropertyDefinitions );
hasPropertyDefinitions フラグは、外的システムにこのタイプに対して PropertyDefinitions が存在するか、また propertyDefinitions のレイジーロードをサポートするかを示します。たとえば、propertyDefinitions が外部システムに存在しても、ObjectClass には返されません。
パフォーマンスを強化するには、SPI 実装は必要に応じて PropertyDefinition[] propertyDefinitions のために null を渡します。これにより、必要に応じて、VCR が propertyDefinitions をレイジーロードできます。
SearchOpsV1 インタフェースはノードの検索およびインデックス操作をサポートします。以下の操作がサポートされています。
SearchOpsV1 インタフェースは以下の検索条件をサポートします。
コンテンツのインデックスを作成すると、特に全文検索に関して高速なルックアップができます。たとえば、ノードを作成する場合、全文検索エンジンでデータのインデックスを作成することで、高速での検索が可能です。
以下の2 つの方法でコンテンツのインデックスを作成できます。
同期アプローチはノードの作成を低速で行いますが、データの直接検索をサポートします。非同期アプローチはノードの作成を高速に行いますが、データを即座に使用することはできません。
| 注意 : | イベント リスナを使用する場合、コンテンツのインデックスを一時的に無効にし、ノードのグループを作成し、コンテンツのインデックスを再有効化して、index_cm_data スクリプトで該当するデータ ツリーを手動で再インデックスします。 |
イベント リスナは com.bea.p13n.events.EventListener インタフェースを実装する必要があります。以下のようなエントリで META-INF/p13n-config.xml ファイルを通じてイベントのリスナを登録できます。
<?xml version="1.0" encoding="UTF-8"?>
<p13n-config xmlns="http://www.bea.com/ns/p13n/90/p13n-config">
<event-service>
<listener>com.xxx.ContentExporterListener</listener>
</event-service>
</p13n-config>
イベント リスナは イベント タイプ ContentEventHelper.CONTENT_EVENT_BATCH_TYPE をリスンする必要があります。コンテンツ項目を作成、更新または削除した後、イベント リスナの handleEvent(Event) メソッドを呼び出します。この方法は発生したイベントのグループを含む ContentEventBatch タイプのイベントを受信します。
このセクションには、SPI 実装をテストする際に役立つ情報が含まれます。トピックの内容は以下のとおりです。
テストの実行時に、リポジトリをコンフィグレーションして、SPI パラメータおよび応答データのチェックを実行することができます。The vcrValidation および repositoryValidation リポジトリ コンフィグレーション設定は SPI でデータの送受信に追加の実行時チェックを有効にします。これらの設定は一部の一般的なエラーを捕捉します。デフォルトで、両方の設定は、パフォーマンスを最大化するために無効に設定されています。
VCR 検証を有効にするには、これらの設定をリポジトリ コンフィグレーションに追加します。
Property name : 'vcrValidation'
Property value: 'true' (default is false)
Property name : 'vcrvalidation'
property value: 'true' (default is false)
または、リポジトリ コンフィグレーションの該当するセクションにある MTA-INF/content-config.xml ファイルにこれらのコード スニペットを配置できます。
<repository-property>
<name>vcrValidation</name>
<value>true</value>
</repository-property>
<repository-property>
<name>repositoryValidation</name>
<value>true</value>
</repository-property>
リポジトリおよびチケット操作をデバッグするには、debug.properties ファイルにデバッグ ラインを追加します。
spi.com.bea.content.manager.internal.RepositoryHelper: ON
spi.com.bea.content.manager.internal.RepositoryManagerImpl: ON
timing.com.bea.content.manager.internal.RepositoryHelper: ON
timing.com.bea.content.manager.internal.RepositoryManagerImpl: ON
SPI 呼び出しを有効にするには、debug.properties ファイルにデバッグ ラインを追加します。
spi.com.bea.content.manager.internal.delegate: ON
SPI メソッド タイミングを有効にするには、debug.properties ファイルにデバッグ ラインを追加します。
timing.com.bea.content.manager.internal.delegate: ON
|