この章では、WebCenter Sitesシステムの初期設定時においてフレックス・アセットのインポートに使用するBulkLoaderユーティリティについて説明します。
この章には次の項が含まれます。
BulkLoaderユーティリティを使用することにより、大量のフレックス・アセット・データをユーザー自身のデータソースからユーザーが定義した方法で迅速に抽出し、任意のシステム(開発、管理、テスト、または配信システム)上のWebCenter Sitesデータベースにインポートできます。
抽出メカニズムは、顧客が実装可能なJavaインタフェースを使用して引き出されます。BulkLoaderは、このインタフェース上でメソッドを呼び出して、データソースから入力データを抽出します。下位機能互換性とデータ互換性を確保するためにWebCenter SitesにはこのJavaインタフェースの実装も組み込まれているため、BulkLoaderはJDBC互換のデータソースからデータを抽出することも可能です。
この項の内容は、次のとおりです。
BulkLoaderには次の機能があります。
ユーザー定義の抽出メカニズムに対するJava APIの使用によるサポート。ユーザーは、この抽出インタフェースをカスタム実装するか、JDBCデータソースからの抽出用の組込みサポートを使用できます。
フレックス・アセットおよびグループ・データに対する挿入、無効化、更新のサポート。
増分挿入、増分無効化、増分更新に対するサポート。
データ抽出中にマルチスレッド・インポート操作を同時実行することによる、スループットを高めるためのパフォーマンス向上。
入力データのチャンク(スライス)処理に対するサポート。
複数のフレックス・ファミリに属するアセット・データのインポートに対するサポート。
下位機能互換性およびデータ互換性。外部JDBCソースからのアセット・データのインポートをサポートします。
BulkLoaderの再設計により、パフォーマンス、スループットおよびスケーラビリティの向上を実現しました。すべての入力データを読み取った後に出力SQLファイルを生成するのではなく、BulkLoaderは入力データをチャンクとして読み取ります。1つのチャンクが読み取られると即時にインポート・スレッドに渡されると同時に、BulkLoaderスレッドは次のチャンクを読み取るために戻ります。インポート・スレッドは、WebCenter SitesデータベースとJDBCの直接接続を利用します。この方法によって読取りとインポートが並行して実行されるため、スループットの向上が達成されます。スケーラビリティについては、データベース・コンピュータのハードウェアにCPUが追加され、同時実行性の高度化に対応するI/O構成が行われた場合、ユーザーはBulkLoaderのインポート・スレッド数を増加できます。
BulkLoaderユーティリティは、処理中スレッド数を指定するパラメータ、データ抽出インタフェースを実装するJavaクラスの名前、コミット頻度、アセットIDとして使用する一意の開始IDなどが含まれている構成ファイルを必要とします。
次の図に、クライアント固有の実装と、WebCenter Sitesにより提供される、組込みの使用準備済の実装を示します。
図22-2 BulkLoaderの組込みOOTB (out of the box: すぐに使用可能な)実装
WebCenter Sitesデータベースにインポートする入力データの提供方法に応じて、BulkLoaderは2どおりの方法で使用できます。
外部JDBCデータソースからの入力データをBulkLoaderでインポートする場合は、入力データをフラット表またはフラット・ビューで提供します。
入力データを独自の方法でBulkLoaderに提供する場合は、抽出インタフェースIDataExtractを実装するJavaオブジェクトを使用します。
注意: 参照用に、サンプルのBulkLoaderコードがWebCenter Sitesのインストール・メディア(Samplesフォルダ)に収録されています。同じフォルダに、サンプル・ファイルの説明が記載されたreadme.txtファイルも含まれています。 |
この項では、BulkLoaderによるフレックス・アセットのインポートに使用する一般手順について説明し、後続の各項では手順ごとに詳しく説明します。このモデルを使用して、新規フレックス・アセットと親をインポートしたり、以前にインポートしたアセットを無効化できます。このモデルは、既存アセットの属性値の変更および削除もサポートしています。
基本手順
BulkLoaderユーティリティによるフレックス・アセットのインポートの基本プロセスは、次のとおりです。
管理システムで、XMLPostを使用して構造アセットをWebCenter Sitesデータベースにインポートします。構造フレックス・アセットとして、属性エディタ、フレックス属性、フレックス親定義、フレックス定義およびフレックス親アセットがあります。
WebCenter Sitesデータベースにフラット表としてインポートするソース・データベースのビューを提供するビューまたはストアド・プロシージャを書き込みます。このフラット表がソース表になります。
同じソース・データベース内に2つの列を持つマッピング表を作成します。1つの列にはソース・ファイルの列名を示し、もう1つの列にはWebCenter Sitesデータベースに格納されている属性の名前を示します。
ソース表とマッピング表を識別する構成ファイルをコーディングします。
管理システム上のWebCenter Sitesデータベースとソース・データベースの両方へのアクセスに使用したシステムに構成ファイルを配置します。
管理システム上のアプリケーション・サーバーを停止します。
BulkLoaderユーティリティを実行します。BulkLoaderはフレックス・アセット・データをインポートして、入力データソースで作成されたbulk_feedback
という表にフィードバックを提供します。
管理システムでアプリケーション・サーバーを再起動します。
BulkApproverユーティリティを使用して、ロードされたすべてのアセットを承認します。
注意: BulkLoaderユーティリティは高速化を図って作成されているため、属性、フレックス親定義またはフレックス定義の有無のチェックは行いません。BulkLoaderユーティリティを実行する前に、すべての構造アセット・タイプをインポートしておく必要があります。 |
ドライバ要件
BulkLoaderではJDBC (Java DataBase Connectivity)ドライバが必要です。このドライバは、Oracle社からは提供されません。JDBCドライバは、ソース・データベースおよび宛先データベース(WebCenter Sitesデータベース)の両方に対して取得する必要があります。ODBC互換のソース・データベースがある場合、Java SDKの一部として付属するJDBC-ODBCブリッジを使用できます。
DB2の要件
WebCenter SitesシステムでDB2データベースを使用している場合は、クライアント・コンピュータ上でusejdbc2.bat
ファイルを実行して、BulkLoaderを使用可能にする必要があります。バッチ・ファイルを1回実行するだけで、BulkLoaderを通常どおりに実行できるようになります。
管理システムで、XMLPostとRemoteContentPost
ポスティング・エレメントを使用して、構造アセットをWebCenter Sitesデータベースにインポートします。次のタイプのアセットをインポートします。
属性エディタ
フレックス属性
フレックス親定義
フレックス定義
フレックス親アセット
この手順の詳細は、第21.3項「フレックス・モデル内の構造アセット・タイプのインポート」を参照してください。
すべての新規アセット・データと更新データを保持するために、入力フラット表(データソース)を作成する必要があります。これらのフラット表/フラット・ビューでは、各行が1つのフレックス・アセット・アイテムに相当し、各列がBullkLoaderユーティリティ用のフレックス属性アセットに相当します。
データソースの列名に関して特に要件はありませんが、第22.1.7項「手順3: マッピング表の作成」で説明するマッピング表を別途作成する必要があります。
この項の内容は、次のとおりです。
データソース表の名前は、構成ファイル内のinputTable
パラメータによって指定されます。
ソース表には、次のプロパティを使用して構成ファイルに指定した次の4つの列名も含める必要があります。
inputTableTemplateColumn
: ソース表でフレックス定義の名前を保持する列の名前。
inputTableNameColumn
: ソース表でフレックス・アセットの名前を保持する列の名前。この列の名前は64文字を超えることはできません。
inputTableDescriptionColumn
: ソース表でフレックス・アセットの説明を保持する列の名前。
inputTableGroupsColumn
: ソース表で親定義の名前を保持する列の名前。この列の各値には、複数のフレックス親定義名を、構成ファイルに定義されているmultivalueDelimeter
文字で区切って含めることができます。
オプションとして、構成ファイル内のパラメータinputTableUniqueIdColumn
を使用すると、入力アイテム別に一意のIDとして機能する列の名前を指定できます。このパラメータに値が割り当てられていない場合、BulkLoaderは入力アイテム別に一意のIDを生成し、そのIDをWebCenter Sitesデータベース内のマッピング表(bulkloader_ids
)に格納します。
次に、ソース表(入力表)の例を示します。
ソース表の列名に基づいて、対応する構成ファイル内のソース表プロパティが次のように設定されます。
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データベース内で対応する属性アセット名を一覧表示する列の名前
次に、マッピング表の例を示します。
ソース表の列名に基づいて、対応する構成ファイル内のソース表プロパティが次のように設定されます。
inputAttributeMapTable=93ATTR_MAP inputAttributeMapTableKeyCol=SOURCENAME inputAttributeMapTableValCol=ATTRIBUTENAME
BulkLoaderユーティリティを作成するには、この項で説明するプロパティを持つ構成ファイルを作成します。このファイルには任意の名前を付けることができます。
次の構文に従ってファイルにプロパティを設定します。
property=value
注意: 構成ファイルのプロパティ名および値はすべて、大文字と小文字を区別します。 |
この項の内容は、次のとおりです。
次の表に、BulkLoader構成ファイルのプロパティを説明します。
表22-1 BulkLoader構成ファイルのプロパティ
プロパティ名 | 必須/オプション | コメント |
---|---|---|
|
必須 |
同時処理スレッドの最大数。これは、WebCenter Sitesデータベース・サーバーへのデータベース接続数でもかまいません。データベース・ホスト上のCPU数に相当するスレッド数を使用します。CPUデータベース・ホストが1つの場合は、2に設定します。 例: |
|
必須 |
1回の読取りリクエストで取得されるアイテム数。この数も1つの処理スレッドによって処理されます。 例: |
|
必須 |
データ抽出APIに対応するユーザー固有の実装クラス。( デフォルト値(使用準備済): |
|
必須 |
開始WebCenter Sites IDを使用すると、最初のBulkLoaderが動作します。その後は、
詳細は、第22.1.8.2項「initIDパラメータの設定」を参照してください。 |
|
必須 |
次に使用可能なWebCenter Sites IDがこのファイルに保存されます。BulkLoaderのセッション中に更新されます。
|
|
必須 |
BulkLoaderがWebCenter Sites IDを生成する必要が生じるたびに、その数のIDが収集されてメモリーにキャッシュされます。(アセット数*属性の平均数*2)が、妥当な推定値です。 例: |
|
必須 |
データベース・トランザクションの一部とするフレックス・アセット・グループの数。 例: |
|
必須 |
WebCenter SitesデータベースにアクセスするJDBCドライバ・クラスの名前。ここに示す値はOracle 9.0ドライバを反映しています。 例: |
|
必須 |
JDBC URL。次の例に示す値は、代表的なtype2 oracle JDBCドライバのURLです。
|
|
必須 |
WebCenter Sitesデータベースのユーザー名 |
|
必須 |
WebCenter Sitesデータベースのユーザー・パスワード |
|
必須 |
新規アセット・データの挿入元であるフラット入力表の名前。 |
|
必須 |
ソース表の列と対応する属性名を一覧表示するマッピング表の名前。 |
|
必須 |
マッピング表でソース表の列名を一覧表示する列の名前。 例:
|
|
必須 |
マッピング表で対応する属性名を一覧表示する列の名前。 例: inputAttributeMapTableValCol=ATTRIBUTENAME |
|
必須 |
ソース表でフレックス・アセットの説明を含めた列の名前。 例: inputTableDescriptionColumn=SNSDESCRIPTION |
|
必須 |
ソース表で親の名前を含めた列の名前。 各値には、複数の親を、構成ファイルに定義されている 例:
|
|
必須 |
ソース表で行ごとに製品(または詳細記事または詳細イメージ)の名前を含めた列の名前。 例: inputTableNameColumn=SNSNAME |
|
必須 |
ソース表でフレックス定義を含めた列の名前。 例:
|
|
必須 |
フレックス・アセット用に 例:
|
|
必須 |
複数の属性値を区切るデリミタ。デフォルト値はセミコロン(;)です。 例:
|
|
必須 |
サイトの名前。すべての製品は、このサイトで作成されたかのように動作します。 例:
|
|
必須 |
インポートされたすべてのフレックス・アセットのステータス・コード。インポート済のものに対してこれを 例:
|
|
必須 |
WebCenter Sitesデータベースに定義されたフレックス・アセット・タイプの名前。 |
|
必須 |
ソース表で新規フレックス・アセットのインポート時に一意のIDとして機能する列の名前。これは、後続のすべての更新操作および無効化操作に使用されます。 BulkLoaderで一意のIDを生成する場合は、この値を空にします。 |
|
必須 |
WebCenter Sitesに定義されたパブリッシュ・ターゲットの名前。 |
|
オプション |
フレックス・アセットのレンダリングに使用されるテンプレートの名前(非推奨) |
|
必須 |
処理された入力アイテムごとに処理中フィードバックを記録するためにBulkLoaderが作成して使用する表の名前。この表は入力データソースに作成されます。 |
|
オプション |
BulkLoaderユーティリティの実行時に更新アクションが指定された場合のみ必要です。それ以外の場合、この値は空にできます。これは、更新を必要とする属性と親を含めたソース表の名前です。 |
|
オプション |
BulkLoaderユーティリティの実行時に更新アクションが指定された場合のみ必要です。これは、ソース表でフレックス・アセットに対して一意のIDを指定する列の名前です。 |
|
オプション |
更新アクションが指定されていて、1つ以上のフレックス・アセットで1つ以上の親を削除する必要がある場合のみ必要です。 これは、ソース表で削除する親のリストを指定する列の名前です。 |
|
オプション |
更新アクションが指定されていて、1つ以上のフレックス・アセットで1つ以上の親を追加する必要がある場合のみ必要です。これは、ソース表で追加する親のリストを指定する列の名前です。 |
|
オプション |
テストのみに必要です。アクション(挿入、無効化または更新)ごとに処理される入力アイテムの数が制限されます。 |
|
オプション |
フレックス・アセット用に |
|
オプション |
更新されたすべてのフレックス・アセットのステータス・コード。これは 例: |
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番号を作成します。
次に、GE Lightingサンプル・サイトで使用可能な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=GE Lighting 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 ############################################################
開始する前に、ソース・データベースとターゲットWebCenter Sitesデータベースの両方に適切なJDBCドライバが指定されていることを確認してください。
次の手順を実行します。
管理システム上のWebCenter Sitesデータベースとソース・データベースの両方へのアクセスに使用したシステムに構成ファイルを配置します。
管理システム上のアプリケーション・サーバーを停止します。
すべての単一行に、次のコマンドをそれぞれのインストールに適したパスとともに入力します。
UNIXの場合
java -ms16m -mx256m -cp <path to gatorbulk.jar>/gatorbulk.jar:<path to commons-logging-1.1.1.jar>/commons-logging-1.1.1.jar:<path to cs-core.jar>/cs-core.jar:<path to cs.jar>/cs.jar:<path to commons-codec-1.4.jar>/commons-codec-1.4.jar:<path to httpclient-4.1.2.jar>/httpclient-4.1.2.jar:<path to httpcore-4.1.2.jar>/httpcore-4.1.2.jar:<path to httpmime-4.1.2.jar>/httpmime-4.1.2.jar:<path to jtds-1.2.2.jar>/jtds-1.2.2.jar:<path to commons-lang-2.4.jar>/commons-lang-2.4.jar com.openmarket.gatorbulk.objects.BulkLoader config=bulkloader.ini action=<insert|void|update> validate=<yes|no>
Windowsの場合
java -ms16m -mx256m -cp <path to gatorbulk.jar>\gatorbulk.jar;<path to commons-logging-1.1.1.jar>\commons-logging-1.1.1.jar;<path to cs-core.jar>\cs-core.jar;<path to cs.jar>\cs.jar;<path to commons-codec-1.4.jar>\commons-codec-1.4.jar;<path to httpclient-4.1.2.jar>\httpclient-4.1.2.jar;<path to httpcore-4.1.2.jar>\httpcore-4.1.2.jar;<path to httpmime-4.1.2.jar>\httpmime-4.1.2.jar;<path to jtds-1.2.2.jar>\jtds-1.2.2.jar;<path to commons-lang-2.4.jar>\commons-lang-2.4.jar com.openmarket.gatorbulk.objects.BulkLoader config=bulkloader.ini action=<insert|void|update> validate=<yes|no>
アクション・パラメータは、BulkLoaderが実行する必要のあるアクションとしてinsert
、void
またはupdate
を指定します。検証パラメータをyes
に設定すると、BulkLoaderは更新および無効化の際に追加の検証を実行します。入力データのサイズによっては、JVM用にメモリーを増設する必要もあります。
画面出力を調べて、BulkLoaderユーティリティが適切なデータベースに接続できていることを確認してください。
BulkLoaderユーティリティの操作完了後、入力データソースに配置されているbulk_feedback
表でフィードバック情報を確認します。この表には、BulkLoaderによって処理されたすべての入力アイテムに関する情報が含まれています。
この情報を確認した後で、必要に応じて修正アクションを実行します。入力データを修正する場合は、BulkLoaderを再実行してエラーが修正されていることを検証する必要があります。
BulkApproverユーティリティを使用して、ロードしたばかりのアセットを承認します。BulkApproverの使用手順は、第22.3.2項「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インポート・スレッドによって作成され、移入されたフィードバック・オブジェクトがクライアントに渡されます。
これらのインタフェースについて、次の各項で説明します。
注意: カスタム抽出メソッドを実装するときには、前に説明したBulkLoaderの実行手順と同じ手順を使用します。 |
この項の内容は、次のとおりです。
このインタフェースは、すべてのカスタム抽出に必須です。
次に、このインタフェースを実装するサンプル・コードを示します。
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 * theGetNextInputDataSet() 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の構成パラメータを一覧表示して説明します。
表22-2 BulkLoaderの構成パラメータ
プロパティ名 | 必須/オプション | コメント |
---|---|---|
|
必須 |
同時処理スレッドの最大数。これは、WebCenter Sitesデータベース・サーバーへのデータベース接続数でもかまいません。データベース・ホスト上のCPU数に相当するスレッド数を使用します。CPUデータベース・ホストが1つの場合は、2に設定します。 例: |
|
必須 |
1回の読取りリクエストで取得されるアイテム数。この数も1つの処理スレッドによって処理されます。 例: |
|
必須 |
データ抽出APIに対応するユーザー固有の実装クラス。(String configFilename)シグネチャのあるコンストラクタが必要です。ここに示すものは、後方互換性のための参照実装クラスです。フラット表のデータ。 デフォルト値(使用準備済): |
|
必須 |
開始WebCenter Sites IDを使用すると、最初のBulkLoaderが動作します。その後は、
|
|
必須 |
次に使用可能なWebCenter Sites IDがこのファイルに保存されます。BulkLoaderのセッション中に更新されます。
|
|
必須 |
BulkLoaderがWebCenter Sites IDを生成する必要が生じるたびに、その数のIDが収集されてメモリーにキャッシュされます。(アセット数*属性の平均数*2)が、妥当な推定値です。 例: |
|
必須 |
必須。
例:
( |
|
必須 |
WebCenter SitesデータベースにアクセスするJDBCドライバ・クラスの名前。ここに示す値はOracle 9.0ドライバを反映しています。 例: |
|
必須 |
JDBC URL。次の例に示す値は、代表的なtype2 oracle JDBCドライバのURLです。
|
|
必須 |
WebCenter Sitesデータベースのユーザー名 |
|
必須 |
WebCenter Sitesデータベースのユーザー・パスワード |
次に、このインタフェースを実装するサンプル・コードを示します。
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); }
次に、このインタフェースを実装するサンプル・コードを示します。
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); }
BulkApproverは、BulkLoader経由でシステムにロードされた多数のフレックス・アセットを迅速かつ簡単に承認するユーティリティです。
BulkApproverは次のタスクを実行できます。
前のBulkLoaderセッションで行われたすべての更新と削除を承認システムに通知します。
1つ以上のパブリッシュ・ターゲットに対して新規にロードされたすべてのフレックス・アセットを承認します。
実際にアセットをパブリッシュすることなく、新規にロードされたすべてのフレックス・アセットを指定されたミラー定義に対してパブリッシュ済としてマークします。たとえば、長いミラー・パブリッシュ・セッションを迂回するには、選択したアセットをコンテンツ管理データベースから配信システム上のミラー宛先にコピーし、BulkApproverを使用してミラー宛先に対してアセットをパブリッシュ済とマークします。
注意:
|
この項の内容は、次のとおりです。
BulkApproverを初めて実行する前に、このユーティリティ用の構成ファイルを作成する必要があります。WebCenter Sitesのデータベースにアクセスできるシステム上でBulkApprover.ini
ファイルを別途作成するか、BulkLoaderの.ini
ファイルの1つにBulkApproverの構成情報を追加できます。
次の表に、必須およびオプションの構成パラメータを示します。
表22-3 BulkApproverの構成パラメータ
パラメータ | 説明 |
---|---|
(必須) |
BulkLoaderでデータをインポートしたホスト・サーバー上のURL。 正確な値は次のようになります。
|
(必須) |
|
(必須) |
|
(必須) |
アセットの承認が必要な宛先のリスト。宛先名については、「管理」タブの「パブリッシュ」オプション、または name1 |
|
選択したデリミタ。このデリミタを使用して、 |
(オプション) |
アセットIDをフィルタするためにSQLの 例:
または
|
(オプション) |
BulkApproverのデバッグをオンおよびオフにします。 値 デバッグ・メッセージは、コマンドラインの |
(オプション) |
1回のトランザクションで承認されるアセットの数を指定します。たとえば、このプロパティを このプロパティを設定すると、セッションのタイムアウトが回避されます。 デフォルト値: |
(必須) |
WebCenter SitesデータベースにアクセスするJDBCドライバ・クラスの名前。 例: |
(必須) |
JDBC URL。次の例に示す値は、代表的なtype 2 oracle JDBCドライバのURLです。
|
(必須) |
WebCenter Sitesデータベースのユーザー名。 |
(必須) |
WebCenter Sitesデータベースのユーザー・パスワード。 |
サンプルBulkApprover.iniファイル
次のサンプルは、BulkApprover構成パラメータの正しい構文を示したものです。
bulkApprovalURL=http://MyServer/cs/ContentServer?pagename=OpenMarket/Xcelerate/Actions/BulkApproval adminUserName=admin adminUserPassword=xceladmin approvalTargetList=Dynamic;;;;;;testdest 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ユーティリティの構成後にこれを使用して、BulkLoaderユーティリティ経由でデータベースにインポートされたアセットを承認できます。
BulkApproverは、コマンドラインから実行します。パラメータについては次の表で説明します。これらのパラメータは次の例に含まれています。
表22-4 BulkApproverのパラメータ
コマンドライン・パラメータ | 説明 |
---|---|
|
BulkApprover構成情報を格納するファイルの名前(例: |
|
BulkApproverで実行するアクション。このパラメータは 有効な値:
|
|
サーバーからのすべての出力が含まれているログ・ファイルの名前(例: |
BulkApproverを実行するには、次の例に示すようにパスを設定します。
この例では、LinuxおよびSolarisを含むUnixベースのシステム用に、Windowsの構文を使用します。区切りには、スラッシュ(/)およびコロン(:)を使用します。
java -ms16m -mx256m -cp <path to gatorbulk.jar>\gatorbulk.jar;<path to commons-logging-1.1.1.jar>\commons-logging-1.1.1.jar;<path to cs-core.jar>\cs-core.jar;<path to cs.jar>\cs.jar;<path to commons-codec-1.4.jar>\commons-codec-1.4.jar;<path to httpclient-4.1.2.jar>\httpclient-4.1.2.jar;<path to httpcore-4.1.2.jar>\httpcore-4.1.2.jar;<path to httpmime-4.1.2.jar>\httpmime-4.1.2.jar:<path to wem-sso-api-1.2.jar>\wem-sso-api-1.2.jar;<path to apache-mime4j-0.5.jar>\apache-mime4j-0.5.jar;<path to jtds-1.2.2.jar>\jtds-1.2.2.jar;<path to servlet-api.jar>\servlet-api.jar;<path to commons-lang-2.4.jar>\commons-lang-2.4.jar com.openmarket.gatorbulk.objects.BulkApprover config=bulkapprover.ini action=<notify|approve|mark_publish> output_file=<out.txt>