Java: Não é possível definir o modo de comprometimento automático com o valor false na API Java 1.4?

StackOverflow https://stackoverflow.com/questions/1912779

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top