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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top