Erro: JDBC rollback failed

11 respostas
P

Caros,

Estou tendo este erro esporadicamente. Acontece às vezes. E quando acontece, preciso reiniciar pelo menos o JBoss.
Este erro pode passar muito tempo sem acontecer e em alguns momentos acontecer com muita freqüência.
O servidor roda com uma carga meio elevada e bastante variável, o pool de conexões configuradas no hibernate é de 100.
Alguém já teve problema parecido ?
infelizmente não posso ter acesso aos logs mas aqui vai o stack trace:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: JDBC rollback failed

org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)

root cause

org.hibernate.TransactionException: JDBC rollback failed

org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:150)

com.vivors.struts.action.LoginAction.execute(LoginAction.java:70)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.


Apache Tomcat/5.5

Agradeço o tempo e atenção dos colegas

11 Respostas

F

O seu Banco de Dados está em cluster?

P

Está sim e é um cluster grande. Por que ?

F

E voce acessa em alguma operacao mai de um banco de dados?

P

Algumas vezes sim. Mas não é sempre. O erro acontece mesmo quando há acesso ao mesmo banco de dados

F

Quando acessa o mesmo banco de dados, nao deveria dar esse erro…

O que acontece é o seguinte. Imagina que voce tem dois servidores de Bando de Dados, chamadas DB1 e DB2 em cluster, e duas Bases de Dados, chamadas Base A e Base B. Quando o Jboss acessa o banco de dados ele vai usar o Connection Pool, mas sua aplicação nao sabe se a conexao foi pega do DB1 ou DB2. Ai cai nas seguintes situações

  1. Quando voce envia o comando pra Base A, usando a conexao do DB1 ele executa e volta pela mesma conexao DB1, isso funciona!
  2. Quando voce envia o comando roda uma procedura na Base A e dentro dessa procedure tem acesso a Base B, e ambos usam a conexao DB1 tanto na ida qto na volta, isso tb funciona.
  3. Quando voce envia o comando que roda a procedure na Base A e dentro dessa procedure tem acesso a Base B, vc pode ter o seguinte problema. Imagina que ao chamar a procedure na base B, mas ao voltar ele volte por uma conexao DB2, e como a chamada da erro ele tenta fazer o rollback e como não existe chamada ele dá o erro
P

Cara, entendi. Pode ser isso. Explicaria muita coisa.
mas o que devo fazer ? Encerrar a conexão sempre e pegar de novo ?

F

Entao, no caso que aconteceu comigo, era um WebLogic com Oracle RAC, mas o Oracle RAC so estava numa das Bases e na outra não. O problema não é aplicação e sim infra estrutura. Como era uma aplicação crítica, voltaram tudo como era antes, e depois nao sei o q deu pq sai da empresa. Está tudo em cluster ou tem Base que nao está? Qual DB que é?

Ah, Vc ta usando driver XA?

P

É um Oracle rodando em um sistema HP-UX. Está tudo no cluster e eu não estou usando driver XA.
O aplicativo é grandinho e não estava a fim de modificá-lo demais. Deve ter muitas conexões que ninguém sabe pra que serve, mas se mexer alguém vai reclamar.
Cheguei a duvidar do conection pool. Mas o que você me falou parece que faz mais sentido.
Comecei a fazer a manutenção deste código hoje e já vi que vai dar trabalho.

F

O que deveria dar problema sao operações que vao envolver mais de uma base. Os erros vao ser intermitentes (variando de numeros de servidores RAC). O que voce poderia fazer na aplicação é ver no banco de dados quais procedures acessam a outra base e ver se consegue separar isso (coisa q dificilmente vai dar) e ver a necessidade de um driver XA

P

Vou ver o que posso fazer a respeito

Valeu mesmo pela dica.
Ajudou bastante

Se puder fazer algo por voce é só me falar

Até

F

Posta aqui depois quando resolver o problema pra sabe q fim deu :slight_smile:

[]'s

Criado 26 de novembro de 2007
Ultima resposta 26 de nov. de 2007
Respostas 11
Participantes 2