Java: Não é possível definir o modo de comprometimento automático com o valor false na API Java 1.4?
-
19-09-2019 - |
Pergunta
SQL Server 200 Java 1.4 JBoss 3
Olá, estou recebendo mensagem de exceção "Você não pode definir autocomit durante uma transação gerenciada"
O código está abaixo
try {
try {
connection = getConnection();
} catch (Exception e) {
throw new ConnectionException(e.getMessage());
}
for(int i=0;i<recordIds.size();i++)
{
String currentRecordId=(String)recordIds.get(i);
try
{
//exception on this line connection.setAutoCommit(false);
preparedStatement = connection.prepareStatement(getSQL("PurgeRecordInDumpData"));
preparedStatement.setLong(1,Long.parseLong(currentRecordId));
int numberOfUpdates=preparedStatement.executeUpdate();
if(numberOfUpdates!=1)
{
throw new Exception("Record with record id "+currentRecordId +"could not be purged.");
}
preparedStatement.close();
connection.commit();
listOfPurgedRecords.add(currentRecordId);
}
catch(Exception e)
{
connection.rollback();
}
}
return listOfPurgedRecords;
}
Qual é a causa dessa exceção e o que isso significa?
Solução
O erro está claro, você não pode definir o AutoComit enquanto estiver em uma transação gerenciada. Você nem deve precisar definir isso como falso, pois esse é o padrão, o uso para ativá -lo autocomit.
Não tenho certeza se você está usando o J2EE e o EJB, se for e deseja ativar o AutoComit, você pode alterar sua configuração para a Transação Gerenciada por Bean (BMT) e isso permitiria modificar essa configuração.
No entanto, da maneira como você o está usando no seu código, você não precisa defini -lo como falso, tudo é feito nas transações e você as controla com confirmação ou reversão.