33 BulkLoaderユーティリティによるフレックス・アセットのインポート

WebCenter Sitesシステムを設定しているときにフレックス・アセットをインポートするには、BulkLoaderユーティリティが必要です。

トピック:

BulkLoaderユーティリティについて

BulkLoaderユーティリティでは、独自のデータ・ソースからユーザー定義の方法で大量のフレックス・アセット・データを速やかに抽出できます。このユーティリティでは、そのデータを任意のシステム(開発、管理、テストまたは配信)上のWebCenter Sitesデータベースにインポートできます。

抽出メカニズムは、顧客が実装可能なJavaインタフェースを使用して引き出されます。BulkLoaderは、このインタフェース上でメソッドを呼び出して、データソースから入力データを抽出します。下位機能互換性とデータ互換性を確保するためにWebCenter SitesにはこのJavaインタフェースの実装も組み込まれているため、BulkLoaderはJDBC互換のデータソースからデータを抽出することも可能です。

次の各項では、BulkLoaderユーティリティについて説明します。

BulkLoader機能の理解

BulkLoaderには次の機能があります。

  • ユーザー定義の抽出メカニズムに対するJava APIの使用によるサポート。ユーザーは、この抽出インタフェースをカスタム実装するか、JDBCデータソースからの抽出用の組込みサポートを使用できます。

  • フレックス・アセットおよびグループ・データに対する挿入、無効化、更新のサポート。

  • 増分挿入、増分無効化、増分更新に対するサポート。

  • データ抽出中にマルチスレッド・インポート操作を同時実行することによる、スループットを高めるためのパフォーマンス向上。

  • 入力データのチャンク(スライス)処理に対するサポート。

  • 複数のフレックス・ファミリに属するアセット・データのインポートに対するサポート。

  • 下位機能互換性およびデータ互換性。外部JDBCソースからのアセット・データのインポートをサポートします。

BulkLoaderの仕組み

BulkLoaderの再設計により、パフォーマンス、スループットおよびスケーラビリティの向上を実現しました。すべての入力データを読み取った後に出力SQLファイルを生成するのではなく、BulkLoaderは入力データをチャンクとして読み取ります。1つのチャンクが読み取られると即時にインポート・スレッドに渡されると同時に、BulkLoaderスレッドは次のチャンクを読み取るために戻ります。インポート・スレッドは、WebCenter SitesデータベースとJDBCの直接接続を利用します。この方法によって読取りとインポートが並行して実行されるため、スループットの向上が達成されます。スケーラビリティについては、データベース・コンピュータのハードウェアの追加CPUと、同時実行性の高度化に対応するI/O構成を使用して、BulkLoaderのインポート・スレッド数を増加できます。

BulkLoaderユーティリティは、処理中スレッド数を指定するパラメータ、データ抽出インタフェースを実装するJavaクラスの名前、コミット頻度、アセットIDとして使用する一意の開始IDなどが含まれている構成ファイルを必要とします。

次の図に、クライアント固有の実装と、WebCenter Sitesにより提供される、組込みの使用準備済の実装を示します。

図33-1 BulkLoaderのクライアント固有の実装

図33-1の説明が続きます
「図33-1 BulkLoaderのクライアント固有の実装」の説明

図33-2 BulkLoaderの組込みOOTB (out of the box: すぐに使用可能な)実装

図33-2の説明が続きます
「図33-2 BulkLoaderの組込みOOTB (out of the box: すぐに使用可能な)実装」の説明

BulkLoaderユーティリティの使用について

WebCenter Sitesデータベースにインポートする入力データの提供方法に応じて、BulkLoaderは2通りの方法で使用できます。

  • 外部JDBCデータソースからの入力データをBulkLoaderでインポートする場合は、入力データをフラット表またはフラット・ビューで提供します。

  • 入力データを独自の方法でBulkLoaderに提供する場合は、抽出インタフェースIDataExtractを実装するJavaオブジェクトを使用します。

    ノート:

    参照用に、サンプルのBulkLoaderコードがWebCenter Sitesのインストール・メディア(Samplesフォルダ)に収録されています。同じフォルダに、サンプル・ファイルの説明が記載されたreadme.txtファイルも含まれています。

フラット表からのフレックス・アセットのインポート

この項では、BulkLoaderによるフレックス・アセットのインポートに使用する一般手順について説明し、後続の項では各ステップごとに詳しく説明します。このモデルを使用して、新規フレックス・アセットと親をインポートしたり、以前にインポートしたアセットを無効化します。このモデルは、既存アセットの属性値の変更および削除もサポートしています。

基本ステップ

BulkLoaderユーティリティを使用してフレックス・アセットをインポートするには:

  1. 管理システムで、XMLPostを使用して構造アセットをWebCenter Sitesデータベースにインポートします。構造フレックス・アセットとして、属性エディタ、フレックス属性、フレックス親定義、フレックス定義およびフレックス親アセットがあります。

  2. WebCenter Sitesデータベースにフラット表としてインポートするソース・データベースのビューを提供するビューまたはストアド・プロシージャを書き込みます。このフラット表がソース表になります。

  3. 同じソース・データベース内に2つの列を持つマッピング表を作成します。1つの列にはソース・ファイルの列名を示し、もう1つの列にはWebCenter Sitesデータベースに格納されている属性の名前を示します。

  4. ソース表とマッピング表を識別する構成ファイルをコーディングします。

  5. 管理システム上のWebCenter Sitesデータベースとソース・データベースの両方へのアクセスに使用したシステムに構成ファイルを配置します。

  6. 管理システム上のアプリケーション・サーバーを停止します。

  7. BulkLoaderユーティリティを実行します。BulkLoaderはフレックス・アセット・データをインポートして、入力データソースで作成されたbulk_feedbackという表にフィードバックを提供します。

  8. 管理システムでアプリケーション・サーバーを再起動します。

  9. BulkApproverユーティリティを使用して、ロードされたすべてのアセットを承認します。

    ノート:

    BulkLoaderユーティリティは高速化を図って作成されているため、属性、フレックス親定義またはフレックス定義の有無のチェックは行いません。BulkLoaderユーティリティを実行する前に、すべての構造アセット・タイプをインポートしておく必要があります。

ドライバ要件

BulkLoaderには、Oracle Corporationによって提供されていないJDBC (またはJava DataBase Connectivity)ドライバが必要です。ソース・データベースと宛先データベース(つまり、WebCenter Sitesデータベース)の両方に対してJDBCドライバを取得する必要があります。ODBC互換のソース・データベースの場合は、Java SDKの一部として付属するJDBC-ODBCブリッジを使用します。

DB2の要件

BulkLoaderを使用する前に、クライアント・コンピュータ上でusejdbc2.batファイルを実行します。バッチ・ファイルを1回実行してから、BulkLoaderを通常どおりに実行します。

XMLPostを使用して構造アセットをインポートするタイミング

管理システムで、XMLPostとRemoteContentPostポスト・エレメントを使用して、構造アセットをWebCenter Sitesデータベースにインポートします。次のタイプのアセットをインポートします。

  • 属性エディタ

  • フレックス属性

  • フレックス親定義

  • フレックス定義

  • フレックス親アセット

フレックス・モデル内の構造アセット・タイプのインポートについてを参照してください。

入力表(データソース)の作成

すべての新規アセット・データと更新データを保持するために、入力フラット表(データソース)を作成する必要があります。これらのフラット表/フラット・ビューでは、各行が1つのフレックス・アセット・アイテムに相当し、各列がBulkLoaderユーティリティ用のフレックス属性アセットに相当します。

データソースの列名に関して特に要件はありませんが、「マッピング表の作成」で説明するマッピング表を別途作成する必要があります。

この項には次のトピックが含まれます:

挿入

データソース表の名前は、構成ファイル内のinputTableパラメータによって指定されます。

ソース表には、次のプロパティを使用して構成ファイルに指定した次の4つの列名も含める必要があります。

  • inputTableTemplateColumn: ソース表でフレックス定義の名前を保持する列の名前。

  • inputTableNameColumn: ソース表でフレックス・アセットの名前を保持する列の名前。この列の名前は64文字を超えることはできません。

  • inputTableDescriptionColumn: ソース表でフレックス・アセットの説明を保持する列の名前。

  • inputTableGroupsColumn: 親名を保持するソース表内の列の名前。この列の各値には、複数のフレックス親名を、構成ファイルに定義されているmultivalueDelimeter文字で区切って含めることができます。

オプションとして、構成ファイル内のパラメータinputTableUniqueIdColumnを使用すると、入力アイテム別に一意のIDとして機能する列の名前を指定できます。このパラメータに値が割り当てられていない場合、BulkLoaderは入力アイテム別に一意のIDを生成し、そのIDをWebCenter Sitesデータベース内のマッピング表(bulkloader_ids)に格納します。

次に、ソース表(入力表)の例を示します。

図33-3 ソース入力表のサンプル

図33-3の説明が続きます
「図33-3 ソース入力表のサンプル」の説明

ソース表の列名に基づいて、対応する構成ファイル内のソース表プロパティが次のように設定されます。

inputTableTemplateColumn=SNSTEMPLATE
inputTableNameColumn=SNSNAME
inputTableDescriptionColumn=SNSDESCRIPTION
inputTableGroupsColumn=SNSGROUPS
更新数

既存アセットに対して新規の親を追加したり既存の親を削除するために既存アセットの属性データを更新するには、更新パラメータを使用します。

構成ファイル内のinputTableForUpdatesパラメータを使用して、データソース表の名前を指定します。ソース表には、次のプロパティを使用して構成ファイルに指定した次の3つの列名も含める必要があります。

  • inputTableForUpdatesUniqueIdColumn: ソース表でWebCenter Sitesデータベース内のフレックス・アセットまたはフレックス親を一意に識別する列の名前。

  • inputTableForUpdatesDeleteGroupsColumn : ソース表で現在のフレックス・アセットに対して削除する親のリストを指定する列の名前。

  • inputTableForUpdatesAddGroupsColumn : ソース表で現在のフレックス・アセットに対して追加する親のリストを指定する列の名前。

属性に更新を適用した場合、BulkLoaderは列値を次のように解釈します。

  • 特定の属性列に表示されたNULL値は、現在のフレックス・アセットの属性が削除の対象であることを示します。たとえば、deletegroups列のNULL値は、親を削除する必要がないことを示します。addgroups列のNULL値は、親を追加する必要がないことを示します。

  • 非NULL値は、既存の属性値を指定された値で置換する必要があることを示します。たとえば、deletegroups列の非NULL値は、削除する親のリストを指定します。addgroupsの非NULL値は、新規の親が指定されたフレックス・アセットに追加されることを示します。

マッピング表の作成

また、BulkLoaderユーティリティに対してマッピング表を作成し、次の2つの列を設定する必要があります。

  • フラット・データソースにフレックス属性列の名前を保持する列。

  • WebCenter Sitesデータベースにそれぞれの対応する名前を保持する列。

マッピング表では、この2つの列は1対1で対応しています。たとえば、ソース表では、A96714328445のように自動生成された名前を持つベンダー名の列が、単にVENDOR_IDという名前の製品属性アセットにマッピングされている場合があります。

マッピング表には、次の構成ファイルのプロパティを含めます。

  • inputAttributeMapTable: マッピング表ファイルの名前

  • inputAttributeMapTableKeyCol: マッピング表でソース表に属性名を一覧表示する列の名前

  • inputAttributeMapTableValCol: WebCenter Sitesデータベース内で対応する属性アセット名を一覧表示する列の名前。

次に、マッピング表の例を示します。

図33-4 マッピング表のサンプル

図33-4の説明が続きます
「図33-4 マッピング表のサンプル」の説明

ソース表の列名に基づいて、対応する構成ファイル内のソース表プロパティが次のように設定されます。

inputAttributeMapTable=93ATTR_MAP
inputAttributeMapTableKeyCol=SOURCENAME
inputAttributeMapTableValCol=ATTRIBUTENAME

BulkLoader構成ファイルの作成

BulkLoaderユーティリティを作成するには、この項で説明するプロパティを持つ構成ファイルを作成します。このファイルには任意の名前を付けることができます。

次の構文に従ってファイルにプロパティを設定します。

property=value

ノート:

構成ファイルのプロパティ名および値はすべて、大文字と小文字を区別します。

この項には次のトピックが含まれます:

BulkLoader構成ファイルのプロパティ

この表は、BulkLoader構成ファイルのプロパティを説明しています。

表33-1 BulkLoader構成ファイルのプロパティ

プロパティ名 必須/オプション コメント

maxThreads

必須

同時処理スレッドの最大数。これは、WebCenter Sitesデータベース・サーバーへのデータベース接続数でもかまいません。データベース・ホスト上のCPU数に相当するスレッド数を使用します。CPUデータベース・ホストが1つの場合は、2に設定します。

例: 4

dataSliceSize

必須

1回の読取りリクエストで取得されるアイテム数。この数も1つの処理スレッドによって処理されます。

例: 2000

dataExtractionImplClass

必須

データ抽出APIに対応するユーザー固有の実装クラス。(String configFilename)シグネチャのあるコンストラクタが必要です。ここに示すものは、後方互換性のための参照実装クラスです。フラット表のデータ。

デフォルト値(使用準備済): com.openmarket.gatorbulk.objects.DataExtractImpl

initId

必須

開始WebCenter Sites IDを使用すると、最初のBulkLoaderが動作します。その後は、idSyncFileの値が使用されます。

例: 800000000000

idSyncFile

必須

次に使用可能なWebCenter Sites IDがこのファイルに保存されます。BulkLoaderのセッション中に更新されます。

例: C:\FutureTense\BulkLoaderId.txt

idPoolSize

必須

BulkLoaderがWebCenter Sites IDを生成する必要が生じるたびに、その数のIDが収集されてメモリーにキャッシュされます。(アセット数*属性の平均数*2)が、妥当な推定値です。

例: 1000

commitFrequency

必須

データベース・トランザクションの一部とするフレックス・アセット・グループの数。

例: 100

outputJdbcDriver

必須

WebCenter SitesデータベースにアクセスするためのJDBCドライバ・クラスの名前。ここに示す値はOracle 9.0ドライバを反映しています。

例: oracle.jdbc.driver.OracleDriver

outputJdbcURL

必須

JDBC URL。次の例に示す値は、代表的なtype2 oracle JDBCドライバのURLです。

Jdbc:oracle:oci8:@foo

outputJdbcUsername

必須

WebCenter Sitesデータベースのユーザー名。

outputJdbcPassword

必須

WebCenter Sitesデータベースのユーザー・パスワード。

inputTable

必須

新規アセット・データの挿入元であるフラット入力表の名前。

inputAttributeMapTable

必須

ソース表の列と対応する属性名を一覧表示するマッピング表の名前。

inputAttributeMapTableKeyCol

必須

マッピング表でソース表の列名を一覧表示する列の名前。

たとえば:

inputAttributeMapTableKeyCol=SOURCENAME

inputAttributeMapTableValCol

必須

マッピング表で対応する属性名を一覧表示する列の名前。

たとえば:

inputAttributeMapTableValCol=ATTRIBUTENAME

inputTableDescriptionColumn

必須

ソース表でフレックス・アセットの説明を含めた列の名前。

たとえば:

inputTableDescriptionColumn=SNSDESCRIPTION

inputTableGroupsColumn

必須

ソース表で親の名前を含めた列の名前。

各値には、複数の親を、構成ファイルに定義されているmultivalueDelimeter文字で区切って含めることができます。

たとえば:

inputTableGroupsColumn=SNSGROUP

inputTableNameColumn

必須

ソース表で行ごとに製品(または詳細記事または詳細イメージ)の名前を含めた列の名前。

たとえば:

inputTableNameColumn=SNSNAME

inputTableTemplateColumn

必須

ソース表でフレックス定義を含めた列の名前。

たとえば:

inputTableTemplateColumn=SNSTEMPLATE

createdby

必須

フレックス・アセット用にcreatedbyフィールドに入力する必要のあるユーザー名。

たとえば:

createdby=editor

multivalueDelimeter

必須

複数の属性値を区切るデリミタ。デフォルト値はセミコロン(;)です。

たとえば:

multivalueDelimiter=;

siteName

必須

サイトの名前。すべての製品は、このサイトで作成されたかのように動作します。

たとえば:

siteName=AA Illumination

status

必須

インポートされたすべてのフレックス・アセットのステータス・コード。インポート済のものに対してこれをPLに設定してください。

たとえば:

status=PL

tableProducts

必須

WebCenter Sitesデータベースに定義されたフレックス・アセット・タイプの名前。

inputTableUniqueIdColumn

必須

ソース表で新規フレックス・アセットのインポート時に一意のIDとして機能する列の名前。これは、後続のすべての更新操作および無効化操作に使用されます。

BulkLoaderが一意の識別子を生成できるようにするには、この値を空白にします。

targetName

必須

WebCenter Sitesに定義されたパブリッシュ・ターゲットの名前。

renderTemplate

オプション。

フレックス・アセットのレンダリングに使用されるテンプレートの名前(非推奨)

inputFeedbackTable

必須

処理された入力アイテムごとに処理中フィードバックを記録するためにBulkLoaderが作成して使用する表の名前。この表は入力データソースに作成されます。

inputTableForUpdates

オプション。

BulkLoaderユーティリティの実行時に更新アクションが指定された場合のみ必要です。それ以外の場合、この値は空にできます。これは、更新を必要とする属性と親を含めたソース表の名前です。

inputTableForUpdatesUniqueIdColumn

オプション。

BulkLoaderユーティリティの実行時に更新アクションが指定された場合のみ必要です。これは、ソース表でフレックス・アセットに対して一意のIDを指定する列の名前です。

inputTableForUpdatesDeleteGroupsColumn

オプション。

更新アクションが指定されていて、1つ以上のフレックス・アセットで1つ以上の親を削除する必要がある場合のみ必要です。

これは、ソース表で削除する親のリストを指定する列の名前です。

inputTableForUpdatesAddGroupsColumn

オプション。

更新アクションが指定されていて、1つ以上のフレックス・アセットで1つ以上の親を追加する必要がある場合のみ必要です。これは、ソース表で追加する親のリストを指定する列の名前です。

inputLimitRows

オプション。

テストのみに必要です。アクション(挿入、無効化または更新)ごとに処理される入力アイテムの数が制限されます。

updatedby

オプション。

フレックス・アセット用にcreatedbyフィールドに入力する必要のあるユーザー名。たとえば: updateby=editor

updatedstatus

オプション。

更新されたすべてのフレックス・アセットのステータス・コード。これはEDに設定する必要があります。

たとえば: updatestatus=ED

initIDパラメータの設定

initIDパラメータはBulkLoaderがこの値から開始するシード値であり、アセット別に一意のアセットIDを作成する際に増分されます。WebCenter Sitesにより生成される、既存の(または将来の)アセットID番号とのID競合を起こさないID番号の連続ブロックを、BulkLoaderで作成できるようにするシード値番号を選択する必要があります。

現在、WebCenter Sitesで作成されるアセットIDに対して1兆から始まります。競合を避けるために、BulkLoaderユーティリティの実行時に十分に低い数字を選択して、最も高いID番号が900,000,000,000を超えないようにしてください。

BulkLoaderは、データソース表の行/列ごとに1つのアセットを作成します。出力表の各行には専用の一意のアセットIDが必要です。

次のガイドラインを使用して、BulkLoaderユーティリティで作成されるアセットIDの適切な数を決定してください。

  • フレックス・アセットごとに5行、さらに

  • フレックス・アセットごとに属性1つにつき2行

たとえば、データソース表の内容が次の場合:

  • 10,000製品アセット

  • 製品ごとに20の属性(製品定義で決定されたとおり)

  • 製品ごとに10の継承属性(製品親定義で決定されたとおり)

さらに、次の数のIDを許可する必要があります。

(5 x 10,000) + (2 x 30 x 10,000) = 50,000 + 600,000 = 650,000アセットID

initIDの値が800,000,000,000の場合、BulkLoaderは800,000,000,000から約800,000,650,000までのID番号を作成します。

構成ファイルの例

BulkLoader構成ファイルの例を次に示します。

# New BulkLoader configuration for backward compatibility
#
# input datasource configuration
inputJdbcDriver=sun.jdbc.odbc.JdbcOdbcDriver
inputJdbcURL=jdbc:odbc:access-db-conn
inputJdbcUsername=
inputJdbcPassword=
#
# Source tables
#
inputTable=PRD_FLAT_50000
inputAttributeMapTable=PRD_FLAT_ATTRIBUTE_MAP
inputAttributeMapTableKeyCol=SOURCENAME
inputAttributeMapTableValCol=ATTRIBUTENAME
#
# input column names
#
inputTableTemplateColumn=CCTemplate
inputTableNameColumn=CCName
inputTableDescriptionColumn=CCDescription
inputTableGroupsColumn=CCGroups
#
# WebCenter Sites database
#
#  This database is always used for looking up Attributes, #  Product Types and Product Group Types. #  Data is imported into this database.
#
outputJdbcDriver=oracle.jdbc.driver.OracleDriver
outputJdbcURL=jdbc:oracle:oci8:@foo
outputJdbcUsername=csuser
outputJdbcPassword=csuser
#
# Data-specific settings
#
siteName=AA Illumination
targetName=Mirror Publish to burst37
initId=800000000000
createdby=user_designer
status=PL
renderTemplate=CLighting Detail
MAX_ATTRIBUTES=100
multivalueDelimiter=;
commitFrequency=50
#
# The following denotes the flex asset type that we are importing.
tableProducts=Products
#
# Additional information needed for BulkLoader
maxThreads=2
# dataSliceSize 0 means read all input data in one slice.
dataSliceSize=500
dataExtractionImplClass=com.openmarket.gatorbulk.objects.DataExtractImpl
idSyncFile=C:\\FutureTense50\\bulk_uniqueid.dat
idPoolSize=50000
# For inserts
inputTableUniqueIdColumn=
inputFeedbackTable=bulk_feedback
# For updates
inputTableForUpdates=prod_flat_2_upd
inputTableForUpdatesUniqueIdColumn=input_id
inputTableForUpdatesDeleteGroupsColumn=CCGroups
inputTableForUpdatesAddGroupsColumn=
inputLimitRows=1000
############################################################

BulkLoaderユーティリティの実行

開始する前に、ソース・データベースとターゲットWebCenter Sitesデータベースの両方に適切なJDBCドライバが指定されていることを確認してください。

BulkLoaderユーティリティを実行するには:

  1. Adminインタフェースで、Lucene検索エンジンの索引付けを無効にします。『Oracle WebCenter Sitesの管理』Lucene検索エンジンの無効化に関する項を参照してください。
  2. 管理システム上のWebCenter Sitesデータベースとソース・データベースの両方へのアクセスに使用したシステムに構成ファイルを配置します。
  3. 管理システム上のアプリケーション・サーバーを停止します。
  4. Bulkloaderを起動し稼働するには、クラスパスに<ORACLE_HOME>\wcsites\webcentersites\sites-home\lib\*および<ORACLE_HOME>\oracle_common\modules\clients\*ディレクトリを設定します。
    WebCenter SitesでSQL Serverデータベースを使用している場合は、クラスパスにOracle_Home\oracle_common\modules\*を含めます。
  5. すべての単一行に、次のコマンドをそれぞれのインストールに適したパスとともに入力します。

    UNIXの場合

    java -ms16m -mx256m -cp <ORACLE_HOME>/wcsites/webcentersites/sites-home/lib/*:<ORACLE_HOME>/oracle_common/modules/clients/* com.openmarket.gatorbulk.objects.BulkLoader config=bulkloader.ini action=<insert|void|update> validate=<yes|no>

    Windowsの場合

    java -ms16m -mx256m -cp <ORACLE_HOME>\wcsites\webcentersites\sites-home\lib\*:<ORACLE_HOME>\oracle_common\modules\clients\* com.openmarket.gatorbulk.objects.BulkLoader config=bulkloader.ini action=<insert|void|update> validate=<yes|no>

    アクション・パラメータは、BulkLoaderが実行する必要のあるアクションとしてinsertvoidまたはupdateを指定します。検証パラメータをyesに設定すると、BulkLoaderは更新および無効化の際に追加の検証を実行します。入力データのサイズによっては、JVM用にメモリーを増設する必要もあります。

  6. 画面出力を調べて、BulkLoaderユーティリティが適切なデータベースに接続できていることを確認してください。

Contributorインタフェースでのインポート済アセットへのアクセスの有効化

BulkLoaderユーティリティを使用してインポートしたアセットにOracle WebCenter Sites: Contributorインタフェースからアクセスするには、次のステップを実行します。

  1. Lucene検索エンジンの索引付けを再度有効にします。『Oracle WebCenter Sitesの管理』検索索引の設定に関する項を参照してください。
  2. BulkLoaderユーティリティを使用してインポートしたアセットを検索索引に追加します。『Oracle WebCenter Sitesの管理』検索索引へのアセット・タイプの追加に関する項を参照してください。
  3. BulkLoaderユーティリティを使用してインポートしたアセットに対してContributorインタフェースで検索を実行することにより、Contributorインタフェースからアセットにアクセスできることを確認します。Contributorインタフェースでの検索実行の手順は、『Oracle WebCenter Sitesの使用』アセットの検索および編成に関する項を参照してください。

フィードバック情報の確認

BulkLoaderユーティリティの操作完了後、入力データソースに配置されているbulk_feedback表でフィードバック情報を確認します。この表には、BulkLoaderによって処理されたすべての入力アイテムに関する情報が含まれています。

この情報を確認した後で、必要に応じて修正アクションを実行します。入力データを修正する場合は、BulkLoaderを再実行してエラーが修正されていることを確認します。

アセットの承認と配信システムへのパブリッシュ

BulkApproverユーティリティを使用して、ロードしたばかりのアセットを承認します。BulkApproverの使用を参照してください。

カスタム抽出メカニズムを使用したフレックス・アセットのインポート

入力アセット・データをBulkLoaderに提供するために、代替メカニズムが必要になる場合があります。このような場合は、XMLドキュメント、ファイル、レガシー・データベースなど、複数のタイプのソースからデータを集める必要が生じることがあります。これを実行するには、WebCenter Sitesで提供するJavaインタフェースcom.openmarket.bulkloader.interfaces.IDataExtractを使用してユーザー独自のメカニズムを実装し、BulkLoaderにデータを提供できます。

ユーザーは、IDataExtractをサポートするJavaオブジェクトを実装して、BulkLoader構成ファイルにJavaオブジェクトを指定できます。BulkLoaderはこのインタフェース上で読取りリクエストを初期化するメソッドを呼び出して、入力データのチャンクを繰り返し読み取り、読取りリクエスト終了の信号を送ります。このインタフェースにはBulkLoaderユーティリティからのインポート・フィードバックを提供するメソッドもあり、入力プロバイダはこのメソッドを使用してインポートのステータスと、インポート中に発生した可能性のあるエラーを把握できます。

IDataExtractのカスタム実装に役立つ3つのJavaインタフェースがあります。

  • IDataExtract: すべてのカスタム抽出に必須です。

  • IPopulateDataSlice: BulkLoaderユーティリティにデータを提供します。このインタフェースをサポートするコンテナ・オブジェクトがBulkLoaderによって作成され、クライアントに渡されます。

  • IFeedback: BulkLoaderによって処理された各入力アイテムのステータスを提供します。BulkLoaderインポート・スレッドによって作成され、移入されたフィードバック・オブジェクトがクライアントに渡されます。

次のトピックを参照してください。

IDataExtractインタフェース

このインタフェースは、すべてのカスタム抽出に必須です。

次に、このインタフェースを実装するサンプル・コードを示します。

com.openmarket.gatorbulk.interfaces.IDataExtract

package com.openmarket.gatorbulk.interfaces;
import java.util.Iterator;

/**
 * To be implemented by input data provider. 
 * Interface for extracting data from an input source 
 * for BulkLoader.
 * BulkLoader loads an object supporting this interface and invokes 
 * the GetNextInputDataSet() method on this interface repeatedly to 
 * fetch data in batches.
 */

public interface IDataExtract {

  public  final int HAS_DATA    = 100;
  public  final int NO_DATA = 101;

  public  final int SUCCESS = 0;
  public  final int ERROR = -1;

  public  final int INSERT_ASSETS = 1000;
  public  final int VOID_ASSETS = 1010;
  public  final int UPDATE_ASSETS = 1020;
  public  final int NONE_ASSETS = 1030;

  /**
   * Begin requesting input data; tells the client to
   * start the database query, get a cursor, etc.
   * @param requestType
   *    IDataExtract.INSERT_ASSETS,
   *    IDataExtract.VOID_ASSETS,
   *    IDataExtract.UPDATE_ASSETS
   * @param sliceOrNot  true/false
   * true - if data will be requested in batches 
   * false - data will be requested all in one attempt
   * @param sliceSize  >0 number of rows to be 
   * retrieved in one data set
   * @return none
   * @exception java.lang.Exception
   */

  public void InitRequestInputData(int requestType, 
  boolean sliceOrNot, int sliceSize) throws Exception ;

  /**
   * Get a set/slice of input data records.
   * @param dataSlice object to be populated using the
   * methods from IPopulateDataSlice 
   * @return IDataExtract.HAS_DATA when dataSlice has some data,
   *    IDataExtract.NO_DATA when there is no data,
   *    IDataExtract.ERROR when there is an error
   * @exception java.lang.Exception    
   */

  public int  GetNextInputDataSet(IPopulateDataSlice dataSlice)
  throws Exception;

  /**
   * Signal the end of extracting data for given request type
   * @param requestType
   *    IDataExtract.INSERT_ASSETS,
   *    IDataExtract.VOID_ASSETS,
   *    IDataExtract.UPDATE_ASSETS
   * @return none
   * @exception java.lang.Exception
   */

  public void EndRequestInputData(int requestType) 
    throws Exception;

  /**
   * Update the client as to what happened to input data
   * processing. Note that this method would be called by multiple
   * threads, with each thread passing its own IFeedback
   * handle. The implementor of this method should write
   * thread-safe code.
   * @param requestType
   *    IDataExtract.InsertAsset,
   *    IDataExtract.VoidAsset,
   *    IDataExtract.UpdateAsset
   * @param processingStatus - An object containing processing
   * status for all items in one dataset. The implementor of this
   * interface should invoke the IFeedback interface
   * methods on processingStatus to get status for individual
   * rows. This method will be invoked by multiple BulkLoader
   * threads, so make sure this method is implemented in a
   * thread-safe way.
   * @return none
   * @exception java.lang.Exception    
   */

  void UpdateStatus(int requestType, IFeedback  processingStatus) 
    throws Exception;
}

IDataExtractの実装上のノート

IDataExtractを実装するJavaオブジェクトには、文字列パラメータのあるコンストラクタが指定されている必要があります。BulkLoaderは、このオブジェクトをインスタンス化するときに、構成ファイルの名前をコンストラクタに渡します。

メソッドUpdateStatus(..)は複数のBulkLoaderスレッドによって呼び出されるため、このメソッドの実装はスレッド・セーフである必要があります。

この表には、カスタム・データ抽出メソッドの使用時におけるBulkLoaderユーティリティの構成パラメータおよびその説明が含まれます。

表33-2 BulkLoaderの構成パラメータ

プロパティ名 必須/オプション コメント

maxThreads

必須

同時処理スレッドの最大数。これは、WebCenter Sitesデータベース・サーバーへのデータベース接続数でもかまいません。データベース・ホスト上のCPU数に相当するスレッド数を使用します。CPUデータベース・ホストが1つの場合は、2に設定します。

例: 4

dataSliceSize

必須

1回の読取りリクエストで取得されるアイテム数。この数も1つの処理スレッドによって処理されます。

例: 2000

dataExtractionImplClass

必須

データ抽出APIに対応するユーザー固有の実装クラス。(String configFilename)シグネチャのあるコンストラクタが必要です。ここに示すものは、後方互換性のための参照実装クラスです。フラット表のデータ。

デフォルト値(使用準備済): com.openmarket.gatorbulk.objects.DataExtractImpl

initId

必須

開始WebCenter Sites IDを使用すると、最初のBulkLoaderが動作します。その後は、idSyncFileの値が使用されます。

例: 800000000000

idSyncFile

必須

次に使用可能なWebCenter Sites IDがこのファイルに保存されます。BulkLoaderのセッション中に更新されます。

例: C:\FutureTense\BulkLoaderId.txt

idPoolSize

必須

BulkLoaderがWebCenter Sites IDを生成する必要が生じるたびに、その数のIDが収集されてメモリーにキャッシュされます。(アセット数*属性の平均数*2)が、妥当な推定値です。

例: 1000

commitFrequency

必須

必須。

COMMIT文が生成済SQLファイルに挿入される時期を指定します。ゼロ値はCOMMIT文が50行ごとに挿入されることを意味し(デフォルト)、正の整数は各COMMIT文の間の行数を指定します。

たとえば:

commitFrequency=5

(COMMIT文は、5行のSQLコードごとに挿入されます。)

outputJdbcDriver

必須

WebCenter SitesデータベースにアクセスするためのJDBCドライバ・クラスの名前。ここに示す値はOracle 9.0ドライバを反映しています。

例: oracle.jdbc.driver.OracleDriver

outputJdbcURL

必須

JDBC URL。次の例に示す値は、代表的なtype2 oracle JDBCドライバのURLです。

Jdbc:oracle:oci8:@foo

outputJdbcUsername

必須

WebCenter Sitesデータベースのユーザー名。

outputJdbcPassword

必須

WebCenter Sitesデータベースのユーザー・パスワード。

IPopulateDataSlice

次に、このインタフェースを実装するサンプル・コードを示します。

com.openmarket.gatorbulk.interfaces.IPopulateDataSlice

package com.openmarket.gatorbulk.interfaces;

import java.sql.Timestamp;

/**
 * To be implemented by Oracle Corporation
 * Interface to populate a dataSlice by the client.
 * BulkLoader creates an object implementing this interface and then 
 * hands it over to the client, which uses this interface's methods 
 * to populate that object with input data records.
 */

public interface IPopulateDataSlice {

/**
 * Creates a new input data object to hold all the data for a
 * flex asset and makes it the current object. This method is
 * invoked repetitively to populate this object with flex asset
 * input data. Each invocation is to be followed by Set..()
 * methods and AddAttribute..() methods to supply data for one
 * flex asset.
 */

public void AddNewRow();

/**
 * Specify a unique identifier for flex asset input data
 * @param id  user-specific unique identifier
 * @exception java.lang. Exception thrown if any unique-id
 * validation is enabled.
 */

public voidSetAssetUniqueId(String id);

/**
 * Specify the name of the site with which the current flex
 * asset is created or to be created under.
 * @param sitename  name of the site
 */

public void SetSiteName(String sitename);

/**
 * Set the asset type for the flex asset.
 * @param flexAssetType asset type as defined in WebCenter Sites system
 */

public void SetFlexAssetType(String flexAssetType);

/**
 * Specify the name of the parent for the current flex asset. 
 * Use this method repeatedly to add a list of parent names.
 * @param groupName  name of a parent that the current asset 
 * inherits some of its attributes from.
 */

public void AddParentGroup(String groupName);

/**
 * Specify the name of the parent to be deleted for the current 
 * flex asset.
 * Use this method repeatedly to add a list of parent names.
 * @param groupName - name of a parent that the current asset  
 * inherited some of its attributes from.
 */

public void AddParentGroupForDelete(String groupName);

/**
 * Specify definition asset name for the current flex asset.
 * @param definitionAssetName name of the flex definition asset
 */

public void SetDefinitionAssetName(String definitionAssetName);

/**
 * Specify name of the flex asset.
 * @param name - name of the flex asset.Should be unique in 
 * a flex asset family
 */

public voidSetAssetName(String name);

/**
 * Specify description for the flex asset
 * @param description  description
 */

public void SetAssetDescripiton(String description);

/**
 * Specify WebCenter Sites username with which this flex asset is being
 * processed
 * @param username WebCenter Sites username
 */

public void SetCreatedByUserName(String userName);

/**
 * Set WebCenter Sites status code for this asset
 * @param status
 */

public void SetAssetStatus(String status);

/**
 * Set template name
 * @param template  WebCenter Sites template name
 */

public void SetRenderTemplateName(String template);

/**
 * Specify startMenu for workflow participation
 * @param startMenuName  start menu name for this flex asset
  */

public void SetStartMenuName(String startMenuName);

/**
 * WebCenter Sites
 * Specify publish approval target name
 * @param targetName  approval target name
 */

public void SetApprovalTargetName(String targetName);

/**
 * Add a name/value pair to specify a WebCenter Sites attribute 
 * of type 'text' for the current input object.
 * Call this method more than once, if this is a 
 * multi-valued attribute.
 * @param attrName  attribute name as defined in the WebCenter Sites
 * database for the flex asset being processed
 * @param value java.lang.String
 */

public void AddAttributeValueString(String attrName, String value);

/**
 * Add a name/value pair to specify a WebCenter Sites attribute
 * of type 'date' for the current input object.
 * Call this method more than once, if this is a 
 * multi-valued attribute.
 * @param attrName  attribute name as defined in the WebCenter Sites
 * database for the flex asset being processed
 * @param value  java.sql.Timestamp
 */

public void AddAttributeValueDate(String attrName, Timestamp value);

/**
 * Add a name/value pair to specify an attribute for the current 
 * input object.
 * Call this method more than once, if this is a multi-valued *attribute
 * @param attrName  attribute name as defined in WebCenter Sites database 
 * for the flex asset being processed
 * @param value  java.lang.Double 
 */

public void AddAttributeValueDouble(String attrName, Double value);

/**
 * Add a name/value pair to specify a WebCenter Sites attribute 
 * of type 'money' for the current input object
 * Call this method more than once if this is a 
 * multi-valued attribute
 * @param attrName  attribute name as defined in WebCenter Sites database
 * for the flex asset being processed
 * @param value  java.lang.Float
 */

public void AddAttributeValueFloat(String attrName, Float value);

/**
 * Add a name/value pair to specify a WebCenter Sites attribute
 * of type 'int' for the current input object.
 * Call this method more than once, if this is a 
 * multi-valued attribute.
 * @param attrName  attribute name as defined in WebCenter Sites
 * database for the flex asset being processed
 * @param value  java.lang.Integer 
 */

public void AddAttributeValueInteger(String attrName, 
  Integer value);

/**
 * Add a name/value pair to specify any WebCenter Sites attribute for the
 * current input object.
 * Use the datatype-specific methods above instead of this
 * method, as this one is for
 * supporting any other new types in future.
 * Call this method more than once, if this is a 
 * multi-valued attribute
 * @param attrName  attribute name as defined in the WebCenter Sites
 * database for the flex asset being processed.
 * @param value  java.lang.Object 
 */

public void AddAttributeValueObject(String attrName, 
  Object value);
}

IFeedbackインタフェース

次に、このインタフェースを実装するサンプル・コードを示します。

com.openmarket.gatorbulk.interfaces.IFeedback

package com.openmarket.gatorbulk.interfaces;

import java.util.Iterator;

/**
 * To be implemented by Oracle Corporation
 * Interface for the BulkLoader client to get the status of
 * processing request to insert/void/update flex assets.
 */

public interface IFeedback {
  public final int ERROR=-1;
  public final int SUCCESS=0;
  public final int NOT_PROCESSED=1;

/**
 * Get a list of keys from input data slice that has
 * been processed
 * @return java.util.Iterator
 */

public Iterator GetInputDataKeyValList();

/**
 * Get WebCenter Sites asset ID for given input identifier
 * @param inputDataKeyVal key value of the unique identifier 
 * in the input data record
 * @return Get the associated asset ID from the WebCenter Sites system.
 * null if missing.
 */

public String GetWebCenter SitesAssetId(String inputDataKeyVal);

/**
 * Get the processing status for the input data record
 * identified by a key
 * @param inputDataKeyVal key value of the unique identifier
 * column in the input data record
 * @return ERROR - processed but failed, SUCCESS - processed
 * successfully, NOT_PROCESSED - unknown item or not part of 
 * the processing dataset.
 */

public int GetStatus(String inputDataKeyVal);

/**
 * Get the associated error message for a given key, 
 * unique identifier in input data
 * @param inputDataKeyVal  unique identifier for input data
 * @return error message, if GetStatus() returned ERROR 
 * or NOT_PROCESSED
 */

public String GetErrorDescription(String inputDataKeyVal);

ノート:

カスタム抽出メソッドを実装するときには、前に説明したBulkLoaderの実行手順と同じ手順を使用します。BulkLoaderユーティリティの使用についてを参照してください。

BulkApproverユーティリティによるフレックス・アセットの承認

BulkApproverは、BulkLoader経由でシステムにロードされた多数のフレックス・アセットを迅速かつ簡単に承認します。

BulkApproverは次のタスクを実行できます。

  • 前のBulkLoaderセッションで行われたすべての更新と削除を承認システムに通知します。

  • 1つ以上のパブリッシュ・ターゲットに対して新規にロードされたすべてのフレックス・アセットを承認します。

  • 実際にアセットをパブリッシュすることなく、新規にロードされたすべてのフレックス・アセットを指定されたミラー定義に対してパブリッシュ済としてマークします。たとえば、長いミラー・パブリッシュ・セッションを迂回するには、選択したアセットをコンテンツ管理データベースから配信システム上のミラー宛先にコピーし、BulkApproverを使用してミラー宛先に対してアセットをパブリッシュ済とマークします。

    ノート:

    xceladminロールが割り当てられているユーザーのみがBulkApproverを実行できます。

この項には次のトピックが含まれます:

BulkApproverの構成

BulkApproverを初めて実行する前に、このユーティリティ用の構成ファイルを作成する必要があります。WebCenter Sitesのデータベースにアクセスできるシステム上でBulkApprover.iniファイルを別途作成するか、BulkLoaderの.iniファイルの1つにBulkApproverの構成情報を追加できます。

この表は、必須およびオプションの構成パラメータを示しています。

表33-3 BulkApproverの構成パラメータ

パラメータ 説明

bulkApprovalURL

(必須)

BulkLoaderでデータをインポートしたホスト・サーバー上のURL。

正確な値は次のようになります。

http://<myServer>/cs/ContentServer?pagename=OpenMarket/Xcelerate/Actions/BulkApproval

<myServer>は、ホスト・サーバーの名前です。

adminUserName

(必須)

xceladminロールが割り当てられているユーザーのWebCenter Sitesユーザー名。

adminUserPassword

(必須)

adminUserNameのパスワード。

approvalTargetList

(必須)

アセットの承認が必要な宛先のリスト。宛先名については、「管理」タブの「パブリッシュ」オプション、またはpubtarget表の名前列を参照してください。それぞれの宛先を、multiValueDelimiterパラメータに指定したデリミタで区切ります。構文は次のとおりです。

name1<multiValueDelimiter>name2<multiValueDelimiter>name3

multiValueDelimiter (必須)

選択したデリミタ。このデリミタを使用して、appovalTargetListパラメータに指定した承認ターゲットを区切ります。

assetIdSqlFilter

(オプション)

アセットIDをフィルタするためにSQLのWHERE句に追加できる文。

たとえば:

asset_id%20=0

または

asset_id%20!=0

debug

(オプション)

BulkApproverのデバッグをオンおよびオフにします。

trueはデバッグをオンにします。デバッグを行わない場合は、このパラメータを空白にします。

デバッグ・メッセージは、コマンドラインのoutput_fileパラメータに指定したファイルに書き込まれます。

assetschunksize

(オプション)

1回のトランザクションで承認されるアセットの数を指定します。たとえば、このプロパティを20に設定すると、アセットは20のグループで承認されることになります。

このプロパティを設定すると、セッションのタイムアウトが回避されます。

デフォルト値: 25

outputJdbcDriver

(必須)

WebCenter SitesデータベースにアクセスするためのJDBCドライバ・クラスの名前。

例: oracle.jdbc.driver.OracleDriver

outputJdbcURL

(必須)

JDBC URL。次の例に示す値は、代表的なtype 2 oracle JDBCドライバのURLです。

Jdbc:oracle:oci8:@foo

outputJdbcUsername

(必須)

WebCenter Sitesデータベースのユーザー名。

outputJdbcPassword

(必須)

WebCenter Sitesデータベースのユーザー・パスワード。

BulkApprover.iniファイルの例

次のサンプルは、BulkApprover構成パラメータの正しい構文を示したものです。

bulkApprovalURL=http://MyServer/cs/ContentServer?pagename=OpenMarket/Xcelerate/Actions/BulkApproval
multiValueDelimiter=;;;;;;
assetIdSqlFilter=
assetsChunkSize=3
debug=true
outputJdbcDriver=oracle.jdbc.driver.OracleDriver
outputJdbcURL=jdbc:oracle:thin:@19zln:1521:MyServer
#outputJdbcUsername=izod10
outputJdbcUsername=ftuser3
outputJdbcPassword=ftuser3

BulkApproverの使用

BulkApproverユーティリティの構成後にこれを使用して、BulkLoaderユーティリティ経由でデータベースにインポートされたアセットを承認します。

BulkApproverは、コマンドラインから実行します。パラメータについては次の表で説明します。これらのパラメータは次の例に含まれています。

表33-4 BulkApproverのパラメータ

コマンドライン・パラメータ 説明

config

BulkApprover構成情報を格納するファイルの名前(たとえば、BulkApprover.ini)。

action

BulkApproverで実行するアクション。このパラメータはnotifyまたはapproveに設定する必要があります。必要に応じて、他のアクションを追加します。BulkApproverで複数のアクションを実行するには、カンマ区切りリストにアクション名を指定します。

有効な値:

  • notify: 前のBulkLoaderセッションで処理されたすべての更新と無効化を承認システムに通知します。

  • approve: 指定されたパブリッシュの宛先に対して処理したすべてのアセットを承認するよう、BulkApproverに指示します。

  • mark_publish: 実際にアセットをパブリッシュすることなく、処理したすべてのアセットを指定されたミラー宛先に対してパブリッシュ済としてマークします。BulkApprover構成ファイル内のapprovalTargetListパラメータでパブリッシュ・ターゲットを指定します。アセットをパブリッシュ済としてマークしない場合は、このパラメータを含めないでください。

output_file

サーバーからのすべての出力が含まれているログ・ファイルの名前(たとえば、bulkapprover.txt)。

BulkApproverを実行するには、次の例に示すようにパスを設定します。

次の例では、Windowsの構文を使用します。LinuxおよびSolarisを含むUNIXベースのシステムの場合は、区切り用としてスラッシュ(/)およびコロン(:)を使用します。

java -ms16m -mx64m -cp <ORACLE_HOME>\wcsites\webcentersites\sites-home\lib\*;<ORACLE_HOME>\oracle_common\modules\clients\*;<path to jtds-1.2.2.jar>\jtds-1.2.2.jar;<path to servlet-api.jar>\servlet-api.jar; com.openmarket.gatorbulk.objects.BulkApprover config=bulkapprover.ini action=<notify|approve|mark_publish> output_file=<out.txt>  target_list=Dynamic;;;;;;testdest username=<adminUserName(fwadmin)> password=<adminUserPassword(xceladmin)>