Oracle® Fusion Middleware Oracle Business Data Synchronization Server管理者ガイド

11g リリース2(11.1.2.4.0)

B66162-04(原本部品番号:E24630-04)

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

第I部 概要

1 Oracle Business Data Synchronization Serverの概要

- 1.1 Oracle Business Data Synchronization Serverとは

- 1.2 BDSSの使用

- 1.2.1 タスクの作成

- 1.2.2 連絡先情報の保存

- 1.3 ドメインの同期化をテストするためのExchange 2007コネクタの構成

2 BDSSアーキテクチャの理解

- 2.1 Oracle Business Data Synchronization Serverアーキテクチャの概要

- 2.1.1 BDSSコンポーネント

- 2.1.1.1 ハブ

- 2.1.1.2 コネクタ

- 2.1.2 BDSSによるユーザーの同期化方法

- 2.1.2.1 同期化オプション

- 2.1.2.2 スケジューラベースの同期化

- 2.1.2.3 同期状態を使用したレコード変更の追跡

- 2.1.3 イベントベースの同期化

- 2.2 コネクタの概要

- 2.2.1 ハブ・トランスポート

- 2.2.2 トランスフォーマ

- 2.2.3 PIMトランスポート

- 2.2.4 コネクタ・コンポーネントによる同期化時のドメイン・データの管理方法

- 2.2.4.1 インバウンド同期化

- 2.2.4.2 アウトバウンド同期化

- 2.2.5 エラー・メッセージ

3 BDSSコンポーネントのインストール

- 3.1 インストールの概要

- 3.1.1 前提条件

- 3.2 ハブ・コンポーネントのデプロイ

- 3.2.1 ハブ・コンポーネントのデプロイの前提条件

- 3.3 BDSSのインストールと構成の概要

- 3.4 ドメインの作成

- 3.4.1 Java Required Filesのインストール

- 3.4.1.1 JRF拡張機能のインストール

- 3.4.1.2 JRF用のドメインの拡張

- 3.5 BDSSテンプレートを使用したドメインの拡張

- 3.6 セキュリティ資格証明の追加

- 3.7 SSLの設定

- 3.8 Exchange 2007コネクタのためのデータ変換およびフィルタリングの有効化

- 3.9 Exchange 2007コネクタの構成

- 3.9.1 レコード変換のためのExchange 2007コネクタの構成

- 3.9.2 Active Directoryサービスに対するExchange 2007コネクタの構成

- 3.9.3 自動検出サービスを使用するためのExchange 2007コネクタの構成

- 3.10 BPELタスク・コネクタの構成

- 3.11 ハブの構成

- 3.12 BDSSサーバー・インスタンスの構成

- 3.13 コネクタ・インスタンスの構成

- 3.14 ユーザーの追加

- 3.15 インストール後の構成

- 3.15.1 ディスパッチャの構成

- 3.15.2 エンジンの構成

- 3.15.3 MBeanを使用したPIMサーバー・インスタンスの構成

- 3.15.3.1 PIMサーバー・インスタンスおよびコネクタ・インスタンスの作成

第II部 基本管理

4 BDSSの管理スタート・ガイド

- 4.1 管理タスクの概要

- 4.1.1 MBeanを使用したBDSSコンポーネントの管理

- 4.1.1.1 Oracle Enterprise Managerコンソールを介したMBeanへのアクセス

- 4.1.1.2 JConsoleを介したMBeanへのアクセス

- 4.1.2 同期化方向の指定

- 4.2 コネクタの管理

- 4.2.1 コネクタの構成の表示

- 4.2.2 コネクタの追加と更新

- 4.2.2.1 コネクタ・レベルの同期化とイベント通知の構成

- 4.2.3 コネクタの削除

- 4.3 BDSSサーバー・インスタンスの管理

- 4.3.1 BDSSインスタンスの追加と更新

- 4.3.2 PIMサーバー・インスタンスの削除

- 4.4 コネクタ・インスタンスの管理

- 4.4.1 コネクタ・インスタンスの追加と更新

- 4.4.2 コネクタ・インスタンスの削除

- 4.5 ドメインの管理

- 4.5.1 コネクタのドメインの作成

- 4.5.1.1 ドメイン・レベルの同期化の構成

- 4.5.2 コネクタからのドメインの削除

- 4.6 ドメイン・フィルタの管理

- 4.6.1 ドメインに対するフィルタの作成

- 4.6.2 ドメインからのフィルタの削除

- 4.7 ユーザーの管理

- 4.7.1 ユーザー・ステータスの表示

- 4.7.2 コネクタ・ユーザーの作成

- 4.7.2.1 ハブ・ユーザーの削除

- 4.7.3 ユーザー・レベルの同期化の構成

- 4.7.3.1 ハブ・ユーザーに対する同期の有効化

- 4.7.3.2 ユーザーのドメインに対する同期化レベルの設定

- 4.8 プロファイルの管理

- 4.8.1 プロファイルの表示

- 4.8.1.1 コネクタの全プロファイルの表示

- 4.8.1.2 特定のプロファイルの表示

- 4.8.2 プロファイル・パラメータの管理

- 4.8.2.1 プロファイルの作成

- 4.8.2.2 プロファイルの更新

- 4.8.2.3 プロファイルからのパラメータの削除

5 BDSSハブ・サービスの構成

- 5.1 ハブ構成の概要

- 5.2 ディスパッチャの構成

- 5.3 エンジンの構成

- 5.4 コネクタ構成プロファイルの作成

- 5.5 FtsKeyFieldsプロファイルの構成

6 Microsoft Exchange 2007用BDSSコネクタの構成

- 6.1 Exchange 2007コネクタ構成の概要

- 6.2 データ交換のためのMicrosoft Exchange 2007コネクタの構成

- 6.3 Exchange 2007コネクタ用のレコード変換の構成

- 6.4 Microsoft Exchange 2007コネクタのPIMトランスポート・コンポーネントの構成

- 6.5 ドメインの同期化の構成

- 6.5.1 連絡先の同期化の構成

- 6.5.2 タスクの同期化の構成

- 6.5.3 カレンダの同期化の構成

- 6.6 データのフィルタリングの構成

- 6.7 Active Directoryを使用するためのMicrosoft Exchange 2007コネクタの構成

- 6.8 Exchange 2007コネクタ用のイベント受信の構成

- 6.9 Microsoft自動検出サービスを使用するためのExchange 2007コネクタの構成

- 6.10 Exchange 2007コネクタを使用したドメインの同期化のテスト

7 BDSSのセキュリティの構成

- 7.1 通信セキュリティの概要

- 7.2 ハブで公開されるWebサービスの保護

- 7.3 HTTPS用のBDSSの構成

8 ハブ・フィールドへのコネクタ・フィールドのマッピング

- 8.1 データ変換の概要

- 8.2 ドメイン・スキーマについて

- 8.2.1 スキーマ・データ型

- 8.2.1.1 W3Cスキーマ・データ型

- 8.2.1.2 ハブ・スキーマ・データ型

- 8.2.1.3 コネクタ・スキーマ・データ型

- 8.2.2 ハブ・スキーマのドキュメント

- 8.2.2.1 ハブ・スキーマ・タイプのライブラリ

- 8.2.2.2 ハブ・タスク・スキーマ

- 8.3 同期化に起因するデータの副作用

- 8.3.1 データ・モデルの不適合

- 8.3.2 データ型ファセットの相違

- 8.3.2.1 長さ

- 8.3.2.2 パターン

- 8.3.2.3 列挙

- 8.3.2.4 空白

- 8.3.3 リスト変換

- 8.3.3.1 複数値フィールド

- 8.3.3.2 フィールド・グループ

- 8.3.4 レコードの重複

9 カレンダ・ドメインの同期化

- 9.1 カレンダの同期化サポートの概要

- 9.1.1 カレンダ・レコードの変換

- 9.2 カスタム・カレンダ・フィールドの変換

- 9.2.1 2次変換による変換

- 9.2.1.1 Exchange 2007コネクタのカスタム・フィールドの有効化

- 9.2.2 Javaベースのコネクタによる変換

- 9.3 ハブ・スキーマでのカレンダの同期化のサポート

- 9.4 カスタム・カレンダ・フィールドの作成

- 9.5 ICALフィールドの同期化に起因するデータの副作用

- 9.5.1 ICALフィールドの同期化の失敗

- 9.5.2 標準のICALフィールドへのカスタムICALフィールドのマッピング

第III部 付録

A BDSSの構成操作

- A.1 UserConfigMBean

- A.2 ServerDomainConfigMBean

- A.3 DispatcherSettings MBean

- A.4 EngineSettings MBean

- A.5 ProfileRuntimeInfo MBean

- A.6 プロファイル・パラメータ

B BPELタスク・コネクタの構成

- B.1 BPELタスク・コネクタ構成の概要

- B.2 Tasksプロファイルの構成

C BDSSデータ・ストアのテーブル

- C.1 BDSSテーブルの概要

- C.2 PIM_SERVER_INSTANCES

- C.3 CONNECTORS

- C.4 CONN_INSTANCES

- C.5 CONNS_TO_PIM_SERVERS

- C.6 HUB_DOMAINS

- C.7 CONN_DOMAINS

- C.8 CONN_DOMAIN_FILTERS

- C.9 DESC_FIELDS

- C.10 HUB_USERS

- C.11 CONN_USERS

- C.12 USER_CONTEXTS

- C.13 USER_CONTEXT_STATES

- C.14 STATE_DATA

- C.15 USER_HISTORY

- C.16 CONN_USER_RECORDS

- C.17 HUB_RECORDS

- C.18 CONN_RECORD_DESCS

- C.19 ASSOC_DATA

- C.20 LOVS

- C.21 PROFILES

- C.22 SEQUENCE

D コネクタAPI

- D.1 コネクタAPIの概要

- D.1.1 関連データ

- D.1.2 コネクタ名

- D.1.3 作成/作成競合

- D.1.4 フィールド・クラス

- D.1.5 PIMドメイン・ターゲット

- D.1.6 PIMレコード説明

- D.1.7 PIMレコードID

- D.1.8 PIMレコード・バージョンID

- D.1.9 同期化セッション

- D.1.10 同期状態

- D.1.11 更新/更新競合

- D.2 コネクタ・インタフェース

- D.2.1 InitializeUserSyncSession API

- D.2.1.1 エンジン規定

- D.2.1.2 コネクタ規定

- D.2.2 ExtractDomains API

- D.2.2.1 エンジン規定

- D.2.2.2 コネクタ規定

- D.2.2.3 ExtractDomainsに関するベスト・プラクティス

- D.2.3 EndDomainSynchronization API

- D.2.3.1 エンジン規定

- D.2.3.2 コネクタ規定

- D.2.4 EndUserSyncSession API

- D.2.4.1 エンジン規定

- D.2.4.2 コネクタ規定

- D.2.5 CreateRecord API

- D.2.5.1 エンジン規定

- D.2.5.2 コネクタ規定

- D.2.6 UpdateRecord API

- D.2.6.1 エンジン規定

- D.2.6.2 コネクタ規定

- D.2.7 DeleteRecord API

- D.2.7.1 エンジン規定

- D.2.7.2 コネクタ規定

- D.2.8 GetPimServerEndPoint API

- D.2.8.1 エンジン規定

- D.2.8.2 コネクタ規定

- D.3 エンジン・コールバック・インタフェースAPI

- D.3.1 ExtractDomainResultsCallback API

- D.3.2 エンジン規定

- D.3.3 コネクタ規定

- D.4 コネクタ・ランタイム・インタフェースAPI

- D.4.1 GetPimRecordVersions API

- D.4.2 CacheTempSyncState API

- D.4.3 CommitCachedSyncStateメソッドAPI

- D.4.4 GetConfigurationMetaData API

- D.4.5 GetDeletesByPendingCreateEchoes API

- D.4.6 GetDeletesBylds API

- D.4.7 GetRecordAssociatedData API

- D.4.8 GetSyncState API

- D.4.9 GetUserAssociatedData API

- D.4.10 SaveSyncState API

- D.4.11 SetRecordAssociatedData

- D.4.12 SetUserAssociatedData API

- D.5 データ表現構造

- D.5.1 共通構造

- D.5.1.1 KeyValuePair

- D.5.2 BDSSエンジンのコネクタ・インタフェース関連の構造

- D.5.2.1 DomainInfo

- D.5.2.2 ExtractRequest

- D.5.2.3 ExtractResponse

- D.5.2.4 ExtractResponseData

- D.5.2.5 ExtractResponseMetaData

- D.5.2.6 HubContext

- D.5.2.7 PimRecordDescription

- D.5.2.8 AssociatedData

- D.5.2.9 AssocDataElement

- D.5.2.10 RecordMetaData

- D.5.2.11 UpsertRecord

- D.5.2.12 Enum ExtractResultCode

- D.5.3 構成関連の構造

- D.5.3.1 ConfigurationSection

- D.5.3.2 ConfigurationProfile

- D.6 コネクタの作成に関するベスト・プラクティス

- D.7 Exchange 2007コネクタAPI

- D.8 カレンダの同期化に対する汎用コンポーネントのサポート

- D.8.1 カレンダ・サポート・メソッド

- D.8.1.1 ハブ規定

- D.8.1.2 コネクタ規定

- D.8.1.3 ファンニング

- D.8.2 Exchange 2007 PIMトランスポートのカレンダ・サポート

- D.8.2.1 開催者および参加者

- D.8.2.2 レコード関連データおよびExchangeメタデータ

- D.8.2.3 サポート対象の繰返しパターン

- D.8.2.4 タイムゾーン

- D.8.2.5 日時値

- D.8.2.6 PIMレコードID

- D.8.2.7 ExtractDomain

- D.8.2.8 CreatePIMRecord

- D.8.2.9 UpdatePIMRecord

- D.8.2.10 DeletePIMRecord

E カスタム・フィールドのXSLTおよびXSD

- E.1 カスタム・フィールドの変換の概要

- E.1.1 カスタム・フィールドの定義

- E.2 ICALフィールド定義の定義

- E.3 ICALへのExchangeコネクタのカスタム・フィールドの変換

- E.4 Exchangeコネクタ・フィールドへのICALフィールドの変換

- E.5 Java標準タイムゾーンへのWindowsタイムゾーンのマッピング

F BDSSのトラブルシューティング

- F.1 Exchange 2007コネクタによる最初の同期化の失敗

用語集

Oracle® Fusion Middleware

Oracle Business Data Synchronization Server管理者ガイド

11g リリース2(11.1.2.4.0)

B66162-04(原本部品番号:E24630-04)

2013年3月

Personal Information Management (PIM)データ・ストア間の相互作用の同期を可能にするOracle Business Data Synchronization Server (BDSS)のコネクタのインストール、構成および管理方法について説明した、開発者のためのドキュメント。

Oracle Fusion Middleware Oracle Business Data Synchronization Server管理者ガイド, 11g リリース2 (11.1.2.4.0)

B66162-04

Copyright © 2013, Oracle and/or its affiliates.All rights reserved.

原本著者: John Bassett

原本協力者: Travis Dutchover, Dennis Ferry, Larry Harding, Owen Wessling

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

『Oracle Business Data Synchronization Server管理者ガイド』へようこそ。

対象読者

このドキュメントは、管理者、アプリケーション設計者およびプロセス設計者を対象としています。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- 『Oracle Fusion Middleware Oracle SOA Suite and Oracle Business Process Management Suiteインストレーション・ガイド』

- Oracle Fusion Middleware Oracle WebLogic Server Webサービスの保護

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

第I部

概要

第I部では、Oracle Business Data Synchronization Server(BDSS)の基本的および概念的な情報を提供します。

- 第1章「Oracle Business Data Synchronization Serverの概要」

- 第2章「BDSSアーキテクチャの理解」

- 第3章「BDSSコンポーネントのインストール」

1 Oracle Business Data Synchronization Serverの概要

この章では、Oracle Business Data Synchronization Server(BDSS)の一般的な説明を提供します

この章の構成は、次のとおりです。

- Oracle Business Data Synchronization Serverとは

- BDSSの使用

- ドメインの同期化をテストするためのExchange 2007コネクタの構成

1.1 Oracle Business Data Synchronization Serverとは

Oracle Business Data Synchronization Server(BDSS)は、サーバー・データ・ストアでデータを交換および比較できるようにする同期化サービスです。BDSSは、Microsoft ExchangeなどのPersonal Information Management(PIM)データ・ストア間の相互作用を主に処理します。たとえば、ユーザーが、あるPIMサーバー上のTo Doアイテムなど、コネクタの特定のドメイン(コネクタ・ドメイン)に対するレコードを変更した場合は、BDSSによって、その変更が別のPIMサーバー上の対応するTo Doアイテムと自動的に同期化されます。図1-1に、BDSSインストールの例で、他のタイプのPIMデータ・ストアと相互作用するMicrosoft Exchangeを含む例を示します。

注意:

BDSSでは、PIMデータ・ストアの使用が強調されますが、他のタイプのデータ・ストア用にBDSSを拡張できます。

図1-1 Oracle Business Data Synchronization Server

1.2 BDSSの使用

この項では、タスクおよび連絡先を同期化するための使用例を提供します。

注意:

BDSSは、バックグラウンド・プロセスとして作成されています。そのため、ユーザーは、同期化のための明示的な処理の実行は求められません。ユーザーがBDSSを認識するのは、あるシステムで作成および変更したレコードが他のシステムに伝播されていることに気付いたときのみです。

1.2.1 タスクの作成

Exchange 2007ユーザーは、Microsoft Outlookクライアントを使用して新しいタスクを作成します。ユーザーがタスクを保存した後、Outlookによって、そのタスクはユーザーのメールボックスをホストしているExchangeサーバーと同期化されます。後で、ユーザーが別のPIMサーバーで自分のアカウントを開いたとき、ユーザーは、Outlookクライアントを使用して作成したタスクがTo Doリストに表示されることに気付きます。ユーザーがこのタスクを更新すると、BDSSによってMicrosoft Exchangeデータ・ストア内のタスクが更新され、ユーザーのOutlookクライアントには更新されたタスクが表示されるようになります。

1.2.2 連絡先情報の保存

Exchange 2007ユーザーが新しい連絡先を作成すると、BDSSによって連絡先レコードが同期化され、ユーザーのOutlook連絡先リストに書き込まれます。ユーザーがOutlookで連絡先のスペルを変更すると、BDSSによって、その変更が他のPIMサーバーにあるユーザーのアカウントに書き込まれます。レコードがこのPIMサーバーに書き込まれた後で、アクセス・リストに表示されるすべてのユーザーのOutlook連絡先リストに、その名前変更が伝播されます。

1.3 ドメインの同期化をテストするためのExchange 2007コネクタの構成

Exchange 2007コネクタには複数のハブ・ドメインの同期化が用意されているため、このコネクタを使用して、タスク、連絡先およびカレンダの各ドメインのハブの同期化をテストできます。サーバー・タイプはハブとは無関係なため、ハブに対してExchange 2007コネクタを任意のタイプのPIMサーバーとして表すように構成できます。同じPIMサーバー・タイプを使用して第2のExchange 2007コネクタを構成すると、ハブは、異なるPIMサーバーの2人のユーザーを同期化するかのように、2人の異なるExchangeユーザーを同期化できます。

ハブの同期化をテストする手順は、次のとおりです。

1. 2番目のコネクタを作成します。Exchange2007_2などの名前を付けてこのコネクタを区別します。

2. このコネクタに対するPIMサーバー・インスタンスおよびコネクタ・インスタンスを作成します。

3. CONNECTORSテーブルのNAME列に表示されるとおりのコネクタの名前をプロファイルの値に指定して、各Exchange 2007コネクタの「Pim Transport Implementation Class」および「Extract Response Batch Size」パラメータを構成します。たとえば、単一のExchange 2007コネクタがデプロイされていて、単一のインスタンスを使用して、単一のハブ・ユーザーにマップされている2人のExchange 2007ユーザーを同期化する必要があるとします。さらに、CONNECTORSテーブルのNAME列にExchange2007およびExchange2007_2があり、その両方に、Exchange2007のLOV値に相当するSERVER_TYPE_CDがあると仮定します。

4. ProfileRuntimeInfo MBeanのsetProfileParameterを使用して、次の4つの行をPROFILESテーブルに追加します。詳細は、第4.8項「プロファイルの管理」を参照してください。

表1-1 同期化をテストするためのプロファイルの追加

プロファイル

セクション

パラメータ

値

Exchange2007

Hub Transport

Pim Transport Implementation Class

oracle.bdss.connectors.exchange2007

pimtransport.PimTransportAdapter

Exchange2007

Hub Transport

Extract Response Batch Size

100000

Exchange2007_2

Hub Transport

Pim Transport Implementation Class

oracle.bdss.connectors.exchange2007.pimtransport.PimTransportAdapter

Exchange2007_2

Hub Transport

Extract Response Batch Size

100000

5. 各コネクタに対するコネクタ・ユーザーを作成します。

注意:

異なるExchangeユーザーを使用する必要があります。つまり、john@exchange.comをjohn@exchange.comにマップすることはできません。

2 BDSSアーキテクチャの理解

この章では、Oracle Business Data Synchronization Server (BDSS)アーキテクチャの概要について説明します。

この章の構成は、次のとおりです。

- Oracle Business Data Synchronization Serverアーキテクチャの概要

- コネクタの概要

2.1 Oracle Business Data Synchronization Serverアーキテクチャの概要

Oracle Business Data Synchronization Server(BDSS)は、PIMサーバー間の同期化を可能にするハブアンドスポーク・アーキテクチャを利用します。ハブは、主要な同期化機能を提供し、PIMサーバーに依存しないため、すべてのタイプのPIMサーバーに対する接続を可能にします。コネクタは、PIMサーバーへのデータ送信およびPIMサーバーからのデータ取得を実行し、システムのスポークを構成します。図2-1に、このアーキテクチャの例で、PIMサーバー間のコネクタの数がより少なくなる例を示します。複数サーバー・トポロジの場合でも、このより単純化された同期化トポロジによって、PIMサーバー間のデータ・フィードバック・ループの潜在的な問題が処理されます。

図2-1 BDSSのハブアンドスポーク・アーキテクチャの例

注意:

Oracle Fusion Middleware 11gリリース2では、BDSSにMicrosoft Exchangeのサポート機能が備わっています。

2.1.1 BDSSコンポーネント

BDSSは、次の2つの主要コンポーネントで構成されています。

- ハブ

- コネクタ

2.1.1.1 ハブ

ハブは、システムのデータの同期化を統合し、次のサブシステムが含まれます(図2-2を参照)。

- ディスパッチャ

- エンジン

図2-2 ハブのサブシステム

ディスパッチャ

ディスパッチャは最初に、エンジンに送信する必要があるユーザーのセットを読み取り、リスト上のユーザーが同期化可能であることを確認します。コールされた後、ディスパッチャ・プロセスは、同期化対象のユーザー・セット全体をバッチに分割し、エンジン・コンポーネントをコールします。このユーザー・リストの細分化によって、複数のエンジン・コンポーネントを使用可能にできるため、システムのスケーラビリティが向上します。ディスパッチャ・コールは、使用可能なエンジン・コンポーネント間で分散させることもできます。

注意:

ディスパッチャは、現在同期化中のユーザーはエンジンに送信しません。

スケジューラ

外部スケジューラは、設定された時間間隔でディスパッチャを実行します。BDSSにはスケジューラは付属していません。Windowsスケジューラ・サービスまたはOracle Enterprise Managerスケジューラなど、任意のスケジューリング・サービスを使用できます。

注意:

デフォルトの間隔である5分をお薦めしますが、環境に適したパフォーマンスおよびスケーラビリティを実現するスケジューリング間隔を選択できます。

エンジン

エンジンは、ディスパッチャからユーザーのリストを受信し、これらの各ユーザーを同時に同期化します。エンジンは、各コネクタに接続し、ユーザーに関して変更されたレコードのセットをPIMサーバーから受信します。抽出セットは結合され、PIMサーバーにプッシュ・バックされる完全な変更のセットが作成されます。

注意:

エンジンが通知するのは、PIMサーバーに対して他のPIMサーバー上で変更されたレコードについてのみです。独自の抽出セットから識別した変更はPIMサーバーに通知しません。

同じ同期化サイクル中に両方のPIMサーバーでレコードが変更された場合は、競合が発生する可能性があります。エンジンは、関係する各コネクタ・ドメインの相対優先度に基づいて、保持する変更と破棄する変更を決定します。(各コネクタ・ドメインに割り当てる優先度を構成できます。)結果セットを構成するレコードを決定した後、エンジンは、これらのレコードをPIMサーバーにプッシュし、ユーザーの成功を追跡します。

ハブ自体は、コネクタから受信するデータを読み取りません。かわりに、各レコードのIDタグを読み取り、様々なPIMサーバーのレコードを相互に関連付けるレコード・マップを作成します。ハブは、そのデータをコネクタに渡します。

エンジンには、ユーザーの同期化に必要なデータを格納および取得する、ランタイム構成マネージャも含まれています。このデータには、コンポーネント構成設定、ユーザー情報、マッピング、ユーザー・レコード情報およびPIMサーバー・インスタンスに関する情報が含まれています。

2.1.1.2 コネクタ

コネクタは、処理対象のハブとPIMサーバー間の通信を標準化します。コネクタは、連絡先またはタスクなど、コネクタ・ドメインに対するデータを更新します。同期化セッション時に、コネクタは、ユーザーに対する変更データをそれぞれのPIMサーバーから取得し、ハブ書式に変換します。次に、変換したデータをハブに渡します。また、コネクタは、ハブから取得したデータをPIMサーバーに適した書式に変換します。コネクタは、Webサービスを使用して、ユーザー・レコードの取得とそれらをエンジンに返す処理の両方を実行します。詳細は、第2.2項「コネクタの概要」を参照してください。

Oracle Fusion Middleware 11g リリース2では、BDSSに次のコネクタが付属しています。

- Microsoft Exchange 2007用Oracle BDSSコネクタ(Exchange 2007コネクタ)
Exchange 2007コネクタでは、ユーザーのMicrosoft Exchangeメールボックスとの相互作用時に、Exchange 2007 Exchange Web Service(EWS)が使用されます。Exchange 2007コネクタでは、カレンダおよびタスク・データの同期化がサポートされています。

- Oracle BPELタスク・コネクタ
Oracle BPELタスク・コネクタ(BPELタスク・コネクタ)では、BPELタスクからのタスク(To Do)データの同期化がサポートされています。

注意:

BDSSコネクタAPIを使用して、サービス・リクエストまたは商談など、ドメインを同期化するコネクタを作成できます。詳細は、付録D「コネクタAPI」を参照してください。

2.1.2 BDSSによるユーザーの同期化方法

BDSSでは、MBean(マネージドBean)を使用して構成される一連のユーザーが、各エンド・システムからのユーザー・ログインをハブ・ユーザーと呼ばれるユーザーの中央表現にマッピングすることによって処理されます。ディスパッチャは、スケジュールによってトリガーするか、またはユーザーによるレコードの変更時にコネクタがハブにイベント通知を送信したときにトリガーできます。スケジューラベースの同期化では、一部のユーザーに変更がない場合でも、各間隔ですべてのユーザーが同期化されます。イベントベースの同期化は、同期化対象のデータがあるときのみユーザーが同期化されるためより効率的です。

2.1.2.1 同期化オプション

次の同期化オプションを、各コネクタ・ドメインの各ユーザーに対して設定できます。たとえば、ユーザーに対するタスク・アイテムの同期化を有効にした場合は、BDSSによって、そのユーザーに対するタスクが自動的に同期化されます。

Inbound

インバウンド方向では、エンティティ(ドメイン、ユーザーまたはコネクタなど)に対するデータの交換が、PIMサーバーへのレコードおよびレコード更新のプッシュのみに限定されます。PIMサーバー上のレコードの変更は、他のシステムに伝播されません。

Outbound

アウトバウンド方向を使用すると、コネクタはPIMサーバーからレコードの作成、更新および削除イベント・データを抽出できます。アウトバウンド方向では、PIMサーバーからの変更の収集のみを許可することによって、エンティティに対する同期化が限定されます。レコードまたは変更のPIMサーバーへのプッシュは行われません。

None

データの同期化は発生しません。

Full

完全同期化は、双方向(つまり、インバウンドとアウトバウンドの両方)の同期化を有効にします。

コネクタ、ドメインおよびユーザーに対して、同期化方向を構成できます。詳細は、第4.1.2項「同期化方向の指定」を参照してください。

2.1.2.2 スケジューラベースの同期化

BPELサーバーとMicrosoft Exchangeサーバー間の同期化セッションの例を示す一般的なフローは、次のとおりです。

1. スケジューラがディスパッチャをトリガーします。

2. ディスパッチャが、同期化可能なハブ・ユーザー、つまり同期化が有効化されているが現在同期化中ではないユーザーを検索します。

3. ディスパッチャはこれらのユーザーをバッチにまとめます。

4. ディスパッチャはそのバッチをエンジンに送信します。

5. エンジンが各ユーザーに対する同期化セッションを開始します。

6. 同期化セッションによって、次の操作が実行されます。

1. ユーザーに対する適切なPIMサーバーを判別します。

2. ユーザーに対するドメイン(タスクまたは連絡先など)を判別します。

3. 抽出メッセージを各コネクタに対するコネクタ・インスタンスに送信します。この抽出メッセージには、レコード変更がリクエストされるユーザー・ドメインがリストされています。

7. コネクタが抽出レスポンスをエンジンに返します。各抽出レスポンスには、特定のコネクタ・ドメインに対する新規、更新および削除レコードを記述した情報が含まれています。

8. エンジンが抽出レスポンス・レコードをマージして、必要に応じて競合を解決します。

9. エンジンは適切なレコード変更を各PIMサーバーに送信します。

10. ユーザーの同期化プロセスが終了します。

第D.1.9項「同期化セッション」も参照してください。

2.1.2.3 同期状態を使用したレコード変更の追跡

エンジンは、コネクタが提供する同期状態と呼ばれるデータを使用して、PIMサーバーから正常にエクスポートされたユーザーのドメイン・レコードを追跡します。同期状態は、コネクタ・ドメイン・レベルで監視されます。同期状態の詳細は、付録D「コネクタAPI」を参照してください。

2.1.3 イベントベースの同期化

イベントベースの同期化では、ハブで必要な処理量が削減されます。また、不要なユーザー同期化セッションを排除することによって、ネットワークおよびデータベースの使用量も削減されます。イベントベースの同期化を使用すると、ハブは、レコードの変更が発生したときのみユーザーを同期化します。ユーザーに対する変更がない場合、ハブはユーザーを同期化しません。

ドメインに影響を与えるユーザー変更では、同期化セッションはトリガーされず、標準の同期化(第2.1.2項を参照)と同様に、スケジューラによって同期化セッションの頻度が指示されます。イベントベースの同期化プロセスは、PIMサーバーがそのコネクタにユーザーのレコードが変更されたことを通知したときに開始されます。次に、コネクタは、ハブに通知し、PIMサーバー上のレコードを変更したユーザーであることを示すイベント・フラグを設定します。スケジューラが新しい同期化サイクルをトリガーすると、ディスパッチャは、同期化されるようにこのユーザーをまとめてエンジンに送信します。

BDSSは、イベントベースの同期化に対してユーザーにフラグ付けできるコネクタとPIMサーバー、およびイベントベースの同期化に対してユーザーにフラグ付けできないPIMサーバーを処理します。イベントベースの同期化に対してすべてのコネクタおよびPIMサーバーがユーザーにフラグ付けできるシステムでは、ディスパッチャは変更フラグ付きのユーザーを1つにまとめます。これらのユーザーに対する同期化が開始されると、ハブは、スケジュールされた同期化セッションの場合と同様にユーザーを同期化します(つまり、ハブは、ハブがコネクタの初期通知を受信した後でユーザーのPIMデータに対して変更が発生している可能性があるため、コネクタからの変更をリクエストします)。エンジンは、同期化サイクル中に、ユーザーの処理またはコネクタへの抽出メッセージの送信は実行しません。これらの同期化セッション中、同期化方向は、フラグ付けされていないユーザーに対してはインバウンドのみです。イベントにフラグ付けできないコネクタがあるシステムでは、ハブは、イベントベースの同期化について、これらのコネクタに属するすべてのユーザーを同期化します。

BDSSコネクタでイベント通知の送信をサポートできない場合、ハブは、ユーザー同期化セッションを開始するためのイベントベースの方法をサポートできません。たとえば、コネクタが変更を検出できないシステムで変更が行われた場合、ハブがユーザーに対するレコードを同期化できるのは、その同じユーザーに対するイベント通知がサポートされているコネクタがあるシステムでレコードの変更が行われた場合のみです。

BDSSは、起動(または再起動)されるたびに、完全またはインバウンド同期化のいずれかに設定されたドメインすべてで、同期化するユーザーに対して変更フラグを設定します。これらのフラグによって、コネクタはユーザーに対するサブスクリプションを作成できます。コネクタは、可能な場合は、ドメインごとに別々のサブスクリプションを作成します。

注意:

イベントベースの同期化を有効にするには、CONNECTORSテーブルのSYNC_EVENTS_ENABLED_FLG、SUPPORTS_EVENTS_FLGおよびUSER_EVENT_FLGの各フラグを設定します。

イベントベースの同期化のフロー

1. ディスパッチャが、同期化可能なハブ・ユーザーを取得します。

2. ディスパッチャはこれらのユーザーをバッチにまとめます。

3. ディスパッチャはこれらのユーザーをエンジンに送信します。

4. エンジンが各ユーザーに対する同期化セッションを開始します。同期化セッションによって、次の操作が実行されます。

1. ユーザーに対する適切なPIMサーバーを判別します。

2. ユーザーのドメイン(タスクまたは連絡先など)に対する変更があるかどうかを判別します。

3. 抽出メッセージを各コネクタに対するコネクタ・インスタンスに送信します。この抽出メッセージには、レコード変更がリクエストされるユーザー・ドメインがリストされています。

4. コネクタが抽出レスポンスをエンジンに返します。

5. エンジンが抽出レスポンスを処理し、データをコネクタにプッシュします。

5. ユーザーの同期化プロセスが終了します。ハブがコネクタ・ユーザーに対する変更フラグをリセットします。コネクタでイベントがサポートされていない場合、ハブは、変更フラグを同期化が発生する状態のままにします。

2.2 コネクタの概要

コネクタは、Webサービスを使用して、ユーザー・レコードをハブに通知します。これらはBDSSコネクタAPI(付録D「コネクタAPI」を参照)を実装し、このAPIには、BDSSコネクタ・インタフェース、コネクタ・ランタイム・インタフェースおよびエンジン・コールバック・インタフェースの詳細が記述されます。コネクタは、次の3つのコンポーネントで構成されています。

- ハブ・トランスポート

- トランスフォーマ

- PIMトランスポート

注意:

これらの3つのコンポーネントは必ずしも実装する必要はありませんが、ベスト・プラクティスとして実装することをお薦めします。

2.2.1 ハブ・トランスポート

ハブ・トランスポートは、コネクタ・インタフェースを実装し、エンジンとコネクタ間のデータ交換を実行します。

2.2.2 トランスフォーマ

トランスフォーマは、ハブ・スキーマとPIMサーバーのスキーマの両方にデータを変換します。ハブによるデータの書式設定方法を定義でき、顧客のニーズにあわせて自由に修正できます。Oracle JDeveloperを使用すると、ハブおよびPIMサーバーのXSD(XMLスキーマ定義)をマップするXSLT(XML変換)を作成できます。第8章「ハブ・フィールドへのコネクタ・フィールドのマッピング」も参照してください。

注意:

ハブ・スキーマは作成および修正できますが、コネクタ・スキーマは変更できません。コネクタ・スキーマはコネクタ開発者によって作成され、変更しないままにする必要があります。

2.2.3 PIMトランスポート

PIMトランスポートは、PIM APIインタフェースを使用し、コネクタとPIMサーバー間のデータ交換を実行します。データ交換の一環として、PIMトランスポートは、PIM XMLスキーマ表現とPIMサーバー表現間でデータを変換します。

2.2.4 コネクタ・コンポーネントによる同期化時のドメイン・データの管理方法

ハブとコネクタ間の同期化はデフォルトで双方向ですが、同期化方向をインバウンドのみまたはアウトバウンドのみに限定するように構成できます。

2.2.4.1 インバウンド同期化

コンポーネントは、PIMサーバーからのデータ受信時に、次のように相互作用します。

1. PIMトランスポートは、ネイティブPIMサーバーAPIを使用して、ドメインに対するレコード・セットを収集します。このデータは、PIMサーバー固有の書式です。

2. PIMトランスポートは、レコードが属しているドメインに対して定義されているPIM XSDに準拠するPIM XML書式に、各レコードを変換します。

3. PIMトランスポートは、各PIM XMLレコードをトランスフォーマに渡し、トランスフォーマは次の処理を実行して、PIM XMLレコードをハブXMLレコードに変換します。

1. 同期化方向(インバウンド)を判別して、正しいXLSTドキュメントを適用します(PIMからハブ)。第5.4項「コネクタ構成プロファイルの作成」も参照してください。

2. XSLTドキュメントを各レコードに適用するAPIを起動します。このXLSTには、ハブとPIMサーバーの両方に対するスキーマ定義が含まれています。

3. ハブXMLレコードをハブ・トランスポートに返します。

4. ハブ・トランスポートは、APIをコールして、ハブXMLレコード・セットを含むSOAP(Simple Object Access Protocol)メッセージを作成します。

5. 次に、ハブ・トランスポートは、APIをコールしてSOAPメッセージをハブにプッシュします。

2.2.4.2 アウトバウンド同期化

アウトバウンド同期化では最初に、ハブが、ハブXML書式の単一のレコードを含むSOAPメッセージをコネクタに送信します。次に、コネクタが、このXMLレコードをターゲットのPIMサーバーで必要とされる適切な書式に変換します。

コンポーネントは、PIMサーバーからのデータ受信時に、次のように相互作用します。

1. ハブ・トランスポートが、ハブXMLレコードを含むSOAPメッセージを受信します。

2. 次に、ハブ・トランスポートは、ハブXMLセットをトランスフォーマに渡します。

3. トランスフォーマが、次の処理を実行して、レコードをハブXMLから適切なPIM XMLに変換します。

1. 同期化方向(アウトバウンド)を識別して、適切なXSLTをハブXMLレコードに適用します(ハブからPIM)。

2. APIをコールしてXSLTを適用します。

3. 変換したレコードをハブ・トランスポートに渡します。

4. ハブ・トランスポートが、PIM XMLレコードをPIMトランスポートに渡します。

5. PIMトランスポートが、PIMサーバーへのレコードのプッシュに使用されるネイティブPIM APIで必要な書式にPIM XMLを変換します。

6. PIMトランスポートは、PIM API書式設定レコードをPIMサーバーに送信します。

2.2.5 エラー・メッセージ

エラーをBPELタスク・フローに統合して、同期化時に発生した管理者データ・エラーに関するアラートを通知できます。たとえば、ユーザーがサードパーティのPIMサーバーで受け入れることができない文字を記述に含むレコードを誤って作成した場合、そのPIMサーバーでは、次の同期化セッション時にそのレコードが拒否されます。その結果、BDSSはレコード・サマリーとエラーを含むBPELイベントを発生させます。管理者は、エラー・コードをチェックするBPELプロセスを設定し、サポートされていない文字をレコードから削除するようにユーザーに通知する電子メールを送信します。

イベントは、BDSSによってクリティカル、エラーまたは警告のメッセージがそのログ・ファイルに記録されるたびに発生します。BDSSが、BPELサーバーまたはWebサービスに対するBPELイベントを発生させることもできます。

3 BDSSコンポーネントのインストール

この章では、Oracle Business Data Synchronization Server(BDSS)のインストールについて説明します。

この章の構成は、次のとおりです。

- インストールの概要

- ハブ・コンポーネントのデプロイ

- BDSSのインストールと構成の概要

- ドメインの作成

- BDSSテンプレートを使用したドメインの拡張

- セキュリティ資格証明の追加

- SSLの設定

- Exchange 2007コネクタのためのデータ変換およびフィルタリングの有効化

- Exchange 2007コネクタの構成

- ハブの構成

- BDSSサーバー・インスタンスの構成

- コネクタ・インスタンスの構成

- ユーザーの追加

- インストール後の構成

3.1 インストールの概要

BDSSは、個別にインストールされる次のコンポーネントで構成され、各コンポーネントにはそれぞれ独自のインストール前提条件があります(表3-1を参照)。

- BDSSハブ・コンポーネント

- BDSSコネクタ

- Microsoft Exchange 2007用Oracle BDSSコネクタ

- Oracle BPELタスク・コネクタ

Companion CDにBDSS.zipが含まれています。このファイルには、データ・ソースとキューを作成するテンプレート・ファイルである、bdss_template.jarというインストーラ・ファイルが含まれています。さらに、Exchange 2007用Oracle BDSSコネクタ(Exchange 2007コネクタ)、Oracle BPELタスク・コネクタ、エンジン(BDSSHub.ear)およびディスパッチャ(BDSSDispatcher.ear)用のEARファイルが含まれています。BDSS.zipには、XSL変換ファイルおよびSQLスクリプトも含まれています。

表3-1 インストール・チェックリスト

コンポーネント

必須のソフトウェアまたはハードウェア

インストール前のタスク

インストール後のタスク

ディスパッチャおよびエンジン

次のコンポーネントがインストールされているOracle WebLogic Server

- Oracle Enterprise Manager。

- ハブ・コンポーネントをデプロイできる統合WebLogic Serverの少なくとも1つのインスタンスまたは統合WebLogic Serverインスタンスのグループ。システムのプリファレンス・ストアにアクセスできるように、管理権限のあるユーザー・アカウントを使用してWebLogic Serverをインストールする必要があります。

- 構成およびマッピング情報の格納用のOracle EclipseLinkをサポートしているデータベース。データベース・スキーマおよびBDSSというユーザーも設定する必要があります。Oracle Database 11gをお薦めします。

Oracle WebLogicアプリケーション・サーバー用のドメインの構成。

ディスパッチャの構成(第3.15.1項)。

エンジンの構成(第3.15.2項)。

Oracle BPELタスク・コネクタ(BPELタスク・コネクタ)

「ディスパッチャおよびエンジン」の要件を参照してください。

次の処理を実行します。

- BPELサーバーのインストール。

- BPELサーバー用のユーザーの構成。

- Oracle Enterprise Managerのインストール。Oracle Enterprise Managerをインストールすると、Oracle JRF(Java Required Files)11.1.1.0テンプレートが提供されます。

BPELタスク・コネクタの構成(付録B「BPELタスク・コネクタの構成」)。

Microsoft Exchange 2007用Oracle BDSSコネクタ(Exchange 2007コネクタ)

「ディスパッチャおよびエンジン」の要件を参照してください。

ディスパッチャおよびエンジンのタスクを参照してください。Oracle Enterprise Managerをインストールすると、Oracle JRF(Java Required Files)11.1.1.0テンプレートが提供されます。

Microsoft Exchange 2007用Oracle BDSSコネクタの構成(第6章)。

3.1.1 前提条件

この項では、様々なPIMサーバー間の同期化を可能にするデプロイメントの最低限のハードウェアおよびソフトウェア要件について説明します。図3-1は、このようなシナリオの例です。

注意:

デプロイメントのハードウェア要件は、デプロイメントの複雑さおよび規模によって異なります。

BDSSハブおよびディスパッチャのハードウェアの最小セットは、次のとおりです。

- Oracle Enterprise Manager。

- ハブ・コンポーネントおよびOracle BPELタスク・コネクタ・デプロイメント用のOracle WebLogic Application Server 11g(Oracle BPELタスク・コネクタの最小要件)。

- Oracle Database 11gを含む、データ・ストア用のサーバー。非常に小規模なデプロイメントの場合、このデータベースは他のコンポーネントと同じサーバーに配置できます。

この環境は、Exchange 2007コネクタのインストールには十分です。

注意:

ほとんどのコンポーネントを別々のアプリケーション・サーバーにインストールすると、スケーラビリティ・サポートが向上しますが、すべてのコンポーネントを同じアプリケーション・サーバーにインストールできます。ただし、単一のアプリケーション・サーバーへのインストールは、パフォーマンスおよびポート設定に影響を与えます。

図3-1 BDSSの基本インストール

3.2 ハブ・コンポーネントのデプロイ

ディスパッチャ、エンジンおよびExchange 2007コネクタは、bdss_template.jarにパッケージ化されています。ディスパッチャとエンジンは、同じアプリケーション・サーバー上または別々のアプリケーション・サーバー上にデプロイできます。ディスパッチャはリモートMBeanインタフェースを介してエンジンと通信するため、必要な場合は別のアプリケーション・サーバーにデプロイできます。

3.2.1 ハブ・コンポーネントのデプロイの前提条件

BDSSの必須ソフトウェアは、次のとおりです。

- コンポーネントをデプロイできるドメインがあるOracle WebLogic Application Server 11g(以上)。

- 構成およびマッピング情報の格納用のOracle EclipseLinkをサポートしているデータベース。Oracle Database 11gをお薦めします。

3.3 BDSSのインストールと構成の概要

次のようなタスクがあります。

1. ドメインの作成

2. BDSSテンプレートを使用したドメインの拡張

3. セキュリティ資格証明の追加

4. SSLの設定

5. Exchange 2007コネクタのためのデータ変換およびフィルタリングの有効化

6. Exchange 2007コネクタの構成

7. ハブの構成

8. BDSSサーバー・インスタンスの構成

9. コネクタ・インスタンスの構成

10. ユーザーの追加

3.4 ドメインの作成

Fusion Middleware構成ウィザードを使用してドメインを作成する手順は、次のとおりです。

1. 「ようこそ」画面で「新しいWebLogicドメインの作成」を選択し、「次へ」をクリックします。「ドメイン・ソースの選択」画面が表示されます。

2. 「Oracle Enterprise Manager」を選択し、「次へ」をクリックします。Oracle Enterprise Managerを使用して、Exchange 2007コネクタで使用されるセキュリティ資格証明を構成します(第3.6項「セキュリティ資格証明の追加」を参照)。また、Oracle Enterprise Managerを使用してハブおよびディスパッチャを構成することもできます。詳細は、第5章「BDSSハブ・サービスの構成」を参照してください。

注意:

Oracle JRF -11.1.1.0[jdeveloper]がデフォルトで選択されていない場合は選択します。第3.4.1.1項「JRF拡張機能のインストール」も参照してください。

3. 「管理者ユーザー名およびパスワードの構成」画面で、ユーザー名とパスワードを入力し、「次へ」をクリックします。「サーバーの起動モードおよびJDKの構成」画面が表示されます。

4. 必要な場合はJDKを変更します。それ以外の場合は、「次へ」をクリックして「WebLogicドメインの作成」画面にナビゲートします。

5. 「WebLogicドメインの作成」画面で、ドメイン名を入力し、「作成」をクリックします。

6. 進捗状況インジケータの完了後、「完了」をクリックします。

3.4.1 Java Required Filesのインストール

Exchange 2007コネクタをOracle WebLogic Serverドメインにデプロイします。このWebLogic Server拡張機能は、Oracle WebLogic Serverの初期インストールの一部として(第3.4.1.1項を参照)、または既存インストールのドメインに対する拡張機能として(第3.4.1.2項を参照)組み込むことができます。

3.4.1.1 JRF拡張機能のインストール

サーバーのインストール時にOracle JRF - 11.1.1.0 [jdeveloper]オプションを使用できる場合は、オプションが選択されていることを確認します。それ以外の場合は、第3.4.1.2項で説明されているステップに従ってドメインを拡張します。

3.4.1.2 JRF用のドメインの拡張

既存のWebLogic Serverインストールがあり、JRF用に拡張されていないドメインがある場合は、WebLogic構成マネージャを使用してJRFをインストールできます。

JRFを含めるようにドメインを拡張する手順は、次のとおりです。

1. 次のように、Windowsの「スタート」メニューを使用して構成ウィザードを起動します。

1. 「スタート」を選択します。

2. 「プログラム」を選択します。

3. WebLogic Serverインストールを選択します。

4. WebLogic Server 10gR3を選択します。

5. 「構成ウィザード」を選択します。構成ウィザードが表示されます。

注意:

イタリックのテキストは、環境によって異なる可能性がある内容を示しています。

2. 「ようこそ」画面で「既存のWebLogicドメインの拡張」を選択し、「次へ」をクリックします。

3. WebLogic Serverドメインを選択し、「次へ」を選択します。「拡張ソースの選択」画面が表示されます。

4. 「既存の拡張テンプレートを使用してドメインを拡張する」を選択します。

5. 「テンプレートの場所」フィールドの参照機能を使用して、<domain root>\jdeveloper\common\templates\applications\jrf_template_11.1.1.jarにナビゲートして選択します。

図3-2 JRFテンプレートの選択

6. 「OK」をクリックします。

7. 後続のページでデフォルトの選択を受け入れて、構成ウィザードを完了します。

3.5 BDSSテンプレートを使用したドメインの拡張

BDSSテンプレート(bdss_template.jar)によって、統合WebLogic Server上のキュー、およびランタイム構成マネージャで使用されるデータ・ソースが作成されます。また、BDSSハブ、ディスパッチャおよびExchange 2007コネクタ・アプリケーションもデプロイできます。

Fusion Middleware構成ウィザードを使用してこれらのBDSSコンポーネントをインストールし、BDSSテンプレートを使用してドメインを拡張します。

注意:

これらの指示は、ドメインをすでに作成していることを前提としています。

コンポーネントをインストールする手順は、次のとおりです。

1. 構成ウィザードを起動し、「ようこそ」画面で「既存のWebLogicドメインの拡張」を選択します(図3-3)。「次へ」をクリックします。「WebLogicドメイン・ディレクトリの選択」画面が表示されます。

図3-3 WebLogic Serverドメインの拡張

2. JMSがインストールされているドメインを選択し、「次へ」をクリックします。「拡張ソースの選択」画面が表示されます。

3. 「既存の拡張テンプレートを使用してドメインを拡張する」を選択します。

4. 「テンプレートの選択」ダイアログを使用して、bdss_template.jarの場所を特定し(図3-4)、「OK」をクリックします。

図3-4 bdss_template.jarの選択

5. 「拡張ソースの選択」ダイアログでBDSSのtemplate.jarを選択し、「次へ」をクリックします。

図3-5 bdss_template.jarの選択

6. 「JDBCデータ・ソースの構成」ページ(図3-6)で、接続情報を入力します。ユーザー名はbdssである必要があります。「次へ」をクリックします。「JDBCデータ・ソースのテスト」画面が表示されます。

図3-6 JDBCデータ・ソースの構成

7. 「接続のテスト」をクリックします。構成ウィザードに「テストが完了しました。」というメッセージ(図3-7)が表示された後、「次へ」をクリックします。「データベース・スクリプトの実行」画面が表示されます。

図3-7 JDBC接続のテスト

8. 「データベース・スクリプトの実行」ページ(図3-8)で、「スクリプトの実行」をクリックします。CreateBDSSDataModel.sqlスクリプトによって、データベース表とトリガーが作成され、BDSSSeedData.sqlスクリプトによって、そのデータベースにドメイン用のサンプル・データが移入されます。

図3-8 データベース表の作成およびデータのシード

9. 「デプロイメントのクラスタまたはサーバーへのターゲット設定」画面(図3-9)を続けて入力します。

注意:

ディスパッチャ、ハブおよびExchange 2007コネクタはデフォルトでデプロイされます。必要な場合は、「データベース・スクリプトの実行」画面の後の「オプションの構成を選択」画面で、「デプロイメントとサービス」を選択します。このオプションの選択後、デプロイするアプリケーションを選択します。このオプションの構成を使用すると、各コンポーネントを別々のWebLogic Serverにデプロイできるようになり、スケーラビリティが実現します。

図3-9 BDSSコンポーネントの選択

10. デプロイするBDSSコンポーネントを選択し、「次へ」をクリックします。デフォルトで、ディスパッチャ、ハブおよびExchange 2007コネクタがデプロイされます。「構成のサマリー」画面が表示されます(図3-10)。

図3-10 「構成のサマリー」画面

11. インストールされるコンポーネントを確認します。「前へ」をクリックして「デプロイメントのクラスタまたはサーバーへのターゲット設定」に戻り、選択を変更します。

12. 「次へ」をクリックします。構成マネージャによってドメインが作成されます。「ドメインの作成中」画面の進捗状況インディケータの完了後(図3-11)、「完了」をクリックします。

図3-11 ドメインの作成画面

3.6 セキュリティ資格証明の追加

Exchange 2007コネクタには、表3-2に示した3つのセットの資格証明が必要です。

表3-2 Exchange 2007コネクタで必要な資格証明

JPSマップ名

JPSキー

ユーザー名とパスワード

exchange2007pimtransport

activeDirectoryAdminCredential

Exchange 2007コネクタがActive Directoryへの問合せ時に使用するユーザー名とパスワードが格納されます。

exchange2007pimtransport

autoDiscoveryAdminCredential

Exchange 2007コネクタがMicrosoft自動検出サービスへの問合せ時に使用するユーザー名とパスワードが格納されます。

exchange2007pimtransport

exchangeWebServiceAdminCredential

Exchange 2007コネクタがExchange Web Serviceをコールしてユーザーのメールボックスにアクセスするときに使用するユーザー名とパスワードが格納されます。

表3-3に、BPELタスク・コネクタで必要な資格証明を示します。

表3-3 BPEL タスク・コネクタで必要な資格証明

JPSマップ名

JPSキー

ユーザー名とパスワード

fts-webcenter-connector

adminCredential

BPELタスク・コネクタがBPELサーバーをコールしてユーザーのタスク・データにアクセスするときに使用するユーザー名とパスワードが格納されます。これらの資格証明には、同期化するすべてのユーザーに対するアクセス権限が必要です。

Windowsドメインが必要な場合は、ユーザー名に追加でき、円記号(\)を使用してdomain\usernameのようにドメインとユーザー名を区切ります。

図3-12に示すように、Fusion Middleware Controlを使用して表3-2に示した資格証明を追加します。

図3-12 Oracle Enterprise Managerでの資格証明の作成

次に、Oracle Enterprise Managerを使用して資格証明に入力する方法を説明します。

1. Oracle Enterprise Managerにログインします。

2. ナビゲーション・ペインで「WebLogicドメイン」ノードを展開し、ドメインを右クリックします。

3. コンテキスト・メニューから「セキュリティ」を選択し、「資格証明」を選択します。「セキュリティ」ページが表示されます。

4. 「マップの作成」をクリックして、exchange2007pimtransport資格証明マップを作成します。「マップの作成」ダイアログが表示されます。

5. 「マップ名」フィールドに「exchange2007pimtransport」と入力し、「OK」をクリックします。

6. 表3-2に記載されている各JPSキーに対して、次の手順を実行します。

1. 「キーの作成」をクリックします。「キーの作成」ダイアログが表示されます。

2. 「マップの選択」リストから「exchange2007pimtransport」を選択します。

3. JPSキーを入力します。たとえば、「activeDirectoryAdminCredential」と入力します。

4. 「ユーザー名」フィールドに、ユーザー名を(必要な場合は必ず先頭にドメインを付けて)入力します。

5. 「パスワード」フィールドに、パスワードを入力します。

7. 「OK」をクリックします。

注意:

ナビゲーション・ペインでドメインを右クリックすると表示されるコンテキスト・メニューから、システムMBeanブラウザにアクセスできます。システムMBeanブラウザを使用して、JPS MBeanに関する一部の操作(全部ではありません)を起動できます。第3.6項で説明した手順は、資格証明を入力する適切な方法です。また、システムMBeanブラウザを使用して、BDSSハブ・コンポーネントと、サーバーおよびコネクタ・インスタンスの構成に使用するBDSS MBeanを管理することもできます。

3.7 SSLの設定

Exchange 2007サーバーの構成にセキュアな通信が必要な場合は、SSLをサポートするようにExchange 2007コネクタを構成して、Microsoft自動検出およびExchange Web Service(EWS)と安全に通信できるようにする必要があります。EWSサーバーにバインドされる証明書を発行および署名する認証局(CA)を、信頼できるCAとしてコネクタで使用されるトラスト・ストアにインストールする必要があります。デフォルトで、WebLogic Serverにデプロイされるアプリケーションでは、%WL_HOME%\libディレクトリにあるDemoTrust.jksというトラスト・ストアが使用されます。

SSLを構成するには、最初にExchange Web ServicesをホストするIIS WebサーバーにバインドされるX.509証明書を取得し、この証明書でDemoTrust.jksを更新する必要があります。

注意:

次の指示は、デフォルトのトラスト・ストアであるDemoTrust.jksを使用するデプロイメントを前提としています。別のトラスト・ストアを作成済で、デフォルトのトラスト・ストアのかわりに別のトラスト・ストアを使用するようにWebLogic Serverを構成した場合、これらの指示はそのまま使用できますが、Java keytoolの名前とパスワードを定義する必要があります。

証明書をインストールする手順は、次のとおりです。

1. Exchange Web ServicesをホストするIIS WebサーバーにバインドされるX.509証明書を取得し、ファイル・システム上のコネクタがデプロイされている同じボックスにファイルとして保存します。このドキュメント用に、ファイルはc:\temp\exchangecacert.cerに保存されています。

2. Exchange 2007サーバーにログインします。

3. IISマネージャを起動します。

4. Exchange仮想ディレクトリ(通常は「Webサイト」→「既定のWebサイト」→「Exchange」にあります)をクリックし、「プロパティ」を選択します。

5. ディレクトリ・セキュリティにナビゲートします。

6. 「証明書の表示」をクリックします。

7. 「詳細」タブをクリックし、「ファイルにコピー」をクリックします。

8. ウィザードで、ファイル名の入力を求められるまで各ページでデフォルトを選択します。ファイルの名前および場所を指定します。たとえば、c:\temp\exchangecacert.cerと入力します。

証明書でDemoTrust.jksを更新する手順は、次のとおりです。

1. コマンド・ウィンドウを開いて、現在のディレクトリをDemoTrust.jksの場所に変更します。たとえば、次のコマンドを入力します。
cd c:\WL_HOME\wlserver_10.3\server\lib

2. Java keytoolユーティリティを使用して証明書をインポートします。
JDKがc:\program files\java\jdk1.6.0_11にインストールされている場合は、次のコマンドを発行します。

3. "C:\Program Files\Java\jdk1.6.0_11\bin\keytool" -importcert -trustcacerts -file "C:\temp\exchangecacert.cer" -keystore DemoTrust.jks -storepass DemoTrustKeyStorePassPhrase -alias XXX

注意:
DemoTrust.jks以外のトラスト・ストアを使用する場合は、-keystoreおよび-storepassオプションにそれぞれ適切な名前とパスワードを指定します。

3.8 Exchange 2007コネクタのためのデータ変換およびフィルタリングの有効化

Exchange 2007コネクタは、不要なレコードをフィルタリングするために、XSDおよびXSLTファイルを使用して、ハブXML形式とPIM XML形式およびXMLファイルとの間でレコードを変換します。これらのファイルは、データベース・ファイル・システム上に格納する必要があり、その場所はBDSSで構成する必要があります。シード・データ・スクリプトで提供されるデフォルトの場所は、c:/fusion_sync <root>です。たとえば、シード・データ・スクリプトによって、c:/fusion_sync/Exchange2007/...のような文字列がデータベースに移入されます。

ファイル・システム上に様々なXSLTおよびXSDファイルを設定し、BDSSでXSLおよびXSDファイルを構成するために、BDSS.zipを解凍した場所から必要な場所にtransformおよびfilterディレクトリをコピーできます。たとえば、ディレクトリ構造は次のような形式になります。

<MY DIRECTORY>/exchange2007/task/transform/exchange2007task.xsd

ファイルを設定する手順は、次のとおりです。

1. Exchange 2007のXSDおよびXSLファイルを次の階層のローカル・ディレクトリにコピーします。

- <root>/exchange: このディレクトリには、contactサブディレクトリとtaskサブディレクトリ、およびexchange2007typelibrary.xsdファイルが含まれている必要があります。

- <root>/exchange/contact/transform: このディレクトリには、次の3つのファイルが含まれている必要があります。

exchange2007contact.xsd
exchange2007contacttohubcontact.xsl
hubcontacttoexchange2007contact.xsl

- <root>/exchange/task/transform: このディレクトリには、次の3つのファイルが含まれている必要があります。

exchange2007task.xsd
exchange2007tasktohubtask.xsl
hubtasktoexchange2007task.xsl

- <root>/exchange/calendar/transform: このディレクトリには、次の3つのファイルが含まれている必要があります。

pimicalbody.xsd
exchange2007calendartohubcalendar.xsl
hubcalendartoexchange2007calendar.xsl

- <root>/exchange/calendar/transform/intermediatetranslation: このディレクトリには、次の6つのファイルが含まれている必要があります。

calendaritemtype.xsd
calendaritemtypetoveventasxml.xsl
timezoneregistry.xml
timezoneregistryschema.xsd
veventasxml.xsd
veventasxmltocalendaritemtype.xsl

2. Exchange 2007 XMLフィルタ・ファイルを次の階層のローカル・ディレクトリにコピーします。

- <root>/exchange: このディレクトリには、contactサブディレクトリとtaskサブディレクトリ、およびexchange2007typelibrary.xsdファイルが含まれている必要があります。

- <root>/exchange/contact/filter: このディレクトリには、contactfilter.xmlファイルが含まれている必要があります。

- <root>/exchange/task/filter: このディレクトリには、taskfilter.xmlファイルが含まれている必要があります。

- <root>/exchange/calendar/filter: このディレクトリには、calendarfilter.xmlファイルが含まれている必要があります。

3. ハブのXSDおよびXSLファイルを次の階層のローカル・ディレクトリにコピーします。

1. <root>/hub: このディレクトリには、contactサブディレクトリとtaskサブディレクトリ、およびHubTypeLibrary.xsdファイルが含まれている必要があります。

2. <root>/hub/contact/transform: このディレクトリには、次の8つのファイルが含まれている必要があります。

hubaddress.xsd
hubcontact.xsd
hubcountry.xsd
hubemailaddress.xsd
hubnameprefix.xsd
hubnamesuffix.xsd
hubphone.xsd
hubstate.xsd

3. <root>/hub/task/transform: このディレクトリには、HubTask.xsdファイルが含まれている必要があります。

4. <root>/hub/calendar/transform: このディレクトリには、HubCalendar.xsdファイルが含まれている必要があります。

4. 次のBPELタスクのXSDおよびXMLファイルを、<root>/webcenter/tasks/transformという新しいディレクトリにコピーします。

- BPELTask.xsd

- BPELTask2HubTask.xsl

- HubTask2BPELTask.xsl

3.9 Exchange 2007コネクタの構成

この項では、次のタスクについて説明します。

- レコード変換のためのExchange 2007コネクタの構成

- Active Directoryサービスに対するExchange 2007コネクタの構成

- 自動検出サービスを使用するためのExchange 2007コネクタの構成

これらのタスクには、構成する必要があるパラメータのみが含まれています。表3-4に、Exchange 2007コネクタのすべての構成オプション(必須およびオプションの両方)を示します。これらのいずれのパラメータを定義するかは環境によって指示されますが、すべての状況で次を定義する必要があります。

- Active Directoryサーバー

- 自動検出サービス接続ポイント(SCP)

- Event Receiver

この構成は、PROFILESテーブルに格納されます。Exchange 2007コネクタを構成するには、JMXコンソールにデプロイされるBDSS MBeanを使用します。JDeveloperまたはSQL Developerなどのツールを使用して、Exchange 2007コネクタを構成することもできます。第6章「Microsoft Exchange 2007用BDSSコネクタの構成」も参照してください。

注意:

Oracle Enterprise ManagerまたはJConsole以外のコンソールを使用する場合は、BDSSハブを再起動する必要があります。

表3-4 Exchange 2007の構成パラメータ

プロファイル

セクション

パラメータ

デフォルト値

説明

Exchange2007

Hub Transport

Pim Transport Implementation Class

oracle.bdss.connectors.exchange2007.pimtransport.PimTransportAdapter

ハブ・トランスポートの汎用コンポーネントでは、この値を使用してExchange PIMトランスポートを初期化します。

Exchange2007

Hub Transport

Extract Response Batch Size

100000

この値は、BDSSによって同期化されるユーザーが保持するレコードがこの値を超えることがないように、十分に大きい数値に設定してください。

Exchange2007

Task

Pim Xsd

パス

exchange2007task.xsdファイルへのURI。

Exchange2007

Task

PimToHubUrl

パス

Exchange2007TaskToHubTask.xslへのURI。

Exchange2007

Task

HubToPimUrl

パス

HubTaskToExchange2007Task.xslへのURI。

Exchange2007

Task

Domain Class Type

タスク・タイプ

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。

Exchange2007

Task

Exchange Domain Batch Size

512

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。

Exchange2007

Task

Folder Class

IPF.Task

ドメインのフォルダ・クラス。

Exchange2007

Task

Body Type

Text

ドメインのBodyフィールドの同期化方法。有効な値は、TextまたはHTMLです。

Exchange2007

Task

Conflict Resolution Type

AlwaysOverwrite

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。

Exchange2007

Task

Disposal Type

MoveToDeletedItems

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。

Exchange2007

Task

Pim Domain id

IPM.Task

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。

Exchange2007

Contact

Exchange Domain Batch Size

512

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。

Exchange2007

Contact

Folder Class

IPF.Contact

ドメインのフォルダ・クラス。

Exchange2007

Contact

Pim Domain Id

IPM.Contact

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。

Exchange2007

Contact

Pim Xsd

パス

exchange2007contact.xsdファイルへのURI。

Exchange2007

Contact

PimToHubUrl

パス

Exchange2007ContactToHubContact.xslへのURI。

Exchange2007

Contact

HubToPimUrl

パス

HubContactToExchange2007Contact.xslへのURI。

Exchange2007

Calendar

Time Zone Xsd

パス

timezoneregistryschema.xsdへのURI。

Exchange2007

Calendar

VEvent Xsd

パス

veventasxml.xsdへのURI。

Exchange2007

Calendar

PimToHubUrl

パス

exchange2007calendartohubcalendar.xslへのURI。

Exchange2007

Calendar

Pim Xsd

パス

pimicalbody.xsdへのURI。

Exchange2007

Calendar

Calendar Item Type Xsd

パス

calendaritemtype.xsdへのURI。

Exchange2007

Calendar

Time Zone Xml

パス

timezoneregistry.xmlへのURI。

Exchange2007

Calendar

HubToPimUrl

パス

hubcalendartoexchange2007calendar.xslへのURI。

Exchange2007

Calendar

CalendarItemToVEvent Xsl

パス

calendaritemtypetoveventasxml.xslへのURI。

Exchange2007

Calendar

VEventToCalendarItem Xsl

パス

veventasxmltocalendaritemtype.xslへのURI。

Exchange2007

Calendar

Body Type

Text

ドメインのBodyフィールドの同期化方法。有効な値は、TextまたはHTMLです。

Exchange2007

Calendar

Conflict Resolution Type

AlwaysOverwrite

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。

Exchange2007

Calendar

Disposal Type

MovetoDetailItems

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。

Exchange2007

Calendar

Domain Class Type

CalendarItemType

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。

Exchange2007

Calendar

Exchange Domain Batch Size

512

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。

Exchange2007

Calendar

Fanning Limit

30

Exchangeで繰返しのカレンダ・レコードをネイティブで表すことができない場合に作成されるレコードの数。有効な値は、1から100です。

Exchange2007

Calendar

Folder Class

IPF.Appointment

ドメインのフォルダ・クラス。

Exchange2007

Calendar

Pim Domain id

IPM.Appointment

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。

Exchange2007

Active Directory

ServerN

(Nは0(ゼロ)以上の序数)

LDAP URL

ユーザーのExchangeアカウント情報の検出時に、Active Directoryからサービス接続ポイントのURLを取得するためにコネクタで使用されるLDAP URL。

複数のエントリを追加できます。序数は、プリファレンス順序を指定します(つまり、Server1の前にServer0が試行されるなど)。

コネクタは、ユーザーが検出されるまで、または各エントリの試行が終了するまで各URLを試行します。

これは必須パラメータです。

第6章「Active Directoryを使用するためのMicrosoft Exchange 2007コネクタの構成」も参照してください。

Exchange2007

Active Directory

Referral

follow

LDAPプロバイダによる参照の処理方法を指定します。値は、follow、throwまたはdeferです。デフォルト値はfollowです。

Exchange2007

Active Directory

Max Query Result Size

20

Active Directoryの問合せごとに返される結果の最大数。デフォルト値は20です。

Exchange2007

Active Directory

Max Query Time

30000

Active Directoryの問合せが返されるまで待機する時間(ミリ秒)。デフォルト値は30秒(30000ミリ秒)です。

Exchange2007

Active Directory

Read Timeout

5000

タイムアウトするまでレスポンスを待機する時間(ミリ秒)。デフォルト値は5000です。

Exchange2007

Active Directory

Connect Timeout

5000

タイムアウトするまでActive Directoryへの接続を確立する時間(ミリ秒)。デフォルト値は5000です。

Exchange2007

Active Directory

Use SSL

False

セキュアなLDAPを使用するかどうか。デフォルトはtrueです。ただし、開発環境では、ドメイン・コントローラがセキュアなLDAPに対して有効化されないため、値をfalseに設定します。

Exchange2007

Active Directory

Using Client Certificates

False

クライアント・プロバイダがLDAP証明書を使用するかどうかを示します。

Exchange2007

Active Directory

Client Certificate Path

False

「Use SSL」がtrueに設定され、ドメイン・コントローラでクライアント証明書が必要な場合は、trueに設定します。デフォルトはfalseです。

Exchange2007

Auto Discovery

SCPN

Nは0(ゼロ)以上の序数です。

<HTTPS URL>

ユーザーの検出時にコネクタで使用するサービス接続ポイント(SCP)へのURL。

序数は、プリファレンス順序を指定します(コネクタでは、SCP1の前にSCP0が試行されるなど)。コネクタは、ユーザーが検出されるまで、または各エントリの試行が終了するまで各URLを試行します。

これは必須パラメータです。

第6章「Microsoft自動検出サービスを使用するためのExchange 2007コネクタの構成」も参照してください。

Exchange2007

Auto Discovery

Remove Domain From Urls

TrueまたはFalse

Active Directoryから取得した検出SCP URLからドメイン情報を削除するようにコネクタに指示します。

開発環境の場合は、URLにドメインが含まれているとDNSでURLが解決されないため(つまり、http://server1.example.com/autodiscover/autodiscover.xmlは機能しません)、この値をtrueに設定します。オプションをtrueに設定すると、URLはhttp://server1/autodiscover/autodiscover.xmlになります。

Exchange2007

Auto Discovery

Read Timeout

5000

タイムアウトするまでレスポンスを待機する時間(ミリ秒)。デフォルト値は5000です。

Exchange2007

Auto Discovery

Connect Timeout

5000

タイムアウトするまで自動検出サーバーへの接続を確立する時間(ミリ秒)。デフォルトは5000です。

Exchange2007

Auto Discovery

Use SSL

True

セキュアなHTTP(HTTPS)を使用するかどうか。デフォルトはtrueです。HTTPを許可するようにサーバーを構成することに失敗した場合は、自動検出サービスに対してHTTPSが必要になる場合があります。

Exchange2007

Auto Discovery

Client Certificate Path

デフォルトは空の文字列です。

この値は、PEM(プライバシ強化メールのセキュリティ証明書)ファイルの場所に設定します。このファイルには、自動検出でクライアント証明書が必要な場合に使用されるクライアント証明書が含まれています。

Exchange2007

Auto Discovery

Client Certificate Key Path

デフォルトは空の文字列です。

この値は、PEM(プライバシ強化メールのセキュリティ証明書)ファイルの場所に設定します。このファイルには、クライアント証明書の秘密鍵が含まれています。

Exchange2007

Auto Discovery

Port

443

デフォルトでは、通常、HTTPSセキュア・ポートの443に設定します。「Use SSL」がtrueに設定されている場合は、HTTPSポートの値を設定します。falseの場合は、HTTPポートの値を設定します。この値が使用されるのは、すべてのSCP URL(SCPN構成のSCP URLSおよびServern構成ごとに自動検出から取得されたSCP URL)の試行後に試行される、デフォルトのSCP URLが試行される場合のみです。

Exchange2007

Event Receiver

CHANGE_ME

値は、コネクタに対してデプロイされているイベント・レシーバのURLにする必要があります。

CONNECTORSテーブルのNAME列に表示されるExchange 2007コネクタの名前。これは必須パラメータです。

Exchange2007

Event Receiver

Status Frequency

1

Exchangeが各サブスクリプションに通知を提供する頻度(分単位)。これは必須パラメータです。

Exchange2007

Event Receiver

Subscription Status Factor

3

イベント・レシーバは、Exchangeサーバーがすべてのサブスクリプションを終了していないことを確認するために、すべてのサブスクリプションに対してチェックを実行します。このパラメータは、このチェックの実行頻度を設定します。チェックの実行頻度は、このパラメータに設定した値に「Status Frequency」パラメータに設定した値を乗算した値です。たとえば、「Status Frequency」パラメータを1分に設定し、「Subscription Status Factor」を3に設定すると、イベント・レシーバは3分ごとにサブスクリプション・チェックを実行します。

これは必須パラメータです。

変換ファイル用のURIを使用するためのパラメータの構成

「Pim Xsd」、「PimToHubUrl」、「HubToPimUrl」および「Calendar Item Type xsd」などのパラメータを構成する場合、変換ファイル用のURIを使用するには、URIをfile:///./の書式で入力しないでください。かわりに、URIを次の書式で入力してください。

C:/directory1/directory2.../file.NNN

たとえば、c:/fusion_syncがトランスフォーマ・ファイルの<root>ディレクトリの場合は、次のURIを入力します。

c:/fusion_sync/transform/exchange/task/exchange2007task.xsd

3.9.1 レコード変換のためのExchange 2007コネクタの構成

Oracle EnterpriseのシステムMBeanブラウザを使用して、「Hub Transport」セクションのパラメータをExchange 2007コネクタと同じ名前を使用するように更新します。これらのパラメータの詳細は、第6.2項「「Hub Transport」セクションのパラメータ」を参照してください。「タスク」セクションの「Pim XSD」、「PimToHubUrl」、および「HubToPimUrl」パラメータも更新する必要があります。第6.3項「Exchange 2007コネクタ用のレコード変換の構成」を参照してください。

3.9.2 Active Directoryサービスに対するExchange 2007コネクタの構成

ExchangeコネクタのActive Directoryプロファイルの「ServerN」および「UseSSL」パラメータを構成する必要があります。このプロファイルの他のパラメータはオプションであり、構成しない場合は適切なデフォルトが使用されます。詳細は、第6.7項「Active Directoryを使用するためのMicrosoft Exchange 2007コネクタの構成」を参照してください。

3.9.3 自動検出サービスを使用するためのExchange 2007コネクタの構成

Exchange 2007コネクタは、ユーザーのExchangeアカウントに関する情報を検出するために、Microsoft自動検出サービスを問い合せます。Auto Discoveryプロファイルの「SCPN」パラメータは必須パラメータであり、これは、コネクタが自動検出サービスを検索するために問い合せるサービス接続ポイントURLのリストをコネクタに提供するためです。詳細は、第6.9項「Microsoft自動検出サービスを使用するためのExchange 2007コネクタの構成」を参照してください。

3.10 BPELタスク・コネクタの構成

表3-5に、BPELタスク・コネクタの構成オプションを示します。

表3-5 BPELタスク・コネクタのプロファイルおよびパラメータ

プロファイル

セクション

パラメータ

デフォルト値

説明

WebCenter Tasks

Task

HubToPimUrl

file:///C:/fusion_sync/transform/webcenter/tasks/HubTask2BPELTask.xsl

ハブXMLをBPELタスクXMLに変換するXSLTドキュメントへのパス。

WebCenter Tasks

Task

PimToHubUrl

file:///C:/fusion_sync/transform/webcenter/tasks/BPELTask2HubTask.xsl

BPELタスクXMLをハブXMLに変換するXSLTドキュメントへのパス。

WebCenter Tasks

Task

connType

soap

BPELサーバーへのログインにBPELタスク・コネクタが使用する接続タイプ。

WebCenter Tasks

Task

connUrl

http://CHANGE_ME:8001

http://server_name:portの書式のBPELサーバーURL。

WebCenter Tasks

Task

secRealm

jazn.com

BPELサーバーへの接続時にBPELタスク・コネクタが使用するセキュリティ・タイプ。

WebCenter Tasks

Task

Pim Xsd

file:///C:/fusion_sync/transform/webcenter/tasks/BPELTask.xsd

BPELTask.xsdファイルへのパス。

WebCenter Tasks

Hub Transport

Pim Transport Implementation Class

woracle.bdss.connectors.webcenter.pimtransport.PimTransportAdapter

追加される各BPELタスク・コネクタ・インスタンスに対してこのようなPROFILEレコードが1つ存在する必要があります。「Profile」列には、コネクタと同じテキストを使用する必要があります(反映同期化に有効)。

3.11 ハブの構成

エンジンの属性は、EngineSettings MBeanを介して公開され、ディスパッチャの属性はDispatcherSettings MBeanを介して公開されます(第5章「BDSSハブ・サービスの構成」を参照)。

ディスパッチャを構成するには、ハブをホストするサーバー上のDispatcherHub Webサービスに接続するためにディスパッチャが使用するURLを設定する必要があります。このURLは、DispatcherSettings MBeanの「HubEndPointURL」パラメータを使用して構成します。詳細は、第5.2項「ディスパッチャの構成」を参照してください。

エンジンについては、EngineSettings MBeanのEngineEndpointURL属性を構成する必要があり、この属性によってエンジンで使用されるURLが提供され、コネクタでエンジンに対するリクエストおよびデータ更新リクエスト・レスポンスの抽出が可能になります。さらに、RunTimeLibraryURL属性のURLを設定する必要があります。エンジンは、このURLをコネクタに送信して、コネクタがコネクタ・ランタイム・ライブラリと通信できるようにします。これらの属性の設定方法は、第5.3項「エンジンの構成」を参照してください。

3.12 BDSSサーバー・インスタンスの構成

ServerDomainConfigMBeanのupdatePIMServerInstance操作を使用して、コネクタの名前をBDSSインスタンスに追加します(第4.3.1項「BDSSインスタンスの追加と更新」を参照)。

3.13 コネクタ・インスタンスの構成

コネクタWebサービスのURLを使用して、コネクタおよびPIMサーバーのインスタンスを構成する必要があります。このURLをコネクタ・インスタンスに追加するには、コネクタ構成MBeanのupdateConnectorInstance操作を使用します(第4.4.1項「コネクタ・インスタンスの追加と更新」を参照)。

3.14 ユーザーの追加

ユーザー構成MBeanのaddConnectorUser操作を使用してユーザーを作成します。ハブ・ユーザーごとに、構成した各コネクタに対して1つのユーザーを作成します。詳細は、第4.7.2項「コネクタ・ユーザーの作成」を参照してください。

3.15 インストール後の構成

コンポーネントの適切な機能を有効にするには、次のインストール後のタスクを実行します。

- ディスパッチャの構成

- エンジンの構成

- MBeanを使用したPIMサーバー・インスタンスの構成

3.15.1 ディスパッチャの構成

ディスパッチャの属性はDispatcherSettings MBeanを介して公開され、このMBeanはOracle Enterprise ManagerコンソールまたはJConsoleを使用して構成できます。詳細は、第5.2項「ディスパッチャの構成」を参照してください。

3.15.2 エンジンの構成

エンジンの属性は、EngineSettings MBeanを介して公開されます。詳細は、第5.3項「エンジンの構成」を参照してください。EngineSettings MBeanを構成したら、その次にsetProfileParameter操作のパラメータ(表3-6を参照)を構成します。詳細は、第4.8.2項「プロファイル・パラメータの管理」を参照してください。

表3-6 setProfileParameter操作のパラメータ

プロファイル

セクション

パラメータ

説明

Exchange2007

Task

URL for transformations

XLST変換ファイルがサーバー上に格納されるURL

Exchange2007

Calendar

URL for transformations

XLST変換ファイルがサーバー上に格納されるURL

Exchange2007

Contact

URL for transformations

XLST変換ファイルがサーバー上に格納されるURL

Exchange2007

Task

Filter Condition

XMLフィルタ・ファイルがサーバー上に格納されるURL

Exchange2007

Calendar

Filter Condition

XMLフィルタ・ファイルがサーバー上に格納されるURL

Exchange2007

Contact

Filter Condition

XMLフィルタ・ファイルがサーバー上に格納されるURL

WebCenter Tasks

Task

connUrl

指定したXLST変換ファイルがサーバー上に格納されるURL

WebCenter Tasks

Task

URL for transformations

XLST変換ファイルがサーバー上に格納されるURL

ヒント:

他のパラメータ値を確認して、そのデフォルト値を変更する必要があるかどうかを判断します。

3.15.3 MBeanを使用したPIMサーバー・インスタンスの構成

インストール・スクリプト以外に、fusionsync-fusionsync-WSアプリケーションのServerDomainConfigMBeanの操作を使用すると、コネクタを作成、削除および更新できます。詳細は、第4章「BDSS管理スタート・ガイド」を参照してください。

表3-7 BDSSインスタンス構成用の操作

操作

機能

showConnectorDetails

コネクタ構成の表示

updateConnectorForPIM

コネクタの追加と更新

deleteConnector

コネクタの削除

updatePimServerInstance

BDSSインスタンスの追加と更新

deletePimServerInstance

PIMサーバー・インスタンスの削除

updateConnectorInstance

BDSSインスタンスの追加と更新

deleteConnectorInstance

PIMサーバー・インスタンスの削除

updateDomainForConnector

コネクタのドメインの作成

deleteDomainForConnector

コネクタからのドメインの削除

updateFilterForDomain

ドメインに対するフィルタの作成

deleteFilterForDomain

ドメインからのフィルタの削除

3.15.3.1 PIMサーバー・インスタンスおよびコネクタ・インスタンスの作成

CreateBDSSConnectorInstances.sqlスクリプトによって、サーバー・インスタンスおよびコネクタ・インスタンスを作成するためのMBeanの代替方法が提供されます。サーバーのPIMサーバー・インスタンスおよびコネクタ・インスタンスを適切な表にシードするには、CreateBDSSConnectorInstances.sqlスクリプトを実行します。データベース・フォルダにあるこのスクリプトは、Oracleデータベース・クライアントからSQL*Plus(SQLPlus.exe)ユーティリティを使用して実行できます。

注意:

サーバーはMBeanインタフェースを使用して追加および変更することもできるため、このスクリプトはオプションです。

CreateBDSSConnectorInstances.sqlスクリプトには次のパラメータが必要です。

- Microsoft Exchange 2007サーバー

- Exchange 2007コネクタの名前

- Exchange 2007コネクタのURL

- BPELサーバー

- BPELタスク・コネクタの名前

- BPELコネクタのURL

第II部

基本的な管理

第II部では、Oracle Business Data Synchronization Server(BDSS)の基本的な管理タスクの実施方法について説明します。

- 第4章「BDSSの管理スタート・ガイド」

- 第5章「BDSSハブ・サービスの構成」

- 第6章「Microsoft Exchange 2007用BDSSコネクタの構成」

- 第7章「BDSSのセキュリティの構成」

- 第8章「ハブ・フィールドへのコネクタ・フィールドのマッピング」

- 第9章「カレンダ・ドメインの同期化」

4 BDSSの管理スタート・ガイド

この章では、Business Data Synchronization Server(BDSS)の管理タスクについて説明します。

この章の構成は、次のとおりです。

- 管理タスクの概要

- コネクタの管理

- BDSSサーバー・インスタンスの管理

- コネクタ・インスタンスの管理

- ドメインの管理

- ドメイン・フィルタの管理

- ユーザーの管理

- プロファイルの管理

4.1 管理タスクの概要

一般的な管理タスクには、次のものがあります。

- PIMサーバーのインスタンスの管理

- コネクタの管理

- コネクタの作成と削除

- コネクタに対する同期化方向(インバウンド、アウトバウンドまたは両方)の設定

- コネクタ・インスタンスの作成

- コネクタのWSDLを指し示すコネクタ・インスタンスの指定

- ドメインの管理

- コネクタのドメインの作成と削除

- ドメインに対する同期化方向(インバウンド、アウトバウンドまたは両方)の設定

- ユーザーの管理

- ユーザーおよびハブ・ユーザーの作成と削除

- 指定のコネクタ・ユーザーのドメインに対する同期化方向(インバウンド、アウトバウンドまたは両方)の変更

- フィルタを使用した期限切れタスク・レコードの削除

- コネクタのプロファイルに対するパラメータの作成、削除または更新

これらのタスクは、ServerDomainConfigMBean、UserConfigMBeanおよびProfileRuntimeInfo MBeanの属性および操作を通じて有効化されます。MBean(マネージドBean)は、アプリケーション、サービス、コンポーネントまたはデバイスなど、分散環境でJMXによって管理できるリソースを表すJavaオブジェクトです。

ServerDomainConfigMBeanの属性および操作(表4-1を参照)を使用して、コネクタ、PIMサーバーおよびドメインの管理に関連するタスクを実行できます。

表4-1 ServerDomainConfigMBeanの操作

Task

操作

コネクタ構成の表示

showConnectorDetails

コネクタの追加と更新

updateConnectorForPIM

コネクタの削除

deleteConnector

BDSSインスタンスの追加と更新

updatePimServerInstance

PIMサーバー・インスタンスの削除

deletePimServerInstance

コネクタ・インスタンスの追加と更新

updateConnectorInstance

コネクタ・インスタンスの削除

deleteConnectorInstance

コネクタのドメインの作成

updateDomainForConnector

コネクタからのドメインの削除

deleteDomainForConnector

ドメインに対するフィルタの作成

updateFilterForDomain

ドメインからのフィルタの削除

deleteFilterForDomain

UserConfigMBeanの操作(表4-2を参照)を使用して、ユーザーの作成やユーザー・ドメインの構成などのタスクを実行できます。

表4-2 UserConfigMBeanの操作

Task

操作

ユーザー・ステータスの表示

showUserList、showFailinguserList、showUserStatus

コネクタ・ユーザーの作成

addConnectorUser

ハブ・ユーザーの削除

removeHubUser

ユーザー・レベルの同期化の構成

updateUserSyncEnablementFlag、updateConnectorUserDomainSyncLevel

4.1.1 MBeanを使用したBDSSコンポーネントの管理

これらのMBeanは、J2EEに準拠するサーバーでサポートされるJMXコンソール(JConsoleなど)を介して構成できます。このドキュメントでは、Oracle Enterprise Manager 11g Fusion Middleware Control(Enterprise Managerコンソール)を使用したMBeanへのアクセスについて説明します。

4.1.1.1 Oracle Enterprise Managerコンソールを介したMBeanへのアクセス

Oracle Enterprise Managerコンソールを介してMBeanにアクセスする手順は、次のとおりです。

1. 「アプリケーション・デプロイメント」を選択します。

2. リスト(図4-1)から「システムMBeanブラウザ」を選択します。「システムMBeanブラウザ」ページが表示されます。アプリケーションに登録されているMBeanがナビゲーション・ツリー・ビューに表示されます。

図4-1 システムMBeanブラウザの選択

3. 属性、操作、統計および通知を表示するMBeanを選択します。Oracle Enterprise Managerにより、これらのコンポーネントがタブに編成されます。

4. 「呼出し」をクリックし、MBeanの操作に対する変更をコミットします。「適用」をクリックし、MBeanの属性に対する変更をコミットします。

4.1.1.2 JConsoleを介したMBeanへのアクセス

JConsoleを使用してMBeanにアクセスするには、「MBean」タブを選択します。

1. 「MBean」タブをクリックします。

2. ナビゲーション・ツリーでMBeanノードを展開します。MBeanの属性、操作および通知がサブノードとして表示されます。

3. 操作を呼び出します。

1. ツリーで「操作」ノードを選択します。右側のペインに、すべての操作がボタンとして表示されます。パラメータがフィールドとして表示されます。

2. 必要に応じて操作のパラメータ・フィールドを更新します。

3. 操作ボタンをクリックし、操作を呼び出します。

4. 個々の操作を更新します。

1. ツリーで「操作」ノードを展開します。操作のノードが表示されます。

2. ツリーで操作を選択し、その操作のMBeanOperationInfoおよびDescriptor情報を右側のペインに表示します。操作自体は、クリックして操作を呼び出すボタンとして表示されます。

3. 必要に応じてMBeanOperationInfoを更新します。

4. 操作のボタンをクリックして操作を呼び出します。

5. MBeanの属性を設定します。

1. ツリーで「属性」ノードを展開します。属性ノードが表示されます。

2. 属性を選択します。右側のペインに、属性の値、そのMBeanAttributeInfoおよびそのディスクリプタが表示されます。

3. 属性を選択して編集することで、属性を設定します。

JConsoleの使用方法の詳細は、Java SEの監視および管理ガイドの「JConsoleの使用」を参照してください。このドキュメントは、Java SE Technical Documentation (http://download.oracle.com/javase/index.html)から入手できます。

4.1.2 同期化方向の指定

MBean操作を使用して、コネクタ、ドメインおよびユーザーのレベルで同期化方向(インバウンド、アウトバウンドおよび完全)を設定できます。詳細は、表4-15を参照してください。

コネクタ・レベルの同期化

コネクタが同期化するすべてのドメインに対して、最大の同期化方向を設定できます。コネクタ・レベルでの同期化の設定の詳細は、第4.2.2.1項「コネクタ・レベルの同期化とイベント通知の構成」を参照してください。

ドメイン・レベルの同期化

コネクタの特定のデータ・ドメインに対して、同期化方向を設定できます。ドメイン・レベルの同期化の設定の詳細は、第4.5.1.1項「ドメイン・レベルの同期化の構成」を参照してください。

ユーザー・レベルの同期化

特定のドメインの特定のユーザーに対して、同期化方向を設定できます。これは最も制限された同期化のレベルです。ユーザー・レベルでの同期化の設定の詳細は、第4.7.3.1項「ハブ・ユーザーに対する同期の有効化」を参照してください。

4.2 コネクタの管理

表4-3に記載されているServerDomainConfigMBeanの操作を使用して、このMBeanの操作を作成、削除および表示し、コネクタ構成の詳細を管理できます。

表4-3 ServerDomainConfigMBeanのコネクタ管理操作

操作

管理タスク

showConnectorDetails

コネクタ構成の表示

updateConnectorForPIM

コネクタの追加と更新

deleteConnector

コネクタの削除

4.2.1 コネクタの構成の表示

すべてのコネクタまたは特定のコネクタの構成を表示する手順は、次のとおりです。

1. showConnectorDetails操作を選択します。

2. 特定のコネクタの構成を表示するには、コネクタの表示名をconnectorName属性の値として入力します。フィールドを空白のままにすると、すべてのコネクタの構成情報が表示されます。

3. 「呼出し」をクリックします。

4.2.2 コネクタの追加と更新

ServerDomainConfigMBeanのupdateConnectorForPIM操作を使用して、コネクタを作成または更新したり、コネクタの同期方法を指定できます。

4.2.2.1 コネクタ・レベルの同期化とイベント通知の構成

コネクタの同期化は、EnableForSyncパラメータをtrueに設定し、同期化レベル(Full、Inbound、OutboundまたはNone)を選択することで有効にします。コネクタ・レベルの同期化の設定では、コネクタによって同期化されるすべてのドメインに対して方向を設定します。

updateConnectorForPim操作を使用して、コネクタによるイベント通知の送信を有効にすることもできます。この操作を使用して、ユーザー・データに対して挿入、更新または削除イベントが発生したときに、コネクタによるBDSSへの通知を有効にすることも可能です。

注意:

SYNC_EVENTS_ENABLED_FLG、SUPPORTS_EVENTS_FLGおよびUSER_EVENT_FLGフラグをCONNECTORSテーブルに直接設定するのではなく、MBeanを介してイベントベースの同期化を実行してください。

コネクタを追加または更新する手順は、次のとおりです。

1. updateConnectorForPIM操作を選択します。

2. 表4-4に記載されているパラメータを定義し、「呼出し」をクリックします。

表4-4 updateConnectorForPIM操作のパラメータ

パラメータ

説明

ConnectorName

コネクタの表示名。コネクタの名前を定義しないと、名前はBDSSによって作成されます。それ以外の場合は、既存の名前が変更されます。

SupportsEventNotifications

ユーザーのデータに対して挿入、更新または削除イベントが発生したときにコネクタがBDSSに通知できる場合はtrueを選択します。それ以外の場合はfalseを選択し、コネクタがこれらのイベントをBDSSに通知しないようにします。

syncEventsEnabled

コネクタによるイベント通知の送信を有効にするには、trueを選択します。(イベント通知の送信を求めるプロンプトが表示されない場合でも、コネクタではイベント通知をサポートできます)。

PimServerType

PIMサーバー・タイプを指定します(Exchange2007など)。その他のPIMサーバー・タイプを構成できます。

MaxSyncLevel

コネクタの最大同期化レベルを示します。

- Full: 双方向(つまり、インバウンドとアウトバウンドの両方)の同期化を有効にします。MaxSyncLevelパラメータをFullに設定すると、コネクタは、ハブとPIMサーバー間で、作成、読取り、更新および削除イベントの伝播と抽出の両方を実行できます。

- Inbound: レコードの作成、更新および削除イベント・データのPIMサーバーへの伝播を有効にします。MaxSyncLevelパラメータの値にInbound Onlyを選択すると、PIMサーバーからデータは抽出されません。

- Outbound: レコードの作成、読取り、更新および削除イベント・データのコネクタによるPIMサーバーからの抽出を有効にします。MaxSyncLevelパラメータの値にOutbound Onlyを選択すると、レコードの作成、読取り、更新および削除イベント・データはPIMサーバーに伝播されません。

- None: MaxSyncLevelパラメータをNoneに設定すると、コネクタによる同期化が防止されます。

EnabledForSync

同期化を有効にするにはtrueを選択します。同期化を無効にするにはfalseを選択します。

4.2.3 コネクタの削除

コネクタを削除する手順は、次のとおりです。

1. deleteConnector操作を選択します。

2. ConnectorNameパラメータ(表4-4を参照)を指定し、「呼出し」をクリックします。

4.3 BDSSサーバー・インスタンスの管理

表4-5に記載されているServerDomainConfigMBeanの操作を使用して、コネクタで使用されるサーバー・インスタンスを作成または削除します。

表4-5 サーバー・インスタンスを管理するための操作

操作

管理タスク

updatePimServerInstance

BDSSインスタンスの追加と更新

deletePimServerInstance

PIMサーバー・インスタンスの削除

4.3.1 BDSSインスタンスの追加と更新

BDSSインスタンスを追加または更新する手順は、次のとおりです。

1. updatePimServerInstance操作を選択します。

2. 表4-6に記載されているパラメータを指定し、「呼出し」をクリックします。

表4-6 updatePimServerInstance操作のパラメータ

パラメータ

説明

PimServerInstance

PIMサーバー・インスタンスの名前。これは、Active Directoryから、またはネットワークで使用されるネットワーク・ディレクトリ・サービスから返されるPIMサーバー名である必要があります。

ConnectorName

PIMサーバー・インスタンスが構成されるコネクタの表示名。

4.3.2 PIMサーバー・インスタンスの削除

PIMサーバー・インスタンスを削除する手順は、次のとおりです。

1. deletePimServerInstance操作を選択します。

2. 表4-6に記載されているパラメータを指定して、「呼出し」をクリックします。

4.4 コネクタ・インスタンスの管理

コネクタ・インスタンスは、コネクタの特定のインストールを表します。このインスタンスは、単一のコネクタの場合、またはロード・バランシングされた同じURI(Universal Resource Identifier)からアクセスされるコネクタのグループを表す場合があります。

表4-7に記載されているServerDomainConfigMBeanの操作を使用して、コネクタのインスタンスを管理します。

表4-7 コネクタ・インスタンスを管理するための操作

操作

管理タスク

updateConnectorInstance

コネクタ・インスタンスの追加と更新

deleteConnectorInstance

コネクタ・インスタンスの削除

4.4.1 コネクタ・インスタンスの追加と更新

コネクタ・インスタンスを追加または更新する手順は、次のとおりです。

1. updateConnectorInstance操作を選択します。

2. 表4-8に記載されているパラメータを指定し、「呼出し」をクリックします。

表4-8 updateConnectorInstance操作のパラメータ

パラメータ

説明

connectorInstName

コネクタ・インスタンスの表示名。

connectorName

コネクタ・インスタンスが構成されるコネクタの名前。この名前は、showConnectorDetails操作を使用して検索できます。Exchange 2007およびBPELタスク・コネクタの名前はSQLスクリプトによってシードされますが、別の名前を追加できます。

pimServerInst

このコネクタで使用されるPIMサーバー・インスタンス。

url

コネクタのWebサービスのURL。

4.4.2 コネクタ・インスタンスの削除

コネクタ・インスタンスを削除する手順は、次のとおりです。

1. deleteConnectorInstance操作を選択します。

2. connectorInstNameおよびconnectorNameパラメータ(表4-8を参照)を指定し、「呼出し」をクリックします。

4.5 ドメインの管理

ドメインは、カレンダ、ビジネス連絡先、個人の連絡先、タスクなどのレコードのクラスです。各コネクタは、ハブ・ドメインの中心的なセットにマップされるPIMサーバー(コネクタ・ドメイン)上に一連のドメインを保持します。ハブ・ドメインは、ハブのXSD(XMLスキーマ定義)に定義されているドメインの抽象的な表現です。詳細は、第8章「ハブ・フィールドへのコネクタ・フィールドのマッピング」を参照してください。

表4-9に記載されているServerDomainConfigMBeanの操作を使用してドメインを管理します。

表4-9 ドメインを管理するための操作

操作

管理タスク

updateDomainForConnector

コネクタのドメインの作成

deleteDomainForConnector

コネクタからのドメインの削除

4.5.1 コネクタのドメインの作成

コネクタのドメインを追加または更新する手順は、次のとおりです。

1. updateDomainForConnector操作を選択します。

2. 表4-10に記載されているパラメータを指定し、「呼出し」をクリックします。

表4-10 updateDomainForConnectorのパラメータ

パラメータ

説明

domainName

ドメインの名前

domainType

ドメインのタイプ(「Task」など)。

connectorName

ドメインが構成されるコネクタの表示名。

synclevel

ドメインの最大同期化レベル。

- Full

- Inbound Only

- Outbound Only

- None

Priority

コネクタ・ドメインが同じタイプの他のコネクタ・ドメインを引き継ぐ優先度を決定する整数を選択します。整数(負、正または0)を使用して優先度を設定できます。優先度が-2のドメインは、優先度が1のドメインより前に同期化されます。詳細は、第4.5.1.1項を参照してください。

各コネクタの同じドメインには、「Priority」パラメータを異なる値に設定する必要があります。たとえば、Exchange 2007コネクタと別のタイプのコネクタの両方に1のタスク・ドメイン優先度を設定することはできません。同じドメインに対して優先度が同じ場合は、例外がスローされます。

4.5.1.1 ドメイン・レベルの同期化の構成

updateDomainForConnector操作を使用して、synclevelおよびPriorityパラメータを介してコネクタの特定のドメインに同期化構成を設定できます。synclevelパラメータは、ドメインに対する同期化のレベルを設定し、Priorityパラメータは、異なるPIMサーバーからのレコード変更における同期化の競合の結果、優先されるレコード変更イベントを決定します。エンジンは、ハブ・ドメインを同時ではなく順次に同期化します。たとえば、ユーザーに対する指定の同期化セッションでは、ハブ・ドメインAをドメインBの前に同期化します。

注意:

ハブ・ドメインには多数のコネクタが同時にリンクできます。同じ親ハブ・ドメインを共有する各コネクタ・ドメインには、一意の優先番号が必要です。

synclevelパラメータを使用して選択可能な同期化レベルは、次のとおりです。

Full

コネクタ全体でハブ・ドメインの双方向の同期化を有効にします。コネクタ・ドメインのsynclevelパラメータをFullに設定すると、コネクタは、ドメインと別のPIMサーバー上にある対応するドメインとの間で、作成、読取り、更新および削除イベントの伝播と抽出の両方を実行できます。

Inbound Only

コネクタ・ドメインにInbound Onlyを選択すると、そのコネクタ・ドメインのPIMにレコード変更イベント・データの伝播のみが実行されます。このオプションを選択した場合、データは、対応するコネクタ・ドメインのPIMサーバーから抽出されません。

Outbound Only

同期化レベルがアウトバウンドのみのドメインでは、PIMサーバー上の対応するドメインからのレコードの作成、読取り、更新および削除イベント・データのコネクタによる抽出が有効になります。synclevelパラメータの値にOutbound Onlyを選択すると、レコードの作成、読取り、更新および削除イベント・データは、このドメインのPIMサーバーに伝播されません。

None

コネクタ・ドメインの同期化レベルをNoneに設定すると、ドメインは、インバウンドおよびアウトバウンドのいずれの同期化も対象外となります。レコードの作成、読取り、更新または削除イベント・データは、別のPIMサーバー上にある対応するドメインに対しても伝播および抽出されません。

4.5.2 コネクタからのドメインの削除

コネクタからドメインを削除する手順は、次のとおりです。

1. deleteDomainForConnector操作を選択します。

2. domainNameおよびconnectorNameパラメータ(表4-10を参照)を指定し、「呼出し」をクリックします。

4.6 ドメイン・フィルタの管理

フィルタはコネクタ・ドメインに固有で、定義されている基準に基づいて抽出結果セットから一連のレコードを除外できます。BDSSでは、コネクタで使用されるあらゆるフィルタをサポートしています。

注意:

Oracle Fusion Middleware 11gリリース2では、Exchange 2007コネクタが古いタスク・レコードを削除するのに使用する協定世界時(UTC)の日時値フィルタがBDSSに付属しています。Exchange 2007コネクタは、このフィルタを使用して各タスク・レコードの期日を評価し、フィルタの日付値がレコードの期日より新しい場合は、抽出結果セットからレコードを除外します。

4.6.1 ドメインに対するフィルタの作成

コネクタのドメインに対するフィルタを作成または更新する手順は、次のとおりです。

1. ServerDomainConfigMBeanのupdateFilterForDomain操作を選択します。

2. 表4-11に記載されているパラメータを指定し、「呼出し」をクリックします。

表4-11 updateFilterForDomain操作のパラメータ

パラメータ

説明

domainFilterName

フィルタ名。この名前は各コネクタ・ドメイン内で一意である必要があります。

domainName

このフィルタが構成されるドメインの名前。

connectorName

フィルタを所有するコネクタの表示名。

DomainFilterValue

このフィルタに構成される値。

DomainFilterSeq

このフィルタが適用される順序をこのドメインの他のフィルタと比較して判断するための0(ゼロ)より大きい整数。

4.6.2 ドメインからのフィルタの削除

ドメインからフィルタを削除する手順は、次のとおりです。

1. deleteFilterForDomainを選択します。

2. domainFilterName、domainNameおよびconnectorNameパラメータを指定し、「呼出し」をクリックします。

4.7 ユーザーの管理

UserConfigMBeanの操作(表4-12を参照)を使用して、ユーザー・ステータスの表示、ユーザーの作成と削除、および各ユーザー単位でのドメインの同期化構成の設定を実行できます。

表4-12 ユーザーを管理するための操作

操作

Task

showUserList、showFailinguserListおよびshowUserStatus

ユーザー・ステータスの表示

addConnectorUser

コネクタ・ユーザーの作成

removeHubUser

ハブ・ユーザーの削除

updateHubUserSyncEnableFlag

ハブ・ユーザーに対する同期の有効化

updateUserDomainSyncLevel

ユーザーのドメインに対する同期化レベルの設定

4.7.1 ユーザー・ステータスの表示

表4-13に記載されている操作を使用して、ユーザーの同期化ステータスを表示できます。

表4-13 同期化ステータスの操作

操作

説明

showUserList

すべてのユーザーのリストとそれぞれのステータスを返します。

showFailinguserList

現在同期化に失敗しているすべてのユーザーのリストを返します。

showUserStatus

ユーザーのステータスを、レコード・レベルのステータスを含めて表示します。この操作には、失敗している項目のみを返すオプション・フラグがあります。

4.7.2 コネクタ・ユーザーの作成

addConnectorUser操作は、新しいユーザーをコネクタに追加し、そのユーザーをハブ・ユーザーに関連付けます。この操作では、ハブ・ユーザーが存在しない場合は、コネクタ・ユーザーに対してハブ・ユーザーも作成されます。

注意:

ユーザーに対して同期化を有効にする場合は、コネクタに対してもユーザーを作成する必要があります。また、ハブ・ユーザーは、updateUserSyncEnableFlagをtrueに設定することで、コネクタ・ユーザーの同期化を有効にする必要があります。ユーザーに対する同期化レベルの設定の詳細は、第4.7.3項を参照してください。

表4-14 addConnectorUser操作のパラメータ

パラメータ

値

hubUserName

ハブ・ユーザーの名前。

connectorUserId

コネクタ・ユーザーのID。Exchange 2007ユーザーの場合、この値はfirstname.lastname@mailserver.comの書式で入力します。

target

ユーザーのデータが格納される場所。ほとんどのExchangeユーザーの場合、この値はルートです。第D.1.5項「PIMドメイン・ターゲット」を参照してください。

connectorName

コネクタの名前。

4.7.2.1 ハブ・ユーザーの削除

removeHubUser操作は、データベースからハブ・ユーザーおよびハブ・ユーザーに関連付けられているすべてのコネクタ・ユーザーを削除します。ハブ・ユーザーを削除する手順は、次のとおりです。

1. removeHubUser操作を選択します。

2. hubUserNameパラメータ(表4-14を参照)を定義し、「呼出し」をクリックします。

4.7.3 ユーザー・レベルの同期化の構成

updateUserSyncEnablementFlagおよびupdateConnectorUserDomainSyncLevel操作は、ユーザーに対する同期化構成を設定します。

4.7.3.1 ハブ・ユーザーに対する同期の有効化

updateUserSyncEnablementFlagをtrueに設定すると、後続のすべての同期化セッションでユーザーの同期化が有効になります。この操作をfalseに設定すると、ユーザーの同期化が防止されます。ハブ・ユーザーの同期化を有効にする手順は、次のとおりです。

1. updateUserSyncEnablementFlagを設定します。

2. hubUserNameパラメータ(表4-14を参照)を定義し、「呼出し」をクリックします。

4.7.3.2 ユーザーのドメインに対する同期化レベルの設定

第4.5.1.1項に記載されているドメインに対して構成される同期化レベルは、updateUserDomainSyncLevel操作を介して各ユーザー単位でドメインに対して構成される同期化レベルの影響を受けます。この操作を使用して、指定ドメインのコネクタ・ユーザーに対する同期化レベルを変更できます。

注意:

updateUserDomainSyncLevel操作では、ユーザーのドメイン・コンテキストがない場合はそのコンテキストが作成されます。

次の同期化レベルがあります。

- Full

- Inbound Only

- Outbound Only

- None

これらのレベルがユーザーに適用されると、表4-15に記載されているように、ドメインに対する最終的な同期化方向が変更されます。

表4-15 ドメインの同期化レベルの方向

コネクタ・ドメインの同期化方向

ユーザーの同期化方向

最終的な方向

Full

Full

Full

Full

Inbound Only

Inbound Only

Full

Outbound Only

Outbound Only

Inbound Only

Full

Inbound Only

Inbound Only

Inbound Only

Inbound Only

Inbound Only

Outbound Only

None

Outbound Only

Full

Outbound Only

Outbound Only

Inbound Only

None

Outbound Only

Outbound Only

Outbound Only

None

任意の同期化レベル(Full、Inbound Only、Outbound Only、None)

None

任意の同期化レベル(Full、Inbound Only、Outbound Only、None)

None

None

ユーザーのコネクタ・ドメインの同期化レベルを設定する手順は、次のとおりです。

1. updateUserDomainSyncLevel操作を選択します。

2. 同期化レベルを選択します。

3. 次のパラメータを指定します。

- connectorUserId (表4-14を参照)

- connectorName

- domainName (表4-10を参照)

- syncLevel (表4-10を参照)

4. 「呼出し」をクリックします。

4.8 プロファイルの管理

プロファイルには、コネクタの構成メタデータが格納されます。コネクタは、GetConfigurationMetadataインタフェースを使用することで、そのプロファイル(概念的にはWindowsの.ini構成ファイルに相当する)を取得します。各プロファイルには、パラメータが含まれている1つ以上のセクションがあります。各パラメータには、単一の値があります。ProfileRuntimeInfo MBeanを使用して、コネクタのプロファイルを管理できます。

4.8.1 プロファイルの表示

displayAllProfilesおよびdisplayProfile操作を使用して、コネクタのプロファイルを表示できます。

4.8.1.1 コネクタの全プロファイルの表示

プロファイルおよびセクションごとにグループ化されたすべてのパラメータのリストを表示する手順は、次のとおりです。

1. displayAllProfiles操作を選択します。

2. 「呼出し」をクリックします。

4.8.1.2 特定のプロファイルの表示

特定のプロファイルを表示する手順は、次のとおりです。

1. displayProfile操作を選択します。

2. プロファイル名を入力します。

3. 「呼出し」をクリックします。パラメータが、選択したプロファイルのセクションごとにグループ化されて表示されます。

4.8.2 プロファイル・パラメータの管理

setProfileParameterおよびremoveProfileParameter操作を使用して、プロファイルを作成、更新および削除できます。

4.8.2.1 プロファイルの作成

プロファイルを作成するには、次のようにします。

1. setProfileParameter操作を選択します。

2. プロファイルの名前を入力します。

3. セクションの名前を入力します。

4. プロファイルのパラメータ(名前、値およびコメント)を指定します。

5. 「呼出し」をクリックします。

4.8.2.2 プロファイルの更新

プロファイルを更新する手順は、次のとおりです。

1. setProfileParameter操作を選択します。

2. プロファイルの名前を入力します。

3. セクションの名前を入力します。

4. 必要に応じて、パラメータを更新します。

5. 「呼出し」をクリックします。

4.8.2.3 プロファイルからのパラメータの削除

選択したプロファイルからパラメータを削除する手順は、次のとおりです。

1. removeProfileParameter操作を選択します。

2. パラメータ、プロファイルおよびセクションの名前を指定し、正しいパラメータが削除されることを確認します。

3. 「呼出し」をクリックします。

5 BDSSハブ・サービスの構成

この章では、ハブおよびコネクタの基本構成について説明します。

この章の構成は、次のとおりです。

- ハブ構成の概要

- ディスパッチャの構成

- エンジンの構成

- コネクタ構成プロファイルの作成

- FtsKeyFieldsプロファイルの構成

5.1 ハブ構成の概要

ハブおよびディスパッチャ・コンポーネントの構成は、MBeanの属性および操作として公開されます。これらのMBeanは、Oracle Enterprise ManagerのシステムMBeanブラウザを使用して、またはJ2EEに準拠するサーバーでサポートされるJMXコンソール(JConsoleなど)を介して構成できます。詳細は、第4.1.1項「MBeanを使用したBDSSコンポーネントの管理」を参照してください。

5.2 ディスパッチャの構成

ハブおよびディスパッチャの属性は、DispatcherSettings MBeanを介して公開されます。表5-1に、これらの属性を示します。

表5-1 DispatcherSettings MBeanの属性

属性

説明

ChunkSize

同期化のためにハブに送信されるメッセージに含まれるユーザーの数。この属性を使用して、実行しているエンジンの各インスタンスへのロードを分散します。デフォルト値は、1メッセージに対して20ユーザーです。

HubEndPointURL

ハブをホストするサーバー上のDispatcherHub Webサービスに接続するためにディスパッチャが使用するURL。たとえば、Oracle WebLogic Serverの典型的なハブURLは、http://<HUB_SERVER_IP_ADDRESS>:7001/BDSSHubWebServices/DispatcherHubWebService?WSDLです。

5.3 エンジンの構成

エンジンの属性は、EngineSettings MBeanを介して公開されます。表5-2に、これらの属性を示します。

表5-2 EngineSettings MBeanの属性

属性

説明

EngineEndPointURL

コネクタでエンジンに対するリクエストおよびデータ更新リクエスト・レスポンスの抽出を可能にするためにエンジンで使用されるURL。

Oracle WebLogic Server管理コンソールを使用してこのURLを検索する手順は、次のとおりです。

1. 「デプロイメント」を選択します。

2. BDSSHubのツリー構造を展開します。

3. 「EngineCallBackInterface」ノードを選択します。「EngineCallback」ページの「設定」が表示されます。

4. 「テスト」タブを選択します。

5. 「EngineCallbackInterface」ノードを展開します。

6. ?WSDLテスト・ポイントを選択します。

ExtractResponseTimeOut

コネクタからの抽出レスポンスを処理するためにエンジンが待機するミリ秒数。デフォルト値は、 60000 ミリ秒です。通常の状況でタイムアウトが発生しないように、タイムアウト値には十分に大きい値が必要です。この値は、次の内容も含めた複数のファクタによって異なります。

- 抽出可能な最大レコード・セットのサイズ。

- 抽出されるハブ・ドメインの数。これが関係するのは、エンジンでは、ハブ・ドメインの同期化セッションが順次に処理されるためです。そのため、ハブ・ドメインAが最初に処理された場合、ハブ・ドメインBは抽出レスポンスを取得するためにハブ・ドメインAより長く待機する必要があります。

- システム・ロードや通信待機時間を含む他のファクタ。これらのファクタは、タイムアウトの発生前にコネクタから抽出レスポンス・メッセージを取得して処理するエンジンの機能に影響を与えます。

タイムアウトが発生すると、影響を受けるユーザー同期化セッションに対応するハブ・ドメインの同期化が終了します。

MessageTimeToLive

削除される前に抽出レスポンスを含むメッセージがJMSキューに留まっているミリ秒数。デフォルト値は、 60000 ミリ秒です。このタイムアウト値は、ExtractResponseTimeOut属性に対して実行した分析に類似した分析を使用して計算します。

RuntimeLibraryURL

コネクタがコネクタ・ランタイム・ライブラリと通信できるように、エンジンがコネクタに送信するURL。

Oracle WebLogic Server管理コンソールを使用してこのURLを検索する手順は、次のとおりです。

1. 「デプロイメント」を選択します。

2. BDSSHubのツリー構造を展開します。

3. 「ConnectorRuntimeInterface」ノードを選択します。「ConnectorRuntimeInterface」ページの「設定」が表示されます。

4. 「テスト」タブを選択します。

5. 「ConnectorRuntimeInterface」ノードを展開します。

6. ?WSDLテスト・ポイントを選択します。

5.4 コネクタ構成プロファイルの作成

第4.8.2「プロファイルのパラメータの管理」に記載されているsetProfileParameter操作を使用して、構成プロファイルのパラメータを作成または更新できます。

5.5 FtsKeyFieldsプロファイルの構成

FTSKeyFieldsは、すべてのコネクタで使用されるハブ・プロファイルです。BDSSでは、あるPIMサーバーからのレコードが別のPIMサーバーからのレコードと同じかどうかを判断するために、レコードを最初に同期化するときにキー・フィールドを使用します。レコードのすべてのキー・フィールドの値が一致する場合、レコードは同一とみなされます。いずれかのキー・フィールドが一致しない場合、レコードは一意のレコードとみなされます。

注意:

照合した後は、レコードを識別するためにBDSSでキー・フィールドが引き続き使用されることはありません。これ以降、BDSSではレコードIDが使用されます。

表5-3に、FtsKeyFieldsプロファイルに分類されるパラメータを示します。

表5-3 FtsKeyFieldsプロファイルのパラメータ

パラメータ

説明

KeyField1

レコードの照合で使用する最初のフィールド。

KeyField2

レコードの照合で使用する2番目のフィールド。

6 Microsoft Exchange 2007用BDSSコネクタの構成

この章では、Microsoft Exchange 2007用Oracle BDSSコネクタ(Exchange 2007コネクタ)のプロファイル・パラメータについて説明します。

この章の構成は、次のとおりです。

- Exchange 2007コネクタ構成の概要

- データ交換のためのMicrosoft Exchange 2007コネクタの構成

- Exchange 2007コネクタ用のレコード変換の構成

- Microsoft Exchange 2007コネクタのPIMトランスポート・コンポーネントの構成

- ドメインの同期化の構成

- データのフィルタリングの構成

- Active Directoryを使用するためのMicrosoft Exchange 2007コネクタの構成

- Exchange 2007コネクタ用のイベント受信の構成

- Microsoft自動検出サービスを使用するためのExchange 2007コネクタの構成

- Exchange 2007コネクタを使用したドメインの同期化のテスト

6.1 Exchange 2007コネクタ構成の概要

第4.8項「プロファイルの管理」で説明されているように、コネクタの構成プロファイルは、setProfileParameter操作を使用して作成または更新できます。Exchange 2007コネクタには、次のプロファイルが付属しています。

- Hub Transport

- Task

- Contact

- Calendar

- Active Directory

- Auto Discovery

- Event Receiver

6.2 データ交換のためのMicrosoft Exchange 2007コネクタの構成

「Hub Transport」セクションには、Exchange 2007コネクタをハブと通信できるようにする、次のパラメータがあります(表6-1を参照)。ハブ・トランスポートの詳細は、第2.2.1項「ハブ・トランスポート」を参照してください。

注意:

setProfileParameter操作を使用して、表6-1に記載されているパラメータを作成する必要があります。プロファイル名はコネクタの名前である必要があります。詳細は、第4.8.2項「プロファイル・パラメータの管理」を参照してください。

表6-1 「Hub Transport」セクションのパラメータ

パラメータ

説明

Pim Transport Implementation Class

oracle.bdss.connectors.exchange2007.Exchange2007PimTransportAdapter

Extract Response Batch Size

抽出レスポンスのレコード数。Oracle Fusion Middleware 11gリリース2のBDSSでは、ユーザーを同期化するために構成された指定のExchangeフォルダ内のレコード数を上回る大きいレコード数(10,000以上)を表すようにこの値を設定します。通常、ほとんどのユーザーのレコード数は、数万単位ではなく数千単位の数です。

6.3 Exchange 2007コネクタ用のレコード変換の構成

「hubDomainName」セクションのパラメータ(表6-2を参照)を使用して、XSLTおよびXSDファイルのURLの場所を設定し、ハブ書式とPIM書式の間でレコード・データの変換を実行するようにExchange 2007を構成できます。

注意:

変換ファイル用のURIを使用するようにパラメータを構成する場合は、file:///./の書式を使用しないでください。かわりに、URIを次の書式で入力してください。

C:/directory1/directory2.../file.NNN

たとえば、c:/fusion_syncがトランスフォーマ・ファイルの<root>ディレクトリの場合は、次のURIを入力します。

c:/fusion_sync/transform/exchange/task/exchange2007task.xsd

表6-2 「hubDomainName」セクションのパラメータ

パラメータ

説明

HubToPimXSL

ハブXML書式からPIM XML書式にレコードを変換するXSLファイルの場所へのURL。

PimToHubXSL

PIM XML書式からハブXML書式にレコードを変換するXSLファイルの場所へのURL。

PimXSD

PIMドメインのXSDの場所へのURL。

6.4 Microsoft Exchange 2007コネクタのPIMトランスポート・コンポーネントの構成

「PimTransport」セクションのパラメータ(表6-3を参照)を使用して、Microsoft Exchange 2007コネクタのPIMトランスポート・コンポーネントを設定します。

表6-3 「PimTransport」セクションのパラメータ

パラメータ

説明

TryUrlsWithoutDomain

trueに設定すると、PIMトランスポートは、自動検出、LDAPおよびEWSのドメインを含まないURLを試行します。デフォルトは、falseです。

6.5 ドメインの同期化の構成

Exchange 2007コネクタを使用して、「Contact」、「Task」および「Calendar」の各セクションを介してドメインの同期化を構成できます。

6.5.1 連絡先の同期化の構成

Exchange 2007コネクタは、「Contact」セクションのパラメータ(表6-4を参照)を使用して連絡先ドメインを同期化できます。

表6-4 連絡先ドメインの同期化を構成するためのパラメータ

パラメータ

説明

Folder Class

ドメインのフォルダ・クラス。デフォルト値はIPF.Contactです。

Pim Domain Id

同期化される各クラスのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。デフォルト値はIPM.Contactです。

Pim Xsd

exchange2007contact.xsdファイルのURI。

PimToHubUrl

Exchange2007ContactToHubContact.xslのURI。

HubToPimUrl

HubContactToExchange2007Contact.xslのURI。

6.5.2 タスクの同期化の構成

Exchange 2007コネクタは、「Task」セクションのパラメータ(表6-5を参照)を使用してタスク・ドメインを同期化できます。

表6-5 タスク・ドメインの同期化を構成するためのパラメータ

パラメータ

説明

Pim Xsd

exchange2007task.xsdファイルへのURI。

PimToHubUrl

Exchange2007TaskToHubTask.xslへのURI。

HubToPimUrl

HubTaskToExchange2007Task.xslへのURI。

Domain Class Type

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。デフォルト値はTaskTypeです。

Exchange Domain Batch Size

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。デフォルト値は512です。

Folder Class

ドメインのフォルダ・クラス。デフォルト値はIPF.Taskです。

Body Type

ドメインのBodyフィールドの同期化方法。有効な値は、TextまたはHTMLです。デフォルト値はTextです。

Conflict Resolution Type

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。デフォルト値はAlwaysOverwriteです。

Disposal Type

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。デフォルト値はMoveToDeletedItemsです。

Pim Domain id

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。デフォルト値はIPM.Taskタスクです。

6.5.3 カレンダの同期化の構成

Exchange 2007コネクタは、「Calendar」セクションのパラメータ(表6-6を参照)を使用してカレンダ・ドメインを同期化できます。

表6-6 カレンダ・ドメインの同期化を構成するためのパラメータ

パラメータ

説明

Time Zone Xsd

timezoneregistryschema.xsdへのURI。

VEvent Xsd

veventasxml.xsdへのURI。

PimToHubUrl

exchange2007calendartohubcalendar.xslへのURI。

Pim Xsd

pimicalbody.xsdへのURI。

Calendar Item Type Xsd

calendaritemtype.xsdへのURI。

Time Zone Xml

timezoneregistry.xmlへのURI。

HubToPimUrl

hubcalendartoexchange2007calendar.xslへのURI。

CalendarItemToVEvent Xsl

calendaritemtypetoveventasxml.xslへのURI。

VEventToCalendarItem Xsl

veventasxmltocalendaritemtype.xslへのURI。

Body Type

veventasxmltocalendaritemtype.xslへのURI。デフォルト値はTextです。

Conflict Resolution Type

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。デフォルト値はAlwaysOverwriteです。

Disposal Type

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。デフォルト値はMovetoDeletedItemsです。

Domain Class Type

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。デフォルト値はCalendarItemTypeです。

Exchange Domain Batch Size

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。デフォルト値は512です。

Fanning Limit

Exchangeで繰返しのカレンダ・レコードをネイティブで表すことができない場合に作成されるレコードの数。有効な値は、1から100です。デフォルト値は30です。

Folder Class

ドメインのフォルダ・クラス。デフォルト値はIPF.Appointmentです。

Pim Domain id

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。デフォルト値はIPM.Appointmentです。

6.6 データのフィルタリングの構成

フィルタリングはExchange 2007コネクタによって同期化されるレコードを制御します。たとえば、公開レコードを無視するフィルタを定義する一方で、公開レコードのみを同期化できます。フィルタはXMLファイルに定義されます。このようなXMLファイルはドメインごとに1つ存在します。BDSSには次のフィルタが付属しています。

- Contact: このフィルタは、IPM.Contactアイテム・クラスが含まれるレコードを同期化することを指定します。

- Task: このフィルタは、IPM.Taskアイテム・クラスが含まれるレコードの中で、期日が2009-12-31T00:00:00より後のレコードを同期化することを指定します。

- Calendar: このフィルタは、IPM.Appointmentクラスが含まれるレコードの中で、終了日が2009-12-31T00:00:00より後のレコードを同期化することを指定します。

表6-7に、連絡先ドメインのフィルタリング・パラメータを示します。

表6-7 連絡先のフィルタリングを構成するためのパラメータ

パラメータ

説明

Filter Condition

contactfilter.xmlへのURI。

Body Type

ドメインのBodyフィールドの同期化方法。有効な値は、TextまたはHTMLです。デフォルト値はTextです。

Conflict Resolution Type

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。デフォルト値はAlwaysOverwriteです。

Disposal Type

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。デフォルト値はMoveToDeletedItemsです。

Domain Class Type

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。デフォルト値はContactItemTypeです。

Exchange Domain Batch Size

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。デフォルト値は512です。

Folder Class

ドメインのフォルダ・クラス。デフォルト値はIPF.Contactです。

Pim Domain Id

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。デフォルト値はIPF.Contactです。

表6-8に、タスクをフィルタリングするためのパラメータを示します。

表6-8 タスクのフィルタリングを構成するためのパラメータ

パラメータ

説明

Filter Condition

taskfilter.xmlへのURI。

表6-9に、カレンダをフィルタリングするためのパラメータを示します。

表6-9 カレンダのフィルタリングを構成するためのパラメータ

パラメータ

説明

Filter Condition

calendarfilter.xmlへのURI。

6.7 Active Directoryを使用するためのMicrosoft Exchange 2007コネクタの構成

「Active Directory」セクションのパラメータ(表6-10を参照)により、問合せにMicrosoft Active Directoryを使用して自動検出のSCP URLを取得するExchange 2007コネクタを構成できます。

表6-10 「Active Directory」セクションのパラメータ

パラメータ

説明

Port

Active Directoryを問い合せる際に使用するLDAPポート番号。セキュアなLDAPのデフォルト・ポートは636です。セキュアでないポートは通常、389です。

ServerN (Nは順序プリファレンスを指定するゼロ以外の一意の序数)

Active Directoryサーバーの名前を入力します。コネクタは、Active Directoryを問い合せる際にLDAP URLで名前を使用します。たとえば、server360007と入力すると、コネクタはldap://server36007:<ldapPort>/...を使用します。server36007.example.comと入力すると、コネクタはldap://server36007.example.com:<ldapPort>...を使用します。

Use SSL

コネクタがセキュアなLDAPを使用するかどうかを示します。デフォルト値はtrueです。開発環境では、ドメイン・コントローラがセキュアなLDAPに対して有効化されないため、値をfalseに設定します。

Referral

follow、throwまたはdeferです。デフォルト値はfollowです。

Max Query Result Size

Active Directoryの問合せごとに返される結果の最大数。デフォルト値は20です。

Max Query Time

Active Directoryの問合せが返されるまで待機する時間(ミリ秒)。デフォルト値は30秒(30000ミリ秒)です。

Read Timeout

タイムアウトするまでレスポンスを待機する時間(ミリ秒)。デフォルト値は5000です。

Connect Timeout

タイムアウトするまでActive Directoryへの接続を確立する時間(ミリ秒)。デフォルト値は5000です。

Client Certificate Path

「Use SSL」がtrueに設定され、ドメイン・コントローラでクライアント証明書が必要な場合は、trueに設定します。デフォルトはfalseです。

Using Client Certificates

クライアント・プロバイダがLDAP証明書を使用するかどうかを示します。デフォルトはfalseです。

6.8 Exchange 2007コネクタ用のイベント受信の構成

「Event Receiver」セクションのパラメータ(表6-11を参照)を使用して、イベント・レシーバ(Exchange 2007コネクタのPIMトランスポートがイベント通知に使用するWebサービスベースのコンポーネント)を構成できます。イベント・レシーバは、各ユーザーに対する作成、更新および削除イベントのサブスクリプションの確立、サブスクリプション・メタデータの保持、クライアント・アクセス・サーバーからの変更イベントの受信、およびランタイム・ライブラリAPIを介した同期化を必要とする変更がある場合のBDSSへの通知を処理します。

表6-11 「Event Receiver」セクションのパラメータ

パラメータ

説明

CHANGE_ME

CONNECTORSテーブルのNAME列に表示されるExchange 2007コネクタの名前。デフォルト値は、コネクタに対してデプロイされているイベント・レシーバのURLです。

Status Frequency

Exchangeが各サブスクリプションに通知を提供する頻度(分単位)。デフォルト値は「1」です。

Subscription Status Factor

イベント・レシーバは、Exchangeサーバーがすべてのサブスクリプションを終了していないことを確認するために、すべてのサブスクリプションに対してチェックを実行します。このパラメータは、このチェックの実行頻度を設定します。チェックの実行頻度は、このパラメータに設定した値に「Status Frequency」パラメータに設定した値を乗算した値です。たとえば、「Status Frequency」パラメータを1分に設定し、「Subscription Status Factor」パラメータを3に設定すると、イベント・レシーバは3分ごとにサブスクリプション・チェックを実行します。デフォルト値は3です。

6.9 Microsoft自動検出サービスを使用するためのExchange 2007コネクタの構成

Exchange 2007コネクタは、Microsoft Exchange 2007の自動検出サービスを問い合せることで、ユーザーのExchangeアカウントに関する情報の検出を試行します。サービスが利用可能な場所を指すサービス接続ポイント(SCP) URLがあります。ユーザーの検出を試行する際、コネクタは次のことを実行します。

1. 構成されている各SCPN URLを試行します。

2. 失敗した場合は、SCP URLのリストについてServerN構成に記載されている各Active Directoryサーバーを問い合せ、それぞれを試行します。

3. 最初の2つのステップが失敗となった場合、コネクタは次のデフォルトURLを試行します。

- <protocol>://<domainName>:<port>/autodiscover/autodiscover.xml

- <protocol>://<domainName>.autodiscover:<port>/autodiscover/autodiscover.xml

表6-12に記載されているパラメータを使用して、SCPN URLを指定した場合、Exchange 2007コネクタは自動検出サービスの検索を見送ります。

表6-12に、Microsoft Exchange 2007の自動検出サービスを使用するようにコネクタを構成できる「Auto Discovery」セクションのパラメータを示します。

表6-12 「Auto Discovery」セクションのパラメータ

パラメータ

説明

SCPN (Nは順序プリファレンスを指定するゼロ以外の一意の序数)

Exchange自動検出サービスの場所への完全URL、または自動検出サービスを実行するサーバーの名前を入力します。Exchange自動検出サーバーの場所へのURLを入力した場合は、指定したエントリが次のように挿入されてURLが作成されます。

<protocol>://<configuredValue>:<port>/autodiscover/autodiscover.xml

各SCPNが一意の場合にのみ、1つ以上の行を保持できます。ユーザーの検出時に、コネクタは、「SCPN」パラメータで指定されている順序で各URLを試行します。たとえば、SCP1のURLはSCP2のURLより前に試行され、以下同様に試行されます。

Port

ユーザー検出のHTTPリクエストの送信に使用されるポート。デフォルト値は通常、SSLポート443です。「Use SSL」がtrueに設定されている場合は、HTTPSポートの値を設定します。falseに設定されている場合は、HTTPポートの値を設定します。この値が使用されるのは、すべてのSCP URL(SCPN構成のURLおよびServern構成ごとに自動検出から取得されたURL)の試行後に試行される、デフォルトSCP URLを試行する場合のみです。

UseSSL

ユーザー検出のHTTPリクエストを送信するときに、セキュアなHTTP (SSL)を使用するかどうかを示します。デフォルト値はtrueです。

Remove Domain From Urls

Active Directoryから取得した検出SCP URLからドメイン情報を削除するようにコネクタに指示します。

開発環境の場合は、URLにドメインが含まれているとDNSでURLが解決されないため(つまり、http://server360007.example.com/autodiscover/autodiscover.xmlは機能しません)、この値をtrueに設定します。オプションをtrueに設定すると、URLはhttp://server360007/autodiscover/autodiscover.xmlになります。

Read Timeout

タイムアウトするまでレスポンスを待機する時間(ミリ秒)。デフォルト値は5000です。

Connect Timeout

タイムアウトするまで自動検出サーバーへの接続を確立する時間(ミリ秒)。デフォルトは5000です。

Client Certificate Path

この値は、PEM(プライバシ強化メールのセキュリティ証明書)ファイルの場所に設定します。このファイルには、自動検出でクライアント証明書が必要な場合に使用されるクライアント証明書が含まれています。

Client Certificate Key Path

この値は、PEM(プライバシ強化メールのセキュリティ証明書)ファイルの場所に設定します。このファイルには、クライアント証明書の秘密鍵が含まれています。

6.10 Exchange 2007コネクタを使用したドメインの同期化のテスト

Exchange 2007コネクタは、反映同期化に使用できます。Exchange 2007コネクタには複数のハブ・ドメインの同期化が用意されているため、このコネクタを使用して、タスク、連絡先およびカレンダの各ドメインのハブの同期化をテストできます。サーバー・タイプはハブとは無関係なため、ハブに対してExchange 2007コネクタを任意のタイプのPIMサーバーとして表すように構成できます。同じPIMサーバー・タイプを使用して第2のExchange 2007コネクタを構成すると、ハブは、異なるPIMサーバーの2人のユーザーを同期化するかのように、2人の異なるExchangeユーザーを同期化できます。

ハブの同期化をテストする手順は、次のとおりです。

1. CONNECTORSテーブルのNAME列に表示されるとおりのコネクタの名前をプロファイルの値に指定して、各Exchange 2007コネクタの「Pim Transport Implementation Class」および「Extract Response Batch Size」パラメータを構成します。たとえば、単一のExchange 2007コネクタがデプロイされていて、単一のインスタンスを使用して、単一のハブ・ユーザーにマップされている2人のExchange 2007ユーザーを同期化する必要があるとします。さらに、CONNECTORSテーブルのNAME列にExchange2007およびExchange2007_2があり、その両方に、Exchange2007のLOV値に相当するSERVER_TYPE_CDがあると仮定します。

2. ProfileRuntimeInfo MBeanのsetProfileParameterを使用して、次の4つの行をPROFILESテーブルに追加します。詳細は、第4.8項「プロファイルの管理」を参照してください。

表6-13 同期化をテストするためのプロファイルの追加

プロファイル

セクション

パラメータ

値

Exchange2007

Hub Transport

Pim Transport Implementation Class

oracle.bdss.connectors.exchange2007

pimtransport.PimTransportAdapter

Exchange2007

Hub Transport

Extract Response Batch Size

100000

Exchange2007_2

Hub Transport

Pim Transport Implementation Class

oracle.bdss.connectors.exchange2007.pimtransport.PimTransportAdapter

Exchange2007_2

Hub Transport

Extract Response Batch Size

100000

7 BDSSのセキュリティの構成

この章では、エンジンとコネクタ間にセキュリティを構成する方法について説明します。

この章の構成は、次のとおりです。

- 通信セキュリティの概要

- ハブで公開されるWebサービスの保護

- HTTPS用のBDSSの構成

7.1 通信セキュリティの概要

コネクタ・インタフェースはWebサービスであるため、SSLなどのWebベースのセキュリティ・プロトコルを使用して、エンジンとコネクタ間の通信を保護できます。コネクタ実装は、コネクタ自体とその通信先のPIMサーバー間のセキュリティのみを担当します。

BDSSをインストールした後は、次のタスクを完了することで、構成を変更し、ハブとコネクタの両方で公開されるWebサービスを保護できます。

- ハブで公開されるWebサービスの保護

- HTTPS用のBDSSの構成

7.2 ハブで公開されるWebサービスの保護

統合WebLogic Serverで実行されているハブ・コンポーネントで公開されるWebサービスを保護するには、Oracle Fusion Middleware Oracle WebLogic Server Webサービスの保護を参照してください。

ヒント:

SSL用にBDSSを構成した後は、最初にBDSSをデプロイして、次にWebブラウザを開きます。コネクタ・ランタイム・ライブラリおよびハブ・コールバック・ライブラリWebサービスのHTTPS URLを入力し、保護リクエストが受け入れられることを確認します。

7.3 HTTPS用のBDSSの構成

SSLを使用するようにWebサービスを構成した後は、セキュアなプロトコル(HTTPS)およびセキュアなポートを反映するように、次の手順に従ってコネクタ・ランタイム・ライブラリ、ハブ・コールバックおよびExchange 2007コネクタを識別するURLを変更する必要があります。

1. JConsole(またはMBeanに準拠するその他のアプリケーション)を起動してログインします。

2. EngineSettings MBeanにナビゲートします。

1. EngineEndPointURL属性を変更します。プロトコルにhttps://を指定し、ポートに統合WebLogic Serverで使用されるSSLポートを設定します。次に例を示します。

https://<system>:<secureport>/BDSSHubWebServices/EngineCallbackInterface?wsdl

2. RuntimeLibraryURL属性を変更します。プロトコルにhttps://を指定し、ポートに統合WebLogic Serverで使用されるSSLポートを設定します。次に例を示します。

https://<system>:<secureport>/BDSSHubWebServices/ConnectorRuntimeInterface?wsdl

3. ServerDomainConfigMBeanにナビゲートします。

1. showAllConnectorsForPim操作で、Exchange 2007をpimServerTypeパラメータ値として指定し、showAllConnectorsForPimをクリックします。

2. PIMサーバー名とコネクタIDの値を書き留めます。

3. updateConnectorForPim操作で、pimServerInstance値に、ステップ3bで取得したPIMサーバー名の値を指定します。connectorName値に、ステップ3bで取得したコネクタIDの値を指定します。URLに、Exchange 2007コネクタのHTTPS URLを入力します。

注意:

2人のExchangeユーザーを作成してコネクタ・ドメインの同期化をテストする場合も、これらのステップを実行しますが、Exchange 2007のかわりにBPEL TasksをpimServerType属性の値として指定してください。

8 ハブ・フィールドへのコネクタ・フィールドのマッピング

この章では、ハブ・サーバーとPIMサーバー間のレコードの変換方法について説明します。

この章の構成は、次のとおりです。

- データ変換の概要

- ドメイン・スキーマについて

- 同期化に起因するデータの副作用

8.1 データ変換の概要

異なるタイプのPIMサーバー間の情報交換を有効にするために、ハブでは、各コネクタ・ドメイン・タイプに対するスキーマ表現がスキーマ(XSD)ファイルに定義されます。PIMサーバーから抽出されてハブに戻されるデータは、ハブ・スキーマで定義されている書式に変換されます。コネクタは、インバウンドとアウトバウンドの両方のトランザクション・データをハブXML書式およびPIMサーバーの書式に変換します。抽出されるすべてのインバウンド・レコードについて、コネクタでは、ネイティブPIM API書式から、コネクタ・ドメインに定義されているPIM XMLスキーマに準拠するXMLメッセージに変換する必要があります。コネクタは、PIM XMLメッセージを作成した後、XSLTを使用してメッセージをハブXMLメッセージに変換します。このメッセージは、提供されたハブXMLスキーマに準拠します。

ハブ・ドメインとコネクタ・ドメイン間でのデータのマッピングを有効にするために、コネクタのトランスフォーマ・コンポーネントには、ハブ・ドメインとコネクタ・ドメインの両方のスキーマおよびXSLTドキュメントが含まれています。付録D「コネクタAPI」で説明されているように、UpsertRecordは、ハブとコネクタ間を移動するハブ・レコードの表現です。このデータ構造には、ハブ・レコードのXML表現を格納するhubRecordDataと呼ばれるメンバーが含まれています。ハブ・レコードのXMLはハブ・ドメインのXSDに準拠する必要があるため、コネクタ開発者は次のものを作成する必要があります。

- ハブ・ドメインにマップする対応するコネクタ・ドメインのXSD

- ハブXML表現のレコードをPIM XML表現のレコードに変換するためのXSL定義

- PIM XML表現のレコードをハブXML表現のレコードに変換するためのXSL定義

PIMサーバーからの抽出時に、コネクタは、抽出された各レコードが最初にPIM XMLメッセージに変換されていることを確認する必要があります。次に、XSLTを使用してPIM XMLからハブXMLにメッセージを変換します。PIMサーバーにプッシュ(つまり、CreateおよびUpdate操作)されるレコード・イベントに対して、コネクタはXLSTを使用してハブXMLレコードをPIM XMLレコードに変換してからPIMサーバーに書き込みます。

8.2 ドメイン・スキーマについて

BDSSコネクタは、レコード変換時にハブとコネクタのドメイン・スキーマへの参照が含まれているXLSTドキュメントを適用することで、ハブとコネクタの間で受け渡されるメッセージに含まれているレコード・データの堅牢なドキュメント検証を提供します。

ドメイン・スキーマには、各ドメイン・フィールドに定義される次の属性があります。

- スキーマ・データ型
コネクタは、次のスキーマ・データ型をサポートする必要があります。

- W3Cスキーマ・データ型

- ハブ・スキーマ・データ型

- コネクタ・スキーマ・データ型

- PIMフィールド・クラス
コネクタは、変換時またはフローの制御にPIMフィールド・クラスを使用できます。詳細は、第D.1.4項「フィールド・クラス」を参照してください。

8.2.1 スキーマ・データ型

スキーマには、次のスキーマ・データ型を使用します。

- W3Cスキーマ・データ型

- ハブ・スキーマ・データ型

- コネクタ・スキーマ・データ型

8.2.1.1 W3Cスキーマ・データ型

ハブで使用されるデータ型は、ネイティブなW3C XMLスキーマ(WXS)データ型のサブセットです。これらのデータ型はhttp://www.w3.orgで定義されています。コネクタは、そのスキーマ・ドキュメントにWXSデータ型を使用します。

ハブ・スキーマで使用されるネイティブなW3C XMLスキーマ(WXS)データ型のサブセットは、次のとおりです。

- xsd:string

- xsd:boolean

- xsd:dateTime

注意:

通常、xsd:dateTimeではISO 8601の日時表現を使用できるため、多様な日時をすべて標準的な協定世界時(UTC)で指定できます。

エンジンとコネクタの間で受け渡されるすべての日時ハブ・フィールドは、次のようにする必要があります。

1. UTC時間でYYYY-MM-DDhh:mm:ss.fffの書式である必要があります。この書式の詳細は次のとおりです。

- YYYYは4桁の年(2007など)

- MMは月(1月は01、12月は12)

- DDは日(01から始まる)

- hhは24時間制での時間(00から23)

- mmは時間の分(00から59)

- ssは分の秒(00から59)

- fffは小数秒(つまりミリ秒、000から999)

2. すべての日時PIMフィールド値には、対応するUTCオフセット・フィールド(+HH:MMまたは-HH:MMの書式)が必要です。

- +は、正のUTCオフセットを意味します。

- -は、負のUTCオフセットを意味します。

- HHは24時間制でのUTCオフセット時間(00から23)。

- MMはUTCオフセット分(00から59)。

各PIM日時フィールドにUTC日時とUTCオフセットの両方を提供することで、受信コネクタは、PIMサーバーがローカル時間を使用する場合はローカル時間を計算し、PIMサーバーがフィールドにUTC日時を使用する場合はUTC日時を使用できます。

- xsd:nonNegativeInteger

- xsd:unsignedLong

- xsd:positiveInteger

8.2.1.2 ハブ・スキーマ・データ型

ハブ・ドメインは、W3Cスキーマ・データ型を使用して作成されます。

注意:

ハブ・スキーマまたはハブ・スキーマ・データ型を変更する場合は、対応する変更を各コネクタのXSLTドキュメントにも適用する必要があります。ハブ・スキーマ表現とPIMスキーマ表現の間で正しい変換が行われるように、XSLTドキュメントを変更する必要があります。

ハブ定義のデータ型

ネイティブなW3C XMLスキーマ(WXS)データ型に加え、BDSSには、電話番号や住所などの一般的なPIMデータ型のXSDが用意されています。これらのデータ型には基本的な制限がいくつかあります。たとえば、例8-1に示すように、HubPhoneNumberは単純な文字列に制限されます。

例8-1 ハブ定義のデータ型に対する事前定義の制限

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/pss/hub/ContactDomain"
elementFormDefault="qualified">
<xsd:simpleType name="HubPhoneNumber">
<xsd:restriction base="xsd:string"></xsd:restriction>
</xsd:simpleType>
</xsd:schema>

BDSSでは他の制限は定義していませんが、必要に応じて、より詳細な制限を定義できます。例8-2の太字は、HubPhoneNumberデータ型の長さと書式に対する追加の制限を示しています。

例8-2 ハブ定義のデータ型に対する追加の制限

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/pss/hub/ContactDomain"
elementFormDefault="qualified">
<xsd:simpleType name="HubPhoneNumber">
<xsd:restriction base="xsd:string"></xsd:restriction>
<xsd:pattern value="([0-9]){0,2}\([0-9]{3}\)[0-9]{3}\-[0-9]{4}( Ext:[0-9]{4})?" />
</xsd:simpleType>
</xsd:schema>

ハブ定義のデータ型には、次のものが含まれます。

- xsd:HubPercent

- xsd:HubUnsignedLong

- xsd:HubTokens

- xsd:HubUtcOffest

- xsd:HubPhoneNumber

- xsd:HubAddress

- xsd:HubState

- xsd:HubCountry

- xsd:HubEmailAddress

- xsd:HubNamePrefix

- xsd:HubNameSuffix

8.2.1.3 コネクタ・スキーマ・データ型

各コネクタは、PIMサーバーのドメイン・スキーマを定義するための一連のスキーマ・データ型を公開しています。これらのデータ型には、次の制限が適用されます。

- コネクタ・ドメインに追加される新規のコネクタ・ドメイン・フィールドは、対応するコネクタで公開されている単一のスキーマ・データ型のみに割り当てる必要があります。

- コネクタで公開されているスキーマ・データ型は、変更、制限または拡張できません。これらは変更しないでください。

8.2.2 ハブ・スキーマのドキュメント

コネクタは、ハブによって提供される次のスキーマを処理する必要があります。

- ハブ・スキーマ・タイプのライブラリ

- ハブ・スキーマのドキュメント

8.2.2.1 ハブ・スキーマ・タイプのライブラリ

ハブでは、HubTypeLibrary.xsdドキュメントにカスタムXMLスキーマ・タイプのライブラリを定義します(例8-3)。これらのスキーマ・タイプは、ハブまたはコネクタのドメイン・スキーマに対して使用可能です。

例8-3 カスタムXMLスキーマ・タイプ

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/pss/hub/TypeLibrary"
elementFormDefault="qualified">
<xsd:simpleType name="HubPercent">
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxInclusive value="100"/>
<xsd:minInclusive value="0"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="HubUnsignedLong">
<xsd:annotation>
<xsd:documentation>Specifies an amount of work in terms of minutes.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:unsignedLong"/>
</xsd:simpleType>
<xsd:complexType name="HubTokens">
<xsd:sequence>
<xsd:element name="Token" maxOccurs="unbounded" nillable="false"
minOccurs="0" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="HubUtcOffset">
<xsd:restriction base="xsd:string">
<xsd:pattern value='[+|-][0-9]{2}:[0-9]{2}'/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

8.2.2.2 ハブ・タスク・スキーマ

ハブは、XMLスキーマをハブとコネクタ間でタスク・レコード・データを受け渡す中心的なデータ書式として定義します。スキーマはHubTask.xsdドキュメントに定義されます(例8-4)。

例8-4 ハブ・タスクXMLスキーマのリスト

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/pss/hub/TaskDomain"
targetNamespace="http://xmlns.oracle.com/pss/hub/TaskDomain"
elementFormDefault="qualified">
<xsd:include schemaLocation="HubTypeLibrary.xsd"/>
<xsd:simpleType name="HubTaskPriority">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="High"/>
<xsd:enumeration value="MediumHigh"/>
<xsd:enumeration value="Medium"/>
<xsd:enumeration value="MediumLow"/>
<xsd:enumeration value="Low"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="HubTaskStatus">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="NotStarted"/>
<xsd:enumeration value="InProgress"/>
<xsd:enumeration value="Completed"/>
<xsd:enumeration value="WaitingOnSomeoneElse"/>
<xsd:enumeration value="Deferred"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="HubTaskDomain">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ActualWork" type="xsd:unsignedLong" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="BillingInfo" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="Category" type="HubTokens" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="Comments" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="Companies" type="HubTokens" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="CompletedFlag" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="DateCompleted" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="DateCompletedUtcOffset" type="HubUtcOffset" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="DueDate" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="DueDateUtcOffset" type="HubUtcOffset" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="Mileage" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="PercentComplete" type="HubPercent"/>
<xsd:element name="Priority" type="HubTaskPriority"/>
<xsd:element name="Private" type="xsd:boolean"/>
<xsd:element name="Reminder" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="ReminderOffset" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="ReminderOffsetUtcOffset" type="HubUtcOffset" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="StartDate" type="xsd:dateTime"/>
<xsd:element name="StartDateUtcOffset" type="HubUtcOffset" minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="Status" type="HubTaskStatus"/>
<xsd:element name="Subject" type="xsd:string"  minOccurs="0"
maxOccurs="1" nillable="true"/>
<xsd:element name="TotalWork" type="HubUnsignedLong" minOccurs="0"
maxOccurs="1" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

8.3 同期化に起因するデータの副作用

次の理由でデータの消失が発生する可能性があります。

- データ・モデルの不適合

- データ型ファセットの相違

- リスト変換

- レコードの重複

8.3.1 データ・モデルの不適合

ハブとPIMのXSDスキーマのデータ・モデルが同じデータのセットで表現できない場合は、データの消失が発生する可能性があります。たとえば、ハブ・タスク・ドメイン・フィールド(フィールドX)が、PIMサーバーBのタスク・ドメイン・スキーマで表現されず、PIMサーバーAから抽出されたハブ・タスク・レコードにハブ・フィールドXの値が含まれている場合、同期化では、PIMサーバーAからPIMサーバーBにタスク・レコードがそのまま伝播されます。ただし、ハブ・フィールドXの値は、PIMサーバーBに伝播されません。PIMサーバーBからPIMサーバーAへのタスク・レコードのその後の更新では、PIMサーバーAからフィールドXのデータが削除されます。この消失は、PIMサーバーBからの更新レコードではデータを入手できないために発生します。

8.3.2 データ型ファセットの相違

データの消失によって、制約ファセットの異なる様々なデータ型の間で変換が発生する可能性があります。データが消失する可能性があるデータ型ファセットには、次のものがあります。

- 長さ

- パターン

- 列挙

- 空白

8.3.2.1 長さ

対応する同じフィールドのフィールド長がハブ・ドメインとコネクタ・ドメインで異なる場合は、データ消失が発生する可能性があります。たとえば、PIMサーバーAがPIMサーバーBよりタスク・コメント・テキストを多く格納できる場合、タスク・レコードの同期化により、コメント・テキストが、PIMサーバーBで許可される長さに切り捨てられます。

8.3.2.2 パターン

PIMサーバーまたはコネクタが、データ値の内容を変更するデータ・パターンまたはデータ値の制限を適用すると、データが予想外に変更されたり、内容が消失する可能性があります。たとえば、PIMサーバーAのコネクタが、電話番号に顧客テキスト・メモが追加されたPIM連絡先レコードを抽出するとします。同期化ではレコードがそのままPIMサーバーBに伝播されますが、PIMサーバーBのビジネス・ロジックにより、PIMサーバーBにレコードが書き込まれるときにテキスト・メモは除外されます。このレコードに対するPIMサーバーBからのその後の更新では、PIMサーバーAの連絡先レコードからテキスト・メモが削除されます。

8.3.2.3 列挙

列挙の精度は、PIMサーバーまたはハブ・ドメインから入手可能な最も大まかなレベルに緩和されます。たとえば、PIMサーバーAに高と低のタスク優先度レベルがあり、PIMサーバーBに高、中および低のタスク優先度レベルがある場合、2つのPIMサーバー間で同期化が行われると、すべてのタスク優先度レベルの精度は、PIMサーバーAの低い精度になります。

8.3.2.4 空白

PIMサーバーのビジネス・ロジックによって不要な空白が切り捨てられる場合は、コネクタによるXSLT変換時または同期化の際に空白が切り捨てられる可能性があります。たとえば、PIMサーバーAは空白を削除し、PIMサーバーBは空白を削除しないと仮定します。2つのPIMサーバーで同期化が行われると、PIMサーバーAからの更新のために、PIMサーバーBの空白は削除されます。

8.3.3 リスト変換

データが消失する可能性があるリスト変換のカテゴリには、次のものがあります。

- 複数値フィールド

- フィールド・グループ

通常、データの消失は、ソース・ドメインからの値のリストまたはセットがターゲット・ドメインで表現できない場合に発生する可能性があります。

8.3.3.1 複数値フィールド

複数値フィールドは、トークンのリスト(つまり値リスト)が含まれている単一のフィールドです。このデータ型の一例としてExchangeカテゴリ・フィールドがあります。ソース・ドメイン・フィールドからの値リスト全体をターゲット・ドメインで表現できない場合は、データの消失が発生します。たとえば、Microsoft Exchangeからのタスク・カテゴリ・フィールドに複数値トークンが存在し、ハブ・タスク・ドメインで表現可能な値が、対応するカテゴリ・フィールドの単一値のみである場合は、ハブ・スキーマ書式への変換で1つのトークン値以外のすべてが削除されます。

8.3.3.2 フィールド・グループ

フィールド・グループは、関連するフィールドの集合またはグループです。グループのフィールド数がハブとPIMのXSDスキーマ間で異なる場合は、情報の消失が発生する可能性があります。たとえば、PIMサーバーAでは3行の住所行が許可され、PIMサーバーBでは4行の住所行が許可されている場合があります。これはデータの消失が必ずしも発生することを意味しているわけではありませんが、データの消失を防止するために特別な変換処理が必要になる可能性があります。

8.3.4 レコードの重複

データが消失するレコード重複のタイプには、次のものがあります。

- エンジンによる重複のマージ: エンジンが複数のレコードからの変更をマージしたときに発生する重複によって、重複するマージの競合で優先されないレコードにデータの消失が発生する可能性があります。

- コネクタPIM重複: コネクタが、PIMレコードの新しい変更と重複する変更をPIMサーバーに書き込むときに発生する重複によって、データが消失する可能性があります。ある時点で変更が上書きされてデータが消失します。

9 カレンダ・ドメインの同期化

この章では、Business Data Synchronization Server (BDSS)がカレンダ・ドメインのレコードを同期化する方法を説明します。

この章の構成は、次のとおりです。

- カレンダの同期化サポートの概要

- カスタム・カレンダ・フィールドの変換

- ハブ・スキーマでのカレンダの同期化のサポート

- カスタム・カレンダ・フィールドの作成

- ICALフィールドの同期化に起因するデータの副作用

9.1 カレンダの同期化サポートの概要

カレンダ・ドメインは、レコード・データ書式と参加者に関連する処理を除いて、他のドメインと同様に同期化されます。ただし、カレンダ・ドメインのレコード・データ書式は、他のドメインのレコード・データ書式とは異なります。つまり、他のドメインでは、ドメイン・レコードがXMLドキュメントとして表現され、そのレコードの各フィールドがXMLドキュメントのノードとして表現されます。ハブ・カレンダ・ドメインの場合、レコードは同様にXMLドキュメントですが、各フィールドがドキュメントの個別のノードになるのではなく、単一のノードがあり、その値がiCalendar (ICAL)メッセージになります(http://www.ietf.org/rfc/rfc2445.txtの「RFC 2445: Internet Calendaring and Scheduling Core Object Specification」を参照してください)。埋め込まれたICalendarメッセージには、個別のフィールド名と値が格納されます。

注意:

ICALは、カレンダ・データを交換するための広く受け入れられた基準である一方で、XMLに関しては現在まで明確な規定がなく、ICALからXMLへのマッピング基準はありません(http://www.ietf.org/old/2009/proceedings/02mar/I-Dのdraft-ietf-calsch-many-xcal-01.txtで「IETF draft for XCAL」を参照してください)。

9.1.1 カレンダ・レコードの変換

ハブ・カレンダ・ドメインには、ICalBodyというフィールドが1つのみあります。ICalBodyの値は、RFC 2445に準拠するVCALENDARコンテンツです。このフィールドは、ハブからPIMおよびPIMからハブへのXSLファイルによってマップされます。

例9-1 ハブXML

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/bdss/hub/CalendarDomain"
targetNamespace="http://xmlns.oracle.com/bdss/hub/CalendarDomain"
elementFormDefault="qualified">
<xsd:element name="HubCalendarDomain">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ICalBody" type="xsd:string" minOccurs="1"
maxOccurs="1" nillable="false"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

注意:

このドキュメントは、値がICALメッセージであるフィールドが埋込みICALとして格納されているXMLドキュメントを参照します。

この変換は、他のすべてのドメインと同様に、変換によって2つのXSDが適切になる場合に、ハブとPIM間でのXML形式の変換の際にXSL変換で作成される内容に関するコネクタ実装詳細です。

ハブXMLレコードをPIM XMLレコードに変換する場合、コネクタは、埋込みICALからXMLへの変換または埋込みICALから埋込みICALへの変換を実行します。同様にPIM XMLレコードをハブXMLレコードに変換する場合も、コネクタは、XMLから埋込みICALへの変換または埋込みICALから埋込みICALへの変換を実行する可能性があります。たとえば、ハブからPIMの書式にXMLを変換する場合、あるコネクタのXSL実装ではハブのICalBodyフィールドをICALのXMLに相当する形式に変換し、別のコネクタではICalBodyをICALメッセージとして保持する可能性があります。いずれの場合も、目的のPIMのレコードを作成または更新する際は、結果のPIM XMLを解析して、PIM APIで使用可能な形式に変換する必要があります。ハブICalBodyフィールドをICALのXMLに相当する形式に変換するコネクタの場合、PIM API変換ルーチンでは、変換対象のXMLからICALを取得し、ICALを解析してPIM APIコンストラクトを作成します。ICalBodyをICALメッセージとして保持するコネクタの場合、PIM API変換では、ICAL表現のXMLを解析し、PIM APIコンストラクトを作成します。

9.2 カスタム・カレンダ・フィールドの変換

この変換は、フィールド・マッピング・カスタマイズの実行方法、またはコネクタ実装でカスタマイズが許可されるかどうかに関するコネクタ実装詳細です。第8章「ハブ・フィールドへのコネクタ・フィールドのマッピング」で説明されているように、コネクタはXSDおよびXSLTを使用して、レコードのハブおよびPIMのXML表現を変換します。これはカレンダ・ドメインについても当てはまります。

カレンダ・データはICALが埋め込まれているXMLドキュメントとしてシステム内を移動するため、ハブ・カレンダとPIMカレンダ間のフィールド・マッピングをカスタマイズすると、第8章「ハブ・フィールドへのコネクタ・フィールドのマッピング」に記載されているマッピングより複雑になります。

コネクタのXSLTでICALからXML、XMLからICALに変換できる場合は、XSLを変更してフィールド・マッピングをカスタマイズできます。ただし、このXSLTフィールド・マッピングは、他のドメインXSLTより複雑になる可能性があります。

9.2.1 2次変換による変換

コネクタのXSLTが埋込みICALからXMLへの変換またはXMLから埋込みICALへの変換を行わない場合、コネクタ実装により、PIMカレンダ・レコードのテンプレート(繰返しプロパティのないフィールドのサブセットが格納されているカレンダ・レコードを表すため、ここではテンプレートと呼びます)を表すPIM XSDファイルおよびXSLTファイルの個別のセットを定義することで、マッピング・カスタマイズ機能を提供できます。一方のXSDには、マッピング可能なICALフィールド名のサブセット(つまり、単一のVEVENTに関するフィールドで、すべてのフィールドがXSDに記載されているわけではない)を格納できます。もう一方のXSDにはPIMフィールド名が格納されます。コネクタは、ハブに用意されているICALメッセージの指定のVEVENTを解析して処理するため、ICALを使用してVEVENTのXMLメッセージを作成した後、XSLを使用してデータを変換し、それによってマッピングをカスタマイズできる機能が得られます。その後、コネクタは、結果のXMLを使用してPIM API変換を実行できます。このドキュメントでは、この方式を2次変換方式と呼びます。

図9-1は、XSDおよびXSLTのグラフィック表現です。コネクタがICAL VEVENTを処理するため、exchangevirtualcalendar.xsdに準拠するXMLメッセージが作成されます。その後、コネクタはXSLを使用してexchange2007calendar.xsdに準拠する形式にXMLを変換します。図9-1に示したカスタマイズでは、同期化の対象としてLOCATIONがマップされていません。

図9-1 カスタマイズされたフィールド・マッピング

9.2.1.1 Exchange 2007コネクタのカスタム・フィールドの有効化

ハブに公開されない一連のXSDには、2次変換方式を使用してカスタム・フィールドを追加できます。コネクタによるハブとの同期を有効にするには、次のXSDファイルを作成する必要があります。

- コネクタのフィールド定義を定義するXSDファイル

- フィールド定義のICALに対応する部分を定義するXSDファイル

- コネクタのフィールド定義をICALの定義に変換するXSLTファイル

- ICALのフィールド定義をコネクタの定義に変換するXSLTファイル

これらのファイルは、ハブに公開されることはないため、2次ファイルとみなされます。Exchange 2007コネクタでは、2次変換XSDファイルとXSLTファイルを更新することで、カスタム・カレンダ・フィールドの同期化を有効にできます。詳細は、付録E「カスタム・フィールドのXSLTおよびXSD」を参照してください。

9.2.2 Javaベースのコネクタによる変換

BDSS汎用コネクタ・コンポーネントを利用するJavaベース・コネクタは、トランスフォーマAPIを使用してこの変換を実行できます。この変換は、ハブおよびBDSS汎用コネクタHubTransportコンポーネントに対して透過的です。

注意:

2次変換方式を使用した同期化の利点は、次のとおりです。

- XSLTの保守が容易になります。他のドメインのXSLTと類似したXSLTになります。

- ICALの詳細を把握しておく必要がありません。

- フィールド・マッピングのカスタマイズが容易になります。

9.3 ハブ・スキーマでのカレンダの同期化のサポート

ハブ・スキーマでの同期化のサポートは、VEVENT、VTIMEZONE、VALARMカレンダ・コンポーネントに制限されています。

注意:

Oracle Fusion Middleware 11gリリース2では、BDSSはVTODO、VJOURNALおよびVFREEBUSYコンポーネントに関するカレンダの同期化をサポートしていません。

ハブでは次のことも必要です。

- METHODプロパティは常にREQUESTである必要があります。

- 単一のICALメッセージでPIMカレンダ・レコードを表す必要があります。例外がある繰返しパターンがカレンダ・レコードに含まれている場合、ICALメッセージには複数のVEVENTコンポーネントが(ICALメッセージの最初のVEVENTコンポーネントがパターンのマスター・レコードで、後続の各VEVENTコンポーネントが例外を表すように)含まれている必要があります。

- 会議を記述するすべてのICALメッセージには、同じ会議IDが必要です。異なるシステム・キー・フィールドからのレコードが相互に一致する場合、同一の会議では抽出時に問題が発生する可能性があります。それらが一致する場合、レコードには異なる会議IDが確保されます。ハブでは、構成済のキー・フィールドに基づくレコードが一致した場合は、その一致を作成/作成競合として処理し、更新内容を非優先コネクタにプッシュします。非優先コネクタは、優先コネクタのレコードと確実に一致するようにレコード・データの更新操作を実行します。
ターゲット・システムのMeetingIdを更新すると、カレンダ・システムに問題が発生する可能性があります。コネクタでは、MeetingIdを変更する場合は注意が必要です。たとえば、ExchangeではMeetingIdを使用して、会議のすべての参加者全体で会議の更新電子メールと会議への招待電子メールを相互に関連付けます。ExchangeコネクタがMeetingIdを変更すると、コネクタはExchangeの通常の会議処理を中断し、電子メールは本来の方法では機能しません(本来の方法では、参加者が会議への招待を読んで招待を受諾したときにカレンダ・レコードが作成されます。参加者が会議の更新電子メールを読むと、対応するカレンダ・レコードが更新されます)。

9.4 カスタム・カレンダ・フィールドの作成

RFC 2445の「Section 4.8.8.1: Non-Standard Properties」で説明されているように、ICAL標準では、名前がX-で開始するプロパティの形式でカスタム・フィールドを使用できます。たとえば、X-ORACLE-BDSS-EXCHANGE-F1やX-ORACLE-BDSS-BPEL-F1は、有効なカスタム・フィールド名の例です。さらに、カスタム・フィールドおよびカスタム・フィールド値は、繰返しのカレンダ・レコードに対する例外ごとに異なる可能性があります。カレンダ・ドメインを同期化するすべてのコネクタ全体でカレンダ・ドメインを正常に同期化できるように、開発者は、2次変換を介して、またはICALフィールドとカスタム・フィールドをハブ・カレンダ定義に含めることで、カスタム・フィールドを使用できるようにコネクタを実装する必要があります。

コネクタによる2次変換メカニズムの使用が選択された場合は、PIM固有のXSDにカスタム・フィールドを定義して、マッピングを定義できます。カスタム・フィールドは、ハブで提供されるICALメッセージに引き続き存在します。

コネクタで2次変換オプションを使用しないことが選択された場合は、ハブ・タイプ・ライブラリXSDにハブ・データ型を定義して、それぞれのXSDにこのタイプのカスタム・ハブ・フィールドおよびカスタムPIMフィールドを定義できます。これらのフィールドは、その後PIMからハブおよびハブからPIMへのXSLTファイルにマップできます。コネクタは、ICalBody外部にカスタム・フィールド・データを配置します。コネクタが各例外(おそらく、HubTokensデータ型に類似するなにか)に対して異なるカスタム・プロパティと値を指定できるように、データ型定義では複数の値を許可する必要があります。このアプローチでは、ソース・コネクタのICALカスタム・フィールドをターゲット・コネクタの標準のICALフィールドにマップできるため、データが失われる危険性があります。詳細は、第9.5.2項「標準のICALフィールドへのカスタムICALフィールドのマッピング」を参照してください。

9.5 ICALフィールドの同期化に起因するデータの副作用

次の理由でデータの消失が発生する可能性があります。

- ICALフィールドの同期化の失敗

- 標準のICALフィールドへのカスタムICALフィールドのマッピング

9.5.1 ICALフィールドの同期化の失敗

第9.2項「カスタム・カレンダ・フィールドの変換」で説明されているように、ICALフィールドを同期化しないとデータが失われる危険性があります。したがって、ターゲット・カレンダ・システムが指定のフィールドをサポートしていない場合は、コネクタが非表示のカスタム・フィールドを使用してすべてのICALフィールドの同期化を試行する必要があります。

コネクタのPIMサーバーが非表示のカスタム・フィールドをサポートしていない場合は、コネクタ実装でフィールド・データを保持して取り出すための対策を講じる必要があります。このアプローチを使用してもデータの消失が発生する可能性があります。埋込みICALからXMLに変換するXSLの場合、XSLでICALフィールドが省略されると、ターゲット・コネクタがフィールドに値を書き込まないため、データの消失が発生します。コネクタが2次変換アプローチを使用するときは、ICALフィールドのマッピングが行われない場合に同じ問題が発生します。いずれの場合も、各ICALフィールドが確実にマップされるようにすることで改善できます。クライアント・アプリケーションがデフォルトで表示しないカスタムPIMフィールドにフィールドを同期化すると、コネクタには、そのフィールドが同期化されていないかのように表示される可能性があります。コネクタのシステムが非表示のカスタム・フィールドをサポートしていない場合、コネクタは、抽出時にフィールド・データをハブに提供できるように、フィールド・データを保持する方法について対策を講じる必要があります。

コネクタが埋込みICALをXMLに変換できない場合、または2次変換方式を適用しないように選択した場合は、フィールド・マッピング・カスタマイズがサポートされず、PIMフィールド名へのICALフィールド名の自然なマップに依存します。この場合、フィールド定義またはマッピング・カスタマイズのサポートはありません。

9.5.2 標準のICALフィールドへのカスタムICALフィールドのマッピング

第9.4項「カスタム・カレンダ・フィールドの作成」で説明されているように、ICalBody外部にフィールド・データを配置するコネクタは、ソース・コネクタのICALカスタム・フィールドをターゲット・コネクタの標準のICALフィールドにマップすることになります。たとえば、BPELカレンダに「HTTP Link」というフィールドがあり、BPELユーザーがクリックすると、カレンダ・レコードに関連付けられている情報を提供するBPELアプリケーションのページに移動するとします。また、管理者は、このフィールドをExchangeのフィールドと同期化する必要があると仮定します。このフィールドを表現できるICALフィールドがないため、X-ORACLE-BDSS-BPEL-HTTP-LINKなどのカスタムICALフィールドを定義します。ICALのX-で開始するフィールド(X-ORACLE-BDSS-HUB-HTTP-LINKなど)を保持するためにハブXSDを変更し、BPELタスク・コネクタで使用される(ハブからPIM、PIMからハブへの)XSLの2つのフィールドをマップします。フィールドをExchangeと同期化するには、ExchangeのカスタムICALフィールド(ORACLE-BDSS-EXCHANGE-HTTP-LINKなど)を定義して、Exchangeコネクタで使用される(ハブからPIM、PIMからハブへの)XSLのORACLE-BDSS-HUB-HTTP-LINKフィールドにマップします。

Exchangeのカスタム・フィールドをExchange XSDに定義する場合は、拡張フィールドまたは索引のないフィールドとして定義できます。「HTTP Link」をExchangeカレンダの「Location」フィールドに書き込むと、フィールドはExchangeの索引のないフィールド「Location」として定義されます。この索引のないフィールドは「ICAL LOCATION」フィールドに自然にマップされるため、コネクタは「ICAL LOCATION」フィールド値ではなくORACLE-BDSS-EXCHANGE-HTTP-LINK値を使用して「Location」フィールドを更新し、BPELタスク・コネクタは、Exchangeからの変更があった場合にリンクを使用して「ICAL LOCATION」フィールドを自然にマップする後続の同期化セッションでフィールドを上書きします。コネクタが「ICAL LOCATION」フィールドを使用してORACLE-BDSS-EXCHANGE-HTTP-LINK値を無視して「Location」フィールドを更新すると、Exchangeで変更が発生した場合に、後続のセッションでBPELタスク・コネクタが「HTTP Link」フィールド値を削除することになります。

カスタム・フィールドを指定する拡張フィールド(つまり、Outlook UIにフィールドを公開するOutlookカスタム・フォームを定義していないかぎり非表示となる)としてフィールドを定義した場合、このようなデータの消失は発生しません。

注意:

この例では、BPELタスク・コネクタは、ハブに送信されるICALを作成するときに「HTTP Link」値を「LOCATION」フィールド値として指定することで、このカスタマイズをハードコード化しません。

第III部

付録

第III部には次の付録と用語集が含まれます。

- 付録A「BDSSの構成操作」

- 付録B「BPELタスク・コネクタの構成」

- 付録C「BDSSデータ・ストアのテーブル」

- 付録D「コネクタAPI」

- 付録E「カスタム・フィールドのXSLTおよびXSD」

- 付録F「BDSSのトラブルシューティング」

- 用語集

A BDSSの構成操作

この付録では、Business Data Synchronization Server (BDSS)がカレンダ・ドメインのレコードを同期化する方法を説明します。

この付録のトピックは、次のとおりです。

- UserConfigMBean

- ServerDomainConfigMBean

- DispatcherSettings MBean

- EngineSettings MBean

- ProfileRuntimeInfo MBean

- プロファイル・パラメータ

A.1 UserConfigMBean

表A-1に、UserConfigMBeanの操作を示します。詳細は、第4.7項「ユーザーの管理」を参照してください。

表A-1 ユーザー構成MBeanの操作

操作

説明

showUserList

すべてのユーザーとそのステータスのリストを返します。

showFailinguserList

現在同期化に失敗しているすべてのユーザーのリストを返します。

showUserStatus

ユーザーのステータスを、レコード・レベルのステータスを含めて表示します。この操作には、失敗している項目のみを返すオプション・フラグがあります。

addConnectorUser

新しいコネクタ・ユーザーを追加し、そのユーザーをハブ・ユーザーに関連付けます。ハブ・ユーザーが存在しない場合は、この操作で作成されます。同期化するように構成されているユーザーの場合は、この操作をコネクタごとに実行する必要があります。次に、updateUserSyncEnablementFlagを使用して、ハブ・ユーザーの同期化を有効にする必要があります。

removeHubUser

データベースからハブ・ユーザーを削除し、そのハブ・ユーザーに関連付けられているすべてのコネクタ・ユーザーも削除します。

updateHubUserSyncEnableFlag

ユーザーの同期化対応フラグを更新します。TまたはTrueは、後続のすべての同期化セッションでユーザーが同期化されることを意味します。FまたはFalseに設定すると、ユーザーは同期化されません。

updateUserDomainSyncLevel

指定ドメインでのコネクタ・ユーザーに対する同期化レベルを変更します。現在有効な同期化レベルは、Full、None、Inbound OnlyおよびOutbound Onlyです。

A.2 ServerDomainConfigMBean

表A-2に、ServerDomainConfigMBeanの操作を示します。詳細は、第4.2項「コネクタの管理」および第4.4項「コネクタ・インスタンスの管理」を参照してください。

表A-2 ServerDomainConfigMBeanの操作

操作

説明

showConnectorDetails

指定したコネクタの構成を返します。コネクタ名が空の場合、この操作は、構成されているすべてのコネクタの構成情報を返します。

updateConnectorForPim

コネクタを追加または変更します。

deleteConnector

指定のコネクタを削除します。

updatePimServerInstance

既存のPIMサーバー・インスタンスを更新したり、新しいPIMサーバー・インスタンスを作成します。

deletePimServerInstance

PIMサーバー・インスタンスを削除します。

updateConnectorInstance

コネクタのコネクタ・インスタンスを作成または変更します。

deleteConnectorInstance

コネクタからコネクタ・インスタンスを削除します。

updateDomainForConnector

コネクタのドメインを作成または変更します。

deleteDomainForConnector

コネクタからドメインを削除します。

updateFilterForDomain

コネクタ・ドメインに対するフィルタを作成または変更します。

deleteFilterForDomain

ドメインからフィルタを削除します。

A.3 DispatcherSettings MBean

表A-3に、DispatcherSettings MBeanの属性を示します。詳細は、第5.2項「ディスパッチャの構成」を参照してください。

表A-3 DispatcherSettings MBeanの属性

属性

説明

ChunkSize

同期化のためにハブに送信されるメッセージに含まれるユーザーの数。この属性を使用して、実行しているエンジンの各インスタンスへのロードを分散します。デフォルト値は、1メッセージに対して20ユーザーです。

HubEndPointURL

ハブをホストするサーバー上のDispatcherHub Webサービスに接続するためにディスパッチャが使用するURL。たとえば、WebLogic Serverの典型的なハブURLは、http://<HUB_SERVER_IP_ADDRESS>:7001/BDSSHubWebServices/DispatcherHubWebService?WSDLです。

A.4 EngineSettings MBean

表A-4に、EngineSettings MBeanの属性を示します。詳細は、第5.3項「エンジンの構成」を参照してください。

表A-4 EngineSettings MBeanの属性

属性

説明

EngineEndPointURL

コネクタでエンジンに対するリクエストおよびデータ更新リクエスト・レスポンスの抽出を可能にするためにエンジンで使用されるURL。

Oracle WebLogic管理コンソールを使用してこのURLを検索する手順は、次のとおりです。

1. 「デプロイメント」を選択します。

2. BDSSHubのツリー構造を展開します。

3. 「EngineCallBackInterface」ノードを選択します。「EngineCallback」ページの「設定」が表示されます。

4. 「テスト」タブを選択します。

5. 「EngineCallbackInterface」ノードを展開します。

6. ?WSDLテスト・ポイントを選択します。

ExtractResponseTimeOut

コネクタからの抽出レスポンスを処理するためにエンジンが待機するミリ秒数。デフォルト値は60000ミリ秒数です。通常の状況でタイムアウトが発生しないように、タイムアウト値には十分に大きい値が必要です。この値は、次の内容も含めた複数のファクタによって異なります。

- 抽出可能な最大レコード・セットのサイズ。

- 抽出されるハブ・ドメインの数。これが関係するのは、エンジンでは、ハブ・ドメインの同期化セッションが順次に処理されるためです。そのため、ハブ・ドメインAが最初に処理された場合、ハブ・ドメインBは抽出レスポンスを取得するためにハブ・ドメインAより長く待機する必要があります。

- システム・ロードや通信待機時間を含む他のファクタ。これらのファクタは、タイムアウトの発生前にコネクタから抽出レスポンス・メッセージを取得して処理するエンジンの機能に影響を与えます。

タイムアウトが発生すると、影響を受けるユーザー同期化セッションに対応するハブ・ドメインの同期化が終了します。

MessageTimeToLive

削除される前に抽出レスポンスを含むメッセージがJMSキューに留まっているミリ秒数。デフォルト値は、 60000 ミリ秒です。このタイムアウト値は、ExtractResponseTimeOut属性に対して実行した分析に類似した分析を使用して計算します。

RuntimeLibraryURL

コネクタがコネクタ・ランタイム・ライブラリと通信できるように、エンジンがコネクタに送信するURL。

Oracle WebLogic Serverコンソールを使用してこのURLを検索する手順は、次のとおりです。

1. 「デプロイメント」を選択します。

2. BDSSHubのツリー構造を展開します。

3. 「ConnectorRuntimeInterface」ノードを選択します。「ConnectorRuntimeInterface」ページの「設定」が表示されます。

4. 「テスト」タブを選択します。

5. 「ConnectorRuntimeInterface」ノードを展開します。

6. ?WSDLテスト・ポイントを選択します。

A.5 ProfileRuntimeInfo MBean

ProfileRuntimeInfo MBeanでは、プロファイル・パラメータを変更および表示するための操作が提供されます。詳細は、第4.8項「プロファイルの管理」を参照してください。

表A-5 ProfileRuntimeInfo MBeanの操作

操作

説明

displayAllProfiles

各プロファイルおよびセクション別にグループ化されたすべてのパラメータのリストを返します。

displayProfile

指定のプロファイルのパラメータのみを表示します。

removeProfileParameter

指定のパラメータを削除します。適切なパラメータを確実に削除するには、プロファイル名およびセクション名を指定する必要があります。

setProfileParameter

既存のパラメータを更新したり、新しいパラメータを作成します。

A.6 プロファイル・パラメータ

プロファイルには、コネクタの構成メタデータが格納されます。各パラメータには、単一の値があります。ProfileRuntimeInfo MBeanの操作(表A-5を参照)を使用すると、コネクタのプロファイルを管理できます。BDSSには、Exchangeコネクタ用にシードされているプロファイルおよびFTSKeyFieldsプロファイルが付属しています。これらのプロファイルは、表A-6を参照してください。詳細は、第6章「Microsoft Exchange 2007用BDSSコネクタの構成」および第5.5項「FtsKeyFieldsプロファイルの構成」を参照してください。

表A-6 BDSSプロファイル・パラメータ

プロファイル

セクション

パラメータ

説明

BdssKeyFields

Calendar

KeyField1

レコードの照合で使用する最初のフィールド。

BdssKeyFields

Calendar

KeyField2

レコードの照合で使用する2番目のフィールド。

BdssKeyFields

Contact

KeyField1

レコードの照合で使用する最初のフィールド。

BdssKeyFields

Contact

KeyField2

レコードの照合で使用する2番目のフィールド。

BdssKeyFields

Task

KeyField1

レコードの照合で使用する最初のフィールド。

BdssKeyFields

Task

KeyField2

レコードの照合で使用する2番目のフィールド。

FTSKeyFields

Tasks

KeyField1

レコードの照合で使用する最初のフィールド。

FTSKeyFields

Tasks

KeyField2

レコードの照合で使用する2番目のフィールド。

Exchange2007

Hub Transport

Pim Transport Implementation Class

ハブ・トランスポートの汎用コンポーネントでは、この値を使用してExchange PIMトランスポートを初期化します。

Exchange2007

Hub Transport

Extract Response Batch Size

この値は、BDSSによって同期化されるユーザーが保持するレコードがこの値を超えることがないように、十分に大きい数値に設定してください。

Exchange2007

Task

Pim Xsd

exchange2007task.xsdファイルへのURI。

Exchange2007

Task

PimToHubUrl

Exchange2007TaskToHubTask.xslへのURI。

Exchange2007

Task

HubToPimUrl

HubTaskToExchange2007Task.xslへのURI。

Exchange2007

Task

Domain Class Type

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。

Exchange2007

Task

Exchange Domain Batch Size

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。

Exchange2007

Task

Folder Class

ドメインのフォルダ・クラス。

Exchange2007

Task

Body Type

ドメインのBodyフィールドの同期化方法。有効な値は、TextまたはHTMLです。

Exchange2007

Task

Conflict Resolution Type

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。

Exchange2007

Task

Disposal Type

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。

Exchange2007

Task

Pim Domain id

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。

Exchange2007

Contact

Exchange Domain Batch Size

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。

Exchange2007

Contact

Folder Class

ドメインのフォルダ・クラス。

Exchange2007

Contact

Pim Domain Id

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。

Exchange2007

Contact

Pim Xsd

exchange2007contact.xsdファイルへのURI。

Exchange2007

Contact

PimToHubUrl

Exchange2007ContactToHubContact.xslへのURI。

Exchange2007

Contact

HubToPimUrl

HubContactToExchange2007Contact.xslへのURI。

Exchange2007

Calendar

Time Zone Xsd

timezoneregistryschema.xsdへのURI。

Exchange2007

Calendar

VEvent Xsd

veventasxml.xsdへのURI。

Exchange2007

Calendar

PimToHubUrl

exchange2007calendartohubcalendar.xslへのURI。

Exchange2007

Calendar

Pim Xsd

pimicalbody.xsdへのURI。

Exchange2007

Calendar

Calendar Item Type Xsd

calendaritemtype.xsdへのURI。

Exchange2007

Calendar

Time Zone Xml

timezoneregistry.xmlへのURI。

Exchange2007

Calendar

HubToPimUrl

hubcalendartoexchange2007calendar.xslへのURI。

Exchange2007

Calendar

CalendarItemToVEvent Xsl

calendaritemtypetoveventasxml.xslへのURI。

Exchange2007

Calendar

VEventToCalendarItem Xsl

veventasxmltocalendaritemtype.xslへのURI。

Exchange2007

Calendar

Body Type

ドメインのBodyフィールドの同期化方法。有効な値は、TextまたはHTMLです。

Exchange2007

Calendar

Conflict Resolution Type

Exchangeによる競合タイプの処理方法を決定します。有効な値は、AutoResolve、AlwaysOverwriteおよびNeverOverwriteです。

Exchange2007

Calendar

Disposal Type

Exchangeによる削除されたレコードの処理方法を決定します。有効な値は、HardDelete、SoftDeleteおよびMoveToDeletedItemsです。

Exchange2007

Calendar

Domain Class Type

ドメインの同期化時に使用されるExchange Web Serviceインタフェース・クラス。

Exchange2007

Calendar

Exchange Domain Batch Size

ドメイン・ターゲットからのレコードの抽出時にExchangeからダウンロードされるレコードの最大数。有効な値は、1から512です。

Exchange2007

Calendar

Fanning Limit

Exchangeで繰返しのカレンダ・レコードをネイティブで表すことができない場合に作成されるレコードの数。有効な値は、1から100です。

Exchange2007

Calendar

Folder Class

ドメインのフォルダ・クラス。

Exchange2007

Calendar

Pim Domain id

同期化する各レコードのメッセージ・クラス・プロパティとして使用されるPIMドメイン識別子。

Exchange2007

Active Directory

ServerN

(Nは0(ゼロ)以上の序数)

ユーザーのExchangeアカウント情報の検出時に、Active Directoryからサービス接続ポイントのURLを取得するためにコネクタで使用されるLDAP URL。

複数のエントリを追加できます。序数は、プリファレンス順序を指定します(つまり、Server1の前にServer0が試行されるなど)。

コネクタは、ユーザーが検出されるまで、または各エントリの試行が終了するまで各URLを試行します。

Exchange2007

Active Directory

Referral

LDAPプロバイダによる参照の処理方法を指定します。値は、follow、throwまたはdeferです。デフォルト値はfollowです。

Exchange2007

Active Directory

Max Query Result Size

Active Directoryの問合せごとに返される結果の最大数。デフォルト値は20です。

Exchange2007

Active Directory

Max Query Time

Active Directoryの問合せが返されるまで待機する時間(ミリ秒)。デフォルト値は30秒(30000ミリ秒)です。

Exchange2007

Active Directory

Read Timeout

タイムアウトするまでレスポンスを待機する時間(ミリ秒)。デフォルト値は5000です。

Exchange2007

Active Directory

Connect Timeout

タイムアウトするまでActive Directoryへの接続を確立する時間(ミリ秒)。デフォルト値は5000です。

Exchange2007

Active Directory

Use SSL

セキュアなLDAPを使用するかどうか。デフォルトはtrueです。ただし、開発環境では、ドメイン・コントローラがセキュアなLDAPに対して有効化されないため、値をfalseに設定します。

Exchange2007

Active Directory

Using Client Certificates

クライアント・プロバイダがLDAP証明書を使用するかどうかを示します。

Exchange2007

Active Directory

Client Certificate Path

「Use SSL」がtrueに設定され、ドメイン・コントローラでクライアント証明書が必要な場合は、trueに設定します。デフォルトはfalseです。

Exchange2007

Auto Discovery

SCPN

Nは0(ゼロ)以上の序数です。

ユーザーの検出時にコネクタで使用するサービス接続ポイント(SCP)へのURL。

序数は、プリファレンス順序を指定します(コネクタでは、SCP1の前にSCP0が試行されるなど)。コネクタは、ユーザーが検出されるまで、または各エントリの試行が終了するまで各URLを試行します。

Exchange2007

Auto Discovery

Remove Domain From Urls

Active Directoryから取得した検出SCP URLからドメイン情報を削除するようにコネクタに指示します。

開発環境の場合は、URLにドメインが含まれているとDNSでURLが解決されないため(つまり、http://server1.example.com/autodiscover/autodiscover.xmlは機能しません)、この値をtrueに設定します。オプションをtrueに設定すると、URLはhttp://server1/autodiscover/autodiscover.xmlになります。

Exchange2007

Auto Discovery

Read Timeout

タイムアウトするまでレスポンスを待機する時間(ミリ秒)。デフォルト値は5000です。

Exchange2007

Auto Discovery

Connect Timeout

タイムアウトするまで自動検出サーバーへの接続を確立する時間(ミリ秒)。デフォルトは5000です。

Exchange2007

Auto Discovery

Use SSL

セキュアなHTTP(HTTPS)を使用するかどうか。デフォルトはtrueです。HTTPを許可するようにサーバーを構成することに失敗した場合は、自動検出サービスに対してHTTPSが必要になる場合があります。

Exchange2007

Auto Discovery

Client Certificate Path

この値は、PEM(プライバシ強化メールのセキュリティ証明書)ファイルの場所に設定します。このファイルには、自動検出でクライアント証明書が必要な場合に使用されるクライアント証明書が含まれています。

Exchange2007

Auto Discovery

Client Certificate Key Path

この値は、PEM(プライバシ強化メールのセキュリティ証明書)ファイルの場所に設定します。このファイルには、クライアント証明書の秘密鍵が含まれています。

Exchange2007

Auto Discovery

Port

デフォルトでは、通常、HTTPSセキュア・ポートの443に設定します。「Use SSL」がtrueに設定されている場合は、HTTPSポートの値を設定します。falseの場合は、HTTPポートの値を設定します。この値が使用されるのは、すべてのSCP URL(SCPN構成のSCP URLSおよびServern構成ごとに自動検出から取得されたSCP URL)の試行後に試行される、デフォルトのSCP URLが試行される場合のみです。

Exchange2007

Event Receiver

CHANGE_ME

CONNECTORSテーブルのNAME列に表示されるExchange 2007コネクタの名前。

Exchange2007

Event Receiver

Status Frequency

Exchangeが各サブスクリプションに通知を提供する頻度(分単位)。

Exchange2007

Event Receiver

Subscription Status Factor

イベント・レシーバは、Exchangeサーバーがすべてのサブスクリプションを終了していないことを確認するために、すべてのサブスクリプションに対してチェックを実行します。このパラメータは、このチェックの実行頻度を設定します。チェックの実行頻度は、このパラメータに設定した値に「Status Frequency」パラメータに設定した値を乗算した値です。たとえば、「Status Frequency」パラメータを1分に設定し、「Subscription Status Factor」を3に設定すると、イベント・レシーバは3分ごとにサブスクリプション・チェックを実行します。

B BPELタスク・コネクタの構成

この付録では、Business Data Synchronization Server (BDSS)コンポーネントのデータが保管された表をリストしています。

この付録のトピックは、次のとおりです。

- BPELタスク・コネクタ構成の概要

- Tasksプロファイルの構成

B.1 BPELタスク・コネクタ構成の概要

第4.8項「プロファイルの管理」で説明されているように、コネクタの構成プロファイルは、setProfileParameter操作を使用して作成または更新できます。

B.2 Tasksプロファイルの構成

表B-1に、Tasksプロファイルのパラメータを示します。

表B-1 WebCenter Tasksプロファイルのパラメータ

パラメータ

説明

connType

BPELサーバーへのログインにBPELタスク・コネクタが使用する接続タイプ。通常、この接続タイプはSOAPです。

connUrl

BPELサーバーのURL。

secRealm

BPELサーバーへの接続時にBPELタスク・コネクタが使用するセキュリティ・タイプ。デフォルト値はjazn.comです。

endPoint

BPELサーバーのインスタンス名。

PIM XSD

BPELTask.xsdファイルへのパス。

HubToPimURL

ハブXMLをBPELタスクXMLに変換するHubTask2BPELTask.xslドキュメントの場所のURL。

PimToHubURL

BPELタスクXMLをハブXMLに変換するBPELTask2HubTask.xslドキュメントのURL。

wcapp.extractbatchsize

抽出レスポンスで返されるレコード数。ハブで処理できるレスポンスは1つのみのため、この値は、同じレスポンス・パケット内にすべてのユーザーの変更が含まれるように十分に大きい値に設定する必要があります。

wcapp.pim.implclass

タスク実装のクラス名。

C BDSSデータ・ストアのテーブル

この付録では、コネクタAPI、コネクタとエンジン間の規定事項、およびデータ表現構造を示します。

この付録のトピックは、次のとおりです。

- BDSSテーブルの概要

- PIM_SERVER_INSTANCES

- CONNECTORS

- CONN_INSTANCES

- CONNS_TO_PIM_SERVERS

- HUB_DOMAINS

- CONN_DOMAINS

- CONN_DOMAIN_FILTERS

- DESC_FIELDS

- HUB_USERS

- CONN_USERS

- USER_CONTEXTS

- USER_CONTEXT_STATES

- STATE_DATA

- USER_HISTORY

- CONN_USER_RECORDS

- HUB_RECORDS

- CONN_RECORD_DESCS

- ASSOC_DATA

- LOVS

- PROFILES

- SEQUENCE

C.1 BDSSテーブルの概要

この付録では、PIMサーバー、コネクタ、ドメイン、フィルタなどのBDSS関連コンポーネントのデータを格納するテーブルのリストを示します。

C.2 PIM_SERVER_INSTANCES

PIM_SERVER_INSTANCESテーブル(表C-1)は、PIMサーバーのタイプではなく、PIMサーバーのインスタンスを表します。

表C-1 PIM_SERVER_INSTANCESテーブル

列

タイプ

CONNECTOR_ID

Number

NAME

VARCHAR2[100]

一意制約

CONNECTOR_IDおよびNAMEのPIM_SERVER_INSTANCES_UK1

C.3 CONNECTORS

CONNECTORSテーブル(表C-2)には、コネクタのグループ化のタイプを表すデータが格納されます。このテーブルには、SUPPORTS_EVENTS_FLG列とUSER_EVENT_FLG列が含まれており、この列によって、ハブは、ユーザーがデータを変更したかどうかに関係なくすべてのユーザーを同期化するかわりに、変更のあるユーザーのみを同期化できます。SUPPORTS_EVENTS_FLGによって、コネクタは、ユーザーのデータに変更があったことを判断し、そのユーザーの同期化を指示するメッセージをハブに送信できます。また、USER_EVENT_FLGによって、ハブは、ユーザーを即時に同期化するか、または次の同期化サイクル時に同期化できます。

表C-2 CONNECTORSテーブル

列

タイプ

説明

NAME

VARCHAR2[100]

コネクタの名前。BDSS全体で一意であることが必要なこの名前は、コネクタ・ユーザーを一意に識別するために(コネクタ・ユーザーIDとともに)使用されます。

SERVER_TYPE_CD

Number

PIMサーバー・タイプのLOVSテーブルに対する外部キー。

MAX_SYNC_LVL_CD

Number

同期化レベル(SYNC_LVL)のLOVSテーブルに対する外部キー。

ENABLED_FLG

VARCHAR2[1]

このコネクタが有効であるかどうかを判断するフラグ。

SYNC_EVENTS_ENABLED_FLG

VARCHAR2[1]

このコネクタがユーザー同期化通知イベントをサポートしているかどうかを判断するフラグ。

SUPPORTS_EVENTS_FLG

VARCHAR2[1]

ハブで、コネクタ・ユーザーのINSERT/UPDATE/DELETEイベントを同期化するかどうかを判断するフラグ。このフラグをT(true)に設定すると、ユーザーのデータが変更されたときにそのデータを同期化するようにハブに通知されます。このフラグをTに設定すると、そのユーザーの同期化セッションに関係なく、ハブはユーザーのデータを同期化します。

USER_EVENT_FLG

VARCHAR2[1]

コネクタ・ユーザーに対してINSERT/UPDATE/DELETEイベントが発生したときに、コネクタがハブに通知を送信するかどうかを判断するフラグ。ハブはこのフラグを使用して、ユーザーに対する同期化セッションを開始します。

一意制約

NAMEのCONNECTORS_UK1

C.4 CONN_INSTANCES

CONN_INSTANCESテーブル(表C-3)には、コネクタ・インスタンスの値が格納されます。

表C-3 CONN_INSTANCESテーブル

列

タイプ

説明

NAME

VARCHAR2[100]

コネクタ・インスタンスの名前。BDSS全体で一意である必要があります。

SERVICE_URI

VARCHAR2[100]

コネクタ・インスタンスと通信するためにハブ・コンポーネントが使用するURI(Universal Resource Identifier)。

CONNECTOR_ID

Number

SYNC_LVL(同期化レベル)のLOVSテーブルに対する外部キー。

ACTIVE_FLG

VARCHAR2[1]

このコネクタ・インスタンスがアクティブであるかどうかを判断するフラグ。(このフラグは、MBean管理コンソールから設定する必要があります。)

C.5 CONNS_TO_PIM_SERVERS

CONNS_TO_PIM_SERVERSテーブル(表C-4)は、CONN_INSTANCESテーブルおよびPIM_SERVER_INSTANCESテーブルと交差しています。

表C-4 CONNS_TO_PIM_SERVERSテーブル

列

タイプ

説明

CONN_INSTANCE_ID

Number

CONN_INSTANCESテーブルに対する外部キー。

PIM_SERVER_INSTANCE_ID

Number

PIM_SERVER_INSTANCESテーブルに対する外部キー。

C.6 HUB_DOMAINS

HUB_DOMAINSテーブル(表C-5)には、ハブ・ドメインのデータが格納されます。

表C-5 HUB_DOMAINSテーブル

列

タイプ

説明

NAME

VARCHAR2[100]

ドメインの名前。これは、このテーブル内で一意である必要があります。

PRIORITY

Number

このドメインの同期化に必要な優先度。最も高い優先度は0(ゼロ)です。これは、このテーブル内で一意である必要があります。

MAX_SYNC_LVL_CD

Number

SYNC_LVL(同期化レベル)のLOVSテーブルに対する外部キー。

DOMAIN_CLASS_CD

Number

DOMAIN_CLASS(タスクなど)のLOVSテーブルに対する外部キー。

一意制約

NAMEのHUB_DOMAINS_UK1

PRIORITYのHUB_DOMAINS_UK2

C.7 CONN_DOMAINS

表C-6に、CONN_DOMAINSテーブルの列を示します。

表C-6 CONN_DOMAINSテーブル

列

タイプ

説明

DOMAIN_NAME

VARCHAR2[100]

ドメインの名前

PRIORITY

Number

このドメインの同期化の優先度。最も高い優先度は0(ゼロ)です。

MAX_SYNC_LVL_CD

Number

SYNC_LVL(同期化レベル)のLOVSテーブルに対する外部キー。

DOMAIN_CLASS_CD

Number

DOMAIN_CLASS(タスクなど)のLOVSテーブルに対する外部キー。

CONNECTOR_ID

Number

CONNECTORSテーブルに対する外部キー。

HUB_DOMAIN_ID

Number

HUB_DOMAINSテーブルに対する外部キー。

FILTER_FLD_LOV_TYPE

VARCHAR2[50]

このコネクタ・ドメインのフィルタ・フィールドで使用するLOV(値リスト)のタイプ。これは、コネクタ・タイプおよびドメインに対して一意です。

一意制約

CONNECTOR_IDおよびHUB_DOMAIN_IDのCONN_DOMAINS_UK1

C.8 CONN_DOMAIN_FILTERS

表C-7に、CONN_DOMAIN_FILTERSテーブルの列を示します。

表C-7 CONN_DOMAIN_FILTERSテーブル

列

タイプ

説明

CONN_DOMAIN_ID

Number

CONN_DOMAINSテーブルに対する外部キー。

FIELD_VALUE

VARCHAR2[100]

このフィールドでのフィルタリングに使用されるフィールド値。

FILTER_SEQ

Number

このフィルタ値を使用する順序。

OPERATOR_LOV_CD

Number

OPERATORのLOVSテーブルに対する外部キー。

FILTER_NAME

VARCHAR2[100]

フィルタ名。

C.9 DESC_FIELDS

DESC_FIELDSテーブルの列(表C-8を参照)には、ハブ・レコードを説明するために構成されているフィールドが保持されます。ログ・メッセージでは、これらの説明フィールドが、IDのかわりにレコードを識別するために使用されます。HUB_DOMAINSテーブルのキー・フィールドとして使用するために、このフィールドの説明にはフラグを指定できます。

表C-8 DESC_FIELDSテーブル

列

タイプ

説明

HUB_DOMAIN_ID

Number

HUB_DOMAINSテーブルに対する外部キー。

FIELD_NAME

VARCHAR2[100]

ログ・メッセージの説明で使用されるハブ・フィールド名。

KEY_FIELD_FLG

VARCHAR2[1]

ハブ・フィールドをキー・フィールドとしても使用する必要があるかどうかを判断するフラグ。

C.10 HUB_USERS

HUB_USERSテーブル(表C-9)には、ハブ・ユーザーのデータ(CONNECTOR_USERSのマッピングの表現)が保持されます。

表C-9 HUB_USERSテーブル

列

タイプ

説明

NAME

VARCHAR2[100]

ユーザーのハブ表現の名前。この名前は、BDSS全体で一意である必要があります。

SESSION_STATE

VARCHAR2[100]

ユーザーの状態(ディスパッチ済、同期化終了済)またはセッションID。

SYNC_ENABLED_FLG

VARCHAR2[1]

同期化を考慮する必要があるハブ・ユーザーかどうかを判断するフラグ。ゼロ(0)は、ハブはユーザーを同期化する必要がないことを示します。

LAST_SYNC_HIST_ID

Number

このユーザーの最新の同期化サイクルの履歴であるUSER_HISTORYテーブルに対する外部キー。

LAST_GOOD_SYNC_HIST_ID

Number

このユーザーの最新の正常に実行された同期化サイクルの履歴であるUSER_HISTORYテーブルに対する外部キー。

LAST_UPD

Date

このユーザーの最新の同期化サイクルのタイム・スタンプ。

SYNC_START_TS

timestamp

ユーザーの現在の同期化サイクルの開始を示すタイム・スタンプ。これは、データベース・トリガーによって設定されます。

トリガー: BDSS.HUB_USERS_SYNC_START_TRGは、データベース時間を使用してSYNC_START_TSを設定します。このトリガーを起動する必要があるのは、HUB_USERS.SESSION_STATEが、有効な同期化セッション状態(つまり、NULLではなく、DISPATCHEDまたはSYNC_ENDED)で更新された場合のみです。

一意制約

NAMEのHUB_USERS_UK1

C.11 CONN_USERS

CONN_USERSテーブルの列(表C-10を参照)には、コネクタ・ユーザーのデータが保持されます。

表C-10 CONN_USERSテーブル

列

タイプ

説明

USER_ID

VARCHAR2[100]

コネクタ・ユーザーのユーザーID。たとえば、Microsoft Exchange 2007の場合はpimsi1001@pimsisiebel.comです。このフィールドでは、PIMユーザーを(CONNECTOR_IDとともに)一意に識別できます。

LANG_CD

VARCHAR2[25]

ユーザーが使用する言語。

LAST_SYNC_TS

Date

このユーザーが参加した最新の同期化セッションのタイム・スタンプ。

ERROR

VARCHAR2[100]

ユーザーの最新の同期化セッションで発生したエラー。

LAST_SYNC_STATUS

VARCHAR2[1]

0(ゼロ)の値は、最新の同期化が正常に終了したことを示します。1の値は、同期化が正常に完了していないことを示します。

LAST_GOOD_SYNC_TS

Date

このユーザーの最新の正常に実行された同期化セッションのタイム・スタンプ。

SYNC_NOW_FLAG

VARCHAR2[1]

同期化を開始する同期化イベントの使用時に、ユーザーを同期化するかどうかを判断するフラグ。

CONNECTOR_ID

Number

CONNECTORSテーブルに対する外部キー。

CONNECTOR_INST_ID

Number

CONN_INSTANCESテーブルに対する外部キー。

HUB_USER_ID

Number

HUB_USERSテーブルに対する外部キー。

SYNC_NOW_FLG

varchar2(1)

ユーザーを同期化する必要があることを示すには、このフラグを1に設定します。

SYNC_NOW_TS

timestamp

SYNC_NOW_FLGが最後に設定された時期をマークするタイム・スタンプ。新しいトリガーは、SYNC_NOW_TSを更新する必要があります。BDSS.CONN_USERS_SYNC_NOW_TRGは、データベースの時間を使用してSYNC_NOW_TSを設定します。このトリガーを起動する必要があるのは、SYNC_NOW _FLGが1に更新された場合のみです。

一意制約

CONNECTOR_IDおよびUSER_IDのCONN_USERS_UK1

HUB_USER_IDおよびCONNECTOR_IDのCONN_USERS_UK2

C.12 USER_CONTEXTS

表C-11に、USER_CONTEXTSテーブルの列を示します。このテーブルの各レコードは、ユーザーのコネクタ・ドメインを表しています。

表C-11 USER CONTEXTSテーブル

列

タイプ

説明

CONTEXT_NAME

VARCHAR2[500]

PIMレコードのバージョン。

HUB_USER_ID

Number

HUB_USERSテーブルに対する外部キー。

CONN_DOMAIN_ID

Number

CONN_DOMAINSテーブルに対する外部キー。

TARGET

VARCHAR2[100]

レコードの同期化で使用するターゲット・フォルダ。

SYNC_LVL_CD

Number

SYNC_LVL(同期化レベル)のLOVSテーブルに対する外部キー。

LAST_SYNC_HIST_ID

Number

USER_HISTORYテーブルに対する外部キー。

LAST_GOOD_SYNC_TS

Date

このユーザーの最新の正常に実行された同期化セッションのタイム・スタンプ。

PREV_SYNC_LVL_CD

Number

SYNC_LVL(同期化レベル)の前のSYNC_LVLのLOVSテーブルに対する外部キー。

SYNC_NOW_FLG

varchar2(1)

ユーザーを同期化する必要があることを示すには、このフラグを1に設定します。

SYNC_NOW_TS

timestamp

SYNC_NOW_FLGが最後に設定された時期をマークするタイム・スタンプ。新しいトリガーは、SYNC_NOW_TSを更新する必要があります。BDSS.CONN_USERS_SYNC_NOW_TRGは、データベースの時間を使用してSYNC_NOW_TSを設定します。このトリガーを起動する必要があるのは、SYNC_NOW _FLGが1に更新された場合のみです。

一意制約

HUB_USER_IDおよびCONN_DOMAIN_IDのUSER_CONTEXT_UK1

C.13 USER_CONTEXT_STATES

USER_CONTEXT_STATESテーブル(表C-12)によって、コネクタは、レコードの変更を検索する次の同期化サイクルで使用するユーザーの同期状態のデータを格納できます。

表C-12 USER_CONTEXT_STATESテーブル

列

タイプ

説明

USER_CONTEXT_ID

Number

USER_CONTEXTSテーブルに対する外部キー。

STATE_INDEX

VARCHAR2[100]

状態の索引を格納します。

LAST_SYNC_TS

Date

このユーザーが参加した最新の同期化セッションのタイム・スタンプ。

TEMP_FLG

VARCHAR2[1]

一時的な同期状態を示すフラグ。

C.14 STATE_DATA

表C-13に、STATE_DATAテーブルの列を示します。

表C-13 STATE_DATAテーブル

列

タイプ

説明

USER_CONTEXT_STATE_ID

Number

USER_CONTEXT_STATESテーブルに対する外部キー。

SEQ_NUM

Float

状態データを返す順序。

TEMP_FLG

VARCHAR2[1]

一時的なデータの同期化を示すフラグ。

DATA

VARCHAR2[500]

データのチャンク。

C.15 USER_HISTORY

USER_HISTORYテーブル(表C-14)には、HUB_USERまたはUSER_CONTEXTの履歴データが格納されます。

表C-14 USER_HISTORYテーブル

列

タイプ

説明

SYNC_TS

Date

同期化セッションのタイム・スタンプ。

SYNC_STATUS

VARCHAR2[200]

同期化レコードのステータス。0(ゼロ)の値は、最新の同期化が正常に完了していることを示します。1の値は、同期化が正常に完了していないことを示します。

ERROR

VARCHAR2[200]

エラー・メッセージ。

HUB_USER_ID

Number

HUB_USERSテーブルに対する外部キー。

USER_CONTEXT_ID

Number

USER_CONTEXTSテーブルに対する外部キー。

C.16 CONN_USER_RECORDS

表C-15に、CONN_USER_RECORDSテーブルの列を示します。各レコードは、特定のPIMサーバー上にあるユーザーのレコードを表しています。

表C-15 CONN_USER_RECORDSテーブル

列

タイプ

説明

VERSION

VARCHAR2[500]

PIMレコードのバージョン。

DELETE_FLG

VARCHAR2[1]

このレコードが削除されているかどうかを示すフラグ。

USER_CONTEXT_ID

Number

USER_CONTEXTSテーブルに対する外部キー。

CONNECTOR_ROW_IDEN

VARCHAR2[225]

PIMサーバー上にあるこのPIMレコードの実際のレコードID。

LAST_INBND_TS

Date

このレコードの最新のインバウンド同期化のタイム・スタンプ。

LAST_INBND_STATUS

VARCHAR2[1]

同期化レコードのステータス。0(ゼロ)の値は、同期化が正常に完了していることを示します。1の値は、同期化が正常に完了していないことを示します。

SOURCE_TS

Date

このレコードがソースのPIMサーバーから更新されたときのタイム・スタンプ。

ERROR

VARCHAR2[200]

このレコードのエラー。

HUB_RECORD_ID

Number

HUB_RECORDテーブルに対する外部キー。

ECHO_PENDING_FLG

VARCHAR2[1]

このレコードに対するエコーを想定しているかどうか(つまり、別のPIMサーバーでの変更のためにレコードが更新された場合、返される更新を削除する必要があること)を示すフラグ。

一意制約

USER_CONTEXT_ID、CONNECTOR_ROW_IDENおよびHUB_RECORD_IDのCONN_USER_RECORDS_UK1

C.17 HUB_RECORDS

HUB_RECORDSテーブル(表C-16)には、ハブ・レコードのデータが格納されます。

表C-16 HUB_RECORDSテーブル

列

タイプ

説明

HUB_DOMAIN_ID

Number

HUB_DOMAINSテーブルに対する外部キー。

LAST_OUTBND_TS

Date

このレコードの最新のアウトバウンド同期化のタイム・スタンプ。

LAST_OUTBND_STATUS

VARCHAR2[1]

同期化レコードのステータス。0(ゼロ)の値は、最新の同期化が正常に完了していることを示します。1の値は、同期化が正常に完了していないことを示します。

DELETE_FLG

VARCHAR2[1]

一時状態を表す削除の処理に使用するフラグ。

C.18 CONN_RECORD_DESCS

CONN_RECORD_DESCSテーブル(表C-17)には、各レコードの説明フィールドの値が保持されます。

表C-17 CONN_RECORD_DESCSテーブル

列

タイプ

説明

FIELD_ID

Number

DESC_FIELDSテーブルに対する外部キー。

FIELD_VALUE

VARCHAR2[100]

フィールドの値。

CONN_RECORD_ID

Number

CONN_USER_RECORDSテーブルに対する外部キー。

C.19 ASSOC_DATA

ASSOC_DATAテーブル(表C-18)は、CONN_USERSまたはCONN_USER_RECORDSに関連するデータを表します。

表C-18 ASSOC_DATAテーブル

列

タイプ

説明

SEQUENCE

Number

このデータを返す順序。

DATA_ID

VARCHAR2[50]

関連データのID。

DATA_GROUP_NAME

VARCHAR2[50]

ASSOC1やASSOC2などのデータのグループの名前。

DATA_KEY_NAME

VARCHAR2[50]

データのキー名。

DATA_KEY_VALUE

VARCHAR2[100]

データ・ストア。

CONN_USERS_ID

Number

CONN_USERSテーブルに対する外部キー。

CONN_RECORD_ID

Number

CONN_USER_RECORDSテーブルに対する外部キー。

C.20 LOVS

LOVSテーブルは、同期化レベル(SYNC_LVL)、PIMサーバー・タイプ(PIM_SERVER_TYPE)、ドメイン・クラスおよび標準の比較演算子の値リスト(LOVS)を表します。表C-19に、タイプ(VARCHAR2[50])と値(VARCHAR2[100])別に値リストを示します。

表C-19 LOVS

LOV_TYPE (VARCHAR2[50])

LOV_VALUE (VARCHAR2[100])

SYNC_LVL

値は次のとおりです。

- Full

- Outbound Only

- Inbound Only

- None

PIM_SERVER_TYPE

値は次のとおりです。

- Exchange 2007

- BPEL Tasks

DOMAIN_CLASS

値は次のとおりです。

- Task

- Contact

- Calendar

Operators

値は次のとおりです。

- EQUALS

- BEFORE

- AFTER

- GREATER_THAN

- LESS_THAN

C.21 PROFILES

PROFILESテーブル(表C-20)には、プロファイル、セクション、パラメータおよび値の情報が格納されます。

表C-20 PROFILESテーブル

列

タイプ

説明

PROFILE_NAME

VARCHAR2[100]

プロファイルの名前。

SECTION_NAME

VARCHAR2[100]

セクションの名前。

PARAMETER

VARCHAR2[100]

パラメータの名前

VALUE

VARCHAR2[500]

パラメータの値

COMMENTS

VARCHAR2[200]

このパラメータに関するノートとコメント。

LAST_UPD

Date

このパラメータの最終更新日付。

C.22 SEQUENCE

SEQUENCEテーブル(表C-21)には、各テーブルの新しいレコードに一意のIDを作成するためにOracle TopLinkが使用する順序情報が格納されます。

表C-21 SEQUENCEテーブル

列

タイプ

説明

SEQ_NAME

VARCHAR2[50]

順序の名前

SEQ_COUNT

Number(30,0)

順序のカウンタ。

D コネクタAPI

この付録では、Exchange 2007コネクタのカスタム・フィールドを変換するために使用するXLSTおよびXSDについて説明します。

この付録のトピックは、次のとおりです。

- コネクタAPIの概要

- コネクタ・インタフェース

- エンジン・コールバック・インタフェースAPI

- コネクタ・ランタイム・インタフェースAPI

- データ表現構造

- コネクタの作成に関するベスト・プラクティス

- Exchange 2007コネクタAPI

- カレンダの同期化に対する汎用コンポーネントのサポート

D.1 コネクタAPIの概要

次のコネクタAPIがあります。

- コネクタ・インタフェース

- エンジン・コールバック・インタフェースAPI

- コネクタ・ランタイム・インタフェースAPI

用語

APIに関連する用語は次のとおりです。

- 関連データ

- コネクタ名

- 作成/作成競合

- フィールド・クラス

- PIMドメイン・ターゲット

- PIMレコード説明

- PIMレコードID

- PIMレコード・バージョンID

- 同期化セッション

- 同期状態

D.1.1 関連データ

関連データとは、コネクタのかわりにハブに格納されるコネクタ定義のデータです。任意のタイプのデータを使用できますが、コネクタではデータがAssociatedData構造に準拠していることを確認する必要があります。

関連データは、一意の識別子および複数グループのコレクションで構成されます。各グループには、グループ識別子、および関連データを格納する任意の数のKeyValuePair構造が含まれます。コネクタでは、各グループ内に任意の数のグループおよびKeyValuePair構造を定義できます。たとえば、Microsoft Exchange 2007用Oracle BDSSコネクタでは、識別子がMailboxPropertiesのユーザー・レベルの関連データを定義し、その関連データにグループ識別子がMailboxPropertiesの1つのグループを含めることができます。このグループには2つのKeyValuePair構造が含まれ、キーはlegacyExchangeDNとmsExchHomeServerNameで、値はActive Directoryから取得されたデータが移入されます。同様に、Exchange 2007コネクタでは、識別子がPIMレコードIDのレコード・レベルの関連データを定義し、その関連データにグループ識別子がSourceKey、ChangeKeyおよびPredecessorChangeListの3つのグループを含めることができます。SourceKeyグループには単一のKeyValuePairが保持され、キーはSKで、値はExchangeレコードのソース・キー値です。ChangeKeyグループには単一のKeyValuePairが保持され、キーはCKで、値はExchangeレコードの変更キー値です。PredecessorChangeListグループには任意の数のKeyValuePair構造が保持されます(Exchangeレコードの先行変更リストの各変更キーがKeyValuePairとして表されます)。

関連データの特徴は次のとおりです。

- ハブに対して不透明です(つまり、ハブから識別されません)。

- これはオプションです。

- データ・ストアにテキストとして格納されます。

- サイズは任意です。

- レコード・レベルのRTL(ランタイム・ライブラリ)アクセスAPIに加えて、コネクタではレコード・レベルの関連データをCreateRecordまたはUpdateRecordコールの結果構造で提供できます。ハブでは、新しい関連データでデータ・ストアを更新します。

- レコード・レベルのRTLアクセスAPIに加えて、コネクタではレコード・レベルの関連データをExtractResponseの各UpsertRecordで提供できます。ハブでは、その関連データでデータ・ストアを更新します。

D.1.2 コネクタ名

PIMサーバー・インスタンスの特定のセットにサービスを提供するコネクタ・インスタンス用の一連の構成の名前。

注意:

コネクタ名は指定の同期化セッション中は変更されません。したがって、ステートフル・コネクタの場合は、指定のユーザーおよび同期化セッションの値をキャッシュし、その値をハブ・コールバックまたはRTL(ランタイム・ライブラリ)APIのコール時に使用することもできます。

D.1.3 作成/作成競合

作成/作成競合は、キー・フィールドのフィールド値が一致する同期化されていない複数のレコードが、同じ同期化セッション中に異なる複数のシステムから抽出された場合に発生します。

D.1.4 フィールド・クラス

フィールド・クラスとは、データ型に優先してPIMフィールドに追加セマンティクを適用する、PIMフィールドの分類です。フィールド・クラスの例には、Phone、Address、Email、Category、To、CCおよびBCCがあります。フィールド・クラスでは、次の処理を実行します。

- コネクタ間のフィールドの自動マッピングを容易にします。

- コネクタ実装を有効にし、特定のクラスに基づいてロジックを実装します。たとえば、コネクタでは、システム内で値(参加者など)を解決するためにフィールド・クラス(To、CC、BCCなど)に関するフィールド情報が必要になる場合があります。

D.1.5 PIMドメイン・ターゲット

PIMドメイン・ターゲットとは、指定のユーザーおよびドメインについて、ドメインのPIMデータが存在する場所に関する構成メタデータです(オプション)。PIMドメイン・ターゲットは、PIMサーバーが各ユーザーのPIMデータを複数の異なる場所に格納するコネクタで使用できます。たとえば、Exchangeが各ユーザーのタスク・データと連絡先データを異なるフォルダに格納する場合、Exchangeのタスク・データは「Task」フォルダ(または「Task」フォルダのサブフォルダ)に格納され、Exchangeの連絡先データは「Contact」フォルダ(または「Contact」フォルダのサブフォルダ)に格納されます。構成メタデータはコネクタ固有であるため、コネクタ実装ではその構成メタデータを解析します。次に例を示します。

- フォルダの相対パスの構成(例: \root\calendar\mycalendar)は、ドメインのサブフォルダに対する同期化を示します。

- 抽象値の構成(例: Root)は、ドメインのデフォルトの主フォルダに対する同期化を示します。

コネクタによっては、PIMフォルダを指定せずに、他の方法(Siebel PDQフィルタなど)を指定する場合があります。たとえば、連絡先ドメインの場合、コネクタでは同期化リストのPDQをドメイン・ターゲットとして識別します。PDQでは、フォルダ・パスと異なりターゲット上の物理的な場所を識別しませんが、フォルダ・パスと同様に同期化対象となるレコードのセットを識別します。

注意:

このオプションのメタデータはユーザーおよびドメインごとに指定されるため、管理者はBDSSで同期化されるユーザーおよびドメインごとにPIMドメイン・ターゲットを指定する必要があります。コネクタ構成を簡略化するために、開発者はデフォルトのPIMドメイン・ターゲットを作成し、構成が使用できない場合にコネクタでデフォルト値を使用するようにできます。たとえば、構成が使用できない場合、コネクタではドメインに対してデフォルト・フォルダを使用できます。また、開発者は、Rootなどの構成値を要求し、コネクタではドメインに対してデフォルト・フォルダを使用するように指定することもできます。デフォルトのPIMドメイン・ターゲットがない場合、各ユーザーおよびドメインのメタデータが必要になると、コネクタはその構成を要求できます。

D.1.6 PIMレコード説明

PIMレコード説明とは、KeyValuePair構造の配列です。各KeyValuePair構造には、ハブ・フィールド名がキーとして、ハブ・フィールド値が値として保持されます。コネクタでは、RTL(ランタイム・ライブラリ)API GetConfigurationMetadataを使用して、各ハブ・ドメインのPIMレコード説明に含めるように構成されたハブ・フィールドのリストを取得する必要があります。

PIMレコード説明で使用するハブ・フィールドの構成は、FtsKeyFieldsプロファイルに格納されています。プロファイルのセクション名には、ハブ・ドメイン名が含まれています。プロファイルのパラメータの名前はKeyFieldX形式で、Xは表内の他の行から該当する行を識別するだけでなく、コネクタによるPIMレコード説明の作成時にフィールドの表示順を指定する数値です。コネクタでは、PIMレコード説明を作成し(構成が存在する場合)、KeyValuePair配列に表示するフィールドの順序がKeyFieldXで指定した順序と同じであることを確認する必要があります。たとえば、FtsKeyFieldsプロファイルの「Task」ハブ・ドメインには、表D-1に示す構成があります。

表D-1 「Task」ハブ・ドメインの構成

プロファイル

セクション(ハブ・ドメイン名)

パラメータ

値

FtsKeyFields

Task

KeyField1

Subject

FtsKeyFields

Task

KeyField2

StartDate

コネクタでレコードが抽出されると、2つの要素を含むKeyValuePair配列が作成されます。最初の要素(index0)にはKeyValuePairが含まれ、キーはSubjectで、値はレコードのハブ・フィールド値です。2番目の要素(index1)にはKeyValuePairが含まれ、キーはStartDateで、値はレコードのハブ・フィールド値です。

ハブ・レコードに構成済のキー・フィールドの値がない場合、コネクタではそのフィールドに空の文字列を挿入する必要があります。

注意:

コネクタでは、レコード説明にハブ・フィールド名とハブ・フィールド値を提供する必要があります。コネクタではこの情報を提供するために、PIMからレコードを抽出してハブ書式に変換し、PimRecordDescriptionを作成する必要があります。同様に、コネクタでは、作成または更新操作が正常終了したときに、ハブ・フィールドの名前と値を提供する必要があります。これは非常に重要で、ハブでは、複数のPIMサーバーからの抽出レスポンスを評価するときに、これらのキー・フィールドが含まれたPIMレコード説明を使用してPIMレコードのキー・フィールド照合を実行します。PIMレコード説明は、ハブ・レコードがシステム内を移動するときにハブ・レコードに対して実行された特定の操作に関する情報を記録する場合にも使用されます。

Oracle Fusion Middleware 11gリリース2のBDSSの場合、レコード説明のメンバーとして指定するフィールドは複数値タイプにできません。

D.1.7 PIMレコードID

PIMレコードIDとは、コネクタがPIMサーバー上のレコードを一意に識別するために使用する識別子です。PIMレコードIDは、ユーザーおよびドメインごとにPIMサーバー内で一意である必要があります。コネクタでは、PIMレコードIDとして使用するプロパティがレコードの識別およびレコードへのアクセスに使用できることを確認する必要があります。

コネクタでは、次の場合にPIMレコードIDをBDSSに提供します。

- PIMサーバーからレコードを抽出するとき

- プッシュされた作成操作が完了したとき

BDSSでは、更新操作または削除操作がPIMサーバーにプッシュされると、PIMレコードIDをコネクタに提供します。

D.1.8 PIMレコード・バージョンID

PIMレコード・バージョンIDとは、PIMレコードのバージョンを取得するコネクタ定義の値です。これは、変更されたPIMレコードを追跡できる任意の値です。たとえば、PIMレコードに「最終変更日時」フィールドがある場合、その「最終変更日時」フィールドは、レコードが更新されるたびに更新されるため、コネクタではこのフィールドをPIMレコード・バージョンIDとして使用できます。同様に、レコードが変更されると増分される整数値がPIMレコードにある場合、コネクタではその整数値を使用することもできます。

D.1.9 同期化セッション

同期化セッションとは、ハブでBDSSコネクタを介して、1つ以上のハブ・ドメインのハブ・ユーザーのデータを1つ以上のPIMストア間で同期化するセッションです。セッションは、ハブでコネクタAPI InitializeUserSyncSessionをコールすると開始され、同期化セッションIDと呼ばれる一意の識別子によって識別されます。このセッションは、ハブでEndUserSyncSession APIをコールすると終了します。これら2つのコールの間に、ハブでは次のコネクタAPIをコールできます。

- ExtractDomains API: すべてのハブ・ドメインに対してコネクタがインバウンドのみの同期化用に構成されたハブ構成の場合、このAPIはコネクタでコールされません。コールされるのは、少なくとも1つのハブ・ドメインに対してコネクタが双方向またはアウトバウンドのみの同期化用に構成されたハブ構成の場合です。

- CreateRecord、UpdateRecordまたはDeleteRecord APIは、セッション中に任意の回数コールできます。

D.1.10 同期状態

エンジンは、コネクタが提供する同期状態と呼ばれるデータを使用して、PIMサーバーから正常にエクスポートされたユーザーのドメイン・レコードを追跡します。同期状態は、コネクタ・ドメイン・レベルで監視されます。

コネクタでは、同期状態とその書式を定義します。たとえば、コネクタでは、日時スタンプを使用して前の同期化セッション中に実行した抽出問合せの時刻を示したり、PIM APIによって定義された規則を使用して、コネクタがPIMサーバーとデータを交換する方法を記述することができます。たとえば、Exchange 2007用Oracle BDSSコネクタでは、増分変更同期化(ICS)バイナリBLOBが使用されます。コネクタによる同期状態の管理方法の詳細は、第D.4.3項「CommitCachedSyncStateメソッドAPI」、第D.4.8項「GetSyncState API」および第D.4.10項「SaveSyncState API」を参照してください。

注意:

このデータはエンジンに対して不透明ですが、エンジンは、いつ同期状態をハブ・データ・ストアに保存するかを指示します。

1人のユーザーの各コネクタ・ドメインに対して1つの同期状態があります。同期状態はハブ・データ・ストアに存在し、これによってシステムでは、1つのドメインからすべてのレコードを抽出したり、前の同期状態から発生した作成、読取り、更新および削除操作のみを抽出できます。

注意:

エンジンは、ユーザーの各同期化セッションの後にコネクタ・ドメインの同期状態を更新しますが、これは、送信されたレコードの処理時に他のすべてのコネクタでエラーが発生していない場合のみです。コネクタでエラーが発生した場合は、(エラーの修正後に)後続の同期化セッションで一部のレコードを再度抽出する必要があるため、同期状態は更新されません。

D.1.11 更新/更新競合

更新/更新競合は、以前に同期化されたレコードが複数のシステムで更新され、同じ同期化セッションで抽出された場合に発生します。

D.2 コネクタ・インタフェース

コネクタのPIMサーバー同期化サービスは、Webサービスとして公開されています。コネクタ開発者は、このドキュメントで定義されているWebサービス・インタフェースを実装します。エンジン、テスト・アプリケーションおよびその他のWebサービス・クライアントはコネクタ・インタフェースのコンシューマで、このインタフェースには次のAPIが含まれます。

- InitializeUserSyncSession API

- ExtractDomains API

- EndDomainSynchronization API

- EndUserSyncSession API

- CreateRecord API

- UpdateRecord API

- DeleteRecord API

- GetPimServerEndPoint API

注意:

ExtractDomains APIは非同期です。その他のAPIはすべて同期です。

D.2.1 InitializeUserSyncSession API

ハブでは、各ユーザーの同期化セッションが開始されるたびに、InitializeUserSyncSession APIをコールします。コネクタはユーザーベースの初期化を実行して、ユーザーがそのコネクタを使用して、指定のsyncSessionIdで識別される同期化セッション中に後続のリクエストを処理できるようにする必要があります。表D-2に、InitializeUserSyncSession APIのパラメータを示します。

表D-2 InitializeUserSyncSession APIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

[in]

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

[in]

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

[in]

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

[in]

コネクタがBDSSからメタデータを取得する必要がある場合にコールするURLが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomainArray

DomainInfo []

[in]

DomainInfo構造の配列が格納されます。配列には、構成されたすべてのハブ・ドメインのメタデータが含まれます。このパラメータは、NULL以外の配列である必要があります。各DomainInfo構造は、次の基準を満たしている必要があります。

- pimDomainTarget: このメンバーは、NULL以外で空でない必要があります。

- pimFilterCondition: このメンバーは、NULL以外である必要がありますが、空にはできます。

- hubDomain: このメンバーは、NULL以外で空でない必要があります。

- pimDomainSyncState: このメンバーは、NULL以外である必要がありますが、空にはできます。

コネクタでは配列を検証し、指定したDomainInfo配列がこの基準を満たしていない場合はエラーを返します。

connectorUrl

String

[out]

オプション・パラメータ。入力時は、パラメータはNULLです。出力時に、コールを受信したコネクタの完全URLが格納されるか、またはNULLのままです。

指定した同期化セッションIDで識別される同期化セッション中に指定のハブ・ユーザーに対して後続のコールを行うときに、同じコネクタ・インスタンス(URLで識別される)をコールするようにコネクタがBDSSに要求する場合、このコールを受信したコネクタはそのURLを提供できます。

戻り値

void

例外

コネクタでユーザーを初期化できない場合は、例外をスローして問題を特定するメッセージを提供する必要があります。これによって、BDSSでそのメッセージを記録できます。

D.2.1.1 エンジン規定

InitializeUserSyncSession APIをコールするには、エンジンで次の処理を実行する必要があります。

- すべてのハブ・ドメインのドメイン・メタデータを提供します。

- ExtractDomains、CreateRecord、UpdateRecordまたはDeleteRecordをコールする前に、InitializeSyncSession APIをコールします。

注意:

エンジンは、InitializeSyncSession APIをコールする前に、GetPimServerEndPointをコールできます。

- コネクタで例外がスローされると、ハブではコネクタがユーザーを初期化できなかったと判断されます。したがって、ハブでは、指定のハブ・ユーザーおよび同期化セッションについて、コネクタへの後続のコールが実行されません。

- 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

- コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameを使用する必要があります。

D.2.1.2 コネクタ規定

コネクタでは、エンジンのInitializeUserSyncSession APIコールのレスポンスとして、次の処理を実行する必要があります。

- APIに渡された各パラメータを検証し、表D-2に示す基準を満たしていることを確認します。

- 必要なユーザーベースの初期化を実行して、コネクタが後続のハブ・リクエストを処理できるようにします。リクエストには、ハブ・ドメインを抽出したり、レコードを作成、更新または削除するためのものがあります。

- コネクタで後続のすべてのコールを同じコネクタ・インスタンスにルーティングする必要がある場合は、コールを受信したコネクタ・インスタンスのURLを提供します。

- コネクタでは、後続のハブ・コールを処理するためにこのAPIに渡されたパラメータをキャッシュする必要がある場合、syncSessionIdとpimUserIdの組合せを使用できます。ほとんどのコネクタでは、同期化セッション中に後で使用できるように、提供されたドメイン情報データをキャッシュする必要があります。ステートレス・コネクタで状態を保持する必要がある場合は、これがコネクタ実装詳細とみなされます。

- コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

D.2.2 ExtractDomains API

エンジンは、非同期のWebサービスAPIであるExtractDomainsをコールして、コネクタに指定のハブ・ドメインを抽出するようにリクエストします。抽出とは、変更されたすべてのPIMレコードをPIMストアから取得してダウンロードするプロセスです。コネクタでは、前回の同期状態以降に変更されたすべてのPIMレコードを抽出する必要があります(前回の同期状態は、ハブでInitializeUserSyncSessionがコールされて同期化セッションが開始されると、ユーザーおよびドメインごとに提供されます)。各PIMレコードは、第8章「ハブ・フィールドへのコネクタ・フィールドのマッピング」の定義に従ってハブ書式に変換されます。ハブ書式のレコードは、ExtractDomainResultsCallback APIを介してハブに提供されます。

表D-3 ExtractDomains APIのパラメータ

パラメータ

データ型

タイプ

説明

extractRequest

ExtractRequest

[in]

抽出が必要なユーザーおよびドメインに関連する情報が格納されます。このパラメータは、NULL以外である必要があります。

ExtractRequestメンバーは、次の基準を満たしている必要があります。

- hubUserId: メンバーは、NULL以外で空でない必要があります。

- pimUserId: このメンバーは、NULL以外で空でない必要があります。

- hubDomainArray: このメンバーは、NULL以外である必要があります。配列内の各要素は、1つのハブ・ドメインIDが含まれたNULL以外の空でない文字列である必要があります。

hubContext

HubContext

[in]

コネクタで抽出リクエストを処理するために必要なコンテキスト情報が格納されます。NULL以外である必要があります。

HubContextメンバーは、次の基準を満たしている必要があります。

- engineEndPointURL: このメンバーは、NULL以外で空でない必要があります。

- syncSessionId: このメンバーは、NULL以外で空でない必要があります。

- connectorRuntimeLibraryURL: このメンバーは、NULL以外で空でない必要があります。

- connectorName: このメンバーは、NULL以外で空でない必要があります。

コネクタでは、このメソッドを非ブロック化の非同期メソッドとして実装する必要があります。実装では、コール側Webサービスのスレッドでの抽出の実行とは異なり、各コネクタ所有のスレッドで各ドメインのデータ抽出が実行される必要があります。

D.2.2.1 エンジン規定

エンジンは、ExtractDomains APIをコールするときに次の処理を実行します。

- このAPIをコールする前に、指定の同期化セッションでInitializeUserSyncSessionへのコールが正常に実行されたことを確認します。

- すべてのコネクタから取得したExtractResponseを分析して競合を解決し、他のPIMコネクタを介して作成、読取り、更新および削除操作を他のPIMサーバーにプッシュします。

- システムからエクスポートされて別のシステムにインポートされたPIMレコードのマッピングを保守します。

- コネクタから提供されたExtractResponseが非同期で処理されたことを確認します。

- 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。同じ同期化セッション中は、コネクタへの後続の各コールで同じURLが提供されます。

- コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameを使用する必要があります。

注意:

ExtractRequestに含まれるハブ・ドメインの配列は、同じ同期化セッション中にInitializeUserSyncSessionへのハブ・コールで指定したハブ・ドメインのサブセットである必要があります。

D.2.2.2 コネクタ規定

コネクタでは、ExtractDomains APIに対して次のようにレスポンスします。

1. 指定のPIMユーザーIDおよびPIMドメイン・ターゲットのドメインに属するPIMストアから、前回の同期状態以降のすべてのレコードを抽出します。コネクタ実装では、個々のスレッドで指定のドメイン配列内の各ドメインを抽出し、指定のHubContext構造に含まれるコールバックURLを使用してエンジンへの非同期コールバックを実行する必要があります。ExtractResponseに次のタイプの更新済PIMレコードを含めることはできません。

1. PIMドメイン・ターゲットが同じで、ドメインに含まれていないレコードは無視されます。たとえば、Exchangeの電子メール・アイテム(IPM.Noteドメイン)が「Task」フォルダ(IPM.Task)に存在することは可能です。この場合、Exchange 2007コネクタは、Taskを抽出するときにIPM.Noteアイテムを無視する必要があります。

2. PIMフィルタ条件によってフィルタで除去されたすべてのレコード。

2. リクエストで指定したハブ・ドメインごとに、ExtractResponseをハブに提供します。前回の同期状態以降に変更されたPIMレコードごとに、変更済PIMレコードのハブ表現が含まれたUpsertRecordが1つ存在する必要があります。また、前回の同期状態以降にPIMサーバーから削除されたレコードごとに、PIMレコードIDが1つ存在する必要があります。

3. 各コネクタには、「Extract Response Batch Size」というBDSSプロファイル・パラメータ構成があります。このパラメータの値には、各ExtractResponseが保持できるレコードの最大数が格納されます。コネクタは、一連のExtractResponse(各ExtractResponseにはこの最大数のレコードが含まれる)を提供するように記述する必要があります。エンジンは、これらのバッチの受信を使用して、コネクタの異常終了などのコネクタ障害の判断に使用する内部タイムアウトをリセットします。たとえば、コネクタで5,000件のカレンダ・レコードを抽出する必要があり、コネクタの構成済バッチ・サイズが100の場合、コネクタはエンジンへのコールバックを少なくとも50回実行します。

注意:

Oracle Fusion Middleware 11gリリース2では、BDSSは1つのハブ・ドメインに対して複数のExtractResponseの受信をサポートしていません。したがって、「Extract Response Batch Size」のコネクタ構成は、任意のユーザーの任意のドメインを単一のExtractResponseに抽出できる十分なサイズである必要があります。

4. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

5. 抽出されたレコードごとにPIMレコード説明を作成します。

6. レコードの抽出に失敗すると、コネクタは抽出を終了し、ExtractDomainResultsCallback APIを介してハブに通知します。コネクタでは、エラーを示す結果コードを設定してエラー発生を示し、ハブで障害に関する情報を記録できるようにエラー説明文を提供する必要があります。

7. PIMフィルタ条件定義に示すように、コネクタでは、抽出された各レコードに対する構成済フィルタを評価し、レコードの同期化が必要かどうかを判断する必要があります。

注意:

Oracle Fusion Middleware 11gリリース2のBDSSでは、コネクタのソフトウェア・コードに、PIMフィルタ条件との比較に使用するPIM日付フィールドを含める必要があります。比較で使用するPIM日付フィールドの値が含まれていないPIMレコードは、ExtractResponseに含める必要があります。

コネクタでフィルタを適用する方法の詳細は、第D.2.2.3.3項「不正なレコードのダウンロードの防止」を参照してください。

8. コネクタは、抽出されたすべてのインバウンド・レコードを、ネイティブPIM API書式から、PIMドメインに対して定義したPIM XMLスキーマ(XSDファイル)に準拠したXMLメッセージに変換する必要があります。PIM XMLメッセージが作成された後、コネクタはXSL変換を使用して、そのPIM XMLメッセージを、提供されたハブXMLスキーマ(XSD)に準拠したハブXMLメッセージに変換する必要があります。コネクタでは、どのPIMフィールドがどのハブPIMにマップされているか、またはデータがどのように変換されるか不明であるため、PIM API書式からハブXML書式への直接変換はできません。第8.1項「データ変換の概要」を参照してください。

9. エコーの抑制を実行し、ExtractDomainResultsCallback APIを介してレコード・セットをハブに提供する前に、PIMサーバーから抽出したレコードのコレクションからすべてのエコーを削除します。すべてのエコーが削除された場合、コネクタは、エコーのないレコード・セットをエンジンに提供するときに、ExtractResponseMetadataのechoesSuppressedフラグ・メンバーをTRUEに設定する必要があります。

10. コネクタによっては、BDSSコール間で状態を保持することが必要になる場合があります。コネクタは、状態を保持するかどうかに関係なく、同期状態の保存に関連したBDSSとの規定事項を満たす必要があります。このため、ステートフルおよびステートレスのコネクタの同期状態を簡単に保存するために、次のAPIが提供されています。

1. ステートレスのコネクタは、PIMサーバーから変更済レコードの最終バッチを収集すると同時に、そのバッチをBDSSに提供する前に、CacheTempSyncStateを介して同期状態をキャッシュする必要があります。ハブでは、ドメインの同期化が完了すると、EndDomainSynchronizationをコールし、同期状態を保存する必要があるかどうかを指示します。その場合、コネクタはCommitCachedSyncStateをコールして、キャッシュされた同期状態をコミットする必要があります。

2. コネクタがBDSSコール間で状態情報を保持している場合は、BDSSがEndDomainSynchronizationをコールして同期状態を保存する必要があることを指示すると、そのコネクタはSaveSyncState APIのみを使用して同期状態を直接保存します。

11. 削除の検出。
ハブでは、コネクタでの削除操作について次の2つのユースケースがサポートされています。

1. ユースケース1: コネクタはネイティブで削除操作を検出できません。この場合、コネクタは、指定のユーザーおよびドメインのすべてのPIMレコードIDを含めた配列を作成することによって、PIMサーバーから削除されたレコードを判別できます。(この配列には、変更済および未変更のレコードのレコードIDを含める必要があります。)コネクタは、このレコードIDの配列をコネクタ・ランタイム・インタフェース・メソッドGetDeletesByIdsに提供し、削除されたレコードを識別するレコードIDの配列を取得できます。次に、コネクタは、これらのレコードIDをExtractResponseのExtractResponseDataメンバーのdeleteRecordIdArrayに追加できます。コネクタですべてのレコードIDを問い合せることができない場合、そのコネクタは削除操作を同期化できません。

2. ユースケース2: 次の同期化セッションの前にBDSSで作成されたレコードをエンド・ユーザーが削除すると、コネクタではネイティブでそのレコードの削除を検出できません。
PIMから正常にエクスポートされたレコードは同期状態によって追跡されるため、PIMストアからエクスポートされる直前に作成されたレコードがストアから削除されると、コネクタによってはその削除を検出できない場合があります(つまり、そのレコードはストアにインポートされたがエクスポートされなかったため、同期状態ではその削除を検出できません)。

このユースケースは、エンド・ユーザーがPIMでレコードを作成して削除した場合、つまり、両方の操作が同期化セッションの有効範囲外で発生した場合も同様です。たとえば、BDSSの同期化が5分ごとに発生する場合、その5分が経過する前に、ユーザーがOutlookを使用してExchangeにレコードを作成して削除したとします。そのユーザーが同期化されると、同期状態では、作成されて削除されたレコードとして取得されません。つまり、同期状態は必ずしもPIMストアで実行された操作の履歴レコードではありません。BDSSのコンテキストとの違いは、レコード作成を実行するのがBDSSであることのみです。

コネクタでこの機能を利用するには、エコーを識別できる必要があります。この場合、コネクタでは、エコーの抑制を実行するため、そのエコーを識別するPIMレコードIDが含まれる配列を作成し、GetDeletesByPendingCreateEchoesをコールして削除済レコードのレコードIDを取得します。次に、コネクタは、これらのレコードIDをExtractResponseのExtractResponseDataメンバーのdeleteRecordIdArrayに追加できます。

12. このAPIは非同期です。コネクタ実装では、リクエストの前処理を可能なかぎり少なくして、制御をハブに返す必要があります。つまり、このAPIでは、抽出リクエスト(またはリクエストに関するメタデータ)をコネクタ所有のスレッドにポストした後に、制御をハブに返す必要があります。この方法によって、時間がかかるPIMデータ抽出操作はコネクタ所有のスレッドで実行されます。コネクタでは、Webサービス・コールを正常に受信すると、例外のスローが可能になります。ただし、例外は、前処理に失敗した場合のみスローする必要があります。APIが戻った後、抽出を実行するスレッドは、ExtractDomainResultsCallback APIを介して、成功か失敗かを示す各ハブ・ドメインのExtractResponseをハブに提供する必要があります。

13. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。RTL URLとコネクタ名は両方とも、HubContext構造で提供されます。

戻り値

void

例外

コネクタで抽出リクエストをコネクタ所有のスレッドにポストできない場合、そのコネクタは例外をスローして問題を特定するメッセージを提供する必要があります。この処理によって、BDSSではそのメッセージを記録できます。

D.2.2.3 ExtractDomainsに関するベスト・プラクティス

この項では、ExtractDomainsに関するベスト・プラクティスについて説明します。トピックは次のとおりです。

- 効率的な抽出

- PIMフィールド定義のキャッシュ

- 不正なレコードのダウンロードの防止

D.2.2.3.1 効率的な抽出

変更が存在しない場合にPIM抽出操作を実行すると多くのリソースと時間が使用されるため、コネクタでは、指定のドメインに抽出が必要な変更が存在するかどうかを事前に判別する必要があります。たとえば、エンジンがコネクタをコールしてドメインを抽出する場合、コネクタでは、変更がないことを確認するためにのみ、ユーザーをコネクタ・アプリケーションに関連付けて多数のMAPIリソースを割り当てます。より効率的に処理するには、コネクタで、前回の同期状態以降の変更を問い合せるWebDAVリクエストをExchangeサーバーに発行する機能のみを備えたアプリケーションをユーザーに関連付けます。

D.2.2.3.2 PIMフィールド定義のキャッシュ

コネクタでは、PIMフィールド定義およびその他のドメイン関連の構成情報をコネクタ・ランタイム・インタフェース・メソッドGetPimDomainMetadataを介して取得し、それらを抽出サイクルで使用できるようにキャッシュする必要があります。

D.2.2.3.3 不正なレコードのダウンロードの防止

カレンダ・ドメインおよびタスク・ドメインを抽出するときは、pimFilterConditionを適用して、フィルタの基準を満たさないレコードがサーバーからダウンロードされるのを防ぎます。たとえば、コネクタでは、最初に変更済レコードをすべてサーバーからダウンロードし、次にすべてのレコードをフィルタと照合して評価し、抽出結果セットに含めるかどうかを判断する強制的な方法を実行することも可能です。さらに効率的な方法は、フィルタを適用して、そのようなレコードがPIMサーバーからダウンロードされるのを防ぐことです。たとえば、MAPI制限構成をExchange 2007コネクタで使用して、古いレコードがダウンロードされるのを防ぎます。

D.2.3 EndDomainSynchronization API

ハブでは、このEndDomainSynchronizationインタフェースをコールして、指定ユーザーのドメインの同期化を終了します。このインタフェースをコールすると、ユーザーのハブ・ドメインの同期化セッションを正常に(または強制的に)終了できます。

表D-4 EndDomainSynchronization APIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

[in]

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

[in]

コネクタが指定の同期化セッションで使用する、コネクタ・ランタイム・インタフェースへのURLが格納されます。

hubDomain

String

[in]

ハブ・ドメインを識別します。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

[in]

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

[in]

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

saveSyncState

Boolean

[in]

コネクタで同期状態を保存する必要があるかどうかを示すブール値。

extractResponseCount

Integer

[out]

特定の同期化セッションで、指定のドメインおよびユーザーについてコネクタがハブに正常に送信したバッチの数が格納されます。Oracle Fusion Middleware 11gリリース2のBDSSでは、このパラメータは0または1のいずれかです。

D.2.3.1 エンジン規定

エンジンは、EndDomainSynchronization APIをコールするときに次の処理を実行します。

1. 指定のドメインの処理の最後にこのメソッドをコールします。

2. コネクタで同期状態を保存する必要があるかどうかを示します。次の場合は、フラグをFalseに設定します。

- 現在の同期化セッション中にドメインが抽出されなかった場合。

- ドメインが抽出され、コネクタでレコードを含まないExtractResponseが提供され、echoesSuppressedフラグがfalseの場合。この場合、抽出されたレコードはありません(エコーまたはエコー以外)。

注意:

コネクタは、ExtractResponseのechoesSuppressedフラグを設定して、ExtractResponseでエコーが削除されたかどうかを示します。Oracle Fusion Middleware 11gリリース2のBDSSでは、1つのハブ・ドメインに対する複数のExtractResponseの受信はハブでサポートされていません。

3. extractResponseCountを使用して、エラー発生時にハブで受信したExtractResponseをクリーン・アップします。

4. 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

5. コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameを使用する必要があります。

D.2.3.2 コネクタ規定

エンジンでEndDomainSynchronization APIがコールされると、コネクタでは次のようにレスポンスします。

1. ユーザーに関連するドメイン・レベルのリソースをクリーン・アップします(該当する場合)。

2. saveSyncStateがtrueの場合、ExtractDomains APIの「コネクタ規定」の項で説明したように、コネクタは、コネクタ・ランタイム・インタフェースAPIを介してドメインの同期状態をハブ・データ・ストアに保存します。

3. ハブでこのAPIをコールして同期化セッションを強制的に終了する場合でも、ハブに送信するExtractResponseがないことを確認します。

4. extractResponseCountに、指定の同期化セッションでハブに正常に送信されたExtractResponseの正しい数が常に移入されていることを確認します。

5. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

6. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

注意:

コネクタが認識していないユーザー・セッションでハブがコネクタをコールした場合、そのコネクタはこのコールで空操作(操作なし)を実行する必要があります。これは、他のコネクタの障害によってハブが同期化セッションを終了する場合などに発生する場合があります。これによって、ハブで同期化セッションを急に終了する必要が生じた場合のハブ・ロジックが簡略化されます。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

D.2.4 EndUserSyncSession API

エンジンは、指定したユーザーの全ドメインの同期化の終了時にEndUserSyncSessionインタフェースをコールして、指定したsyncSessionIdで識別される同期化セッションを終了します。コネクタ実装では、この時点を利用して、指定のユーザーに関連付けられたユーザー固有のリソースを解放できます。表D-5に、EndUserSyncSessionインタフェースのパラメータを示します。

表D-5 EndUserSyncSession APIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

[in]

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

[in]

コネクタが指定の同期化セッションで使用する、コネクタ・ランタイム・インタフェースへのURLが格納されます。

hubUserId

String

[in]

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

[in]

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

D.2.4.1 エンジン規定

エンジンは、EndUserSyncSession APIをコールするときに次の処理を実行します。

1. 同じユーザーに対しては、別の同期化セッションが開始されるまでコネクタをコールしません。

2. このAPIをコールして、指定のsyncSessionIdで識別される同期化セッションを終了します。

3. 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

4. コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameパラメータを使用する必要があります。

D.2.4.2 コネクタ規定

エンジンでEndUserSyncSession APIがコールされると、コネクタでは次のようにレスポンスします。

1. ユーザーに関連するすべてのリソースをクリーン・アップします。

2. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

3. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

注意:

コネクタが認識していないユーザー・セッションでハブがコネクタをコールした場合、そのコネクタはこのコールで空操作(操作なし)を実行する必要があります。これは、他のコネクタの障害によってハブが同期化セッションを終了する場合などに発生する場合があります。これによって、ハブで同期化セッションを終了する必要が生じた場合のハブ・ロジックが簡略化されます。

D.2.5 CreateRecord API

ハブでは、PIMでレコードを作成する必要がある場合、常にCreateRecordインタフェースをコールします。表D-6に、CreateRecordインタフェースのパラメータを示します。

注意:

ドメインが抽出されていない場合でも、ハブではこのAPIをコールできます。

表D-6 CreateRecord APIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

[in]

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

[in]

コネクタがランタイム・ライブラリをコールするときに指定の同期化セッションで使用する、コネクタ・ランタイム・インタフェースへのURLが格納されます。

hubDomain

String

[in]

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

[in]

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

[in]

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubRecord

アップサート・レコード

[in/out]

入力時に、ハブ・レコードがハブXML書式で格納されます。RecordMetadataメンバーは、NULLである必要があります。出力時に、RecordMetadataが割り当てられ、コネクタによって次の内容が移入されます。

- PIMレコードID: 必須パラメータで、NULL以外で空でない必要があります。

- PIMレコード関連データ: オプション・パラメータで、NULLにできます。NULL以外の場合、関連データ・メンバーの少なくとも1つはNULL以外で空でない必要があります。

- PIMレコード・バージョンID: 必須パラメータで、NULL以外で空でない必要があります。

- (オプション)コネクタがレコードの作成に失敗した場合は、recordErrorをtrueに設定し、recordErrorDescriptionを指定します。

- PIMレコード説明: このパラメータ(オプション、構成から導出されるパラメータ)は、ハブ・ドメインに対して使用可能なKeyField構成がない場合にNULLにできます。ハブ・ドメインに対してKeyField構成が存在する場合、配列はNULL以外である必要があります。説明配列の各KeyValuePairには、NULL以外の空でないキーと値が必要です。

D.2.5.1 エンジン規定

エンジンは、CreateRecord APIをコールするときに次の処理を実行します。

1. エンジンでは、このコネクタAPIコールから戻された後に、UpsertRecordの提供されたRecordMetadataメンバーに含まれる次のデータでデータ・ストアを更新する必要があります。

- PIMレコードID

- PIMレコード・バージョンID

- PIMレコード関連データ(提供された場合)

- PIMレコード説明(提供された場合)

2. レコードが正常に作成された場合、エンジンでは、メタデータが格納されるようにハブ・データ・ストアを更新するのに加えて、ストア内の指定の行のechoPendingフラグをTRUEに設定する必要があります。

3. 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

4. コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameを使用する必要があります。

D.2.5.2 コネクタ規定

エンジンでCreateRecord APIがコールされると、コネクタでは次のようにレスポンスします。

1. PIMストアにレコードを作成し、表D-6に示すメタデータを提供します。

2. ハブ書式のXMLメッセージを、PIMサーバーでのレコードの作成に適した書式に変換します。

3. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

4. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

D.2.6 UpdateRecord API

エンジンは、PIMサーバーでレコードを更新する必要がある場合、常にUpdateRecordインタフェースをコールします。表D-7に、UpdateRecordメソッドのパラメータを示します。

注意:

ドメインが抽出されていない場合でも、ハブではこのAPIをコールできます。

表D-7 UpdateRecord APIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

[in]

コネクタがランタイム・ライブラリをコールするときに指定の同期化セッションで使用する、コネクタ・ランタイム・インタフェースへのURLが格納されます。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubRecord

UpsertRecord

In

ハブ・レコード、および更新されるレコードに関してハブ・データ・ストアから取得されるメタデータが格納されます。

RecordMetadataメンバーはNULL以外で、ハブでコネクタ固有のメタデータが移入される必要があります。

updatedMetadata

RecordMetaData

Out

出力時に、次の内容を含む更新済レコード・メタデータがPIMレコードから取得されて格納されます。

- PIMレコードID: これは必須パラメータです。このパラメータは、NULL以外で空でない必要があります。

- PIMレコード関連データ: このパラメータはオプションで、NULLにできます。NULL以外の場合、関連データ・メンバーの少なくとも1つはNULL以外で空でない必要があります。

- PIMレコード説明: このパラメータ(オプションで構成から導出されるパラメータ)は、ハブ・ドメインに対して使用可能なKeyField構成がない場合にNULLにできます。ハブ・ドメインに対してKeyField構成が存在する場合、配列はNULL以外である必要があります。説明配列の各KeyValuePairには、NULL以外の空でないキーと値が必要です。

- (オプション)コネクタがレコードの作成に失敗した場合は、recordErrorをtrueに設定し、recordErrorDescriptionを指定します。

- PIMレコード・バージョンID(必須)。このパラメータは、NULL以外で空でない必要があります。

D.2.6.1 エンジン規定

エンジンは、UpdateRecord APIをコールするときに次の処理を実行します。

1. エンジンは、抽出レスポンスの評価時に検出された競合を解決するときに次の処理を実行します。

1. 更新/更新競合の場合、ハブでは、非優先コネクタでこのAPIをコールしたときに抽出されたレコードで提供されるAssociatedDataではなく、BDSSストアからのAssociatedDataを非優先コネクタに提供する必要があります。

2. 作成/作成競合の場合、ハブでは、非優先コネクタでこのAPIをコールしたときにその非優先コネクタから抽出されたレコードで提供されるAssociatedDataを使用する必要があります。

2. レコードが正常に更新された場合、エンジンでは、メタデータが格納されるようにデータ・ストアを更新するのに加えて、ストア内の指定の行のechoPendingフラグをFALSEに設定する必要があります。

3. 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

4. コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたコネクタ名を使用する必要があります。

D.2.6.2 コネクタ規定

エンジンでUpdateRecord APIがコールされると、コネクタでは次のようにレスポンスします。

1. PIMサーバーで指定のPIMレコードIDによって識別されるレコードを更新し、RecordMetaData構造を移入します。

2. BDSSによる抽出の後、コネクタによる更新の処理の前にPIMサーバーでレコードが削除された場合、コネクタでは、レコードが削除されたために更新が無視されたことを示すログ・メッセージを提供する必要があります。(後続の抽出サイクルでは、削除操作を検出してエンジンに伝播する必要があります。)

3. アウトバウンド更新のプッシュ直前にPIMレコードが変更された場合に発生する競合をPIM APIで検出した場合、コネクタではその競合を「BDSS優先」方式で解決します(つまり、BDSSがコネクタに提供したレコードによって、エンド・ユーザーの変更が上書きされます)。

4. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

5. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

D.2.7 DeleteRecord API

エンジンは、PIMサーバーからレコードを削除する必要がある場合、常にDeleteRecord APIをコールします。表D-8に、DeleteRecordメソッドのパラメータを示します。

注意:

ドメインが抽出されていない場合でも、ハブではこのAPIをコールできます。

表D-8 DeleteRecord APIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

コネクタがコネクタ・ランタイム・ライブラリをコールするときに指定の同期化セッションで使用する、コネクタ・ランタイム・インタフェースへのURLが格納されます。

hubDomain

String

[in]

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimRecordId

String

In

削除するレコードのPIMレコードIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimRecordDescription

PIMレコード説明

In

PIMレコード説明が格納されます。

D.2.7.1 エンジン規定

エンジンは、DeleteRecord APIをコールするときに次の処理を実行します。

1. 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

2. コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameパラメータを使用する必要があります。

D.2.7.2 コネクタ規定

エンジンでDeleteRecord APIがコールされると、コネクタでは次のようにレスポンスします。

1. 指定のPIMレコードIDで識別されるレコードをPIMで削除します。

2. コネクタでは、PIMレコード関連データが必要な場合、コネクタ・ランタイム・インタフェース・メソッドGetRecordAssociatedDataを介してこのデータを取得できます。ほとんどのPIMサーバーでは、PIMレコードIDのみ必要です。

3. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

4. 削除がPIMに送信される前にPIMレコードが削除された場合は、エラー以外のコードを返します。コネクタでは、レコードがすでに削除されていたために削除に失敗したことを示すメッセージを記録できます。

5. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

D.2.8 GetPimServerEndPoint API

ハブでは、GetPimServerEndPointインタフェースをコールして指定の同期化対応ユーザーのPIMサーバー・エンドポイントを取得し、返されたendPointTokenを使用して、同期化セッション中にユーザーを同期化するときにコネクタのクラスタ内のどのコネクタ・インスタンスをコールするかを決定します。表D-9に、GetPimServerEndPointインタフェースのパラメータを示します。

表D-9 GetPimServerEndPointインタフェースAPIのパラメータ

パラメータ

データ型

タイプ

説明

connectorName

String

[in]

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

rtlUrl

String

[in]

コネクタがコネクタ・ランタイム・ライブラリをコールするときに指定の同期化セッションで使用する、コネクタ・ランタイム・インタフェースへのURLが格納されます。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

endPointToken

String

Out

出力時に、コネクタ定義のエンドポイント・トークンが格納されます。このパラメータは、NULLにできます。また、空にもできます。

canSyncUser

Boolean

Out

出力時に、受信コネクタが指定のユーザーを同期化できるかどうかを示します。

D.2.8.1 エンジン規定

ハブでは、ユーザーのPIMサーバー・エンドポイントを取得する必要がある場合のみ、GetPimServerEndPoint APIをコールします。ハブでは、このAPIをコールするときに次の処理を実行します。

1. 構成メタデータ、および返されたendPointTokenとcanSyncUserを使用して、指定のユーザーを抽出するためにコールするコネクタを決定します。ハブでは、最初にendPointTokenをチェックします。endPointToken値がNULL以外の空でない文字列の場合、ハブではそのendPointToken値を使用して、ユーザーの同期化に使用するコネクタURLを取得します。NULLまたは空の場合、ハブではブール値をチェックして、そのブール値を返した受信コネクタがユーザーの同期化に使用できるかどうかを判断します。

2. 指定のユーザーおよび同期化セッションでコネクタが使用するコネクタ・ランタイム・ライブラリURLを提供します。コネクタでは、このメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合、提供されたURLを使用する必要があります。

3. コネクタ名を提供します。コネクタでこのメソッドの実装の一環としてコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたconnectorNameを使用する必要があります。

D.2.8.2 コネクタ規定

GetPimServerEndPoint APIコールを受信するコネクタでは、次の処理を実行します。

1. 指定のユーザーに対してPIMサーバー・エンドポイントを解決します。コネクタで指定のユーザーを解決できない場合は、エラーを返す必要があります。

注意:

受信コネクタ・インスタンスは、ユーザーの同期化を実行するインスタンスと異なる(クラスタは同じでも)場合があります。

PIMサーバー・エンドポイント値(endPointToken)は、コネクタ実装詳細です。管理者がURLをエンドポイントに正しくマップできるように、開発者はPIMサーバー・エンドポイント値を文書化する必要があります。たとえば、Exchangeの場合、コネクタでは指定のユーザー・メールボックスをホストするExchangeサーバーのNetBios名を返します。このため、管理者はExchangeサーバーのこれらのNetBios名をクラスタURLにマップする必要があります。

2. 提供された同期化セッションID、ハブ・ドメインおよびハブ・ユーザーIDをロギング文で使用します。

3. コネクタでコネクタ・ランタイム・ライブラリをコールする必要がある場合は、提供されたRTL(ランタイム・ライブラリ)URLとコネクタ名を使用します。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

D.3 エンジン・コールバック・インタフェースAPI

エンジン・コールバック・インタフェースは単一のメソッドExtractDomainResultsCallbackで構成されたWebサービスベースのインタフェースで、ハブにExtractResponseを提供するときにコネクタでコールされます。

D.3.1 ExtractDomainResultsCallback API

ExtractDomainResultsCallback APIは非同期で、エンジンが指定のExtractResponseで提供される情報をキューに入れた直後にコール側コネクタに戻ります。表D-10に、ExtractDomainResultsCallbackメソッドのパラメータを示します。

表D-10 ExtractDomainResultsCallback APIのパラメータ

パラメータ

データ型

タイプ

説明

extractResponseData

ExtractResponse

In

コネクタによって提供される一連のレコードが格納されます。

D.3.2 エンジン規定

エンジンは、ExtractDomainResultsCallback APIをコールすると、ExtractResponseをキューに入れてすぐに戻ります。

D.3.3 コネクタ規定

コネクタでは、エンジンのExtractDomainResultsCallback APIコールのレスポンスとして、次の処理を実行します。

- コネクタでは、PIMからレコードを抽出して指定のExtractResponseを作成するとき、このAPIをコールする前にすべてのエコーをレスポンスから削除する必要があり、エコーが削除されている場合はechoesSuppressedフラグをtrueに設定する必要があります。

- コネクタでは、ExtractResponseの順序番号を指定する必要があります。1番目の抽出レスポンスは1に、2番目は2のように番号を付けます。Oracle Fusion Middleware 11gリリース2のBDSSでは、順序番号は常に1です。

戻り値

void

D.4 コネクタ・ランタイム・インタフェースAPI

コネクタ・ランタイム・インタフェースは、コネクタがハブ・データ・ストア内の特定のメタデータ(AssociatedDataなど)にアクセスできる、WebサービスベースのAPIです。このインタフェースは、同期状態の保存など、すべてのコネクタに共通のサービスを提供します。

コネクタ作成者はこのインタフェースを実装しません。コネクタ実装はこのインタフェースのコンシューマです。

通常、すべてのAPIは整数を返して成功(0)または失敗(0以外)を示します。すべてのAPIでは、リカバリ不能なエラー(BDSSストアに対する読取りや書込みが不可、不正なパラメータなど)が発生すると、RemoteExceptionをスローできます。開発者は、例外およびAPIコール全体の成功を判断するための戻り値を考慮してコネクタを記述する必要があります。

D.4.1 GetPimRecordVersions API

コネクタでは、GetPimRecordVersionsメソッドを使用して、BDSSデータ・ストアに格納されている1つ以上のPIMレコードのPIMレコード・バージョンIDを取得できます。この情報を取得すると、コネクタでは、BDSSが正常に同期化したPIMレコード(1つまたは複数)の最新バージョンを判別できます。

表D-11 GetPimRecordVersions APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

pimRecordIdArray

String []

In

コネクタでバージョンIDを取得するPIMレコードIDの配列が格納されます。

pimRecordVersionIdArray

String []

Out

出力時に、pimRecordIdArrayで指定した各レコードのPIMレコード・バージョンIDが格納されます。pimRecordIdArrayとpimRecordVersionIdArrayの間には位置関係があり、pimRecordVersionIdArrayのi番目の要素には、pimRecordIdArrayのi番目の要素に対応するバージョンIDが格納されます。次のいずれかの条件に該当する場合、pimRecordVersionIdArrayのi番目の要素はNULL以外の空の文字列です。

- pimRecordIdArrayのi番目の要素がBDSSストアに見つからない場合。

- pimRecordIdArrayのi番目の要素はBDSSストアに存在するが、バージョンがNULLの場合(前の同期化セッションで障害が検出された場合に発生することがあります)。

同期化セッションが障害なしで完了すると、空でないバージョンIDがpimRecordVersionIdArrayのi番目の要素に提供されます。

GetPimRecordVersionsメソッドが、対応するバージョンIDとしてPIMレコードのバージョンIDと同じバージョンIDを返す場合、コネクタではPIMレコードのエコーを抑制する必要があります。したがって、GetPimRecordVersionsメソッドが対応するバージョンIDとして空の文字列を返す場合、コネクタではPIMレコードのエコーを抑制しないでください。

pimRecordIdArrayのi番目の要素に対応するpimRecordVersionIdArrayのi番目の要素がNULLとして返されることはありません。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERRORの場合は0以外

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.2 CacheTempSyncState API

CacheTempSyncStateメソッドは、指定の同期状態をBDSSストアの一時的なデータ格納場所に保存します。状態を保持しないコネクタでは、指定のドメインのPIMデータを抽出した後、最新の一連のレコードをBDSSに提供する前に、このメソッドをコールします。

表D-12 CacheTempSyncState APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSession

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainTarget

String

In

PIMドメイン・ターゲットが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainSyncState

String

In

指定のユーザー、ドメイン、ドメイン・ターゲットおよびサーバー・タイプについてキャッシュされる同期状態が格納されます。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERRORの場合は0以外

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.3 CommitCachedSyncStateメソッドAPI

CommitCachedSyncStateメソッドは、BDSSストア内の一時的な格納場所にすでに保存されている同期状態を、BDSSストア内の永続的な格納場所に保存します。これは、BDSSコール間で状態情報を保持できないコネクタで使用することを目的にしています。

コネクタでは、このメソッドをコールする前に、同じ同期化セッション内でCacheTempSyncStateを正常にコールしている必要があります。通常、ステートレス・コネクタでは、特定のドメインのデータ抽出が完了する直前にCacheTempSyncStateをコールします。次に、ハブでEndDomainSynchronizationをコールするときにこのメソッドをコールして、同期状態を保存する必要があることを示します。表D-13に、CommitCachedSyncStateメソッドのパラメータを示します。

表D-13 CommitCachedSyncState APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainTarget

String

In

PIMドメイン・ターゲットが格納されます。このパラメータは、NULL以外で空でない必要があります。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERRORの場合は0以外

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.4 GetConfigurationMetaData API

コネクタでは、GetConfigurationMetaData APIをコールして、プロファイル構成メタデータを取得します。1つのプロファイルには1つ以上のセクションがあります。各セクションには1つ以上のパラメータがあり、各パラメータには1つの値が含まれます。プロファイルは、概念的にはWindowsの.ini構成ファイルと同じです。BDSSコネクタでは、独自のプロファイルを定義して、コネクタに固有のメタデータを格納できます。表D-14に、GetConfigurationMetaDataメソッドのパラメータを示します。

表D-14 GetConfigurationMetaData APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

configMetadataArray

ConfigurationProfile []

In/Out

入力時に、取得されるプロファイル・メタデータが移入されるConfigurationProfile構造が格納されます。出力時に、リクエストされたプロファイル・メタデータが含まれるように配列が更新されます。

GetConfigurationMetaData APIを使用すると、コネクタでは、1回のコールで複数のプロファイル間の任意の構成メタデータを取得できます。コネクタでconfigMetadataArrayパラメータを作成および移入し、そのコネクタで取得する内容を指定すると、APIではリクエストされた構成(構成が存在する場合)をconfigMetadataArrayに移入します。

基本的に、コネクタでは、ConfigurationProfile構造の配列を作成し、取得する構成のスコープを指定する方法で移入し、GetConfigurationMetaData APIによって構造の移入を完了します。スコープの指定は、プロファイル、セッションまたはパラメータ・ベースで実行できます。たとえば、コネクタでプロファイルのセクション全体が必要な場合は、ConfigurationProfile構造を作成し、目的のプロファイル名とセクション名のみを指定して、そのConfigurationProfileをconfigMetadataArrayに追加します。同様に、コネクタでプロファイルのセクションの1つのパラメータが必要な場合は、プロファイル名、セクション名およびパラメータ名を指定したConfigurationProfileを作成してconfigMetadataArrayに追加します。

表D-15に、コネクタでconfigMetadataArrayを作成して構成メタデータを取得する方法、およびGetConfigurationMetaData APIによってconfigMetadataArrayを更新する方法について、共通のユースケースを示します。

表D-15 ConfigMetadataArrayのユースケース

ユースケース

コネクタによるconfigMetadataArray [in]の作成

APIによるconfigMetadataArray[out]の更新

特定のプロファイルにある特定のセクションの特定のパラメータ値を取得します。

スコープはProfile.Section.Parameterです。

配列のサイズは1で、次のように移入される単一のConfigurationProfile構造が格納されます。

ConfigurationProfile:

- プロファイル名メンバーが移入されます。

- configSectionArrayメンバーには、単一のConfigurationSection構造が移入されます。

ConfigurationSection:

- セクション名メンバーが移入されます。

- paramNameValueArrayメンバーには、単一のKeyValuePair構造が移入されます。

KeyValuePair:

- キー・メンバーが移入されて、取得するパラメータの名前が格納されます。

paramNameValueArrayのvalueメンバーを更新して、パラメータ値が格納されます。つまり、configMetadataArray[0].configSectionArray[0].paramNameValueArray[0].valueになります。

プロファイル内のセクションのパラメータの名前と値を取得します。スコープはProfile.Sectionです。

配列のサイズは1で、次のように移入される単一のConfigurationProfile構造が格納されます。

ConfigurationProfile:

- プロファイル名メンバーが移入されます。

- configSectionArrayメンバーには、単一のConfigurationSection構造が移入されます。

ConfigurationSection:

配列のサイズは1で、次のように移入される単一のConfigurationProfile構造が格納されます。

- セクション名メンバーが移入されます。

- paramNameValueArrayは空の配列です。

ConfigurationSectionのparamNameValueArrayメンバーを更新します。(つまり、configMetadataArray[0].configSectionArray[0].paramNameValueArrayが割り当てられ、セクション内のすべてのパラメータと値が移入されます。)

プロファイル内のすべてのセクションのパラメータの名前と値を取得します。スコープはProfileです。

配列のサイズは1で、次のように移入される単一のConfigurationProfile構造が格納されます。

ConfigurationProfile:

- プロファイル名メンバーが移入されます。

- configSectionArrayメンバーは空の配列です。

ConfigurationSection:

NULL

configSectionArrayが割り当てられ、プロファイル内の各セクションのConfigurationSectionが移入されます。

各ConfigurationSectionにはセクション名が移入され、paramNameValueArrayは移入されてセクション内の各構成オプションのパラメータと値が格納されます。

複数のプロファイル内のすべてのセクションのパラメータの名前と値を取得します。

スコープはMultiple Profilesです。

配列はProfileスコープの場合と同様に作成されますが、サイズは1より大きくなります(つまり、リクエストされるプロファイルごとに配列に1つのConfigurationProfile要素があります)。

Profileスコープの場合と同様に処理されますが、配列内の各ConfigurationProfileメンバーが更新されます。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERRORの場合は0以外

GetConfigurationMetaData APIがエラーを返すのは、ストアが使用不可、メモリー不足など処理が中断される状況が発生したためにBDSSストアからメタデータを取得できなかった場合のみです。特定の構成値、セクションまたはプロファイルを取得できなかった場合は、エラーを返しません。コネクタでは、特定の構成メタデータ値の取得に失敗した場合、実際に障害が発生しているかどうかを判断します。たとえば、コネクタで、コネクタ・プロファイルの1つのセクションから抽出レスポンス・バッチ・サイズを取得するとします。不要なイベントは発生せず、カスタマがこの値の構成に失敗すると、このAPIはSUCCESS/OKエラー・コードを返し、対応する値はそのままにします。(つまり、抽出レスポンス・バッチ・サイズに設定したコネクタ構成値に応じて、値はNULLまたは空にできます。)この時点で、コネクタは構成エラーの重大度を判断して適切に処理します。たとえば、コネクタ機能を停止するようなリカバリ不能なエラーとみなさない場合は、エラーまたは警告を記録してデフォルト値を使用できます。また、エラーまたは警告を記録して、リカバリ不能なエラーとみなすこともできます。

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.5 GetDeletesByPendingCreateEchoes API

現在の同期化セッションでハブでレコードが作成された後、次の同期化セッションの前に削除操作が発生した場合、コネクタでは、ハブで作成されたレコードの削除をネイティブで検出できない場合にGetDeletesByPendingCreateEchoes APIをコールします。表D-16に、GetDeletesByPendingCreateEchoes APIのパラメータを示します。

表D-16 GetDeletesByPendingCreateEchoes APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

echoIdArray

String []

In

エコーをそれぞれ識別するPIMレコードIDの配列が格納されます。このパラメータは、NULL以外である必要があります。配列の長さは1以上である必要があります。ハブでは、PIMレコードIDが空の文字列または-1のエントリは無視します。コネクタにエコーが存在しない場合でも、配列を提供する必要があります。PIMレコードIDとして空の文字列を格納する配列のサイズは1にすることをお薦めします。

upsertIdArray

String []

In

前回の同期状態以降にPIMで更新または作成されたレコードをそれぞれ識別するPIMレコードIDが格納されます。NULL以外である必要があります。配列の長さは1以上である必要があります。ハブでは、PIMレコードIDが空の文字列または-1のエントリは無視します。コネクタにアップサート・レコードが存在しない場合でも、PIMレコードIDとして空の文字列が格納された配列(配列のサイズは1を推奨)を提供する必要があります。

deleteRecordIdArray

String []

Out

出力時に、PIMから削除済と識別された各レコードのPIMレコードIDが格納されます。削除操作が検出されなかった場合、返される配列はNULLです。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.6 GetDeletesBylds API

コネクタでは、PIMサーバーからの削除をネイティブで検出できない場合、GetDeletesByldsメソッドをコールします。このメソッドは、前回に同期化された指定のユーザー、ハブ・ドメインおよびコネクタ名について、PIMレコードIDのリストをハブ・ストアに問い合せます。次に、ハブ・ストア・ベースの配列をコネクタ提供の配列と比較して、削除されたレコードを識別するPIMレコードIDの配列を作成します。ハブ・ストア・ベースの配列にあり、コネクタが提供する配列にないPIMレコードIDは、削除されたとみなされます。表D-17に、GetDeletesByIdsメソッドのパラメータを示します。

表D-17 GetDeletesBylds APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。NULL以外で空でない必要があります。

recordIdArray

String[]

In

指定のユーザー、ドメインおよびサーバー・タイプのすべてのPIMレコードのPIMレコードIDが格納された配列。このパラメータは、NULL以外である必要があります。PIMにPIMレコードが存在しない場合、コネクタでは、PIMレコードIDとして空の文字列が格納されたサイズ1の配列を提供する必要があります。

deleteRecordIdArray

String[]

Out

出力時に、PIMから削除されたレコードを識別するPIMレコードIDの配列が格納されます。削除対象がない場合、返される配列はNULLです。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.7 GetRecordAssociatedData API

コネクタでは、GetRecordAssociatedData APIをコールして、レコードに関連付けられたPIMレコード関連データをハブ・データ・ストアから取得します。これは、コネクタでデータをPIMレコードに関連付けている場合に役立ちます。たとえば、コネクタでデータを各PIMレコードに関連付けると、エコー検出が容易になり、このAPIを使用してそのデータを取得できます。表D-18に、GetRecordAssociatedData APIのパラメータを示します。

表D-18 GetRecordAssociatedData APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。NULL以外で空でない必要があります。

pimRecordIdArray

String []

Out

PIMレコード関連データを取得する各レコードのPIMレコードIDが格納された配列。このパラメータは、NULL以外でサイズが0より大きい必要があります。配列の各要素は、NULL以外で空でない必要があります。

pimRecordAssocDataArray

String []

Out

出力時に、この配列には、pimRecordIdArrayで指定した各レコードのPIMレコード関連データが格納されます。

pimRecordIdArrayの要素とpimRecordAssocDataArrayの要素の間には位置関係があります。pimRecordIdArrayのi番目の要素のAssociatedDataは、pimRecordAssocDataArrayのi番目の要素に位置します。pimRecordIdArrayのi番目の要素でPIMレコード関連データがないレコードを識別した場合、この配列のi番目の要素には空のAssociatedData要素が格納されます(つまり、構造は割り当てられますが、構造のメンバーはNULLです)。

errorArray

String []

出力時に、成功またはエラー・コードで構成される配列です。この配列とpimRecordAssocDataArrayの間には位置関係があります。i番目のエラー・コードは、i番目のAssociatedDataの取得の成功または失敗に対応します。(

0 = OK、1 = ERROR、2 = データがDBに存在しない)

戻り値

Integer

- SUCCESS/OKの場合は0。すべてのAssociatedDataがデータ・ストアから読み取られた場合です。

- ERROR/NOTOKの場合は0以外。いずれかのAssociatedData要素の読取りに失敗した場合です。コール元ではerrorArrayを検証して読取りが失敗した要素を判別し、コネクタではエラーの重大度を判断します。errorArrayのエラー・コードには、より明示的なエラー・コードを含めることができます。

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.8 GetSyncState API

コネクタでは、GetSyncState APIをコールして、ドメインに関連付けられたコネクタ定義の同期状態を取得します。このメソッドは、データ・ストアの永続的な格納場所に格納された同期状態のみを返します。永続的および一時的な同期状態の詳細は、「CacheTempSyncState API」、「CommitCachedSyncState Method API」および「SaveSyncState API」を参照してください。表D-19に、GetSyncState APIのパラメータを示します。

表D-19 GetSyncState APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainTarget

String

In

PIMドメイン・ターゲットが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainSyncState

String

In

出力時に、指定のユーザー、ドメイン、ドメイン・ターゲットおよびサーバー・タイプの同期状態が格納されます。指定のユーザー、ドメイン、コネクタ名およびドメイン・ターゲットの同期状態が存在しない場合、戻り値はNULLです。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

例外

リカバリ不能なエラーが発生した場合、または同期状態が存在しない場合は、RemoteExceptionがスローされます。

D.4.9 GetUserAssociatedData API

コネクタでは、GetUserAssociatedData APIをコールして、ユーザー・レベルでコネクタ固有のPIMユーザー関連データを取得します。このAPIを使用すると、複数のスレッドで指定のユーザーの関連データにアクセスできます。表D-20に、GetUserAssociatedData APIのパラメータを示します。

表D-20 GetUserAssociatedData APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

assocDataIdArray

String

In

コネクタ定義のユーザー関連データの識別子の配列が格納されます。

pimUserAssocDataArray

関連データ[]

Out

出力時に、ユーザー固有の関連データが格納されます。この配列とassocDataIdArrayの間には位置関係があります。pimUserAssocDataArrayのi番目の要素には、assocDataIdArrayに示すi番目の要素のPIMユーザー関連データが格納されます。

errArray

Integer []

Out

出力時に、PIMユーザー関連データの取得の成功または失敗を示すエラー・コードの配列が格納されます。errArrayのi番目の要素には、pimUserAssocDataArrayに示すi番目の要素の取得の成功または失敗コード(0 = OK、1 = ERROR、2 = データがDBに存在しない)が保持されます。

戻り値

Integer

- SUCCESS/OKの場合は0(すべてのAssociatedData要素がデータ・ストアから読み取られた場合です。)

- ERROR/NOTOKの場合は0以外。いずれかのAssociatedData要素の読取りに失敗した場合です。コール元ではerrArrayを検証して読取りが失敗した要素を判別し、コネクタではエラーの重大度を判断します。errArrayのエラー・コードには、より明示的なエラー・コードを含めることができます。

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.10 SaveSyncState API

BDSSコール間で状態を保持するコネクタでは、このAPIをコールして、ドメインに関連付けられたコネクタ定義の同期状態をハブ・ストアに保存する必要があります。状態を保持しないコネクタでは、CacheTempSyncStateおよびCommitCachedSyncStateを使用して同期状態を保持する必要があります。表D-21に、SaveSyncState APIのパラメータを示します。

表D-21 SaveSyncState APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainTarget

String

In

PIMドメイン・ターゲットが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimDomainSyncState

String

In

指定のユーザー、ドメイン、ドメイン・ターゲットおよびサーバー・タイプの同期状態が格納されます。このパラメータは、NULL以外で空でない必要があります。

戻り値

Integer

- SUCCESS/OKの場合は0

- ERROR/NOTOKの場合は0以外

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.11 SetRecordAssociatedData

コネクタでは、setRecordAssociatedData APIをコールして、コネクタ定義のPIMレコード関連データを指定のレコードに関連付けます。表D-22に、SetRecordAssociatedData APIのパラメータを示します。

表D-22 SetRecordAssociatedData APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

pimRecordIdArray

String []

In

PIMレコード関連データがBDSSデータ・ストアに書き込まれるレコードのPIMレコードIDの配列。

pimRecordAssocDataArray

関連データ[]

In

BDSSデータ・ストアに書き込まれる各レコードのPIMレコード関連データが格納された配列。pimRecordIdArrayとpimRecordAssocDataArrayの間には位置関係があります。pimRecordIdArrayのi番目のPIMレコードIDの場合、そのPIMレコード関連データはpimRecordAssocDataArrayのi番目のAssociatedDataとして存在する必要があります。

errorArray

Integer []

Out

出力時は、エラー・コードの配列です。この配列とpimRecordAssocDataArrayの間には位置関係があります。i番目のエラー・コードは、i番目のAssociatedDataの設定の成功または失敗(0 = OK、1 = ERROR)に対応します。

戻り値

Integer

- SUCCESS/OKの場合は0すべてのAssociatedData要素がBDSSデータ・ストアに書き込まれた場合です。

- ERROR/NOTOKの場合は0以外。いずれかのAssociatedData要素の書込みに失敗した場合です。コール元ではerrorArrayを検証して書込みが失敗した要素を判別し、コネクタではエラーの重大度を判断します。

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.4.12 SetUserAssociatedData API

コネクタでは、SetUserAssociatedData APIをコールして、ユーザー・レベルのコネクタ固有のPIMユーザー関連データを保存します。このAPIを使用すると、複数のスレッドで指定のユーザーの関連データにアクセスできます。表D-23に、SetUserAssociatedData APIのパラメータを示します。

表D-23 SetUserAssociatedData APIのパラメータ

パラメータ

データ型

タイプ

説明

syncSessionId

String

In

同期化セッションIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubDomain

String

In

ハブ・ドメインが格納されます。このパラメータは、NULL以外で空でない必要があります。

hubUserId

String

In

ハブ・ユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

pimUserId

String

In

PIMユーザーIDが格納されます。このパラメータは、NULL以外で空でない必要があります。

connectorName

String

In

コネクタ名が格納されます。このパラメータは、NULL以外で空でない必要があります。

assocDataIdArray

String []

In

コネクタ定義のユーザー関連データの識別子の配列。

pimUserAssocDataArray

関連データ

In

ユーザー固有の関連データが格納されます。pimUserAssocDataArrayとassocDataIdArrayの間には位置関係があります。assocDataIdArrayのi番目の要素には、この配列のi番目の要素に対応するPIMユーザー関連データが格納されます。

errArray

Integer []

Out

出力時に、ユーザー関連データの設定(BDSSストアに永続的に保持)の成功または失敗を示すエラー・コードの配列が格納されます。この配列、assocDataIdArrayおよびpimUserAssocDataArrayの間には位置関係があります。この配列のi番目の要素には、pimUserAssocDataArrayのi番目の要素の設定に関するエラー・コード(0 = OK、1 = ERROR)が保持されます。

戻り値

Integer

- SUCCESS/OKの場合は0すべてのAssociatedData要素がBDSSデータ・ストアに書き込まれた場合です。

- ERROR/NOTOKの場合は0以外。いずれかのAssociatedData要素の書込みに失敗した場合です。コール元ではerrArrayを検証して書込みが失敗した要素を判別し、コネクタではエラーの重大度を判断します。

例外

リカバリ不能なエラーが発生した場合は、RemoteExceptionがスローされます。

D.5 データ表現構造

この項では、BDSSとコネクタの間で渡されるデータの構造について説明します。

D.5.1 共通構造

共通構造にはKeyValuePair構造が含まれます。

D.5.1.1 KeyValuePair

KeyValuePairは、メタデータをキーと値の構造に保持するために使用する基本構造です。コネクタに対して定義されている他の多くのデータ構造で使用されます。表D-24に、KeyValuePair構造のメンバーを示します。

表D-24 KeyValuePair構造のメンバー

メンバー

データ型

説明

key

String

キーと値のペアのkey値を保持します。

value

String

キーと値のペアのvalue値を保持します。

D.5.2 BDSSエンジンのコネクタ・インタフェース関連の構造

コネクタ・インタフェース関連の構造は次のとおりです。

- DomainInfo

- ExtractRequest

- ExtractResponseData

- ExtractResponseMetaData

- HubContext

- PimRecordDescription

- AssociatedData

- AssocDataElement

- RecordMetaData

- UpsertRecord

- Enum ExtractResultCode

D.5.2.1 DomainInfo

DomainInfo構造には、同期化セッションでコネクタがユーザーに対して初期化を実行するために必要なドメイン情報が格納されます。この構造は、ハブでコネクタのInitializeUserSyncSession APIをコールした場合のみ使用されます。表D-25に、DomainInfo構造のメンバーを示します。

表D-25 DomainInfoデータ構造のメンバー

メンバー

データ型

説明

pimDomainTarget

String

PIMドメイン・ターゲットが格納されます。NULL以外である必要があります。空にはできます。

このメンバーの詳細は、第D.1.5項「PIMドメイン・ターゲット」を参照してください。

pimFilterCondition

String

ドメイン抽出に適用されて、抽出に含まないレコードを除外するPIMフィルタ条件が格納されます。このメンバーは、NULL以外である必要があります。空にはできます。

hubDomain

String

ハブ・ドメインを識別します。このメンバーは、NULL以外で空でない必要があります。

pimDomainSyncState

String

ドメインのPIM同期状態が格納されます。このメンバーは、NULL以外である必要があります。このメンバーは空にできます。

D.5.2.2 ExtractRequest

BDSSでExtractDomains APIを介してユーザーの抽出を開始すると、ExtractRequest構造がコネクタに渡されます。表D-26に、ExtractRequest構造のメンバーを示します。

表D-26 ExtractRequestデータ構造のメンバー

メンバー

データ型

説明

hubUserId

String

ハブ・ユーザーIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

pimUserId

String

PIMユーザーIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

hubDomainArray

String []

ハブ・ドメインの配列。この配列は、NULL以外でサイズが1以上である必要があります。配列内の要素は、NULL以外で空でない必要があります。

D.5.2.3 ExtractResponse

ExtractResponse構造は、コネクタでエンジン・コールバック・インタフェースのExtractDomainResultsコールバック・メソッドを介してレコード・データおよびステータス情報をエンジンに伝播するために使用します。表D-27に、ExtractResponse構造のメンバーを示します。

表D-27 ExtractResponseデータ構造のメンバー

メンバー

データ型

説明

extractResponseMetaData

extractResponseMetaData

抽出レスポンスに関するメタデータが格納されます。このメンバーは、NULL以外で空でない必要があります。

extractResponseData

extractResponseData

抽出されたPIMレコードが格納されます。このメンバーは、NULL以外で空でない必要があります。

D.5.2.4 ExtractResponseData

ExtractResponseData構造には、PIMサーバーから抽出されたレコードが格納されます。表D-28に、ExtractResponseData構造のメンバーを示します。

表D-28 ExtractResponseDataデータ構造のメンバー

メンバー

データ型

説明

hasUpserts

Boolean

構造にアップサート・レコードがあるかどうかを示します。この配列には、有効なUpsertRecord構造があります。

upsertRecordArray

UpsertRecord []

UpsertRecord構造の配列。配列内の各要素は、前回の同期化セッション以降にPIMで更新または作成された各PIMレコードを表します。

この配列は、NULL以外で空でない必要があります。変更されたレコードがない場合、配列は長さが1で、NULL以外のメンバーが含まれるNULL以外のUpsertRecordが1つ必要です。ただし、メンバーは空の文字列にできます。

hasUpsertsがfalseの場合、この配列は無視されます。

hasDeletes

Boolean

deleteRecordIdArrayに有効な文字列メンバーが存在するかどうかを示します。

deleteRecordIdArray

String []

文字列の配列で、配列の各要素には、前回の同期化セッション以降に削除されたPIMレコードのPIMレコードIDが格納されます。

NULL以外で空でない必要があります。削除されたレコードがない場合、配列は長さが1で、NULL以外のPIMレコードID(空も可能)が1つ必要です。

hasDeletesがfalseの場合、この配列は無視されます。

D.5.2.5 ExtractResponseMetaData

ExtractResponseMetaData構造には、ドメイン抽出の指定のExtractResponseMetaDataに関するメタデータ情報が格納されます。表D-29に、ExtractResponseMetaData構造のメンバーを示します。

表D-29 ExtractResponseMetaDataデータ構造のメンバー

メンバー

データ型

説明

syncSessionId

String

同期化セッションIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

hubDomain

String

ハブ・ドメインが格納されます。このメンバーは、NULL以外で空でない必要があります。

hubUserId

String

ハブ・ユーザーIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

resultCode

String

ExtractResultCode列挙値の1つが格納されます。

extractErrorDescription

String

抽出に失敗した理由が格納されます。このメンバーは、NULL以外である必要がありますが、空にはできます。resultCodeがエラー・コードの場合のみ移入されます。

pimDomain

String

PIMドメインが格納されます。このメンバーは、NULL以外で空でない必要があります。

pimUserId

String

PIMユーザーIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

connectorName

String

コネクタ名が格納されます。

echoesSuppressed

String

ExtractResponseでエコーが削除されたかどうかを示します。

sequenceNumber

String

ExtractResponseの順序番号を示します。たとえば、コネクタで1番目のExtractResponseをハブに送信するとき、sequenceNumberは1です。同様に、2番目のExtractResponseを送信するとき、sequenceNumberは2のようになります。

sequenceNumberは、ドメイン、ユーザーおよび同期化セッションごとに1から始まります。Oracle Fusion Middleware 11gリリース2のBDSSでは、コネクタの「Extract Response Batch Size」構成は、1つのハブ・ドメインに対して1つのExtractResponseのみをハブに送信できる大きさにする必要があります。

D.5.2.6 HubContext

HubContext構造(表D-30を参照)は、ランタイム・ライブラリまたはエンジン・コールバック・インタフェースのコール時に、コールするBDSSインスタンスの情報をコネクタに提供します。

表D-30 HubContextデータ構造のメンバー

メンバー

データ型

説明

engineEndPointURL

String

コネクタでコールするBDSS Webサービス・コンポーネントをホストするサーバーのURLが格納されます。このメンバーは、NULL以外で空でない必要があります。

syncSessionId

String

セッションIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

connectorRuntimeLibraryURL

String

コネクタでコネクタ・ランタイム・ライブラリをコールしてメタデータの読取りまたは書込みを行うときに使用するURLが格納されます。

connectorName

String

コネクタ名が格納されます。このメンバーは、NULL以外で空でない必要があります。

D.5.2.7 PimRecordDescription

PimRecordDescription構造(表D-31)には、PIMレコード説明が格納されます。KeyFieldメタデータがドメインに対して構成されている場合、コネクタでは指定のドメインのアップサート・レコードすべてについてこの説明を作成する必要があります。

表D-31 PimRecordDescriptionデータ構造のメンバー

メンバー

データ型

説明

descriptionArray

KeyValuePair []

PIMレコード説明を構成するハブ・フィールド名とハブ・フィールド値が格納されたKeyValuePair構造の配列。配列は、NULL以外である必要があります。

- ドメインに対してKeyFieldが構成されている場合、配列のサイズは構成済のKeyFieldの数と等しくし、hasDescriptionをtrueに設定する必要があります。配列内の各KeyValuePairは、NULL以外である必要があります。各キーは、NULL以外で空でない必要があります。各値は、NULL以外である必要がありますが、空にはできます。

- ドメインに対してKeyFieldが構成されていない場合、配列のサイズは1で、hasDescriptionをfalseに設定する必要があります。配列にはNULL以外のKeyValuePairが格納され、キーおよび値は両方ともNULL以外である必要がありますが、空にはできます。

hasDescription

Boolean

descriptionArrayに有効な要素が存在するかどうかを示すブール値。このフラグがfalseに設定されている場合、指定のdescriptionArrayは無視されます。

D.5.2.8 AssociatedData

コネクタでは、AssociatedData構造(表D-32)を使用して、データをPIMレコードまたはPIMユーザーのいずれかに関連付けることができます。

表D-32 AssociatedDataデータ構造のメンバー

メンバー

データ型

説明

assocDataId

String

関連データを一意に識別するコネクタ定義の識別子が格納されます。このメンバーは、NULL以外である必要があります。hasAssocDataがfalseの場合は、空にできます。hasAssocDataがtrueの場合は、空でない必要があります。

hasAssocData

Boolean

assocDataArrayに空でない有効なAssocDataElementメンバーが存在するかどうかを示すブール値。

assocDataArray

AssocDataElement []

関連データのグループ(1つまたは複数)を定義するAssocDataElement構造の配列。このメンバーは、NULL以外である必要があります。

このメンバーのサイズは1以上である必要があります。

hasAssocDataがfalseの場合、配列のサイズは1で、空のAssocDataElementが1つ格納される必要があります。

D.5.2.9 AssocDataElement

AssocDataElementデータ構造には、関連データのグループが格納されます。表D-33に、AssocDataElement構造のメンバーを示します。

表D-33 AssocDataElementデータ構造のメンバー

メンバー

データ型

説明

groupName

String

groupAssocDataArrayに格納される関連データをグループ化するための文字列識別子。このメンバーは、NULL以外である必要があります。hasAssocDataがfalseの場合、このメンバーは空にできます。このメンバーは、指定のAssocData.assocDataArray内で一意である必要があります。

hasAssocData

Boolean

groupAssocDataArrayに空でない有効なKeyValuePairメンバーが存在するかどうかを示すブール値。

groupAssocDataArray

KeyValuePair []

グループ内の1つの関連データを表す、任意の大きさのKeyValuePair構造の配列。このメンバーは、NULL以外である必要があります。サイズは1以上である必要があります。

hasAssocDataがfalseの場合、配列のサイズは1で、キーおよび値には空の文字列が格納されます。受信者はこの配列を無視できます。

hasAssocDataがtrueの場合、各要素にはNULL以外の空でないキーと値が必要です。

注意:

関連データがバイナリの場合、コネクタではデータをBase64にエンコードして、データベースに非BLOBとして保存します。この場合、関連データのチャンクおよびチャンク解除はコネクタで実行されます。

D.5.2.10 RecordMetaData

RecordMetaData構造には、PIMサーバーから抽出されたりPIMサーバーにプッシュされるPIMレコードに関するメタデータが格納されます。表D-34に、RecordMetaData構造のメンバーを示します。

表D-34 RecordMetaDataデータ構造のメンバー

メンバー

データ型

説明

recordId

String

PIMレコードIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

versionId

String

PIMレコード・バージョンIDが格納されます。このメンバーは、NULL以外で空でない必要があります。

recordError

Boolean

レコード処理に失敗したかどうかを示すブール値。この値がtrueに設定されている場合は、recordIdおよびrecordErrorDescriptionの両方が提供される必要があります。

recordErrorDescription

String

UpsertRecordの処理中に発生したエラーの理由を説明します。このメンバーは、NULL以外である必要がありますが、空の文字列にはできます。recordErrorがtrueに設定されている場合は、移入される必要があります。

assocData

AssociatedData

AssociatedDataが格納されます。

pimRecordDescription

PimRecordDescription

PIMレコード説明が格納されます。ドメインに対してKeyFieldデータが構成されていない場合は、NULLにできます。ドメインに対してKeyFieldデータが構成されている場合、このメンバーはNULLである必要があります。

D.5.2.11 UpsertRecord

UpsertRecord構造は、PIMサーバーから抽出されたりPIMサーバーにプッシュされるハブ・レコードの構造を定義します。削除されたハブ・レコードは、この構造に表示されません。表D-35に、UpsertRecord構造のメンバーを示します。

表D-35 UpsertRecordデータ構造のメンバー

メンバー

データ型

説明

pimRecordMetadata

RecordMetaData

レコードに関連するメタデータが格納されます。このメンバーは、NULL以外である必要があります。

hubRecordData

String

ハブ・レコードのXML表現が格納されます。このメンバーは、NULL以外で空でない必要があります。

D.5.2.12 Enum ExtractResultCode

抽出リクエストの結果コードを定義する列挙型。例D-1に、Enum定義を示します。

例D-1 Enum定義

Enum ExtractResultCode
{
FULL_EXTRACT_COMPLETED_OK,
FULL_EXTRACT_COMPLETED_NOTOK,
PARTIAL_EXTRACT_COMPLETED_OK,
PARTIAL_EXTRACT_COMPLETED_NOTOK
};

D.5.3 構成関連の構造

次の構成構造があります。

- ConfigurationSection

- ConfigurationProfile

D.5.3.1 ConfigurationSection

ConfigurationSection構造は、構成ファイルまたは.ini構成ファイルと概念的に同等なプロファイルのセクションを表します。つまり、プロファイルには一意の名前が付いたセクションのコレクションが含まれ、各セクションにはパラメータと値のコレクションが含まれます。表D-36に、ConfigurationSection構造のメンバーを示します。

表D-36 ConfigurationSection構成構造のメンバー

メンバー

データ型

説明

sectionName

String

プロファイルに含まれるセクション名を識別します。

paramNameValueArray

KeyValuePair []

プロファイルのセクションに含まれる構成パラメータと値が格納されます。

D.5.3.2 ConfigurationProfile

ConfigurationProfile構造はプロファイルを表します。表D-37に、ConfigurationProfile構造のメンバーを示します。

表D-37 ConfigurationProfile構成構造のメンバー

メンバー

データ型

説明

profileName

String

構成プロファイルの名前を識別します。

configSectionArray

ConfigurationSection []

プロファイルのセクションに関する情報を含むConfigurationSection構造の配列が格納されます。

D.6 コネクタの作成に関するベスト・プラクティス

開発者は、コネクタを少なくとも3つのパッケージ(ハブ・トランスポート・パッケージ、PIMトランスポート・パッケージ、変換パッケージ)に分割する必要があります。

- ハブ・トランスポート・パッケージ
ハブ・トランスポート・パッケージには、ハブと直接通信するコンポーネントが含まれます。これらのコンポーネントでは、ハブとの通信に関連するすべての詳細を処理しますが、PIMストアやサーバーに対して直接データ交換操作を実行することはありません。かわりに、PIMトランスポート・パッケージと通信して、PIMストアとデータを交換します。このコンポーネントは汎用で、再利用して1つ以上のPIMトランスポート・パッケージと通信できます。

- PIMトランスポート・パッケージ
PIMトランスポート・パッケージには、PIMサーバーおよびPIMストアと直接通信するコンポーネントが含まれます。これらのコンポーネントではハブと直接通信しませんが、かわりに、PIM関連のすべての詳細を処理します。これらは、ハブとPIMトランスポート・パッケージの間の通信を容易にするPIMトランスポートAPIです。

- 変換パッケージ
変換パッケージには、レコード・データをハブ書式とPIM書式の間で変換するコンポーネントが含まれます。

詳細は、第2.2項「コネクタの概要」を参照してください。

D.7 Exchange 2007コネクタAPI

この項では、Exchange 2007コネクタの動作を説明するために、次の前提を使用します。

- cjonesおよびtsmytheというユーザーが存在するBPELシステム。

- charles.jones@sample.comおよびtsmythe@sample.comというユーザーが存在するExchangeシステム。

- cjonesユーザーをcharles.jones@sample.comユーザーにマップするハブ・ユーザー。

- BPELサーバーおよびExchange組織外に存在し、電子メール・アドレスがtom.johnson@microsoft.comのユーザー。

D.8 カレンダの同期化に対する汎用コンポーネントのサポート

ハブでのカレンダ・サポートの目的と同様に、汎用コネクタ・コンポーネントの目的は、他のドメインの同期化と同じ方法でカレンダの同期化をサポートすることです。つまり、特定のドメインのレコード・データは汎用コンポーネントに関連付けられません。さらに、汎用コンポーネントでは、特定のドメイン固有のロジックを実装しません。

削除を検出できないPIMトランスポートのために、ハブ・トランスポートでは削除検出機能を提供します。PIMトランスポート・コンポーネントで削除をネイティブで検出できない場合は、削除するレコードIDのリストが決定した後にハブ・トランスポートで新しいPIMトランスポート・インタフェース・メソッドを起動すると、PIMトランスポートでは、削除したレコードを削除として抽出レスポンスに表示するか、またはファンニング済インスタンスであるカレンダ・レコードに対する例外として表示するかを決定できます。前者の場合、レコードIDは削除リストに残ります。後者の場合、レコードIDは削除リストから削除され、コネクタでは、EXDATEリストにある削除発生の開始日がマスターVEVENTに含まれるように該当するアップサート・レコードを更新する必要があります。ハブ・トランスポートではこの処理をカレンダ・ドメインに対して実行できると同時に、すべてのドメインに対しても実行できるため、PIMトランスポートでは抽出レスポンスを変更して最終的にハブに送信できます。PIMExtractResponse、FinalizeExtractResponse (PIMExtractResponse response)などのメソッドは適切なシグネチャです。

カレンダの同期化をテストするには、反映同期化を使用します。PIMトランスポート・インタフェースでは、コネクタ・タイプを返す新しいメソッドが必要です。ハブ・トランスポートでは、BDSSから構成プロファイルを読み取る前の時点でこのメソッドをコールし、コネクタ名に対応するプロファイル名ではなく、新しいPIMトランスポート・メソッドからの戻り値に対応する名前のプロファイルをロードします。

D.8.1 カレンダ・サポート・メソッド

この項では、ランタイム・ライブラリ(RTL)のメソッドについて説明します。

D.8.1.1 ハブ規定

ハブ規定では、次のメソッドおよび機能を使用します。

- GetAssocDataIdOfAssociatedData

- 参加者サポート

- AttendeeMetadata

D.8.1.1.1 GetAssocDataIdOfAssociatedData

このメソッドはランタイム・ライブラリに含まれるメソッドの1つで、コネクタではこのメソッドを使用して関連データ値から関連データIDを取得できます。このメソッドはgetUserAssociatedDataおよびgetRecordAssociatedDataに似ており、コネクタでは関連データ値のコレクションを提供して、対応するassocdata IDのコレクションとともに、リクエストした各assocDataIDのステータス・コード(成功、失敗、またはデータベースに存在しない)を取得します。

たとえば、関連データのキーと値のペアのコレクション{Key1,Value1}、{Key2,Value2}、{Key3,Value3}が含まれるMyGroupのグループ名がMyCalendarAssocDataZに保持され、そのassocDataIdが保持されるassocDataをコネクタでBDSSに格納した場合、後でコネクタで値MyCalendarAssocDataZを取得するときは、MyGroupおよび{Key1,Value1}、{Key2,Value2}、{Key3,Value3}の一部または全部を指定してこのAPIをコールできます。APIでは、指定したグループ名およびキーと値のペアが含まれる行について関連データ表を問い合せて、IDを取得します。APIでは、関連データ値が複数の行にわたってセグメント化されている場合があることを考慮する必要があります。

D.8.1.1.2 参加者サポート

ハブでは、カレンダ・レコードを作成または更新するコネクタ・メソッドをコールするときに、ユーザー・マップ・メタデータを使用して、作成/更新リクエストに付随するレコード・メタデータの一部としてターゲット・システムのPIMユーザーIDを提供することにより、参加者の解決をサポートしています。ハブで作成/更新操作中にこのメタデータを提供するには、ソース・コネクタで、カレンダ・レコードのソース・システムの参加者を抽出レスポンスに提供する必要があります。BDSSコネクタのRecordMetadataには、参加者メタデータを保持するデータ・メンバーが含まれます。

たとえば、ハブでBPELサーバーからcjonesのカレンダを抽出するとき、BPELタスク・コネクタでは、アップサート・レコードに関連付けられたレコード・メタデータにcjonesを指定します。次にハブでは、そのレコードがcharles.jones@sample.comユーザーのExchangeカレンダに作成される必要があると判断します。ハブでは、ユーザー・マップでcjonesを検索し、cjonesがExchangeのcharles.jones@sample.comにマップされていることを検出します。ユーザーがマップされているため、ハブでは、アップサート・レコードに関連付けられたレコード・メタデータにcharles.jones@sample.com(cjonesではなく)を提供し、これをExchange 2007コネクタをコールしてレコードを作成するときに提供します。

これをサポートするには、BDSSコネクタのRecordMetadataを更新して、タイプAttendeeMetadataのデータ・メンバーが参加者メタデータを保持する必要があります。

D.8.1.1.3 AttendeeMetadata

AttendeeMetadaは、コネクタ・インタフェース用のBDSS WSDLのWSDL構成です。このクラスは、ハブ・カレンダ・レコードに関連付けられた参加者情報を管理します。

次のことが前提になります。

- 繰返しのカレンダ会議には、マスター・レコードとは異なる参加者を含む例外や他の例外を含めることができます。

- カレンダを作成または更新するターゲット・コネクタでは、ICAL内に含まれる参加者情報を使用できません(ICALの参加者情報はソース・コネクタで定義されているため)。

このクラスを使用すると、ターゲット・コネクタでは各会議の発生に関連付けられた参加者を判別できます。これはコレクションのマップ構成を意味し、マップは会議発生の開始日をキーとして取得し、指定のキーのコレクションにはその会議に関連付けられた参加者が含まれます。マップに含まれるエントリが1つの場合は、例外がないカレンダ・レコードであることを意味します。マップに複数のエントリが含まれる場合は、例外があるカレンダ・レコードであることを意味し、その例外にはマスター・レコードとは異なる参加者が含まれます。

D.8.1.2 コネクタ規定

次の各項では、BDSSを使用してカレンダ・レコードを同期化する際にコネクタ実装で準拠する必要がある規定上の義務事項を定義します。コネクタは、コネクタ・インタフェースのドキュメントに定義されている規定上の義務事項にも準拠する必要があります。

D.8.1.2.1 フェデレーテッドと非フェデレーテッドの相違

コネクタがデータを交換するカレンダ・システムがフェデレーテッドPIMの場合、コネクタではハブからフェデレーション・モデルを抽出する必要があります。たとえば、ある1つのカレンダ会議がSiebelモデルに類似しており、カレンダ・レコードをリレーショナル・データベースに格納すると、各レコードには一意の行IDが含まれ、カレンダ・レコードからユーザー表に外部キーを追加することによってカレンダ・レコードを表示できます。コネクタで指定のカレンダ・レコードを抽出すると、各参加者が同期化されるときに、参加者ごとにカレンダ・レコードの行IDと参加者の行IDを連結したPIMレコードIDを作成できます。後続の同期化セッションで、BDSSがコネクタに対して更新操作または削除操作を実行するように指示すると、ハブでは作成されたIDを提供し、コネクタではその2つの行IDを解析して適切な操作を実行できます。

フェデレーテッド・システムのコネクタでは、指定のBDSSリクエストを別の操作に変換する必要がある場合があります。たとえば、システムのカレンダ・モデルでは、参加者が変更できるのは、その参加者が開催する会議のみとします。BDSSはコネクタに対して更新操作を実行するように指示したが、コネクタでは同期化するユーザーの行IDが開催者ではなく参加者であると判断した場合、コネクタではBDSSコールに対して操作を実行せず、場合によってはメッセージを記録することもできます。つまり、開催者が同期化されると、変更(ある場合)が同期化されるため、コネクタが開催者を同期化の対象と判断した場合は操作なしが適切です。(ソースが非フェデレーテッドPIMの場合、開催者は会議のコピーを変更できません。)コネクタが開催者を同期化の対象と判断した場合は(ユーザーが組織に定義されていない場合、またはユーザーが同期化用のBDSSユーザー・マップに追加されていない場合のいずれか)、操作なしは適切ではありません。同様に、BDSSがコネクタに対してレコードを削除するように指示し、コネクタでは参加者がそのレコードをすでに削除したと判断した場合、コネクタはレコード全体を削除するのではなく、その参加者をカレンダ・レコードから削除します(つまり、カレンダ・レコード全体を削除するのではなく、参加者ユーザーを識別する外部キーをカレンダ・レコードから削除します)。コネクタが開催者から削除を取得した場合は、カレンダ・レコード自体を削除できます。ユーザーを同期化する順序は保証されていないため、開催者の削除が同期化された後にコネクタで参加者の削除を受信した場合、コネクタでは以降の削除に対して操作を実行しないことがあります。

これは、フェデレーションの抽出方法に関するコネクタ実装詳細ですが、実装では次の動作を保証する必要があります。

- コネクタでは、各参加者ユーザーを同期化するとき、会議から削除された各参加者の削除を送信する必要があります。たとえば、レコードAに開催者のユーザーAと参加者のユーザーBが含まれ、ユーザーCは削除されていた場合は、ユーザーAを同期化すると抽出レスポンスに削除が含まれ、ユーザーBを同期化すると抽出レスポンスに削除が含まれます。

- 参加者の削除とは異なり、カレンダ・レコードが削除されると、開催者および各参加者の抽出には削除が含まれます。

- レコードが会議(参加者あり)から予定(参加者なし)に変更された場合、コネクタでは、カレンダ・レコードに関連付けられた残りのユーザーのアップサート(PIMのカレンダ・モデルに応じて、開催者である場合とそうでない場合があります)、および残りのユーザーの削除を提供する必要があります。

- コネクタでは、最初の抽出時、または進行中の抽出でレコードが更新された場合、カレンダ・レコードに関連付けられた各ユーザーのアップサート・レコードを提供する必要があります。たとえば、レコードAに開催者のユーザーAと参加者のユーザーBが含まれている場合は、ユーザーAを最初に同期化するとき、およびユーザーBを最初に同期化するときに、レコードAがハブへの抽出レスポンスに提供される必要があります。さらに、レコードAがユーザーによって更新された場合は、ユーザーAを同期化するとき、およびユーザーBを同期化するときに、レコードAが提供される必要があります。レコードAへの更新が新規参加者ユーザーCの追加であった場合は、ユーザーA、ユーザーBおよびユーザーCの抽出レスポンスにレコードAが提供される必要があります。

- コネクタでは、特定のユーザーがBDSSを介して行った更新のエコーは伝播しませんが、レコードに関連付けられた他のユーザーの更新は伝播する必要があります。たとえば、フェデレーテッド・システム内のレコードAには参加者としてユーザーA、ユーザーBおよびユーザーCが含まれ、このレコードはセッション1で同期化されるとします。次に、セッション2では、コネクタはdeleteRecordコールを受信してユーザーCを削除します。コネクタでは、カレンダ・レコードを削除するのではなく、カレンダ・レコードからユーザーCを削除します。セッション3では、アップサートはユーザーAおよびユーザーBの抽出レスポンスに表示され、新しい参加者リスト(ユーザーCは参加者に含まれません)が示されます。ユーザーCを同期化するとき、この削除はエコーの削除とみなされるため、ハブに送信される抽出レスポンスにレコードの削除は含まれません。このような方法で、ユーザーCにマップされた参加者が他のシステムからレコードを削除すると、BDSSでは、他のシステムでユーザーAおよびユーザーBにマップされた参加者がレコードを更新して、ユーザーCが会議の参加者でなくなったことを示します。

D.8.1.2.2 参加者の解決

ハブでは参加者の解決がサポートされていますが、コネクタ実装では次のシナリオを考慮する必要があります。

- ユースケース1: ユーザーがBDSSで同期化対象として構成されていないケースです。たとえば、BPELサーバーで作成されたカレンダ・レコードにtsmytheという名前の参加者が含まれ、tsmytheは有効なBPELサーバー・アカウントとExchangeアカウントを持っていますが、tsmytheは自分のBPELデータをBDSSを介して同期化することを希望していないとします。レコードは、BPELタスク・コネクタによって抽出されます。cjonesを同期化するときは、参加者としてcjonesおよびtsmytheをレコード・メタデータに指定します。ハブでは、Exchange 2007コネクタをコールしてレコードを作成するとき、Exchange 2007コネクタにcharles.jones@sample.comを提供できますが、レコード・メタデータのtsmytheに対するExchangeユーザーIDは提供できません。

- ユースケース2: ユーザーは組織内の人員として認識されていないケースです。たとえば、Microsoft社のExchangeユーザーtom.johnson@microsoft.comが会議を開催してcharles.jones@sample.comを招待した場合、この招待者が会議への参加を承諾するとExchangeフォルダにカレンダ・アイテムが作成されます。さらに、tom.johnson@microsoft.comはExchangeシステムおよびBPELシステムに定義されていないとします。BDSSで、cjonesをcharles.jones@sample.comにマップするハブ・ユーザーを同期化すると、Exchange 2007コネクタではtom.johnson@microsoft.comをExchange組織内のユーザーとして解決できません。tom.johnson@microsoft.comがレコード・メタデータに指定されます。次に、ハブでレコードをBPELサーバーにプッシュすると、BPELタスク・コネクタでもtom.johnson@microsoft.comをBPELユーザーに解決できません。

- ユースケース3: 受信コネクタがターゲット・システムでレコードを作成または更新するときに、レコード・メタデータに格納された参加者情報が不十分なケースです。この場合、コネクタでは提供された情報を使用してユーザーの解決を試みます。たとえば、Exchangeコネクタでは、カレンダ・レコードを作成するときに、参加者の名、姓およびユーザー電子メール・アドレスを指定する必要があります。コネクタでレコード・メタデータに格納された電子メール・アドレスをActive Directoryへの問合せに指定すると、電子メール・アドレスが一致するユーザーの名と姓が返されます。

コネクタでは、特定の参加者をコネクタのシステム内のユーザーに解決できない場合、次の抽出時に、未解決の参加者をハブに戻す必要があります。これによって、レコードの更新が別のコネクタにプッシュされても、参加者が会議から削除されません。

指定のカレンダ・レコードの抽出時に、カレンダ・レコードに関連付けられた未解決の参加者をコネクタで解決するには、次の方法があります。

- BDSSデータ・モデルを拡張して、参加者メタデータを保持する表を作成し、コネクタがメタデータを設定または取得できる新規のランタイム・ライブラリAPIを定義します。

- BDSSのレコード・レベルまたはユーザー・レベルの関連データ機能を使用します。レコード・レベルの関連データを使用すると、BDSSストア内で未解決の参加者が多数重複する可能性があります。このため、ユーザー・レベルの関連データを使用することをお薦めします。ユーザー・レベルの関連データを使用する場合もBDSSストア内で未解決の参加者が重複する可能性がありますが、レコード・レベルの関連データを使用する場合と比較すると重複は少なくなります。重複を回避するには、未解決の参加者のみを保持するための特別なBDSS PIMユーザーをコネクタで作成します。

- 解決不能な参加者を作成/更新時にPIMレコード自体に書き込むと、次回にレコードが抽出されるときに、コネクタで未解決の参加者を取得できます。コネクタがデータを交換するシステムで参加者の値が不明確でも許容される場合、コネクタでは解決不能な参加者を単純に参加者フィールドに書き込むことができます。ただし、システムでは参加者の値を明確にする必要があるため、コネクタでは、エンド・ユーザーはデフォルトで表示できないカスタム・フィールドに解決不能な参加者を書き込む必要があります。

注意:

指定のユーザーは同じコネクタ・タイプの異なるコネクタ・インスタンスで同期化できるため、未解決の参加者をメモリー内キャッシュに保持することは有効な方法ではありません。たとえば、Exchange 2007コネクタにInstance 1とInstance 2という2つのインスタンスがあり、異なるサーバーにデプロイされているとします。同期化セッション1で、charles.jones@sample.comがInstance 1を介して同期化されます。tom.johnson@microsoft.comは解決できないため、コネクタではExchangeレコードの作成時にこの参加者を含めないことを決定します。会議が更新され、その後、BDSSで別の同期化セッションが実行されると、charles.jones@sample.comはInstance 2を介して同期化されます。このセッションでは、レコードが抽出されるときにInstance 2でtom.johnson@microsoft.comを簡単にリストアする方法はありません(コネクタ・インスタンスが相互に通信しない場合)。

解決不能な参加者をシステム・レコードに保持できないコネクタでは、BDSSソリューション(レコードまたはユーザー関連データ)を使用するか、または独自のメソッドを実行する必要があります。

会議の参加者が参加者のグループまたは配信リストで識別される場合、コネクタでは配信リストを参加者としてICALに提供できません。かわりに、コネクタでは、グループの各メンバーをICALに提供する必要があります。あるシステムの参加者のグループが別のシステムでも定義されている場合があり、グループ名または配信リスト名がシステム間で一致している場合はグループのメンバーシップが同じである保証がないため、この配信リストを展開する必要があります。また、コネクタでは、すべての埋込みグループまたは配信リストのメンバーを展開し、ICALに重複が含まれないようにする必要があります。次に例を示します。

- 配信リストAのメンバーはUser1およびUser2です。

- 配信リストBのメンバーは、配信リストA、User1、User2およびUser3です。

- カレンダ・レコードにリストされる参加者は次のとおりです。

- 配信リストA

- 配信リストB

- User3

グループのメンバーシップによってカレンダ・レコードに重複が含まれますが、ICALに含まれるのはUser 1、User 2およびUser 3のみです。

D.8.1.2.3 繰返しパターン

コネクタでは、すべてのICAL繰返しパターンをサポートするように試みる必要があります。

抽出時に、コネクタでは、繰返しパターンをネイティブ定義から同等のICAL定義に変換する必要があります。同様に、コネクタでは、カレンダ・レコードを作成または更新するときに、ICAL繰返しパターンを同等のネイティブ・パターンに変換する必要があります。

ただし、コネクタで指定のICAL繰返しパターンをネイティブでサポートできない場合があります。このような場合でも、コネクタでは、ハブからの作成/更新リクエストを実行しようとします。これを解決する主要な方法はファンニングです。この形式のファンニングとは、元のパターンをコピーして複数のカレンダ・レコードを作成するプロセスです(非フェデレーテッド・システムと混同しないでください)。

コネクタでは常に、1つのレコードを繰返しなしの複数のカレンダ・レコードにファンニングし、各インスタンスには繰返しパターンで定義される日付に発生するように開始日があります。コネクタでは、この操作をハブから抽出する必要があります。

注意:

Oracle Fusion Middleware 11gリリース2のBDSSでは、EXRULEはサポートされていません。

D.8.1.3 ファンニング

次の各項では、ファンニングに関連するコネクタ規定について説明します。

D.8.1.3.1 抽出

コネクタでは、システムからカレンダ・レコードを抽出するとき、ICAL RFCに準拠した、レコードのICAL表現を作成する必要があります。

すでに繰返しパターンをファンニングしたコネクタでは、次回にレコードが同期化されるときに、すべてのファンニング済インスタンスを、元の繰返しパターンを含む単一のICAL表現に結合する必要があります。ファンニング済レコードから繰返しパターンを再作成するとき、コネクタ実装では次の処理を実行します。

1. PIM内のファンニング済インスタンスへの変更がICALの例外に変換され、「Calendar Hub Domain Schema」セクションにリストされた要件ごとに個別のVEVENTとして表されていることを認識します。

2. PIM内のファンニング済インスタンスの削除が、マスターVEVENTのEXDATEに変換されます。

3. ファンニング済インスタンスが単一のICALメッセージに結合され、ExtractResponseはレスポンスにファンニング済インスタンスを含みません。さらに、コネクタでは適切なPIMレコード・バージョンを提供する必要があります。

4. 繰返しパターンが適用されるクライアントを介してPIMユーザーがファンニング済インスタンスを更新した場合、コネクタでは、ファンニング済レコード(ただし、この時点では繰返しレコード)を個別のレコードとして同期化し、抽出の実行時に元のレコードでEXDATEを指定する必要があります。また、抽出したレコードが別のシステムの対応するレコードと競合する場合は、競合を解消するユースケースを考慮する必要があります。この場合、コネクタでは繰返しの予定を削除し、優先するレコード・データに置換します。

5. 各ファンニング済インスタンスに関するメタデータは保持されるため、抽出が実行されるとき、コネクタでは次のことが可能です。

- ファンニング済インスタンスのセットを判別します。

- 各ファンニング済インスタンスをICALに表示する方法(つまり、マスターVEVENT、例外VEVENT)を決定します。これは、コネクタにおいて、複数の同期化セッション間で各ファンニング済インスタンスの状態を追跡する必要があることを意味します。たとえば、セッション1で同期化された3つのファンニング済レコード(レコードA、レコードBおよびレコードC)があるとします。これらのレコードはすべて、繰返しパターンおよび同じ会議IDを持つ単一のICALに結合される必要があります。レコードAに対する更新、およびレコードCの削除がセッション2で同期化されると、ステップ1でレコードAがICALに例外VEVENTとして表示され、ステップ2でレコードCがマスターVEVENTにEXDATEとして表示されます。セッション2で、レコードBは抽出レスポンスに含まれ、レコードAとレコードCは含まれない場合、コネクタでは、レコードBを例外VEVENTとして追加し、レコードAとレコードCは抽出レスポンスに含まれていなくても、レコードAは例外VEVENTとして、レコードCはマスターVEVENTのEXDATEとして提供する必要があります。
前述したように、コネクタでは、レコードおよび各ファンニング済インスタンスに関するメタデータを格納して、繰返しパターンの再作成に役立てる必要があります。コネクタでは、メタデータを、BDSSデータ・ストアに関連データとして格納することも、PIMレコードの非表示フィールドに格納することも可能です。コネクタに格納される内容はコネクタ実装詳細で、すべてのコネクタで必ずしも同じではありません。

コネクタでレコード関連データがBDSSデータ・ストアに格納され、ランタイム・ライブラリがエラーを返したとき、リクエストされたすべての関連データについて各ステータス・コードがデータがデータベースになかったために障害が発生したことを示しており、提供された同期状態が空またはNULLの場合、ユーザーは再度初期化されます(ランタイム・ライブラリがエラーを返し、成功を示すステータス・コードと、データベースにデータがなかったために失敗したことを示すステータス・コードがある場合、このエラーはリカバリ不能です)。コネクタでは、このユースケースを考慮して、(会議ID別にレコードを照合して)最初の抽出を実行するときにファンニング済インスタンスを結合します。

D.8.1.3.2 CreateRecord

ハブでCreateRecordがコールされると、コネクタでは受信したICALを検証して、レコードをファンニングする必要があるかどうかを判断します。最初に、すべてのVEVENT間で各RRULE、RDATEおよびEXDATEを検証して、最終的な繰返しパターンを決定します。最終的な繰返しパターンをネイティブで表現できない場合、コネクタではレコードをファンニングして、後続のセッションでパターンをリストアするために必要なすべてのメタデータを格納します。

ファンニング済インスタンスの作成時に障害は発生した場合、コネクタではファンニング済インスタンスの作成を停止し、ファンニングされるレコードに関連して正常に作成されたファンニング済インスタンスをすべて削除し、エラーをハブに返します。コネクタでメッセージを記録することも可能です(同じセッション内で作成および更新操作が発生している場合は、後続のセッションに影響しません)。

D.8.1.3.3 UpdateRecord

ハブでUpdateRecordがコールされると、コネクタでは、更新対象のレコードがすでにファンニングされているかどうかを判別する必要があります。レコードがすでにファンニングされている場合は、受信したICALをファンニング済インスタンスに適用し、場合によっては受信したパターンを再度ファンニングする必要があります(新しいパターンがレコードに適用された場合は、ネイティブで表現できません)。ファンニングが再実行された場合、コネクタでは、最初に古いファンニング済インスタンスを削除してから、新しいインスタンスを作成する必要がある場合があります。また、コネクタでは、後続の抽出でこれらの削除を除外する必要があります。

コネクタですでにファンニングされたレコードに対する更新を取得し、開始日が元のファンニングのファンニング制限外である例外VEVENTがICALにある場合、コネクタでは例外をPIMに作成する必要があります。

コネクタでは、表D-38に示すファンニング関連のユースケースを考慮する必要があります。コネクタで各ユースケースを処理する方法がコネクタ実装詳細です。

表D-38 ファンニングのユースケース

更新するパターンはサポート対象か

レコードはファンニング済か

コメント

True

True

同期化セッション間でサポート対象外のパターンがサポート対象のパターンに変更されたことを示します。

True

False

通常の更新です。ファンニングはありません。

False

True

同期化セッション間でサポートされていないパターンを示します。

既存のファンニング済インスタンスの更新時に障害が発生した場合(つまり、削除や再ファンニングではなく、ファンニング済インスタンスを実際に更新した場合)、コネクタでは更新を停止し、更新されるレコードに関連して正常に更新されたファンニング済インスタンスをリストアして、エラーをハブに返す必要があります。コネクタでメッセージを記録することも可能です。このような更新-更新-リストア操作が同じセッションで発生すると、後続のセッションに影響を与えます。

D.8.1.3.4 DeleteRecord

ハブでDeleteRecordがコールされると、コネクタでは、削除対象のレコードがすでにファンニングされているかどうかを判別する必要があります。その場合、コネクタではすべてのファンニング済インスタンスを削除する必要があります。

既存のファンニング済インスタンスの削除時に、すべて削除される前に障害が発生した場合、同期状態は保存されないため(コネクタが削除を停止してエラーをハブに返す場合)、コネクタでは正常に削除されたファンニング済インスタンスをリストアする必要はなく、後続のセッションで削除が再試行されます。

D.8.2 Exchange 2007 PIMトランスポートのカレンダ・サポート

PIMトランスポート・コンポーネントでは、次のことをサポートします。

- 開催者および参加者

- レコード関連データおよびExchangeメタデータ

- サポート対象の繰返しパターン

- タイムゾーン

- 日時値

- PIMレコードID

- ExtractDomain

- CreatePIMRecord

- UpdatePIMRecord

- DeletePIMRecord

D.8.2.1 開催者および参加者

Exchangeでは、不完全な名前を参加者としてリストできます。したがって、Exchange 2007コネクタでは、メタデータから取得した参加者のリストをExchangeレコードの「To」、「CC」および「BCC」フィールドに直接書き込みます。

BDSSの必須参加者はExchangeの「To」フィールド、任意参加者はExchangeの「CC」フィールド、リソースはExchangeの「BCC」フィールドに書き込まれます。

PIMトランスポートでは、指定のユーザーの会議に対する更新リクエストを受信して、そのユーザーが参加者または開催者として表示されていない場合に、エラーをスローします。

D.8.2.1.1 参加者の解決

PIMトランスポートでは、Exchange WebサービスのResolveNamesおよびExpandDLを使用して、参加者および配信リスト・メンバーシップを解決します。

D.8.2.1.2 参加者のキャッシュ

同期化するユーザー用に、ユーザーおよび同期化セッションごとに参加者のキャッシュが作成されます。カレンダ・ドメインの抽出が開始されるとキャッシュが作成され、抽出レスポンスの各カレンダ・レコードが処理されると参加者メタデータがキャッシュに移入されます。指定のカレンダ・レコードの参加者が処理されるとき、コネクタではキャッシュを調べて一致を検索します。一致が存在する場合は、キャッシュ内の情報を使用してレコードのICALが作成されます。一致が存在しない場合は、参加者メタデータがキャッシュに追加され、次にICALに追加されます。

D.8.2.2 レコード関連データおよびExchangeメタデータ

表D-39に示すメタデータは、PIMトランスポートでカレンダの同期化を有効にするために、レコード・レベルの関連データとしてBDSSデータ・ストアに格納されるか、またはExchangeストアの非表示フィールドに格納されます。

表D-39 PIMトランスポートで格納されるPIMメタデータ

名前

値

コメント

BDSSFabricatedId

一意のID

Exchangeカレンダ・レコードを表すために使用されます。コネクタでレコードがファンニングされている場合は、このIDを使用してファンニング済レコードのコレクションを表します。

BDSS - PIMレコードIDとして格納されます。

Exchange - Exchangeの各ファンニング済インスタンスでは、このIDが非表示フィールドに書き込まれます。

D.8.2.3 サポート対象の繰返しパターン

表D-40に、サポート対象の繰返しパターンおよび各パターンの例を示します。各サンプルでは、パターンのICAL以外の記述に続いて、パターンを表すICAL RRULE値を示します。この表には、可能なすべてのパターンがリストされているわけではありません。

表D-40 サポート対象の繰返しパターン

Exchangeパターン

ICAL RRuleプロパティ値の例

Daily

毎日、2日ごと、無期限

FREQ=DAILY,INTERVAL=2,WKST=SU

毎日、毎日、10回

FREQ=DAILY;COUNT=10;INTERVAL=1;WKST=SU

毎日、5日ごと、7月末まで

FREQ=DAILY;UNTIL=20090731T173000Z;INTERVAL=5;WKST=SU

毎日、すべての平日、無期限

FREQ=DAILY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU

毎日、すべての平日、10回

FREQ=DAILY;COUNT=10;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU

毎日、すべての平日、7月末まで

FREQ=DAILY;UNTIL=20090731T1730000Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR;WKST=SU

Weekly

隔週の月曜、水曜および金曜、無期限

FREQ=WEEKLY;INTERVAL=2;BYDAY=MO, WE, FR;WKST=SU

隔週の月曜、水曜および金曜、10回

FREQ=WEEKLY;COUNT=10;INTERVAL=1;BYDAY=MO, WE, FR;WKST=SU

3週間ごとの月曜、水曜および金曜、7月末まで

FREQ=WEEKLY;UNTIL=20090731T1730000Z;INTERVAL=3;BYDAY=MO, WE, FR;WKST=SU

Absolute

Monthly

隔月の15日、無期限

FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=15;WKST=SU

Relative

Monthly

毎月最後の平日

FREQ=MONTHLY;INTERVAL=3;BYDAY=MO, TU, WE, TH, FR;BYSETPOS=-1;WKST=SU

毎月最後の週末

FREQ=MONTHLY;INTERVAL=1;BYDAY=SU, SA;BYSETPOS=-1;WKST=SU

毎月1日、10回

FREQ=MONTHLY;COUNT=10;INTERVAL=1;BYDAY=SU, MO, TU, WE, TH, FR, SA; BYSETPOS=; WKST=SU

隔月の第4木曜、2010年10月末まで

FREQ=MONTHLY;UNTIL=20101028T183000Z;INTERVAL=2;BYDAY=4 TH;WKST=SU

毎月第3木曜

FREQ=MONTHLY;COUNT=10;INTERVAL=1;BYDAY=3 TH;WKST=SU

3か月ごとの第4月曜

FREQ=MONTHLY;INTERVAL=3;BYDAY=4 MO;WKST=SU

Absolute

Yearly

毎年7月4日

YEARLY;INTERVAL=1;BYMONTHDAY=4;BYMONTH=7;WKST=SU

Relative

Yearly

毎年7月2日、10回

RRULE:FREQ=YEARLY;COUNT=10;INTERVAL=1;BYDAY=SU, MO, TU, WE, TH, FR, SA;

BYMONTH=7;BYSETPOS=2;WKST=SU

7月最後の週末、2018年まで

FREQ=YEARLY;UNTIL=20180729T190000Z;INTERVAL=1;BYDAY=SU, SA;BYMONTH=7; BYSETPOS=-1;WKST=SU

D.8.2.4 タイムゾーン

ExchangeのCalendarItemTypeには、タイムゾーン関連のプロパティとしてTimeZoneおよびMeetingTimeZoneがあります。TimeZoneプロパティは読取り専用で、カレンダ・レコードのタイムゾーンのテスト専用の記述です。MeetingTimeZoneプロパティは、新規カレンダまたは更新されたカレンダ・アイテムに設定されるプロパティです。

PIMトランスポートでは、カレンダ・レコードの作成または更新時にICAL VTIMEZONE値を同等のMeetingTimeZone値に変換し、抽出時にはこの逆に変換する必要があります。

D.8.2.5 日時値

Exchange Webサービスでは、すべての日時値が協定世界時(UTC)で格納されます。コネクタでは、ICALの日時値の書式を確認して、必要な場合はUTCに変換する必要があります。ICALでもVTIMEZONE情報が必要になるため、これによって処理が単純になります。

D.8.2.6 PIMレコードID

Exchange 2007サーバーでは、ユーザーが特定のカレンダ・レコードを更新すると、そのレコードに新しいPIMレコードIDが付けられる場合があります(詳細は、http://support.microsoft.com/のMicrosoftサポートを参照)。したがって、PIMトランスポートでは、作成または抽出するすべてのカレンダ・レコードについて、レコード・レベルの関連データとしてItemIdTypeおよびMeetingIdの両方を保存する必要があります。

PIMトランスポートでExchangeレコードの抽出、更新または削除を行うときは、特定のカレンダ・レコードに対してExchangeが実行するこのレコード再作成プロセスによって指定の操作に失敗する場合があることを考慮する必要があります。

通常、PIMトランスポートでは、最初に、使用可能なItemIdTypeを使用して指定の操作を実行しようとします。操作に失敗し、Exchangeストアにレコードが存在しないため操作に失敗したことが結果コードで示された場合、コネクタでは、このエラーが発生したのは、エンド・ユーザーが実際にレコードを削除したためか、またはExchangeのレコード再作成プロセスのためかを判断する必要があります。コネクタではこれを判断するために、Exchangeに対して、更新レコード・コールに付随するメタデータで提供されたレコード関連データに含まれるのと同じMeetingIdが含まれるカレンダ・レコードのItemIdTypeを問い合せます。問合せで一致が返された場合はExchangeでレコードが再作成されており、そうでない場合はユーザーがレコードを削除しています。Exchangeでレコードが再作成されている場合は、問合せで返された新しいItemIdTypeを使用して操作が再試行されます。

次の各項では、Exchangeに対してレコードの抽出、作成、更新および削除を行うときにPIMレコードIDが変更されることについて、Exchange PIMトランスポートで実行する必要がある処理の追加詳細を説明します。

D.8.2.7 ExtractDomain

Exchange PIMトランスポートでは、ランタイム・ライブラリ内にあるGetAssocDataIdOfAssociatedDataメソッドを使用すると、ItemIdTypeからBDSSデータ・ストアに格納されたPIMレコードIDへの必要な変換を実行できるため、DeleteUnawareインタフェースを実装しないように更新できます。PIMトランスポートで削除の検出を実行するように設定すると、Exchangeサーバーへの追加問合せが不要になります。

コネクタでは、他のドメインと同じロジックに従ってドメインを抽出します。ただし、以前にファンニングされたインスタンスを、単一のICALメッセージを含む単一のPIMUpsertRecordに結合する追加ステップを実行する必要があります。

D.8.2.7.1 ファンニングのロジック

抽出レスポンスにファンニング済インスタンスが含まれる場合、抽出されなかったファンニング済インスタンスは前のセッションで更新または削除されている場合があるため、コネクタでは、関連するすべてのファンニング済インスタンス(抽出レスポンスに含まれるものと含まれなかったものの両方)をすべて識別し、元の繰返しパターンが設定された単一のICALメッセージに各ファンニング済インスタンスを表示する方法を決定する必要があります。

コネクタでは、再作成プロセスの中で、元のレコード・データおよび元の繰返しパターンを含むマスターVEVENTが必要です。コネクタでは、1つのレコードのファンニング済インスタンスをすべて取得して単一のICALに結合する必要があるため、FanningStateが「Fanned」(これはファンニング済レコードの初期状態を示します)のファンニング済インスタンスを使用することもできます。ただし、変更が実行された各ファンニング済インスタンスの場合、この方法は失敗します(各インスタンスの例外が含まれる繰返しパターンと同じです)。このため、PIMトランスポートでは、マスターVEVENTをレコード・レベルの関連データとして格納します。

たとえば、セッション1で、パターンが「3か月ごとの初日、4回」のレコードのCreateRecordをエンジンがコールし、Exchangeでこのパターンをサポートしていないとします。PIMトランスポートでは、3か月ごとの初日に該当する繰返しなしの4つのインスタンスにこのパターンをファンニングします。セッション2の前に、Outlookユーザーが1番目のファンニング済インスタンスの開始日を変更し、2番目のファンニング済インスタンスを削除します。セッション2が開始されると、コネクタではRRULEパターンが「3か月ごとの初日、4回」になるようにICALを再作成し、抽出レスポンスには、日付が変更されたカレンダ・レコードを含む1つのアップサート、および削除されたレコードを含む1つの削除が含まれます。マスターVEVENTはレコード関連データまたはExchangeレコードのいずれかから取得され、アップサートは例外VEVENTとしてICALに表示されます。削除は、マスターVEVENTのEXDATEとしてICALに表示されます。セッション3の前に、3番目のファンニング済インスタンスを更新して、レコードの開始時間を変更したとします。セッション3が開始されると、抽出レスポンスには3番目のファンニング済インスタンスのみが含まれますが、セッション2で行われた変更がパターンに反映されるように他のインスタンスも取得する必要があります。コネクタでは、Exchangeに対して他のレコードを問い合せて、マスターVEVENTに2番目のインスタンスのEXDATE(これはセッション2で削除されたため)、および2つの例外VEVENT(日付が変更された1番目のファンニング済インスタンスの例外、および時刻が変更された3番目のファンニング済インスタンスの例外)が含まれるように、パターンを再作成する必要があります。

ユーザーが繰返しパターンをファンニング済インスタンスに追加した場合、コネクタではそのファンニング済インスタンスを元のパターンの削除インスタンスとして処理し、レコードは結合されたICALに含めるのではなく、抽出レスポンスに個別のレコードとして保持します。受信コネクタでは、EXDATEがあるため元のパターンのインスタンスを非表示にし、ファンニングされた例外レコードに対して新しい繰返しレコードを作成します。

注意:

ICAL RFCでは、VEVENTには任意の数のRRULE、RDATE、EXRULEおよびEXDATEを含めることができると規定されています。繰返しルールを含む例外を表すのは簡単ですが、例外が含まれた繰返しパターンを含む例外を表すのは困難です(それ自体に例外パターンを持つ繰返しパターンが含まれるこのような例外は無限に繰り返される可能性があります)。

D.8.2.7.2 変更されたPIMレコードIDのロジック

ExchangeではPIMレコードIDを変更できるため、コネクタでは、抽出レスポンスに含まれる特定のPIMレコードIDが変更されたかどうかを判断する必要があります。これを行うには、抽出されたファンニング済インスタンスのItemIdType値を、指定した元の開始日にBDSSレコード関連データとして格納されているItemIdTypes(Exchangeレコードの非表示フィールドにも関連データとして格納されています)と対比して不一致を検出します。IDの変更が検出されると、コネクタでは、新しいItemIdTypeを含むようにレコード関連データを更新する必要があります。

D.8.2.8 CreatePIMRecord

次の各項では、CallPIMRecordメソッド・コールによって発生するプロセスについて説明します。

- ファンニングのロジック

- 変更されたPIMレコードIDのロジック

D.8.2.8.1 ファンニングのロジック

PIMトランスポートでは、カレンダ・レコードの各VEVENTに含まれるRRULE、RDATEおよびEXDATEプロパティをすべて評価して、レコードをファンニングする必要があるかどうかを決定します。

ファンニングが必要な場合、コネクタでは、ファンニング済レコードのコレクションの単一の一意IDをBDSSに提供するように要求されます。PIMトランスポートでは、原則として、他のドメインに対してこの処理を行う場合に指定のレコードのPR_SOURCE_KEYを提供するため、コネクタでは、1番目のファンニング済インスタンスのPR_SOURCE_KEYをPIMレコードIDとして提供して、ファンニング済レコードのコレクションを表します。

Exchangeで作成された各ファンニング済インスタンスには、次の非表示フィールドがあります。

- OriginalStartDate: ファンニング済インスタンスの開始日が格納されます。この値は、レコードの有効期間中に変更されることはありません。

- BDSSFabricatedPIMRecordId: BDSSにPIMレコードIDとして提供されるレコードIDが格納されます。前述したように、これは1番目のファンニング済インスタンスのPR_SOURCE_KEYです。

注意:

1番目のファンニング済インスタンスにこの非表示フィールドの値は含まれません。コネクタでは、関連するファンニング済レコードを単一のインスタンスに結合するときに、この違いを考慮する必要があります。

- 場合によってはマスターVEVENTデータ(保留中のオープンな問題)。

- MeetingId: Exchangeレコードの会議ID。

非表示のExchangeフィールドに加えて、PIMトランスポートには、作成されたレコードIDに関連付けられたレコード・レベルの次の関連データがあります。

- FannedState: 各ファンニング済インスタンスの関連データ。

- OriginalStartDate: 各ファンニング済インスタンスの関連データ。

- ItemIdType: 各ファンニング済インスタンスの関連データ。

- 場合によってはマスターVEVENTデータ。

PIMトランスポートでは、レコードをファンニングする必要がある場合に、ファンニング制限の構成値に基づいて各インスタンスの開始日を計算し、受信するパターンを表すレコードのコレクションを作成します。

PIMトランスポートでは、次の場合にレコードをファンニングします。

- サポート対象の繰返しパターンではRRULEのコレクションを表すことができない場合。

- RDATEがICALに存在する場合。

D.8.2.8.2 変更されたPIMレコードIDのロジック

レコード作成の場合、メソッドでレコードが作成されるまでExchangeにレコードが存在しないため、PIMレコードIDの変更はコネクタに影響を与えません。ただし、レコードの変更および抽出時に抽出コードによってExchangeでPIMレコードIDを変更したかどうかを判別できるように、レコード・レベルの関連データを提供する必要があります。

カレンダ・ドメインの場合、他のすべてのドメインと同様に、Exchange PIMトランスポートでは、指定のレコードのPR_SOURCE_KEY値をPIMレコードIDとして提供し、Exchange WebサービスIDまたはItemIdTypeをレコード関連データとして格納します。コネクタでは常に、Exchangeレコードと相互作用する場合はItemIdTypeを指定し、BDSSと相互作用する場合はPR_SOURCE_KEYを指定する必要があります。

D.8.2.9 UpdatePIMRecord

この項では、UpdatePIMRecordメソッド・コールで発生する次のプロセスについて説明します。

- ファンニングのロジック

- 会議ID処理

- 変更されたPIMレコードIDのロジック

D.8.2.9.1 ファンニングのロジック

PIMトランスポートでは、UpdateRecordのコール時にレコード関連データに提供された関連データを検証して、更新対象のレコードがすでにファンニングされているかどうかを判別します。

PIMトランスポートでは、RRULE、RDATEおよびEXDATE属性のコレクションを検証して、受信したICALをネイティブでExchangeに表示できるかどうかを判別します。

表D-41に、カレンダ・レコードの更新時にPIMトランスポートで実行する処理を示します。

表D-41 PIMトランスポートの更新処理

更新するパターンはサポート対象か

レコードはファンニング済か

処理

True

True

同期化セッション間でサポート対象外のパターンがサポート対象のパターンに変更されたことを示します。

- ファンニング済インスタンスを削除します。

- サポート対象のパターンを使用して新規レコードを作成します。

- 削除のエコーが抽出レスポンスから削除されるように、後続の抽出用にファンニング済インスタンスに関連する古いassocdataを保持します。

- 作成されたレコードに、作成済IDが非表示フィールドとして含まれていることを確認します。

True

False

更新を実行します。

False

True

同期化セッション間でサポートされていないパターンを示します。

元の繰返しパターンが変更された場合は、次の処理が実行されます。

- ファンニング済インスタンスを削除します。

- 新しいファンニング済インスタンスを作成します。

- 後続の抽出用にファンニング済インスタンスに関連する古いassocdataを保持し、FannedStateをRefannedに設定します。

- 作成された各レコードにエコー・フラグを設定します。

- 各ファンニング済インスタンスに、更新でPIMレコードIDとして提供された同じ作成済IDが含まれていることを確認します。

元の繰返しパターンが変更されなかった場合は、次の処理が実行されます。

- 受信したICALの例外を既存のファンニング済インスタンスに関連付け、そのファンニング済インスタンスを例外データで更新します。

- 繰返しパターン・データを除くマスターVEVENTデータを、残りのファンニング済インスタンスに適用します。

- 更新した各ファンニング済インスタンスにエコー・フラグを設定します。

False

False

同期化セッション間でサポート対象のパターンがサポート対象外のパターンに変更されたことを示します。

- 繰返しレコードを削除します。

- 新しいファンニング済インスタンスを作成します。

- 古いassocdataを削除します。

- ファンニング・メタデータを保持する新しいassocdataを作成します。

PIMトランスポートで更新を受信し、パターンがすでにファンニングされて指定のファンニング済インスタンスにはRecurringExceptionのFannedStateがあるが、関連データに格納された元の開始日と一致するEXDATEがマスターVEVENTにないことを確認すると、コネクタでは競合が発生してExchangeデータが失われたとみなす必要があります。この場合、コネクタでは、RecurringExceptionのFannedStateがあるファンニング済レコードを削除して、関連データを更新する必要があります。この削除は後続の同期化セッションで他のコネクタに伝播され、繰返しパターンを持つファンニング済例外のために個別に同期化された繰返しレコードが削除されます。

D.8.2.9.2 会議ID処理

コネクタでは、ICALに含まれるMeetingIdを更新された各レコードの非表示のExchangeフィールドに格納し、既存のカレンダ・レコードのMeetingIdは更新しません。抽出が実行されると、非表示フィールドのMeetingId(レコード上のではなく)がICALに配置されます。非表示フィールドに格納されるMeetingIdは、会議のレコードに格納された実際のMeetingIdと同じ場合とそうでない場合があります。同じ場合は、BDSSまたはExchangeクライアントのいずれかでレコードが作成されたことを意味します。異なる場合は、更新された結果、競合が発生してExchangeデータが失われたことを意味します。いずれの場合も、コネクタでは後続のセッションの更新時にICALに含まれるMeetingIdをハブに返すため、問題はありません。MeetingIDを返すことによって、Exchange自体またはExchangeクライアントが実行する会議管理をコネクタが誤って破損することはありません。

D.8.2.9.3 変更されたPIMレコードIDのロジック

PIMトランスポートでは、第D.8.2.6項「PIMレコードID」の説明に従って更新を実行します。

D.8.2.10 DeletePIMRecord

Exchange PIMトランスポートでは、常にレコードの作成済ID(PR_SOURCE_KEYとも呼ばれます)を指定しますが、Exchangeで削除を実行するときはItemIdTypeを指定する必要があるため、任意のドメインに対して削除操作を実行するときは、常にBDSS RTLからレコード関連データを取得する必要があります。

D.8.2.10.1 ファンニングのロジック

レコードがすでにファンニングされている場合、PIMトランスポートでレコードのファンニング済インスタンスをすべて削除するには、レコードのレコード関連データを取得して各インスタンスを削除します。

D.8.2.10.2 変更されたPIMレコードIDのロジック

PIMトランスポートでは、第D.8.2.6項「PIMレコードID」の説明に従って削除を実行します。

E カスタム・フィールドのXSLTおよびXSD

この付録では、Exchange 2007コネクタのカスタム・フィールドを変換するために使用するXLSTおよびXSDについて説明します。

この付録のトピックは、次のとおりです。

- カスタム・フィールドの変換の概要

- ICALフィールド定義の定義

- ICALへのExchangeコネクタのカスタム・フィールドの変換

- Exchangeコネクタ・フィールドへのICALフィールドの変換

- Java標準タイムゾーンへのWindowsタイムゾーンのマッピング

E.1 カスタム・フィールドの変換の概要

第9章「カレンダ・ドメインの同期化」で説明されているように、

ハブに公開されない一連のXSDには、2次変換方式を使用してカスタム・フィールドを追加できます。Exchange 2007コネクタによるハブとの同期化を有効にするには、次のXSDファイルを作成する必要があります。

- Exchange 2007コネクタのカスタム・フィールド定義を定義するXSDファイル

- フィールド定義のICALに対応する部分を定義するXSDファイル

- Exchange 2007フィールド定義をICAL定義に変換するXSLTファイル

- ICALフィールド定義をExchange 2007定義に変換するXSLTファイル

これらのファイルは、ハブに公開されることはないため、2次ファイルとみなされます。Exchange 2007コネクタによるこれらのフィールドの同期化を有効にするには、これらのXSDファイルを2番目のXSLファイルにマップします。

E.1.1 カスタム・フィールドの定義

例E-1に、カスタム・フィールド定義を定義するXSDを示します。

例E-1 Exchangeコネクタのカスタム・フィールドの定義

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:etl="http://xmlns.oracle.com/bdss/connector/exchange2007/types"
xmlns:exch="http://xmlns.oracle.com/bdss/connector/exchange2007/CalendarDomain/exchange2007Connector"
xmlns:hub="http://xmlns.oracle.com/bdss/hub/TypeLibrary"
targetNamespace="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarDomain"
elementFormDefault="qualified" exch:PimDomainId="IPM.Appointment"
exch:FolderClass="IPF.Appointment"
exch:DomainClassType="CalendarItemType"
exch:ExchangeDomainBatchSize="512"
exch:DisposalType="MoveToDeletedItems"
exch:BodyType="Text"
exch:FanningLimit="3"
exch:ConflictResolutionType="AlwaysOverwrite">
<xsd:import namespace="http://xmlns.oracle.com/bdss/hub/TypeLibrary"
schemaLocation="../../../hub/HubTypeLibrary.xsd"/>
<xsd:import namespace="http://xmlns.oracle.com/bdss/connector/exchange2007/types"
schemaLocation="../../exchange2007typelibrary.xsd"/>
<xsd:element name="ExchangeCalendar">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="AdjacentMeetingCount" type="xsd:integer"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="false" exch:IsCalculated="true"/>
<xsd:element name="AllowNewTimeProposal" type="xsd:boolean"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="false"/>
<xsd:element name="AppointmentReplyTime" type="xsd:dateTime"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="false"/>
<xsd:element name="AppointmentSequenceNumber" type="xsd:integer"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="false"/>
<xsd:element name="AppointmentState" type="xsd:integer" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="Body" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"
exch:IsCalculated="true"/>
<xsd:element name="CalendarItemType" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="Categories" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="ConferenceType" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="ConflictingMeetingCount" type="xsd:integer"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="false" exch:IsCalculated="true"/>
<xsd:element name="DateTimeStamp" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="Duration" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="End" type="xsd:dateTime" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="IsAllDayEvent" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="IsCancelled" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"
exch:IsCalculated="true"/>
<xsd:element name="IsMeeting" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="IsOnlineMeeting" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="IsRecurring" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"
exch:IsCalculated="true"/>
<xsd:element name="IsResponseRequested" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="ItemClass" type="xsd:string" minOccurs="1"
maxOccurs="1" nillable="false" exch:MappedInXsl="true"/>
<xsd:element name="LegacyFreeBusyStatus" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="Location" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="MeetingRequestWasSent" type="xsd:boolean"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="false"/>
<xsd:element name="MeetingWorkspaceUrl" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="MyResponseType" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="NetShowUrl" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="OptionalAttendees" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"
exch:IsCalculated="true"/>
<xsd:element name="Organizer" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="OriginalStart" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"
exch:IsCalculated="true"/>
<xsd:element name="Importance" type="etl:ExchangeImportance"
default="Normal" exch:MappedInXsl="true"/>
<xsd:element name="ReminderDueBy" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="ReminderIsSet" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="ReminderMinutesBeforeStart"
type="etl:ExchangeUnsignedLong" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="RequiredAttendees" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"
exch:IsCalculated="true"/>
<xsd:element name="Resources" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"
exch:IsCalculated="true"/>
<xsd:element name="Sensitivity" type="etl:ExchangeSensitivity"
exch:MappedInXsl="true"/>
<xsd:element name="Start" type="xsd:dateTime" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="Subject" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="TimeZone" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="UID" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="When" type="xsd:dateTime" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="false"/>
<xsd:element name="FabricatedId" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true"
exch:PropertyName="BDSSFabricatedId"
exch:DistinguishedPropertySetId="PublicStrings"
exch:PropertyType="String" exch:MappedInXsl="true"/>
<!-- Meeting fields -->
<xsd:element name="ResponseStatus" type="etl:ExchangeUnsignedLong" minOccurs="0"
maxOccurs="1" nillable="true"
exch:PropertyId="0x8218"
exch:DistinguishedPropertySetId="Appointment"
exch:PropertyType="Integer" exch:MappedInXsl="true"/>
<xsd:element name="MeetingStatus" type="etl:ExchangeUnsignedLong" minOccurs="0"
maxOccurs="1" nillable="true"
exch:PropertyId="0x8217"
exch:DistinguishedPropertySetId="Appointment"
exch:PropertyType="Integer" exch:MappedInXsl="true"/>
<xsd:element name="ResponseRequested" type="xsd:boolean" minOccurs="0"
maxOccurs="1" nillable="true"
exch:PropertyTag="0x0063"
exch:PropertyType="Boolean" exch:MappedInXsl="true"/>
<xsd:element name="OwnerAppointmentId" type="etl:ExchangeUnsignedLong" minOccurs="0"
maxOccurs="1" nillable="true"
exch:PropertyTag="0x0062"
exch:PropertyType="Integer" exch:MappedInXsl="true"/>
<xsd:element name="ReplyTo" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true"
exch:DistinguishedPropertySetId="InternetHeaders"
exch:PropertyName="reply-to"
exch:PropertyType="String" exch:MappedInXsl="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

E.2 ICALフィールド定義の定義

例E-2に、カスタム・フィールドのICAL定義を定義するXSDを示します。

例E-2 ICAL定義の定義

<?xml version="1.0" encoding="windows-1252" ?>
<!--  $Header: fts/connectors/exchange2007/oracle/bdss/connectors/exchange2007/pimtransport/transform/exchange/calendar/intermediatetranslation/veventasxml.xsd st_fts_lharding_fanningsupport/2 2009/07/04 14:35:59 lharding Exp $ -->
<!--
Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.

NAME
exchange2007contact.xsd

DESCRIPTION
Contains XML schema definition that for VEVENT properties of a ICAL
message

NOTES
<other useful comments, qualifications, etc.>

MODIFIED   (MM/DD/YY)
lharding 01/10/09 - initial version
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarVEVENT"
xmlns:etl="http://xmlns.oracle.com/bdss/connector/exchange2007/types"
xmlns:exch="http://xmlns.oracle.com/bdss/connector/exchange2007/CalendarDomain/exchange2007Connector"
xmlns:hub="http://xmlns.oracle.com/bdss/hub/TypeLibrary"
targetNamespace="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarVEVENT"
elementFormDefault="qualified">
<xsd:import namespace="http://xmlns.oracle.com/bdss/hub/TypeLibrary"
schemaLocation="../../../hub/HubTypeLibrary.xsd"/>
<xsd:import namespace="http://xmlns.oracle.com/bdss/connector/exchange2007/types"
schemaLocation="../../exchange2007typelibrary.xsd"/>
<xsd:complexType name="TriggerParams">
<xsd:sequence>
<xsd:element name="RELATED" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="PERIOD" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="VALARM">
<xsd:sequence>
<xsd:element name="ACTION" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="DESCRIPTION" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="TRIGGER" type="TriggerParams" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="ExchangeCalendarVEvent">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="VALARM" type="VALARM" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="CALSCALE" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="CATEGORIES" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="CLASS" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="COMMENT" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="CREATED" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="DESCRIPTION" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="DTEND" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="DTSTAMP" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="DTSTART" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="DURATION" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="EXDATE" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="LAST-MODIFIED" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="false" exch:MappedInXsl="true"/>
<xsd:element name="LOCATION" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="ATTENDEE" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="ORGANIZER" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="PRIORITY" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="RECURRENCE-ID" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="RESOURCES" type="hub:HubTokens" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="RELATED-TO" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="SEQUENCE" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="STATUS" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="SUMMARY" type="xsd:string" minOccurs="0"
maxOccurs="1" nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="TRANSP" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="GEO" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="false" exch:MappedInXsl="true"/>
<xsd:element name="UID" type="xsd:string" minOccurs="1" maxOccurs="1"
nillable="false" exch:MappedInXsl="true"/>
<xsd:element name="URL" type="xsd:string" minOccurs="0" maxOccurs="1"
nillable="true" exch:MappedInXsl="true"/>
<xsd:element name="X-MICROSOFT-CDO-ALLDAYEVENT" type="xsd:boolean"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="true"/>
<xsd:element name="X-ORACLE-BDSS-FABRICATED-ID" type="xsd:string"
minOccurs="1" maxOccurs="1" nillable="false"
exch:MappedInXsl="true"/>
<xsd:element name="X-MICROSOFT-CDO-OWNERAPPTID" type="etl:ExchangeUnsignedLong"
minOccurs="0" maxOccurs="1" nillable="true"
exch:MappedInXsl="true"/>
<xsd:element name="X-ORACLE-BDSS-SYNCING-USER" type="xsd:string"
minOccurs="1" maxOccurs="1" nillable="false"
exch:MappedInXsl="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

E.3 ICALへのExchangeコネクタのカスタム・フィールドの変換

例E-3に、例E-1で定義したカスタム・フィールドをICALに変換するXLSTを示します。

例E-3 ICALへのカスタム・フィールドの変換

<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper <!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="XSD">
<schema location="calendaritemtype.xsd"/>
<rootElement name="ExchangeCalendar" namespace="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarDomain"/>
</source>
</mapSources>
<mapTargets>
<target type="XSD">
<schema location="veventasxml.xsd"/>
<rootElement name="ExchangeCalendarVEvent" namespace="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarVEVENT"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.0.0(build 090218.0200.2549) AT [WED MAY 13 20:14:06 CDT 2009]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:xpath20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:ns1="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarVEVENT"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:exch="http://xmlns.oracle.com/bdss/connector/exchange2007/CalendarDomain/exchange2007Connector"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:icalconverter="http://www.oracle.com/XSL/Transform/java/oracle.bdss.connectors.exchange2007.pimtransport.transform.exchange.calendar.intermediatetranslation.ICalConverter"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns0="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarDomain"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:hub="http://xmlns.oracle.com/bdss/hub/TypeLibrary"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:etl="http://xmlns.oracle.com/bdss/connector/exchange2007/types"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl exch xsd ns0 hub etl ns1 xpath20 bpws mhdr oraext dvm hwf med ids xdk xref ora socket ldap">
<xsl:template match="/">
<ns1:ExchangeCalendarVEvent>
<ns1:VALARM>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendar/ns0:ReminderIsSet = "true"'>
<ns1:ACTION>
<xsl:text disable-output-escaping="no">DISPLAY</xsl:text>
</ns1:ACTION>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendar/ns0:ReminderIsSet = "true"'>
<ns1:DESCRIPTION>
<xsl:text disable-output-escaping="no">REMINDER</xsl:text>
</ns1:DESCRIPTION>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendar/ns0:ReminderIsSet = "true"'>
<ns1:TRIGGER>
<ns1:PERIOD>
<xsl:value-of select="icalconverter:ConvertReminderMinutesToDuration(/ns0:ExchangeCalendar/ns0:ReminderMinutesBeforeStart)"/>
</ns1:PERIOD>
<ns1:RELATED>
<xsl:text disable-output-escaping="no">START</xsl:text>
</ns1:RELATED>
</ns1:TRIGGER>
</xsl:when>
</xsl:choose>
</ns1:VALARM>
<ns1:CALSCALE>
<xsl:text disable-output-escaping="no">GREGORIAN</xsl:text>
</ns1:CALSCALE>
<ns1:CATEGORIES>
<xsl:for-each select="/ns0:ExchangeCalendar/ns0:Categories/ns0:Token">
<hub:Token>
<xsl:value-of select="."/>
</hub:Token>
</xsl:for-each>
</ns1:CATEGORIES>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendar/ns0:Sensitivity = "Private"'>
<ns1:CLASS>
<xsl:text disable-output-escaping="no">PRIVATE</xsl:text>
</ns1:CLASS>
</xsl:when>
<xsl:when test='/ns0:ExchangeCalendar/ns0:Sensitivity = "Confidential"'>
<ns1:CLASS>
<xsl:text disable-output-escaping="no">CONFIDENTIAL</xsl:text>
</ns1:CLASS>
</xsl:when>
<xsl:otherwise>
<ns1:CLASS>
<xsl:text disable-output-escaping="no">PUBLIC</xsl:text>
</ns1:CLASS>
</xsl:otherwise>
</xsl:choose>
<ns1:DESCRIPTION>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:Body"/>
</ns1:DESCRIPTION>
<ns1:DTEND>
<xsl:value-of select="icalconverter:FormatAsICalDate(/ns0:ExchangeCalendar/ns0:End)"/>
</ns1:DTEND>
<ns1:DTSTART>
<xsl:value-of select="icalconverter:FormatAsICalDate(/ns0:ExchangeCalendar/ns0:Start)"/>
</ns1:DTSTART>
<ns1:LOCATION>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:Location"/>
</ns1:LOCATION>
<ns1:ORGANIZER>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:Organizer"/>
</ns1:ORGANIZER>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendar/ns0:Importance = "Low"'>
<ns1:PRIORITY>
<xsl:text disable-output-escaping="no">9</xsl:text>
</ns1:PRIORITY>
</xsl:when>
<xsl:when test='/ns0:ExchangeCalendar/ns0:Importance = "High"'>
<ns1:PRIORITY>
<xsl:text disable-output-escaping="no">1</xsl:text>
</ns1:PRIORITY>
</xsl:when>
<xsl:otherwise>
<ns1:PRIORITY>
<xsl:text disable-output-escaping="no">5</xsl:text>
</ns1:PRIORITY>
</xsl:otherwise>
</xsl:choose>
<ns1:ATTENDEE>
<xsl:for-each select="/ns0:ExchangeCalendar/ns0:RequiredAttendees/ns0:Token">
<hub:Token>
<xsl:value-of select="."/>
</hub:Token>
</xsl:for-each>
<xsl:for-each select="/ns0:ExchangeCalendar/ns0:OptionalAttendees/ns0:Token">
<hub:Token>
<xsl:value-of select="."/>
</hub:Token>
</xsl:for-each>
<xsl:for-each select="/ns0:ExchangeCalendar/ns0:Resources/ns0:Token">
<hub:Token>
<xsl:value-of select="."/>
</hub:Token>
</xsl:for-each>
</ns1:ATTENDEE>
<ns1:STATUS>
<xsl:text disable-output-escaping="no">CONFIRMED</xsl:text>
</ns1:STATUS>
<ns1:SUMMARY>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:Subject"/>
</ns1:SUMMARY>
<ns1:TRANSP>
<xsl:text disable-output-escaping="no">OPAQUE</xsl:text>
</ns1:TRANSP>
<ns1:UID>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:UID"/>
</ns1:UID>
<ns1:X-MICROSOFT-CDO-OWNERAPPTID>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:OwnerAppointmentId"/>
</ns1:X-MICROSOFT-CDO-OWNERAPPTID>
<ns1:X-ORACLE-BDSS-FABRICATED-ID>
<xsl:value-of select="/ns0:ExchangeCalendar/ns0:FabricatedId"/>
</ns1:X-ORACLE-BDSS-FABRICATED-ID>
</ns1:ExchangeCalendarVEvent>
</xsl:template>
</xsl:stylesheet>

E.4 Exchangeコネクタ・フィールドへのICALフィールドの変換

例E-4に、例E-2のICALプロパティをExchange 2007コネクタの形式に変換するXSLTを示します。

例E-4 ICALプロパティの変換

<?xml version="1.0" encoding="UTF-8" ?>
<?oracle-xsl-mapper <!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. -->
<mapSources>
<source type="XSD">
<schema location="veventasxml.xsd"/>
<rootElement name="ExchangeCalendarVEvent" namespace="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarVEVENT"/>
</source>
</mapSources>
<mapTargets>
<target type="XSD">
<schema location="calendaritemtype.xsd"/>
<rootElement name="ExchangeCalendar" namespace="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarDomain"/>
</target>
</mapTargets>
<!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.0.0(build 090218.0200.2549) AT [WED MAY 13 20:45:20 CDT 2009]. -->
?>
<xsl:stylesheet version="1.0"
xmlns:xpath20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:ns0="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarVEVENT"
xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction"
xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue"
xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:med="http://schemas.oracle.com/mediator/xpath"
xmlns:exch="http://xmlns.oracle.com/bdss/connector/exchange2007/CalendarDomain/exchange2007Connector"
xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk"
xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="http://xmlns.oracle.com/bdss/connector/exchange2007/ExchangeCalendarDomain"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:icalconverter="http://www.oracle.com/XSL/Transform/java/oracle.bdss.connectors.exchange2007.pimtransport.transform.exchange.calendar.intermediatetranslation.ICalConverter"
xmlns:hub="http://xmlns.oracle.com/bdss/hub/TypeLibrary"
xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator"
xmlns:etl="http://xmlns.oracle.com/bdss/connector/exchange2007/types"
xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap"
exclude-result-prefixes="xsi xsl ns0 exch xsd hub etl ns1 xpath20 bpws mhdr oraext dvm hwf med ids xdk xref ora socket ldap">
<xsl:template match="/">
<ns1:ExchangeCalendar>
<ns1:Body>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:DESCRIPTION"/>
</ns1:Body>
<ns1:Categories>
<xsl:for-each select="/ns0:ExchangeCalendarVEvent/ns0:CATEGORIES/ns0:Token">
<hub:Token>
<xsl:value-of select="."/>
</hub:Token>
</xsl:for-each>
</ns1:Categories>
<ns1:End>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:DTEND"/>
</ns1:End>
<ns1:ItemClass>
<xsl:text disable-output-escaping="no">IPM.Appointment</xsl:text>
</ns1:ItemClass>
<ns1:Location>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:LOCATION"/>
</ns1:Location>
<ns1:OptionalAttendees>
<xsl:for-each select="/ns0:ExchangeCalendarVEvent/ns0:OPT-PARTICIPANT/ns0:Token">
<xsl:choose>
<xsl:when test="not(contains(.,/ns0:ExchangeCalendarVEvent/ns0:X-ORACLE-BDSS-SYNCING-USER))">
<hub:Token>
<xsl:value-of select="substring-after(.,'MAILTO:')"/>
</hub:Token>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</ns1:OptionalAttendees>
<ns1:Organizer>
<xsl:value-of select="translate(substring-after(/ns0:ExchangeCalendarVEvent/ns0:ORGANIZER,'MAILTO:'),' ','')"/>
</ns1:Organizer>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:PRIORITY = "1"'>
<ns1:Importance>
<xsl:text disable-output-escaping="no">High</xsl:text>
</ns1:Importance>
</xsl:when>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:PRIORITY = "5"'>
<ns1:Importance>
<xsl:text disable-output-escaping="no">Normal</xsl:text>
</ns1:Importance>
</xsl:when>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:PRIORITY = "9"'>
<ns1:Importance>
<xsl:text disable-output-escaping="no">Low</xsl:text>
</ns1:Importance>
</xsl:when>
<xsl:otherwise>
<ns1:Importance>
<xsl:text disable-output-escaping="no">Normal</xsl:text>
</ns1:Importance>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:VALARM/ns0:TRIGGER/ns0:PERIOD != ""'>
<ns1:ReminderIsSet>
<xsl:text disable-output-escaping="no">True</xsl:text>
</ns1:ReminderIsSet>
</xsl:when>
<xsl:otherwise>
<ns1:ReminderIsSet>
<xsl:text disable-output-escaping="no">False</xsl:text>
</ns1:ReminderIsSet>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:VALARM/ns0:TRIGGER/ns0:PERIOD != ""'>
<ns1:ReminderMinutesBeforeStart>
<xsl:value-of select="icalconverter:DurationToMinutesBeforeStart(/ns0:ExchangeCalendarVEvent/ns0:VALARM/ns0:TRIGGER/ns0:PERIOD)"/>
</ns1:ReminderMinutesBeforeStart>
</xsl:when>
<xsl:otherwise>
<ns1:ReminderMinutesBeforeStart/>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:VALARM/ns0:TRIGGER/ns0:PERIOD != ""'>
<ns1:ReminderDueBy>
<xsl:value-of select="icalconverter:DurationToReminderDueByDate(/ns0:ExchangeCalendarVEvent/ns0:DTSTART,/ns0:ExchangeCalendarVEvent/ns0:VALARM/ns0:TRIGGER/ns0:PERIOD)"/>
</ns1:ReminderDueBy>
</xsl:when>
<xsl:otherwise>
<ns1:ReminderDueBy/>
</xsl:otherwise>
</xsl:choose>
<ns1:RequiredAttendees>
<xsl:for-each select="/ns0:ExchangeCalendarVEvent/ns0:REQ-PARTICIPANT/ns0:Token">
<xsl:choose>
<xsl:when test="not(contains(.,/ns0:ExchangeCalendarVEvent/ns0:X-ORACLE-BDSS-SYNCING-USER))">
<hub:Token>
<xsl:value-of select="substring-after(.,'MAILTO:')"/>
</hub:Token>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:if test="not(contains(translate(substring-after(/ns0:ExchangeCalendarVEvent/ns0:ORGANIZER,'MAILTO:'),' ', ''),/ns0:ExchangeCalendarVEvent/ns0:X-ORACLE-BDSS-SYNCING-USER))">
<hub:Token>
<xsl:value-of select="translate(substring-after(/ns0:ExchangeCalendarVEvent/ns0:ORGANIZER,'MAILTO:'),' ','')"/>
</hub:Token>
</xsl:if>
</ns1:RequiredAttendees>
<ns1:Resources>
<xsl:for-each select="/ns0:ExchangeCalendarVEvent/ns0:NON-PARTICIPANT/ns0:Token">
<xsl:choose>
<xsl:when test="not(contains(.,/ns0:ExchangeCalendarVEvent/ns0:X-ORACLE-BDSS-SYNCING-USER))">
<hub:Token>
<xsl:value-of select="substring-after(.,'MAILTO:')"/>
</hub:Token>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</ns1:Resources>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:CLASS = "PRIVATE"'>
<ns1:Sensitivity>
<xsl:text disable-output-escaping="no">Private</xsl:text>
</ns1:Sensitivity>
</xsl:when>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:CLASS = "CONFIDENTIAL"'>
<ns1:Sensitivity>
<xsl:text disable-output-escaping="no">Confidential</xsl:text>
</ns1:Sensitivity>
</xsl:when>
<xsl:otherwise>
<ns1:Sensitivity>
<xsl:text disable-output-escaping="no">Normal</xsl:text>
</ns1:Sensitivity>
</xsl:otherwise>
</xsl:choose>
<ns1:Start>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:DTSTART"/>
</ns1:Start>
<ns1:Subject>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:SUMMARY"/>
</ns1:Subject>
<ns1:UID>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:UID"/>
</ns1:UID>
<ns1:FabricatedId>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:X-ORACLE-BDSS-FABRICATED-ID"/>
</ns1:FabricatedId>
<ns1:OwnerAppointmentId>
<xsl:value-of select="/ns0:ExchangeCalendarVEvent/ns0:X-MICROSOFT-CDO-OWNERAPPTID"/>
</ns1:OwnerAppointmentId>
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:REQ-PARTICIPANT/ns0:Token != "" or /ns0:ExchangeCalendarVEvent/ns0:OPT-PARTICIPANT/ns0:Token != "" or /ns0:ExchangeCalendarVEvent/ns0:NON-PARTICIPANT/ns0:Token != ""'>
<ns1:ResponseRequested>
<xsl:text disable-output-escaping="no">true</xsl:text>
</ns1:ResponseRequested>
</xsl:when>
<xsl:otherwise>
<ns1:ResponseRequested>
<xsl:text disable-output-escaping="no">false</xsl:text>
</ns1:ResponseRequested>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="contains(/ns0:ExchangeCalendarVEvent/ns0:ORGANIZER, /ns0:ExchangeCalendarVEvent/ns0:X-ORACLE-BDSS-SYNCING-USER) = 'true'">
<!-- SyncingUserIsOrganizer -->
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:REQ-PARTICIPANT/ns0:Token != "" or /ns0:ExchangeCalendarVEvent/ns0:OPT-PARTICIPANT/ns0:Token != "" or /ns0:ExchangeCalendarVEvent/ns0:NON-PARTICIPANT/ns0:Token != ""'>
<!-- Attendees Present -->
<ns1:ResponseStatus>
<xsl:text disable-output-escaping="no">1</xsl:text>
</ns1:ResponseStatus>
<ns1:MeetingStatus>
<xsl:text disable-output-escaping="no">1</xsl:text>
</ns1:MeetingStatus>
<ns1:ReplyTo/>
</xsl:when>
<xsl:otherwise>
<!-- No Attendees Present-->
<ns1:ResponseStatus>
<xsl:text disable-output-escaping="no">0</xsl:text>
</ns1:ResponseStatus>
<ns1:MeetingStatus>
<xsl:text disable-output-escaping="no">0</xsl:text>
</ns1:MeetingStatus>
<ns1:ReplyTo/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<!-- SyncingUserNotOrganizer-->
<xsl:choose>
<xsl:when test='/ns0:ExchangeCalendarVEvent/ns0:REQ-PARTICIPANT/ns0:Token != "" or /ns0:ExchangeCalendarVEvent/ns0:OPT-PARTICIPANT/ns0:Token != "" or /ns0:ExchangeCalendarVEvent/ns0:NON-PARTICIPANT/ns0:Token != ""'>
<!-- Attendees Present -->
<ns1:ResponseStatus>
<xsl:text disable-output-escaping="no">3</xsl:text>
</ns1:ResponseStatus>
<ns1:MeetingStatus>
<xsl:text disable-output-escaping="no">3</xsl:text>
</ns1:MeetingStatus>
<ns1:ReplyTo>
<xsl:value-of select="translate(substring-after(/ns0:ExchangeCalendarVEvent/ns0:ORGANIZER,'MAILTO:'),' ','')"/>
</ns1:ReplyTo>
</xsl:when>
<xsl:otherwise>
<!-- No Attendees Present -->
<ns1:ReplyTo/>
<ns1:ResponseStatus>
<xsl:text disable-output-escaping="no">0</xsl:text>
</ns1:ResponseStatus>
<ns1:MeetingStatus>
<xsl:text disable-output-escaping="no">0</xsl:text>
</ns1:MeetingStatus>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</ns1:ExchangeCalendar>
</xsl:template>
</xsl:stylesheet>

E.5 Java標準タイムゾーンへのWindowsタイムゾーンのマッピング

例E-5に、ハブ・カレンダのレコードの作成時にMicrosoft WindowsタイムゾーンをJava標準タイムゾーンにマップするXSDを示します。例E-6に、タイムゾーンのマッピングを変換するXLSTファイルを示します。

例E-5 Java標準タイムゾーンにMicrosoft WindowsタイムゾーンをマップするためのXSD

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="TimeZoneMapping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TimeZone" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Java" minOccurs="1" nillable="false"
maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TimeZoneIds" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TimeZoneId" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="extractionDefault"
type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Exchange" nillable="false" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TimeZoneIds" minOccurs="1" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TimeZoneId" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="createUpdateDefault"
type="xsd:string"/>

</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Standard" nillable="false" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OnsetLocalDate" type="xsd:string"
maxOccurs="1"/>
<xsd:element name="OffsetFrom" type="xsd:integer"
maxOccurs="1"/>
<xsd:element name="OffsetTo" type="xsd:integer"
maxOccurs="1"/>
<xsd:element name="Onset" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Frequency" type="xsd:string"/>
<xsd:element name="Interval" type="xsd:integer"/>
<xsd:element name="Month" type="xsd:string"/>
<xsd:element name="Day" type="xsd:string"/>
<xsd:element name="DayOffset" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DayLight">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OnsetLocalDate" type="xsd:string"
maxOccurs="1"/>
<xsd:element name="OffsetFrom" type="xsd:integer"
maxOccurs="1"/>
<xsd:element name="OffsetTo" type="xsd:integer"
maxOccurs="1"/>
<xsd:element name="Onset" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Frequency" type="xsd:string"/>
<xsd:element name="Interval" type="xsd:integer"/>
<xsd:element name="Month" type="xsd:string"/>
<xsd:element name="Day" type="xsd:string"/>
<xsd:element name="DayOffset" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

例E-6 Windowsタイムゾーンを変換するためのXLST

<?xml version="1.0" encoding="windows-1252" standalone="yes" ?>
<!--  Header: fts/connectors/exchange2007/oracle/bdss/connectors/exchange2007/pimtransport/transform/exchange/calendar/intermedatetranslation/timezoneregistry.xml -->
<!--
Copyright (c) 2008, 2009, Oracle and/or its affiliates. All rights reserved.

NAME
timezoneregistry.xml - maps Java and Exchange time zones

DESCRIPTION
This XML file maps Java time zone identifiers to the time zone identifiers
used by Exchange 2007.

The following list enumerates the Java time zones that are not present in
this file because there are no corresponding time zone for Exchange:
2) All GMT-09 that do not observe daylight savings time:
Pacific/Gambier, Pacific/Marquesas, Pacific/Palau
3) All GMT-10 that observe daylight savings time:
US/Aleutian, America/Atka, America/Adak
4) All GMT-02 that do not observe daylight savings time:
Atlantic/South_Georgia
Brazil/DeNoronha
America/Noronha
5) All GMT+14
Pacific/Kiritimati
6) All GMT-08 that do not observe daylight savings time:
Pacific/Pitcairn
7) All legacy Etc/GMTx timezones

The time zone entries must conform to the schema defined in timezoneregistryschema.xsd

Each time zone mapping has a <TimeZone> parent element and four child elements:
<Java>     contains all the Java time zones.  This child element has one or more
<TimeZoneId> elements that contains a Java time zone id.  If there is
more than one, then one must have a "extractionDefault" attribute with
a value of "true"
<Exchange> contains the Exchange time zone(s).  This child element has at least
one <TimeZoneId> element containing an Exchange time zone id.  If there
is more than one, a "createUpdateDefault" attribute must be specified
on one of the values.
<Standard> contains a description of when standard time begins
<DayLight> contains a description of when daylight time begins

The <Standard> and <DayLight> elements contain sub-elements as described below:
OnsetLocalDate - The local date/time when the time sub-component (Standard/Daylight) begins
OffsetTo - The offset that becomes effective on the OnsetLocalDate
OffsetFrom - The offset that was effective prior to the OnsetLocalDate
Onset - describes a recurrence pattern that the sub-component occurs
Frequency - Yearly
Interval - 1 = Every, 2 = Every Other, etc.  If Frequency == Yearly and
interval == 1, interpreted as Every Year; if interval == 2,
interpreted as Every Other Year, etc.
Month    - January..December
Day      - Sunday..Saturday
DayOffset - First, Second, Third, Fourth, Last

NOTES
EWS reports a warning if any TZ is used other than PST.  In some cases, EWS
creates the record and it appears in the correct time slot and in other cases
it does not.  Regardless of how the record appears in outlook, the connector fails
the create/update request because of the warning.  Microsoft is looking in to
this.

Currently, only have > 1 Exchange time zone for the PST time zone.  The Exchange
time zones stamped on Exchange records come from the system registry of the client
machine running MS Outlook.  These time zones are not consistant across Windows
OS versions and service packs.  When MS clears up the TZ issue, this file most
likely needs to be updated.

MODIFIED   (MM/DD/YY)
lharding 06/08/09 - Initial Version
-->
<TimeZoneMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="timezoneregistryschema.xsd">
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Kwajalein</TimeZoneId>
<TimeZoneId extractionDefault="true">Pacific/Kwajalein</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-12:00) International Dateline West</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-1200</OffsetFrom>
<OffsetTo>-1200</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-1200</OffsetFrom>
<OffsetTo>-1200</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Pacific/Samoa</TimeZoneId>
<TimeZoneId>Pacific/Pago_Pago</TimeZoneId>
<TimeZoneId extractionDefault="true">US/Samoa</TimeZoneId>
<TimeZoneId>Pacific/Midway</TimeZoneId>
<TimeZoneId>Pacific/Niue</TimeZoneId>
<TimeZoneId>Pacific/Apia</TimeZoneId>
<TimeZoneId>MIT</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-11:00) Midway Island, Samoa</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-1100</OffsetFrom>
<OffsetTo>-1100</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-1100</OffsetFrom>
<OffsetTo>-1100</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Pacific/Honolulu</TimeZoneId>
<TimeZoneId>HST</TimeZoneId>
<TimeZoneId extractionDefault="true">US/Hawaii</TimeZoneId>
<TimeZoneId>Pacific/Johnston</TimeZoneId>
<TimeZoneId>Pacific/Tahiti</TimeZoneId>
<TimeZoneId>Pacific/Fakaofo</TimeZoneId>
<TimeZoneId>Pacific/Rarotonga</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-10:00) Hawaii</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-1000</OffsetFrom>
<OffsetTo>-1000</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-1000</OffsetFrom>
<OffsetTo>-1000</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Anchorage</TimeZoneId>
<TimeZoneId>AST</TimeZoneId>
<TimeZoneId>America/Yakutat</TimeZoneId>
<TimeZoneId>America/Juneau</TimeZoneId>
<TimeZoneId>America/Nome</TimeZoneId>
<TimeZoneId extractionDefault="true">US/Alaska</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-09:00) Alaska</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0800</OffsetFrom>
<OffsetTo>-0900</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0900</OffsetFrom>
<OffsetTo>-0800</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>US/Pacific-New</TimeZoneId>
<TimeZoneId>PST</TimeZoneId>
<TimeZoneId>Canada/Pacific</TimeZoneId>
<TimeZoneId>America/Dawson</TimeZoneId>
<TimeZoneId>America/Vancouver</TimeZoneId>
<TimeZoneId extractionDefault="true">US/Pacific</TimeZoneId>
<TimeZoneId>PST8PDT</TimeZoneId>
<TimeZoneId>America/Los_Angeles</TimeZoneId>
<TimeZoneId>America/Ensenada</TimeZoneId>
<TimeZoneId>Canada/Yukon</TimeZoneId>
<TimeZoneId>America/Whitehorse</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-08:00) Pacific Time (US &amp; Canada)</TimeZoneId>
<TimeZoneId createUpdateDefault="true">(GMT-08:00) Pacific Time (US &amp; Canada); Tijuana</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0700</OffsetFrom>
<OffsetTo>-0800</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0800</OffsetFrom>
<OffsetTo>-0700</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">America/Tijuana</TimeZoneId>
<TimeZoneId>Mexico/BajaNorte</TimeZoneId>
<TimeZoneId>Mexico/BajaSur</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-08:00) Tijuana, Baja California</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0700</OffsetFrom>
<OffsetTo>-0800</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0800</OffsetFrom>
<OffsetTo>-0700</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">US/Arizona</TimeZoneId>
<TimeZoneId>America/Phoenix</TimeZoneId>
<TimeZoneId>PNT</TimeZoneId>
<TimeZoneId>America/Mermosillo</TimeZoneId>
<TimeZoneId>MST</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-07:00) Arizona</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0700</OffsetFrom>
<OffsetTo>-0700</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0700</OffsetFrom>
<OffsetTo>-0700</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Chihuahua</TimeZoneId>
<TimeZoneId extractionDefault="true">America/Mazatlan</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-07:00) Chihuahua, La Paz, Mazatlan</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0700</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0700</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Inuvik</TimeZoneId>
<TimeZoneId>America/Cambridge_Bay</TimeZoneId>
<TimeZoneId extractionDefault="true">US/Mountain</TimeZoneId>
<TimeZoneId>America/Denver</TimeZoneId>
<TimeZoneId>America/Edmonton</TimeZoneId>
<TimeZoneId>America/Dawson_Creek</TimeZoneId>
<TimeZoneId>America/Yellowknife</TimeZoneId>
<TimeZoneId>MST7MDT</TimeZoneId>
<TimeZoneId>Navajo</TimeZoneId>
<TimeZoneId>America/Boise</TimeZoneId>
<TimeZoneId>America/Shiprock</TimeZoneId>
<TimeZoneId>Canada/Mountain</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-07:00) Mountain Time (US &amp; Canada)</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0700</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0700</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">America/El_Salvador</TimeZoneId>
<TimeZoneId>America/Tegucigalpa</TimeZoneId>
<TimeZoneId>America/Managua</TimeZoneId>
<TimeZoneId>America/Belize</TimeZoneId>
<TimeZoneId>America/Regina</TimeZoneId>
<TimeZoneId>America/Guatemala</TimeZoneId>
<TimeZoneId>America/Costa_Rica</TimeZoneId>
<TimeZoneId>Pacific/Galapagos</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-06:00) Central America</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>US/Indiana-Starke</TimeZoneId>
<TimeZoneId>America/North_Dakota/New_Salem</TimeZoneId>
<TimeZoneId>CST6CDT</TimeZoneId>
<TimeZoneId>America/Indiana/Tell_City</TimeZoneId>
<TimeZoneId extractionDefault="true">US/Central</TimeZoneId>
<TimeZoneId>CST</TimeZoneId>
<TimeZoneId>Canada/Central</TimeZoneId>
<TimeZoneId>America/Winnipeg</TimeZoneId>
<TimeZoneId>America/Rainy_River</TimeZoneId>
<TimeZoneId>America/Chicago</TimeZoneId>
<TimeZoneId>America/Rankin_Inlet</TimeZoneId>
<TimeZoneId>America/Knox_IN</TimeZoneId>
<TimeZoneId>America/Merida</TimeZoneId>
<TimeZoneId>America/Cancun</TimeZoneId>
<TimeZoneId>America/Menominee</TimeZoneId>
<TimeZoneId>America/Indiana/Knox</TimeZoneId>
<TimeZoneId>America/North_Dakota/Center</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-06:00) Central Time (US &amp; Canada)</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">America/Mexico_City</TimeZoneId>
<TimeZoneId>Mexico/General</TimeZoneId>
<TimeZoneId>Chile/EasterIsland</TimeZoneId>
<TimeZoneId>Pacific/Easter</TimeZoneId>
<TimeZoneId>America/Monterrey</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-06:00) Guadalajara, Mexico City, Monterrey</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Canada/East-Saskatchewan</TimeZoneId>
<TimeZoneId extractionDefault="true">Canada/Saskatchewan</TimeZoneId>
<TimeZoneId>America/Swift_Current</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-06:00) Saskatchewan</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0600</OffsetFrom>
<OffsetTo>-0600</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Bogota</TimeZoneId>
<TimeZoneId extractionDefault="true">America/Lima</TimeZoneId>
<TimeZoneId>America/Jamaica</TimeZoneId>
<TimeZoneId>America/Panama</TimeZoneId>
<TimeZoneId>America/Coral_Harbour</TimeZoneId>
<TimeZoneId>America/Port-au-Prince</TimeZoneId>
<TimeZoneId>America/Cayman</TimeZoneId>
<TimeZoneId>America/Atikokan</TimeZoneId>
<TimeZoneId>America/Resolute</TimeZoneId>
<TimeZoneId>America/Guayaquil</TimeZoneId>
<TimeZoneId>Jamaica</TimeZoneId>
<TimeZoneId>EST</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-05:00) Bogota, Lima, Quito, Rio Branco</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">US/Eastern</TimeZoneId>
<TimeZoneId>America/Nipigon</TimeZoneId>
<TimeZoneId>US/Michigan</TimeZoneId>
<TimeZoneId>America/New_York</TimeZoneId>
<TimeZoneId>America/Kentucky/Monticello</TimeZoneId>
<TimeZoneId>America/Detroit</TimeZoneId>
<TimeZoneId>America/Indiana/Vevay</TimeZoneId>
<TimeZoneId>America/Nassau</TimeZoneId>
<TimeZoneId>EST5EDT</TimeZoneId>
<TimeZoneId>Canada/Eastern</TimeZoneId>
<TimeZoneId>America/Indiana/Marengo</TimeZoneId>
<TimeZoneId>America/Louisville</TimeZoneId>
<TimeZoneId>America/Fort_Wayne</TimeZoneId>
<TimeZoneId>America/Indiana/Winamac</TimeZoneId>
<TimeZoneId>America/Pangnirtung</TimeZoneId>
<TimeZoneId>America/Thunder_Bay</TimeZoneId>
<TimeZoneId>America/Grand_Turk</TimeZoneId>
<TimeZoneId>America/Toronto</TimeZoneId>
<TimeZoneId>IET</TimeZoneId>
<TimeZoneId>America/Indiana/Petersburg</TimeZoneId>
<TimeZoneId>America/Kentucky/Louisville</TimeZoneId>
<TimeZoneId>America/Indiana/Vincennes</TimeZoneId>
<TimeZoneId>America/Iqaluit</TimeZoneId>
<TimeZoneId>America/Montreal</TimeZoneId>
<TimeZoneId>Cuba</TimeZoneId>
<TimeZoneId>America/Havana</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-05:00) Eastern Time (US &amp; Canada)</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0400</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Indianapolis</TimeZoneId>
<TimeZoneId>America/Indiana/Indianapolis</TimeZoneId>
<TimeZoneId extractionDefault="true">US/East-Indiana</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-05:00) Indiana (East)</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0500</OffsetFrom>
<OffsetTo>-0500</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Caracas</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-04:30) Caracas</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0430</OffsetFrom>
<OffsetTo>-0430</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0430</OffsetFrom>
<OffsetTo>-0430</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Montreal</TimeZoneId>
<TimeZoneId extractionDefault="true">Canada/Atlantic</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-04:00) Atlantic Time (Canada)</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0400</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">America/La_Paz</TimeZoneId>
<TimeZoneId>America/Martinique</TimeZoneId>
<TimeZoneId>America/St_Lucia</TimeZoneId>
<TimeZoneId>America/Aruba</TimeZoneId>
<TimeZoneId>America/Dominica</TimeZoneId>
<TimeZoneId>America/St_Vincent</TimeZoneId>
<TimeZoneId>America/Puerto_Rico</TimeZoneId>
<TimeZoneId>America/Tortola</TimeZoneId>
<TimeZoneId>America/Barbados</TimeZoneId>
<TimeZoneId>America/Grenada</TimeZoneId>
<TimeZoneId>America/Port_of_Spain</TimeZoneId>
<TimeZoneId>America/St_Thomas</TimeZoneId>
<TimeZoneId>America/Virgin</TimeZoneId>
<TimeZoneId>America/St_Barthelemy</TimeZoneId>
<TimeZoneId>America/St_Kitts</TimeZoneId>
<TimeZoneId>America/Curacao</TimeZoneId>
<TimeZoneId>America/Antigua</TimeZoneId>
<TimeZoneId>America/Blanc-Sablon</TimeZoneId>
<TimeZoneId>America/Guadeloupe</TimeZoneId>
<TimeZoneId>America/Marigot</TimeZoneId>
<TimeZoneId>America/Montserrat</TimeZoneId>
<TimeZoneId>America/Anguilla</TimeZoneId>
<TimeZoneId>America/Santo_Domingo</TimeZoneId>
<TimeZoneId>PRT</TimeZoneId>
<TimeZoneId>America/Rio_Branco</TimeZoneId>
<TimeZoneId>America/Eirunepe</TimeZoneId>
<TimeZoneId>America/Boa_Vista</TimeZoneId>
<TimeZoneId>America/Porto_Acre</TimeZoneId>
<TimeZoneId>America/Porto_Velho</TimeZoneId>
<TimeZoneId>America/Guyana</TimeZoneId>
<TimeZoneId>Brazil/Acre</TimeZoneId>
<TimeZoneId>Brazil/West</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-04:00) La Paz</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0400</OffsetFrom>
<OffsetTo>-0400</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0400</OffsetFrom>
<OffsetTo>-0400</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Manaus</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-04:00) Manaus</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0400</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Chile/Continental</TimeZoneId>
<TimeZoneId>Antarctica/Palmer</TimeZoneId>
<TimeZoneId>America/Thule</TimeZoneId>
<TimeZoneId>America/Asuncion</TimeZoneId>
<TimeZoneId>Atlantic/Bermuda</TimeZoneId>
<TimeZoneId>America/Glace_Bay</TimeZoneId>
<TimeZoneId>America/Halifax</TimeZoneId>
<TimeZoneId>America/Moncton</TimeZoneId>
<TimeZoneId>America/Goose_Bay</TimeZoneId>
<TimeZoneId>America/Cuiaba</TimeZoneId>
<TimeZoneId>America/Campo_Grande</TimeZoneId>
<TimeZoneId>Atlantic/Stanley</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-04:00) Santiago</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>March</Month>
<Day>Saturday</Day>
<DayOffset>Second</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0400</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Saturday</Day>
<DayOffset>Second</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/St_Johns</TimeZoneId>
<TimeZoneId extractionDefault="true">CNT</TimeZoneId>
<TimeZoneId>Canada/Newfoundland</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-03:30) Newfoundland</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0230</OffsetFrom>
<OffsetTo>-0330</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0330</OffsetFrom>
<OffsetTo>-0230</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">BET</TimeZoneId>
<TimeZoneId>Brazil/East</TimeZoneId>
<TimeZoneId>America/Sao_Paulo</TimeZoneId>
<TimeZoneId>America/Miquelon</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-03:00) Brasilia</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0200</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>February</Month>
<Day>Sunday</Day>
<DayOffset>Second</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Third</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">America/Buenos_Aires</TimeZoneId>
<TimeZoneId>America/Rosario</TimeZoneId>
<TimeZoneId>America/Argentina/Cordoba</TimeZoneId>
<TimeZoneId>America/Cordoba</TimeZoneId>
<TimeZoneId>America/Argentina/Tucuman</TimeZoneId>
<TimeZoneId>AGT</TimeZoneId>
<TimeZoneId>America/Argentina/Buenos_Aires</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-03:00) Buenos Aires</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0200</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0200</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Montevideo</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-03:00) Montevideo</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0200</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0200</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">America/Paramaribo</TimeZoneId>
<TimeZoneId>America/Recife</TimeZoneId>
<TimeZoneId>America/Fortaleza</TimeZoneId>
<TimeZoneId>America/Bahia</TimeZoneId>
<TimeZoneId>America/Araguaina</TimeZoneId>
<TimeZoneId>America/Santarem</TimeZoneId>
<TimeZoneId>America/Belem</TimeZoneId>
<TimeZoneId>America/Maceio</TimeZoneId>
<TimeZoneId>America/Mendoza</TimeZoneId>
<TimeZoneId>America/Catamarca</TimeZoneId>
<TimeZoneId>America/Jujuy</TimeZoneId>
<TimeZoneId>America/Cayenne</TimeZoneId>
<TimeZoneId>America/Argentina/Catamarca</TimeZoneId>
<TimeZoneId>America/Argentina/Mendoza</TimeZoneId>
<TimeZoneId>America/Argentina/San_Juan</TimeZoneId>
<TimeZoneId>America/Argentina/Jujuy</TimeZoneId>
<TimeZoneId>America/Argentina/San_Luis</TimeZoneId>
<TimeZoneId>America/Argentina/La_Rioja</TimeZoneId>
<TimeZoneId>America/Argentina/ComodRivadavia</TimeZoneId>
<TimeZoneId>America/Argentina/Ushuaia</TimeZoneId>
<TimeZoneId>America/Argentina/Rio_Gallegos. Salta</TimeZoneId>
<TimeZoneId>Antarctica/Rothera</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-03:00) Georgetown</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>America/Godthab</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-03:00) Greenland</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0200</OffsetFrom>
<OffsetTo>-0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0300</OffsetFrom>
<OffsetTo>-0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId></TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-02:00) Mid-Atlantic</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0100</OffsetFrom>
<OffsetTo>-0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>September</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0200</OffsetFrom>
<OffsetTo>-0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Atlantic/Azores</TimeZoneId>
<TimeZoneId>America/Scoresbysund</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-01:00) Azores</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0000</OffsetFrom>
<OffsetTo>-0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>-0100</OffsetFrom>
<OffsetTo>+0000</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Atlantic/Cape_Verde</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT-01:00) Cape Verde Is.</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0100</OffsetFrom>
<OffsetTo>-0100</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>-0100</OffsetFrom>
<OffsetTo>-0100</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Africa/El_Aaiun</TimeZoneId>
<TimeZoneId>Africa/Casablanca</TimeZoneId>
<TimeZoneId>Greenwich</TimeZoneId>
<TimeZoneId>Africa/Conakry</TimeZoneId>
<TimeZoneId>Africa/Bissau</TimeZoneId>
<TimeZoneId>Africa/Timbuktu</TimeZoneId>
<TimeZoneId>Africa/Abidjan</TimeZoneId>
<TimeZoneId>Africa/Freetown</TimeZoneId>
<TimeZoneId>Africa/Ouagadougou</TimeZoneId>
<TimeZoneId>Africa/Bamako</TimeZoneId>
<TimeZoneId extractionDefault="true">GMT</TimeZoneId>
<TimeZoneId>Atlantic/St_Helena</TimeZoneId>
<TimeZoneId>Africa/Dakar</TimeZoneId>
<TimeZoneId>Africa/Banjul</TimeZoneId>
<TimeZoneId>America/Danmarkshavn</TimeZoneId>
<TimeZoneId>Africa/Sao_Tome</TimeZoneId>
<TimeZoneId>Iceland</TimeZoneId>
<TimeZoneId>Africa/Lome</TimeZoneId>
<TimeZoneId>Africa/Nouakchott</TimeZoneId>
<TimeZoneId>UCT</TimeZoneId>
<TimeZoneId>Universal</TimeZoneId>
<TimeZoneId>UTC</TimeZoneId>
<TimeZoneId>Zulu</TimeZoneId>
<TimeZoneId>Africa/Accra</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT) Casablanca</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0000</OffsetFrom>
<OffsetTo>+0000</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0000</OffsetFrom>
<OffsetTo>+0000</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Africa/Monrovia</TimeZoneId>
<TimeZoneId>Atlantic/Reykjavik</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT) Monrovia, Reykjavik</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0000</OffsetFrom>
<OffsetTo>+0000</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0000</OffsetFrom>
<OffsetTo>+0000</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">GB</TimeZoneId>
<TimeZoneId>Europe/Guernsey</TimeZoneId>
<TimeZoneId>GB-Eire</TimeZoneId>
<TimeZoneId>Europe/Jersey</TimeZoneId>
<TimeZoneId>Eire</TimeZoneId>
<TimeZoneId>Europe/Dublin</TimeZoneId>
<TimeZoneId>Europe/Belfast</TimeZoneId>
<TimeZoneId>Europe/London</TimeZoneId>
<TimeZoneId>Europe/Isle_of_Man</TimeZoneId>
<TimeZoneId>Portugal</TimeZoneId>
<TimeZoneId>Europe/Lisbon</TimeZoneId>
<TimeZoneId>Atlantic/Faroe</TimeZoneId>
<TimeZoneId>Atlantic/Canary</TimeZoneId>
<TimeZoneId>Atlantic/Faeroe</TimeZoneId>
<TimeZoneId>Atlantic/Madeira</TimeZoneId>
<TimeZoneId>WET</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0000</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T010000</OnsetLocalDate>
<OffsetFrom>+0000</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Europe/Prague</TimeZoneId>
<TimeZoneId>Europe/Budapest</TimeZoneId>
<TimeZoneId>Europe/Ljubljana</TimeZoneId>
<TimeZoneId>Europe/Bratislava</TimeZoneId>
<TimeZoneId extractionDefault="true">Europe/Belgrade</TimeZoneId>
<TimeZoneId>MET</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Europe/Brussels</TimeZoneId>
<TimeZoneId>Europe/Copenhagen</TimeZoneId>
<TimeZoneId>Europe/Madrid</TimeZoneId>
<TimeZoneId>Europe/Paris</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Europe/Warsaw</TimeZoneId>
<TimeZoneId>Europe/Zagreb</TimeZoneId>
<TimeZoneId extractionDefault="true">Europe/Sarajevo</TimeZoneId>
<TimeZoneId>Europe/Skopje</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Africa/Ndjamena</TimeZoneId>
<TimeZoneId>Africa/Douala</TimeZoneId>
<TimeZoneId>Africa/Libreville</TimeZoneId>
<TimeZoneId>Africa/Brazzaville</TimeZoneId>
<TimeZoneId>Africa/Lagos</TimeZoneId>
<TimeZoneId>Africa/Porto-Novo</TimeZoneId>
<TimeZoneId>Africa/Luanda</TimeZoneId>
<TimeZoneId>Africa/Kinshasa</TimeZoneId>
<TimeZoneId>Africa/Niamey</TimeZoneId>
<TimeZoneId>Africa/Bangui</TimeZoneId>
<TimeZoneId>Africa/Malabo</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+01:00) West Central Africa</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Amman</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Amman</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T040000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Europe/Athens</TimeZoneId>
<TimeZoneId>Europe/Istanbul</TimeZoneId>
<TimeZoneId>Europe/Bucharest</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Athens, Bucharest, Istanbul</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Europe/Minsk</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Minsk</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Beirut</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Beirut</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T040000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Africa/Cairo</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Cairo</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>September</Month>
<Day>Wednesday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>May</Month>
<Day>Friday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Africa/Gaborone</TimeZoneId>
<TimeZoneId>Africa/Lubumbashi</TimeZoneId>
<TimeZoneId>Africa/Kigali</TimeZoneId>
<TimeZoneId>Africa/Blantyre</TimeZoneId>
<TimeZoneId>Africa/Maputo</TimeZoneId>
<TimeZoneId>Africa/Lusaka</TimeZoneId>
<TimeZoneId extractionDefault="true">CAT</TimeZoneId>
<TimeZoneId>Africa/Harare</TimeZoneId>
<TimeZoneId>Africa/Bujumbura</TimeZoneId>
<TimeZoneId>Africa/Maseru</TimeZoneId>
<TimeZoneId>Africa/Mbabane</TimeZoneId>
<TimeZoneId>Africa/Johannesburg</TimeZoneId>
<TimeZoneId>Libya</TimeZoneId>
<TimeZoneId>Afria/Tripoli</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Harare, Pretoria</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Europe/Helsinki</TimeZoneId>
<TimeZoneId>Europe/Riga</TimeZoneId>
<TimeZoneId>Europe/Tallinn</TimeZoneId>
<TimeZoneId>Europe/Sofia</TimeZoneId>
<TimeZoneId>EET</TimeZoneId>
<TimeZoneId>Europe/Uzhgorod</TimeZoneId>
<TimeZoneId>Europe/Nicosia</TimeZoneId>
<TimeZoneId>Europe/Kaliningrad</TimeZoneId>
<TimeZoneId>Asia/Damascus</TimeZoneId>
<TimeZoneId>ART</TimeZoneId>
<TimeZoneId>Europe/Chisinau</TimeZoneId>
<TimeZoneId>Asia/Gaza</TimeZoneId>
<TimeZoneId>Europe/Mariehamn</TimeZoneId>
<TimeZoneId>Asia/Beirut</TimeZoneId>
<TimeZoneId>Asia/Nicosia</TimeZoneId>
<TimeZoneId>Turkey</TimeZoneId>
<TimeZoneId>Egypt</TimeZoneId>
<TimeZoneId>Asia/Amman</TimeZoneId>
<TimeZoneId>Europe/Zaporozhye</TimeZoneId>
<TimeZoneId>Europe/Simferopol</TimeZoneId>
<TimeZoneId>Europe/Tiraspol</TimeZoneId>
<TimeZoneId>Europe/Kiev</TimeZoneId>
<TimeZoneId>Europe/Vilnius</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T040000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Jerusalem</TimeZoneId>
<TimeZoneId extractionDefault="true">Israel</TimeZoneId>
<TimeZoneId>Asia/Tel_Aviv</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Jerusalem</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Africa/Windhoek</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+02:00) Windhoek</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0200</OffsetFrom>
<OffsetTo>+0100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0100</OffsetFrom>
<OffsetTo>+0200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Qatar</TimeZoneId>
<TimeZoneId extractionDefault="true">Asia/Baghdad</TimeZoneId>
<TimeZoneId>Asia/Bahrain</TimeZoneId>
<TimeZoneId>Asia/Aden</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+03:00) Baghdad</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T040000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Kuwait</TimeZoneId>
<TimeZoneId>Asia/Riyadh</TimeZoneId>
<TimeZoneId>Asia/Riyadh89</TimeZoneId>
<TimeZoneId>Asia/Riyadh88</TimeZoneId>
<TimeZoneId>Mideast/Riyadh87</TimeZoneId>
<TimeZoneId>Mideast/Riyadh88</TimeZoneId>
<TimeZoneId>Mideast/Riyadh89</TimeZoneId>
<TimeZoneId>Asia/Riyadh87</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+03:00) Kuwait, Riyadh</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>W-SU</TimeZoneId>
<TimeZoneId extractionDefault="true">Europe/Moscow</TimeZoneId>
<TimeZoneId>Europe/Volgograd</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+03:00) Moscow, St. Petersburg, Volgograd</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0400</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Indian/Antananarivo</TimeZoneId>
<TimeZoneId>Africa/Asmara</TimeZoneId>
<TimeZoneId>Africa/Djibouti</TimeZoneId>
<TimeZoneId extractionDefault="true">EAT</TimeZoneId>
<TimeZoneId>Indian/Comoro</TimeZoneId>
<TimeZoneId>Africa/Asmera</TimeZoneId>
<TimeZoneId>Africa/Kampala</TimeZoneId>
<TimeZoneId>Africa/Khartoum</TimeZoneId>
<TimeZoneId>Africa/Addis_Ababa</TimeZoneId>
<TimeZoneId>Africa/Dar_es_Salaam</TimeZoneId>
<TimeZoneId>Africa/Mogadishu</TimeZoneId>
<TimeZoneId>Africa/Nairobi</TimeZoneId>
<TimeZoneId>Indian/Mayotte</TimeZoneId>
<TimeZoneId>Antarctica/Syowa</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+03:00) Nairobi</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Tbilisi</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+03:00) Tbilisi</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0300</OffsetFrom>
<OffsetTo>+0300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Iran</TimeZoneId>
<TimeZoneId extractionDefault="true">Asia/Tehran</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+03:30) Tehran</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0430</OffsetFrom>
<OffsetTo>+0330</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>September</Month>
<Day>Tuesday</Day>
<DayOffset>Fourth</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0330</OffsetFrom>
<OffsetTo>+0430</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Muscat</TimeZoneId>
<TimeZoneId>Asia/Dubai</TimeZoneId>
<TimeZoneId>Indian/Reunion</TimeZoneId>
<TimeZoneId>Indian/Mahe</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+04:00) Abu Dhabi, Muscat</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0400</OffsetFrom>
<OffsetTo>+0400</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0400</OffsetFrom>
<OffsetTo>+0400</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Baku</TimeZoneId>
<TimeZoneId extractionDefault="true">NET</TimeZoneId>
<TimeZoneId>Asia/Yerevan</TimeZoneId>
<TimeZoneId>Indian/Mauritius</TimeZoneId>
<TimeZoneId>Europe/Samara</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+04:00) Baku</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0400</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Yerevan</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+04:00) Yerevan</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0400</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0400</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Kabul</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+04:30) Kabul</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0430</OffsetFrom>
<OffsetTo>+0430</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0430</OffsetFrom>
<OffsetTo>+0430</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Yekaterinburg</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+05:00) Ekaterinburg</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0600</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0600</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Karachi</TimeZoneId>
<TimeZoneId extractionDefault="true">PLT</TimeZoneId>
<TimeZoneId>Asia/Samarkand</TimeZoneId>
<TimeZoneId>Asia/Tashkent</TimeZoneId>
<TimeZoneId>Asia/Dushanbe</TimeZoneId>
<TimeZoneId>Asia/Aqtobe</TimeZoneId>
<TimeZoneId>Asia/Aqtau</TimeZoneId>
<TimeZoneId>Asia/Oral</TimeZoneId>
<TimeZoneId>Asia/Ashgabat</TimeZoneId>
<TimeZoneId>Indian/Maldives</TimeZoneId>
<TimeZoneId>Indian/Kerguelen</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+05:00) Islamabad, Karachi</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Tashkent</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+05:00) Tashkent</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0500</OffsetFrom>
<OffsetTo>+0500</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Calcutta</TimeZoneId>
<TimeZoneId>IST</TimeZoneId>
<TimeZoneId>Asia/Kolkata</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0530</OffsetFrom>
<OffsetTo>+0530</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0530</OffsetFrom>
<OffsetTo>+0530</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Colombo</TimeZoneId>
<TimeZoneId>Antarctica/Mawson</TimeZoneId>
<TimeZoneId>Antarctica/Vostok</TimeZoneId>
<TimeZoneId>Indian/Chagos</TimeZoneId>
<TimeZoneId>Indian/Cocos</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+06:00) Sri Jayawardenepura</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0600</OffsetFrom>
<OffsetTo>+0600</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0600</OffsetFrom>
<OffsetTo>+0600</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Katmandu</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+05:45) Kathmandu</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0545</OffsetFrom>
<OffsetTo>+0545</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0545</OffsetFrom>
<OffsetTo>+0545</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Almaty</TimeZoneId>
<TimeZoneId>Asia/Novosibirsk</TimeZoneId>
<TimeZoneId>Asia/Omsk</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+06:00) Almaty, Novosibirsk</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0700</OffsetFrom>
<OffsetTo>+0600</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0600</OffsetFrom>
<OffsetTo>+0700</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>BST</TimeZoneId>
<TimeZoneId extractionDefault="true">Asia/Dhaka</TimeZoneId>
<TimeZoneId>Asia/Dacca</TimeZoneId>
<TimeZoneId>Asia/Bishkek</TimeZoneId>
<TimeZoneId>Asia/Thimbu</TimeZoneId>
<TimeZoneId>Asia/Thimphu</TimeZoneId>
<TimeZoneId>Asia/Qyzylorda</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+06:00) Astana, Dhaka</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0600</OffsetFrom>
<OffsetTo>+0600</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0600</OffsetFrom>
<OffsetTo>+0600</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Rangoon</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+06:30) Yangon (Rangoon)</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0630</OffsetFrom>
<OffsetTo>+0630</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0630</OffsetFrom>
<OffsetTo>+0630</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Vientiane</TimeZoneId>
<TimeZoneId extractionDefault="true">VST</TimeZoneId>
<TimeZoneId>Asia/Phnom_Penh</TimeZoneId>
<TimeZoneId>Asia/Saigon</TimeZoneId>
<TimeZoneId>Asia/Ho_Chi_Minh</TimeZoneId>
<TimeZoneId>Asia/Bangkok</TimeZoneId>
<TimeZoneId>Asia/Pontianak</TimeZoneId>
<TimeZoneId>Asia/Jakarta</TimeZoneId>
<TimeZoneId>Asia/Hovd</TimeZoneId>
<TimeZoneId>Antarctica/Davis</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+07:00) Bangkok, Hanoi, Jakarta</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0700</OffsetFrom>
<OffsetTo>+0700</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0700</OffsetFrom>
<OffsetTo>+0700</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Krasnoyarsk</TimeZoneId>
<TimeZoneId>Indian/Christmas</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+07:00) Krasnoyarsk</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0700</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0700</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Hong_Kong</TimeZoneId>
<TimeZoneId>Hongkong</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Irkutsk</TimeZoneId>
<TimeZoneId>Asia/Ulaanbaatar</TimeZoneId>
<TimeZoneId>Asia/Ulan_Bator</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+08:00) Irkutsk, Ulaan Bataar</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+0900</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0900</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Kuala_Lumpur</TimeZoneId>
<TimeZoneId>Asia/Kuching</TimeZoneId>
<TimeZoneId>Asia/Singapore</TimeZoneId>
<TimeZoneId>Singapore</TimeZoneId>
<TimeZoneId>Asia/Manila</TimeZoneId>
<TimeZoneId>Asia/Brunei</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+08:00) Kuala Lumpur, Singapore</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Australia/Perth</TimeZoneId>
<TimeZoneId>Antarctica/Casey</TimeZoneId>
<TimeZoneId>Australia/West</TimeZoneId>
<TimeZoneId>Australia/Eucla</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+08:00) Perth</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Kashgar</TimeZoneId>
<TimeZoneId>Asia/Harbin</TimeZoneId>
<TimeZoneId>Asia/Urumqi</TimeZoneId>
<TimeZoneId>Asia/Chungking</TimeZoneId>
<TimeZoneId>PRC</TimeZoneId>
<TimeZoneId>Asia/Chongqing</TimeZoneId>
<TimeZoneId>Asia/Taipei</TimeZoneId>
<TimeZoneId>Asia/Shanghai</TimeZoneId>
<TimeZoneId>Asia/Macao</TimeZoneId>
<TimeZoneId>CTT</TimeZoneId>
<TimeZoneId>Asia/Macau</TimeZoneId>
<TimeZoneId>Asia/Choibalsan</TimeZoneId>
<TimeZoneId>Asia/Makassar</TimeZoneId>
<TimeZoneId>Asia/Ujung_Pandang</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+08:00) Taipei</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0800</OffsetFrom>
<OffsetTo>+0800</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Tokyo</TimeZoneId>
<TimeZoneId extractionDefault="true">JST</TimeZoneId>
<TimeZoneId>Japan</TimeZoneId>
<TimeZoneId>Asia/Dili</TimeZoneId>
<TimeZoneId>Asia/Jayapura</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+09:00) Osaka, Sapporo, Tokyo</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0900</OffsetFrom>
<OffsetTo>+0900</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0900</OffsetFrom>
<OffsetTo>+0900</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Seoul</TimeZoneId>
<TimeZoneId>Asia/Pyongyang</TimeZoneId>
<TimeZoneId extractionDefault="true">ROK</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+09:00) Seoul</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0900</OffsetFrom>
<OffsetTo>+0900</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0900</OffsetFrom>
<OffsetTo>+0900</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Yakutsk</TimeZoneId>
<TimeZoneId>Australia/Yancowinna</TimeZoneId>
<TimeZoneId>Australia/Broken_Hill</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+09:00) Yakutsk</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+0900</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0900</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Australia/South</TimeZoneId>
<TimeZoneId extractionDefault="true">Australia/Adelaide</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+09:30) Adelaide</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1030</OffsetFrom>
<OffsetTo>+0930</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+0930</OffsetFrom>
<OffsetTo>+1030</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Australia/Darwin</TimeZoneId>
<TimeZoneId>ACT</TimeZoneId>
<TimeZoneId>Australia/North</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+09:30) Darwin</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0930</OffsetFrom>
<OffsetTo>+0930</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+0930</OffsetFrom>
<OffsetTo>+0930</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Australia/Lindeman</TimeZoneId>
<TimeZoneId>Australia/Queensland</TimeZoneId>
<TimeZoneId>Australia/Lord_Howe</TimeZoneId>
<TimeZoneId>Australia/LHI</TimeZoneId>
<TimeZoneId extractionDefault="true">Australia/Brisbane</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+10:00) Brisbane</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Australia/Currie</TimeZoneId>
<TimeZoneId extractionDefault="true">Australia/Sydney</TimeZoneId>
<TimeZoneId>Australia/NSW</TimeZoneId>
<TimeZoneId>Australia/ACT</TimeZoneId>
<TimeZoneId>Australia/Canberra</TimeZoneId>
<TimeZoneId>Australia/Victoria</TimeZoneId>
<TimeZoneId>Australia/Melbourne</TimeZoneId>
<TimeZoneId>AET</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+10:00) Canberra, Melbourne, Sydney</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1100</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Pacific/Guam</TimeZoneId>
<TimeZoneId>Pacific/Saipan</TimeZoneId>
<TimeZoneId>Pacific/Port_Moresby</TimeZoneId>
<TimeZoneId>Antarctica/DumontDUrville</TimeZoneId>
<TimeZoneId>Pacific/Yap</TimeZoneId>
<TimeZoneId>Pacific/Truk</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+10:00) Guam, Port Moresby</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Australia/Tasmania</TimeZoneId>
<TimeZoneId extractionDefault="true">Australia/Hobart</TimeZoneId>
<TimeZoneId>Asia/Sakhalin</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+10:00) Hobart</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1100</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId>Asia/Vladivostok</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+10:00) Vladivostok</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T030000</OnsetLocalDate>
<OffsetFrom>+1100</OffsetFrom>
<OffsetTo>+1000</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1000</OffsetFrom>
<OffsetTo>+1100</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Last</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Asia/Magadan</TimeZoneId>
<TimeZoneId>Pacific/Efate</TimeZoneId>
<TimeZoneId>SST</TimeZoneId>
<TimeZoneId>Pacific/Guadalcanal</TimeZoneId>
<TimeZoneId>Pacific/Kosrae</TimeZoneId>
<TimeZoneId>Pacific/Noumea</TimeZoneId>
<TimeZoneId>Pacific/Ponape</TimeZoneId>
<TimeZoneId>Pacific/Norfolk</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+11:00) Magadan, Solomon Is., New Caledonia</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1100</OffsetFrom>
<OffsetTo>+1100</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1100</OffsetFrom>
<OffsetTo>+1100</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">NST</TimeZoneId>
<TimeZoneId>NZ</TimeZoneId>
<TimeZoneId>Antarctica/South_Pole</TimeZoneId>
<TimeZoneId>Pacific/Auckland</TimeZoneId>
<TimeZoneId>Antarctica/McMurdo</TimeZoneId>
<TimeZoneId>Pacific/Wallis</TimeZoneId>
<TimeZoneId>Asia/Anadyr</TimeZoneId>
<TimeZoneId>Pacific/Chatham</TimeZoneId>
<TimeZoneId>NZ-CHAT</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+12:00) Auckland, Wellington</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1300</OffsetFrom>
<OffsetTo>+1200</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>April</Month>
<Day>Sunday</Day>
<DayOffset>Third</DayOffset>
</Onset>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T020000</OnsetLocalDate>
<OffsetFrom>+1200</OffsetFrom>
<OffsetTo>+1300</OffsetTo>
<Onset>
<Frequency>Yearly</Frequency>
<Interval>1</Interval>
<Month>October</Month>
<Day>Sunday</Day>
<DayOffset>First</DayOffset>
</Onset>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Pacific/Fiji</TimeZoneId>
<TimeZoneId>Asia/Kamchatka</TimeZoneId>
<TimeZoneId>Pacific/Majuro</TimeZoneId>
<TimeZoneId>Pacific/Nauru</TimeZoneId>
<TimeZoneId>Pacific/Wake</TimeZoneId>
<TimeZoneId>Pacific/Tarawa</TimeZoneId>
<TimeZoneId>Pacific/Funafuti</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+12:00) Fiji, Kamchatka, Marshall Is.</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1200</OffsetFrom>
<OffsetTo>+1200</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1200</OffsetFrom>
<OffsetTo>+1200</OffsetTo>
</DayLight>
</TimeZone>
<TimeZone>
<Java>
<TimeZoneIds>
<TimeZoneId extractionDefault="true">Pacific/Tongatapu</TimeZoneId>
<TimeZoneId>Pacific/Enderbury</TimeZoneId>
</TimeZoneIds>
</Java>
<Exchange>
<TimeZoneIds>
<TimeZoneId>(GMT+13:00) Nuku'alofa</TimeZoneId>
</TimeZoneIds>
</Exchange>
<Standard>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1300</OffsetFrom>
<OffsetTo>+1300</OffsetTo>
</Standard>
<DayLight>
<OnsetLocalDate>16010101T000000</OnsetLocalDate>
<OffsetFrom>+1300</OffsetFrom>
<OffsetTo>+1300</OffsetTo>
</DayLight>
</TimeZone>
</TimeZoneMapping>

F BDSSのトラブルシューティング

この付録では、トラブルシューティングに関する問題を説明します。

この付録では、接続同期の問題を修正する方法について説明します。

F.1 Exchange 2007コネクタによる最初の同期化の失敗

問題

Exchange 2007コネクタを使用した最初の同期化は、「<サーバー>から受け取った証明書チェーンが信頼されていないため、SSLハンドシェイクが失敗しました。」を示すエラーで失敗したが、後続の同期化には成功している。

解決方法

BDSSは、SHA256withRSAという名前の署名アルゴリズムを含む証明書を格納している証明書ストアが、Oracle WebLogic Serverで実行時にロードされた場合、同期化を終了します。JDK jdk1.6.0_13で始まるcacertsストアには、この署名アルゴリズムを含む2つの証明書があります。このエラーの発生を防ぐには、keytoolユーティリティを使用して、最初にttelesecglobalrootclass2caとttelesecglobalrootclass3caの別名を含むこれらの証明書を削除し、次にOracle WebLogic Serverを再起動します。あるいは、このエラーを無視することもできます。

keytoolユーティリティを使用して証明書を削除する手順は、次のとおりです。

注意:

これらの指示に含まれるコマンドでは、デフォルトのストア(通常は、<JDK>\jre\lib\securityおよびpasswordに配置)が想定されています。

1. 次のコマンドを使用して、cacertsストアの証明書をリストします。署名アルゴリズム名: SHA256withRSAが含まれたエントリの別名にはすべて注意してください。

keytool -list - v -keystore cacerts -storepass changeit

2. ステップ1で取得した各別名に対して次のコマンドを使用し、このストアから証明書を削除します。

keytool -delete -keystore <keystore file name> -alias <certificate alias name> -storepass <store pass phrase>

たとえば、次のように入力します。

keytool -delete -keystore cacerts -alias ttelesecglobalrootclass2ca -storepass changegit

注意:

このエラーは、Oracle WebLogic Serverの起動後および同期化セッションの開始後1回のみ発生する場合、無視することもできます。BDSSでエラーが発生するとユーザーの同期化は失敗しますが、後続の同期化セッションでは失敗しません。

用語集

参加者の解決

会議が存在するシステム内のカレンダ会議に関連付けられている、特定の参加者に関する情報を確認するプロセス。ユーザーの識別子はシステム全体で同じであることが保証されていないため、この解決は必須です。

BPEL

Business Process Execution Language。別々のWebサービスのセットからエンドツーエンドのプロセス・フローを作成するためのXMLベースのマークアップ言語。

コネクタ

PIMサーバーとの間でデータを送信したり取得するBDSSアーキテクチャ内のコンポーネント。

コネクタ名

PIMサーバー・インスタンスの特定のセットにサービスを提供するコネクタ用の一連の構成の名前。

コネクタ・インスタンス

コネクタの特定のインストールの表現。このインスタンスは、単一のコネクタの場合、またはロード・バランシングされた同じURI(Universal Resource Identifier)からアクセスされるコネクタのグループを表す場合があります。

コネクタ・ユーザー

PIMサーバーの実際のユーザーの表現。

ディスパッチャ

ユーザーのバッチをエンジンに送信するハブ・コンポーネント。

ドメイン

カレンダ、ビジネス連絡先、個人の連絡先、タスクなどのレコードのクラス。

エコー

PIMサーバーのレコードから抽出されたレコード。このサーバーの最後の更新は、(エンド・ユーザーによる変更ではなく)前の同期化セッション以降にBDSSによって開始された変更によって実行されています。

エンジン

ハブ・コンポーネントの1つで、ディスパッチャから受信したユーザー・リストとコネクタがPIMサーバーから抽出したレコードを同期化します。

フェデレーテッドPIM

このドキュメントでのフェデレーテッドPIMは、レコードの単一のコピーを格納し、1つ以上のユーザー可視性とレコードへのアクセスを提供するPIMです。たとえば、Siebelは、複数のユーザーが単一の連絡先、タスクまたはカレンダのレコードを共有できるため、フェデレーテッドPIMと考えることができます。カレンダ会議(MeetingA)をSiebelのユーザーAが編成し、SiebelのユーザーBが参加者の場合、ユーザーAとユーザーBの両ユーザーは、カレンダ・レコードの単一のインスタンスを表示およびアクセスできます。「非フェデレーテッドPIM」も参照してください。

ハブ

システムのデータの同期化を統合します。これには、エンジンおよびディスパッチャが含まれます。

ハブ・ドメイン

ドメインの抽象的な表現。各PIMコネクタには、ハブ・ドメインの中心的なセットにマップされる一連のコネクタ・ドメインがあります。

ハブ・レコード

各ハブ・レコードは、ユーザーのPIMレコード間のマッピングを表しています。

ハブ・ユーザー

他のサーバー・ユーザーへのPIMサーバー・ユーザーのマッピング。ハブ・ユーザーは実際のユーザーを表さず、PIMサーバー・ユーザーのコレクションを表すキー値です。PIMサーバーでは、1ハブ・ユーザーに関連付けることができるのは1ユーザーのみという1対1の関係がありますが、コレクションには、任意の数のPIMサーバーまたはPIMユーザーをマップできます。「ハブ・ユーザーID」も参照してください。

ハブ・ユーザーID

ハブ・ユーザーを一意に識別するハブで使用される識別子。ハブ・ユーザーIDは、PIMユーザーIDにマップされます。

マスター・レコード

レコードの繰返しパターンが記述されたプロパティを含むカレンダ・レコード。

自然なマップ

セマンティクは同じだが名前が異なるICALフィールドとPIMフィールドの概念的なマッピングを示します。ICalendar (ICAL) RFC 2445には、かなり完成された包括的なフィールドのセットが定義されています。各PIMにはカレンダ・レコード用に定義されたフィールドのセットもあるため、そのフィールドには、ICALに対応する同じ名前を指定できない場合があります。たとえば、ICAL LOCATIONフィールドはLocationと呼ばれるExchangeの索引のないフィールドに自然にマップされますが、ICAL DTSTARTフィールドは、Microsoft ExchangeカレンダのStartDateフィールドにマップされます。

非フェデレーテッドPIM

このドキュメントでの非フェデレーテッドPIMは、関連レコードの個々のコピーを格納するPIMです。たとえば、Microsoft Exchangeは、各ユーザーが連絡先、タスクおよびカレンダのレコードの独自のコピーを保持するため、非フェデレーテッドPIMです。カレンダ会議(Meeting A)をExchangeユーザーAが編成し、ExchangeユーザーBが参加者の場合、ユーザーAとユーザーBの両ユーザーは、個々ではあるうけれど関連するカレンダ・レコードのコピーを取得します。Exchangeは、2つのコピーに同じ会議識別子(ICalendarの用語ではUID)を指定してそれらのコピーを関連付けます。「フェデレーテッドPIM」も参照してください。

発生

1つの発生は、繰返しシリーズの単一インスタンスです。

PIMサーバー・エンドポイント

特定のユーザーの同期化をコネクタの特定のクラスタにルーティングするために構成メタデータとともに使用するコネクタ定義の値。

PIMユーザーID

コネクタと通信するPIMサーバー上のPIMユーザーを一意に識別するためにコネクタが使用する識別子。PIMユーザーIDは、コネクタで必要な任意の値にできますが、通常は、SBROWNなどのユーザー・アカウント名またはsharon.brown@example.comなどのSMTP電子メール・アドレスです。

繰返し例外

繰返しシリーズ全体ではなく、該当する発生のみに適用する変更が実行されたカレンダの発生。

反映同期化

開発シナリオで使用される反映同期化は、BDSSシステムで2つのコネクタ・エントリを保持するように単一のPIMサーバーを構成するシナリオを指します。これによって、PIMサーバーの1つのアカウントからそのサーバーの別のアカウントにデータを同期化できます。

スケジューラ

設定された時間間隔でディスパッチャをトリガーする外部コンポーネント。

同期化セッション

ハブによって、1つ以上のハブ・ドメインのハブ・ユーザーのデータを1つ以上のPIMストア間で同期化するセッション。

同期状態

PIMサーバーから正常にエクスポートされたユーザーのドメイン・レコードを追跡するために、エンジンが使用するコネクタ提供のデータ。

アップサート・レコード

PIMサーバーから抽出された、またはPIMサーバーにプッシュされたハブ・レコード。

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.