Setando autocommit na JPA

7 respostas
gfronza

Pessoal,

Tenho um aplicação que usa JPA (hibernate), deixando o VRaptor controlar as transações, colocando:

<context-param>
     <param-name>br.com.caelum.vraptor.packages</param-name>
     <param-value>br.com.caelum.vraptor.util.jpa</param-value>
 </context-param>

Eu começei a desenvolver esta aplicação no Glassfish 3.0.x, e estava tudo ok. Mas agora na versão 3.1 estou visualizando no server.log que a cada requisição à uma lógica do VRaptor a seguinte exceção ocorre:

java.sql.SQLException: Can't call commit when autocommit=true
 	at com.mysql.jdbc.Connection.commit(Connection.java:2161)
 	at com.sun.gjc.spi.base.ConnectionHolder.commit(ConnectionHolder.java:241)
 	at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:170)
 	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:146)
 	at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76)
 	at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:49)

Tentei setar o hibernate.connection.autocommit para false, mas este é ignorado devido à “hibernate.connection.autocommit = false break the EJB3 specification”.

Alguém tem idéia de como eu desativar o auto-commit do JPA para parar de dar esta exceção?

PS: tudo funciona, grava no DB tudo ok. Só fica lançando a exceção…

7 Respostas

Lucas_Cavalcanti

tenta achar qual é o parâmetro padrão da jpa para setar o autocommit… talvez tenha algo na url do banco que faça isso também…

de qqer forma, isso não tem mto a ver com VRaptor, se vc mudar o título do tópico para “Setando autocommit na JPA” as pessoas que sabem isso podem te ajudar.

Abraços

gfronza

Lucas Cavalcanti:
tenta achar qual é o parâmetro padrão da jpa para setar o autocommit… talvez tenha algo na url do banco que faça isso também…

de qqer forma, isso não tem mto a ver com VRaptor, se vc mudar o título do tópico para “Setando autocommit na JPA” as pessoas que sabem isso podem te ajudar.

Abraços

Verdade Lucas, thnks!

gfronza

Bom, consegui fazer com que a exceção não seja mais lançada. Fiz testes pela aplicação e tudo parece estar sendo persistido de forma correta no DB.
O que eu fiz foi adicionar o parâmetro relaxAutoCommit na url de conexão (como o Lucas deu a dica acima). Mas agora eu não sei se esse parâmetro pode ter alguma outra implicação que eu desconheço, vou continuar pesquisando sobre ele, mas a principio resolveu o meu problema.

Achei sobre este parâmetro no seguinte link:

G

Eu uso vraptor com GF 3.1 e não tenho esse problema. Quais são as propriedades do teu datasource?

No persistence.xml você está usando um jta-data-source ou um local-datasource?

gfronza

garcia-jj:
Eu uso vraptor com GF 3.1 e não tenho esse problema. Quais são as propriedades do teu datasource?

No persistence.xml você está usando um jta-data-source ou um local-datasource?

Valeu pela resposta,

No persistence.xml eu estou usando um non-jta-data-source, buscando a conexão através do JDBC Resource criado no GF.
Não tenho nenhuma configuração adicional no persistence.xml, apenas indico o nome do JNDI do pool. Nas propriedades específicas do hibernate eu estou sentando apenas para exibir as SQLs a serem executadas (acho que é show_sql). Talvez esteja faltando alguma configuração no persistence.xml, vc conhece alguma possível?

Obrigado

G

Perguntei as propriedades do datasource, não do persistence.Alguma configuração pode estar causando esse comportamento.

bobboyms

Acho que pode te ajudar http://code.google.com/p/jpa-component/wiki/Doc_PT_Br

Criado 28 de março de 2011
Ultima resposta 8 de out. de 2011
Respostas 7
Participantes 4