ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

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

この章では、WebCenter Sitesシステムの初期設定時においてフレックス・アセットのインポートに使用するBulkLoaderユーティリティについて説明します。

この章には次の項が含まれます。

22.1 BulkLoaderユーティリティの概要

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

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

この項の内容は、次のとおりです。

22.1.1 BulkLoaderの機能

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

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

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

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

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

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

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

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

22.1.2 BulkLoaderの仕組み

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

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

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

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

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

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

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

22.1.3 BulkLoaderユーティリティの使用

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

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

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


    注意:

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


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

この項では、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ではJDBC (Java DataBase Connectivity)ドライバが必要です。このドライバは、Oracle社からは提供されません。JDBCドライバは、ソース・データベースおよび宛先データベース(WebCenter Sitesデータベース)の両方に対して取得する必要があります。ODBC互換のソース・データベースがある場合、Java SDKの一部として付属するJDBC-ODBCブリッジを使用できます。

DB2の要件

WebCenter SitesシステムでDB2データベースを使用している場合は、クライアント・コンピュータ上でusejdbc2.batファイルを実行して、BulkLoaderを使用可能にする必要があります。バッチ・ファイルを1回実行するだけで、BulkLoaderを通常どおりに実行できるようになります。

22.1.5 手順1: XMLPostの使用による構造アセットのインポート

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

  • 属性エディタ

  • フレックス属性

  • フレックス親定義

  • フレックス定義

  • フレックス親アセット

この手順の詳細は、第21.3項「フレックス・モデル内の構造アセット・タイプのインポート」を参照してください。

22.1.6 手順2: 入力表(データソース)の作成

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

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

この項の内容は、次のとおりです。

22.1.6.1 挿入

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

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

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

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

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

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

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

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

source_table.pngの説明が続きます
図source_table.pngの説明

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

inputTableTemplateColumn=SNSTEMPLATE
inputTableNameColumn=SNSNAME
inputTableDescriptionColumn=SNSDESCRIPTION
inputTableGroupsColumn=SNSGROUPS

22.1.6.2 更新

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

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

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

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

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

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

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

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

22.1.7 手順3: マッピング表の作成

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

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

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

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

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

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

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

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

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

mapping_table.pngの説明が続きます
図mapping_table.pngの説明

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

inputAttributeMapTable=93ATTR_MAP
inputAttributeMapTableKeyCol=SOURCENAME
inputAttributeMapTableValCol=ATTRIBUTENAME

22.1.8 手順4: BulkLoader構成ファイルの作成

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

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

property=value

注意:

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


この項の内容は、次のとおりです。

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

次の表に、BulkLoader構成ファイルのプロパティを説明します。

表22-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

詳細は、第22.1.8.2項「initIDパラメータの設定」を参照してください。

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=GE Lighting

status

必須

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

例:

status=PL

tableProducts

必須

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

inputTableUniqueIdColumn

必須

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

BulkLoaderで一意のIDを生成する場合は、この値を空にします。

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


22.1.8.2 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番号を作成します。

22.1.8.3 構成ファイルの例

次に、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
############################################################

22.1.9 手順5: BulkLoaderユーティリティの実行

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

次の手順を実行します。

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

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

  3. すべての単一行に、次のコマンドをそれぞれのインストールに適したパスとともに入力します。

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

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

22.1.10 手順6: フィードバック情報の確認

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

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

22.1.11 手順7: アセットの承認と配信システムへのパブリッシュ

BulkApproverユーティリティを使用して、ロードしたばかりのアセットを承認します。BulkApproverの使用手順は、第22.3.2項「BulkApproverの使用方法」を参照してください。

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

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

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

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

これらのインタフェースについて、次の各項で説明します。


注意:

カスタム抽出メソッドを実装するときには、前に説明したBulkLoaderの実行手順と同じ手順を使用します。


この項の内容は、次のとおりです。

22.2.1 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の構成パラメータを一覧表示して説明します。

表22-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データベースのユーザー・パスワード


22.2.2 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);
}

22.2.3 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);
}

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

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

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

この項の内容は、次のとおりです。

22.3.1 BulkApproverの構成

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

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

表22-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
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

22.3.2 BulkApproverの使用方法

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

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

表22-4 BulkApproverのパラメータ

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

config

BulkApprover構成情報を格納するファイルの名前(例: BulkApprover.ini)。

action

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

有効な値:

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

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

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

output_file

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


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>