Ausnahmen des JDBC-Mediator
Ausnahmen des JDBC-Mediator weisen auf Fehler, die von der Datenbank gemeldet werden, oder auf die Verwendung nicht gültiger Metadaten beim Instanziieren des DMS hin.

Die Ausnahme Mediator ist die Basisausnahme für alle Data Mediator Services, und die Ausnahme JDBCMediator ist die Basisausnahme für JDBC DMS.
- wenn in der verwendeten Verbindung die Eigenschaft AutoCommit auf true gesetzt ist, aber JDBC DMS die Transaktion steuert und damit die Einstellung false für diese Eigenschaft voraussetzt,
- wenn eine nicht unterstützte Datenbank verwendet wird,
- wenn während einer COMMIT- oder ROLLBACK-Operation andere Fehler in der Back-End-Datenbank auftreten.
Eine OCC-Ausnahme (Optimistic Concurrency Control) wird ausgelöst, wenn die Operation applyChanges() zu einer Datenkollision führt. In diesem Fall enthält die Ausnahmenachricht die ursprünglichen Zeilenwerte, die aktuellen Zeilenwerte und die geplanten Zeilenwerte. Anhand dieser Werte lässt sich die Fehlerbehebung einfacher durchführen.
Eine Ausnahme InvalidMetadata wird ausgelöst, wenn während der Erstellungsoperation ungültige Metadaten an JDBC DMS übergeben werden. Dieser Fehler kann auftreten, wenn eine Abfrage Tabellen oder Spalten erfordert, die nicht in den Metadaten enthalten sind, oder wenn identische Spaltennamen für unterschiedliche Tabellen in der Oracle-Datenbank, der Informix-Datenbank oder in älteren unterstützten Versionen von Sybase-Datenbanken vorhanden sind.
Beispiel: OCC-Datenkollisionen und JDBC-Mediator-Ausnahmen erzwingen. Das folgende Beispiel provoziert eine Kollision und eine diesbezügliche Ausnahme zur Veranschaulichung.
// Das Beispiel setzt voraus, dass bereits ein Mediator erstellt
// wurde und dass der erste Name in der Liste Sam ist.
// Außerdem wird angenommen, dass die Customer-Tabelle eine OCC-Spalte
// hat und diese Spalte in den Metadaten als Kollisionsspalte
// definiert ist.
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)
{
// Da graph1 vor graph2 abgerufen und
// graph2 bereits übergeben wurde, löst der
// Versuch, dieselben Änderungen auf graph1
// anzuwenden, diese OCC-Ausnahme aus.
assertEquals("Sam", e.getOriginalDO(). getString("CUSTFIRSTNAME"));
assertEquals("Bubba", e.getChangedDO(). getString("CUSTFIRSTNAME"));
assertEquals("Slim", e.getDatabaseDO(). getString("CUSTFIRSTNAME"));
}