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-2 BulkLoaderの組込みOOTB (out of the box: すぐに使用可能な)実装
「図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ユーティリティを使用してフレックス・アセットをインポートするには:
-
管理システムで、XMLPostを使用して構造アセットをWebCenter Sitesデータベースにインポートします。構造フレックス・アセットとして、属性エディタ、フレックス属性、フレックス親定義、フレックス定義およびフレックス親アセットがあります。
-
WebCenter Sitesデータベースにフラット表としてインポートするソース・データベースのビューを提供するビューまたはストアド・プロシージャを書き込みます。このフラット表がソース表になります。
-
同じソース・データベース内に2つの列を持つマッピング表を作成します。1つの列にはソース・ファイルの列名を示し、もう1つの列にはWebCenter Sitesデータベースに格納されている属性の名前を示します。
-
ソース表とマッピング表を識別する構成ファイルをコーディングします。
-
管理システム上のWebCenter Sitesデータベースとソース・データベースの両方へのアクセスに使用したシステムに構成ファイルを配置します。
-
管理システム上のアプリケーション・サーバーを停止します。
-
BulkLoaderユーティリティを実行します。BulkLoaderはフレックス・アセット・データをインポートして、入力データソースで作成された
bulk_feedback
という表にフィードバックを提供します。 -
管理システムでアプリケーション・サーバーを再起動します。
-
BulkApproverユーティリティを使用して、ロードされたすべてのアセットを承認します。
ノート:
BulkLoaderユーティリティは高速化を図って作成されているため、属性、フレックス親定義またはフレックス定義の有無のチェックは行いません。BulkLoaderユーティリティを実行する前に、すべての構造アセット・タイプをインポートしておく必要があります。
ドライバ要件
BulkLoaderには、Oracle Corporationによって提供されていないJDBC (またはJava DataBase Connectivity)ドライバが必要です。ソース・データベースと宛先データベース(つまり、WebCenter Sitesデータベース)の両方に対してJDBCドライバを取得する必要があります。ODBC互換のソース・データベースの場合は、Java SDKの一部として付属するJDBC-ODBCブリッジを使用します。
XMLPostを使用して構造アセットをインポートするタイミング
管理システムで、XMLPostとRemoteContentPost
ポスト・エレメントを使用して、構造アセットをWebCenter Sitesデータベースにインポートします。次のタイプのアセットをインポートします。
-
属性エディタ
-
フレックス属性
-
フレックス親定義
-
フレックス定義
-
フレックス親アセット
フレックス・モデル内の構造アセット・タイプのインポートについてを参照してください。
入力表(データソース)の作成
すべての新規アセット・データと更新データを保持するために、入力フラット表(データソース)を作成する必要があります。これらのフラット表/フラット・ビューでは、各行が1つのフレックス・アセット・アイテムに相当し、各列がBulkLoaderユーティリティ用のフレックス属性アセットに相当します。
データソースの列名に関して特に要件はありませんが、「マッピング表の作成」で説明するマッピング表を別途作成する必要があります。
この項には次のトピックが含まれます:
挿入
データソース表の名前は、構成ファイル内の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構成ファイルの作成
BulkLoaderユーティリティを作成するには、この項で説明するプロパティを持つ構成ファイルを作成します。このファイルには任意の名前を付けることができます。
次の構文に従ってファイルにプロパティを設定します。
property=value
ノート:
構成ファイルのプロパティ名および値はすべて、大文字と小文字を区別します。
この項には次のトピックが含まれます:
BulkLoader構成ファイルのプロパティ
この表は、BulkLoader構成ファイルのプロパティを説明しています。
表33-1 BulkLoader構成ファイルのプロパティ
プロパティ名 | 必須/オプション | コメント |
---|---|---|
|
必須 |
同時処理スレッドの最大数。これは、WebCenter Sitesデータベース・サーバーへのデータベース接続数でもかまいません。データベース・ホスト上のCPU数に相当するスレッド数を使用します。CPUデータベース・ホストが1つの場合は、2に設定します。 例: |
|
必須 |
1回の読取りリクエストで取得されるアイテム数。この数も1つの処理スレッドによって処理されます。 例: |
|
必須 |
データ抽出APIに対応するユーザー固有の実装クラス。( デフォルト値(使用準備済): |
|
必須 |
開始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データベースのユーザー・パスワード。 |
|
必須 |
新規アセット・データの挿入元であるフラット入力表の名前。 |
|
必須 |
ソース表の列と対応する属性名を一覧表示するマッピング表の名前。 |
|
必須 |
マッピング表でソース表の列名を一覧表示する列の名前。 たとえば:
|
|
必須 |
マッピング表で対応する属性名を一覧表示する列の名前。 たとえば:
|
|
必須 |
ソース表でフレックス・アセットの説明を含めた列の名前。 たとえば:
|
|
必須 |
ソース表で親の名前を含めた列の名前。 各値には、複数の親を、構成ファイルに定義されている たとえば:
|
|
必須 |
ソース表で行ごとに製品(または詳細記事または詳細イメージ)の名前を含めた列の名前。 たとえば:
|
|
必須 |
ソース表でフレックス定義を含めた列の名前。 たとえば:
|
|
必須 |
フレックス・アセット用に たとえば:
|
|
必須 |
複数の属性値を区切るデリミタ。デフォルト値はセミコロン(;)です。 たとえば:
|
|
必須 |
サイトの名前。すべての製品は、このサイトで作成されたかのように動作します。 たとえば:
|
|
必須 |
インポートされたすべてのフレックス・アセットのステータス・コード。インポート済のものに対してこれを たとえば:
|
|
必須 |
WebCenter Sitesデータベースに定義されたフレックス・アセット・タイプの名前。 |
|
必須 |
ソース表で新規フレックス・アセットのインポート時に一意のIDとして機能する列の名前。これは、後続のすべての更新操作および無効化操作に使用されます。 BulkLoaderが一意の識別子を生成できるようにするには、この値を空白にします。 |
|
必須 |
WebCenter Sitesに定義されたパブリッシュ・ターゲットの名前。 |
|
オプション。 |
フレックス・アセットのレンダリングに使用されるテンプレートの名前(非推奨) |
|
必須 |
処理された入力アイテムごとに処理中フィードバックを記録するためにBulkLoaderが作成して使用する表の名前。この表は入力データソースに作成されます。 |
|
オプション。 |
BulkLoaderユーティリティの実行時に更新アクションが指定された場合のみ必要です。それ以外の場合、この値は空にできます。これは、更新を必要とする属性と親を含めたソース表の名前です。 |
|
オプション。 |
BulkLoaderユーティリティの実行時に更新アクションが指定された場合のみ必要です。これは、ソース表でフレックス・アセットに対して一意のIDを指定する列の名前です。 |
|
オプション。 |
更新アクションが指定されていて、1つ以上のフレックス・アセットで1つ以上の親を削除する必要がある場合のみ必要です。 これは、ソース表で削除する親のリストを指定する列の名前です。 |
|
オプション。 |
更新アクションが指定されていて、1つ以上のフレックス・アセットで1つ以上の親を追加する必要がある場合のみ必要です。これは、ソース表で追加する親のリストを指定する列の名前です。 |
|
オプション。 |
テストのみに必要です。アクション(挿入、無効化または更新)ごとに処理される入力アイテムの数が制限されます。 |
|
オプション。 |
フレックス・アセット用に |
|
オプション。 |
更新されたすべてのフレックス・アセットのステータス・コード。これは たとえば: |
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ユーティリティを実行するには:
Contributorインタフェースでのインポート済アセットへのアクセスの有効化
BulkLoaderユーティリティを使用してインポートしたアセットにOracle WebCenter Sites: Contributorインタフェースからアクセスするには、次のステップを実行します。
- Lucene検索エンジンの索引付けを再度有効にします。『Oracle WebCenter Sitesの管理』の検索索引の設定に関する項を参照してください。
- BulkLoaderユーティリティを使用してインポートしたアセットを検索索引に追加します。『Oracle WebCenter Sitesの管理』の検索索引へのアセット・タイプの追加に関する項を参照してください。
- BulkLoaderユーティリティを使用してインポートしたアセットに対してContributorインタフェースで検索を実行することにより、Contributorインタフェースからアセットにアクセスできることを確認します。Contributorインタフェースでの検索実行の手順は、『Oracle WebCenter Sitesの使用』のアセットの検索および編成に関する項を参照してください。
フィードバック情報の確認
BulkLoaderユーティリティの操作完了後、入力データソースに配置されているbulk_feedback
表でフィードバック情報を確認します。この表には、BulkLoaderによって処理されたすべての入力アイテムに関する情報が含まれています。
この情報を確認した後で、必要に応じて修正アクションを実行します。入力データを修正する場合は、BulkLoaderを再実行してエラーが修正されていることを確認します。
カスタム抽出メカニズムを使用したフレックス・アセットのインポート
入力アセット・データを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 * 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ユーティリティの構成パラメータおよびその説明が含まれます。
表33-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データベースのユーザー・パスワード。 |
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の構成パラメータ
パラメータ | 説明 |
---|---|
(必須) |
BulkLoaderでデータをインポートしたホスト・サーバー上のURL。 正確な値は次のようになります。
|
(必須) |
|
(必須) |
|
(必須) |
アセットの承認が必要な宛先のリスト。宛先名については、「管理」タブの「パブリッシュ」オプション、または
|
|
選択したデリミタ。このデリミタを使用して、 |
(オプション) |
アセット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 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のパラメータ
コマンドライン・パラメータ | 説明 |
---|---|
|
BulkApprover構成情報を格納するファイルの名前(たとえば、 |
|
BulkApproverで実行するアクション。このパラメータは 有効な値:
|
|
サーバーからのすべての出力が含まれているログ・ファイルの名前(たとえば、 |
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)>