Java: ¿No puede establecer el modo de confirmación automática con valor falso en Java 1.4 API?
-
19-09-2019 - |
Pregunta
SQL Server 200 Java 1.4 JBoss 3
Hola, estoy recibiendo un mensaje de excepción "No puede configurar Autocommit durante una transacción administrada"
El código está debajo
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;
}
¿Qué es la causa de esta excepción y qué significa?
Solución
El error es claro que no puede establecer Autocommit mientras esté en una transacción administrada. Ni siquiera debe necesitar establecer esto en False, ya que es el valor predeterminado, que usa para habilitarlo en autocommitio.
No estoy seguro de si está utilizando J2EE y EJB, si lo está y desea habilitar el Autocommitio, puede cambiar su configuración a Bean Managed Transaction (BMT) y esto le permitiría modificar esta configuración.
Sin embargo, la forma en que lo usa en su código no necesita configurarlo en falso, todo se hace en las transacciones y las controla con compromiso o reversión.