JDBC メディエーター例外
JDBC メディエーター例外は、データベースにより報告されるエラーを表示するか、あるいは DMS をインスタンス化しようとして無効なメタデータが使用されたことを示します。

メディエーター例外はすべてのデータ・メディエーター・サービスのルート例外で、JDBCMediator 例外は特に JDBC DMS のためのルート例外です。
DB 例外は、エラーがデータベースによって報告されたときに発生します。
これはいくつかの状態で発生する可能性があります。
- 使用されている接続が true に設定された AutoCommit プロパ ティーを持っているのに、JDBC DMS がトランザクションを制御していて false に設定されている必要がある場合
- サポートされていないデータベースを使用しようとしている場合
- コミットまたはロールバック中にもう一方のバックエンドのデータベ ース・エラーが発生した場合
Optimistic Concurrency Control (OCC) 例外は、applyChanges() 操作がデータの衝突という結果になったときに発生します。 これが発生したときは、例外には行の元の値、行の現在値、および行の試行された値が含まれます。 これらの値は、エラーからのリカバリーを助けるために使用されます。
InvalidMetadata 例外は、作成時に JDBC DMS に提供された無効なメタデータに対して発生します。 これは、メタデータ内で定義されていないテーブルまたは列を照会が要求 したとき、または Oracle、Informix®、および古い対応バージョンの Sybase データベースで異なるテーブルに同一の列名が あるときに起こります。
例: OCC データ衝突および JDBC メディエーター例外の強制: 以下の例は、衝突を強制して検出を実証し、結果として発生する例外を表示します。
// This example assumes that a mediator has already
// been created and the first name in the list is Sam.
// It also assumes that the Customer table has an OCC
// column and the metadata has set this column to be
// the collision column.
DataObject graph1 = mediator.getGraph();
DataObject graph2 = mediator.getGraph();
DataObject customer1 = (DataObject)graph1.getList("CUSTOMER").get(0);
customer1.set("CUSTFIRSTNAME", "Bubba");
DataObject customer2 = (DataObject)graph2.getList("CUSTOMER").get(0);
customer2.set("BOWLERFIRSTNAME", "Slim");
mediator.applyChanges(graph2);
try
{
mediator.applyChanges(graph1);
}
catch (OCCException e)
{
// Since graph1 was obtained before graph2 and
// graph2 has already been submitted, trying to
// apply the same changes to graph1 causes
// this OCC Exception.
assertEquals("Sam", e.getOriginalDO(). getString("CUSTFIRSTNAME"));
assertEquals("Bubba", e.getChangedDO(). getString("CUSTFIRSTNAME"));
assertEquals("Slim", e.getDatabaseDO(). getString("CUSTFIRSTNAME"));
}