Exceções do Mediador JDBC
As exceções do mediador JDBC apresentam os erros relatados pelo banco de dados ou indicam o uso de metadados inválidos na tentativa de instanciar o DMS.

A exceção do Mediador é a exceção raiz de todos os serviços de mediador de dados e a exceção JDBCMediator é a exceção raiz para o JDBC DMS em específico.
- quando a conexão que está sendo utilizada tiver a propriedade AutoCommit definida como true, mas o JDBC DMS estiver controlando a transação e precisar que ela seja definida como false
- quando um banco de dados não suportado estiver tentando ser utilizado
- quando ocorrerem outros erros de banco de dados de backend durante a consolidação ou o rollback.
Ocorre uma exceção OCC (Optimistic Concurrency Control) quando a operação applyChanges() resultar em uma colisão de dados. Quando isso ocorrer, a exceção conterá os valores de linha originais, valores de linha atuais e os valores de linha tentados. Esses valores são utilizados para ajudar na recuperação do erro.
Ocorre uma exceção InvalidMetadata para os metadados inválidos fornecidos ao JDBC DMS após a criação. Isso pode ocorrer quando uma consulta exige tabelas ou colunas que não estejam definidas nos metadados, ou quando há nomes de coluna idênticos para tabelas diferentes no Oracle, Informix e nas versões suportadas mais antigas dos bancos de dados Sybase.
Exemplo: Forçando as colisões de dados OCC e as exceções do mediador JDBC O exemplo a seguir força uma colisão para demonstrar a detecção e mostra a exceção que ocorre como resultado.
// Esse exemplo assume que um mediador já foi
// criado e o primeiro nome na lista é Sam.
// Ele também assume que a tabela do Cliente possui uma coluna OCC
// e que os metadados definiram essa coluna como sendo a
// coluna de colisão.
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)
{
// Como o graph1 foi obtido antes de graph2 e
// graph2 já foi submetido, tentar aplicar
// as mesmas alterações em graph1 provoca
// essa Exceção OCC.
assertEquals("Sam", e.getOriginalDO(). getString("CUSTFIRSTNAME"));
assertEquals("Bubba", e.getChangedDO(). getString("CUSTFIRSTNAME"));
assertEquals("Slim", e.getDatabaseDO(). getString("CUSTFIRSTNAME"));
}