views:

71

answers:

1

Hi, I randomly see the same error in the catalina.out log:

WARNING: SQL Error: 0, SQLState: 25P02
Sep 8, 2010 11:50:13 PM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ERROR: current transaction is aborted, commands ignored until end of transaction block
org.hibernate.exception.GenericJDBCException: could not execute query
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.loader.Loader.doList(Loader.java:2223)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
        at org.hibernate.loader.Loader.list(Loader.java:2099)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
        at PersistanceHelper.getTranslationByName(PersistanceHelper.java:174)
        at SearchBean.getObject(SearchBean.java:146)
        at org.apache.jsp.ajax.get_005fobject_jsp._jspService(get_005fobject_jsp.java:72)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
        at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
        at org.hibernate.loader.Loader.doQuery(Loader.java:674)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
        at org.hibernate.loader.Loader.doList(Loader.java:2220)

I don't know what is the reason for that problem as I get it randomly and normally the query works just fine. m using Postgresql 8.3 and the application is in JSF 2.0. Has anyone ever dealt with such an error? What is the cause? Thanks for any suggestions.

I need to add that I'm only reading data from the database, but do not update or insert any in those queries.

--------------------------------- edit -------------------------------------- This is an example query:

List object = null; 
try { 
org.hibernate.Transaction tx = session.beginTransaction(); 
Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')"); 
object = (List<Table>) q.list(); 
} catch (Exception e) 
{ e.printStackTrace(); } 
return object; }

I just noticed this in the tomcat log:

Initial SessionFactory creation failed.java.lang.OutOfMemoryError: PermGen space

Could it be the reason? If I refresh the application, it tends to work normally for some time.

Best Regards, sass.

A: 

It probably means some of your queries were not executed. If you have many queries in transaction, e.g.

  • begin transaction
  • query1
  • query2
  • query3
  • finish transaction

and query2 throws error, then when you try to execute query3 you get this error.

  • begin transaction
  • query1 (succeeded)
  • query2 (error, something went wrong)
  • query3 (exception like yours is thrown)
  • finish transaction

You should handle exception thrown from query2 and handle it. Show some error to the user, rollback transaction, never try to execute query3.

Look also here: http://www.faqs.org/docs/ppbook/x15040.htm

UPDATE

To finish transaction:

List object = null; 
try {
  org.hibernate.Transaction tx = session.beginTransaction(); 
  try { 
    Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')"); 
    object = (List<Table>) q.list(); 
  } catch (Exception e) {
    e.printStackTrace(); 
  } finally {
    //You can safely rollback here because you are not changing anything in the DB.
    //If you change something, you should commit transaction at the end of try block,
    //and here check if it is still active and rollback if it is.
    tx.rollback();
  }
  return object; 
} catch (HibernateException e) {
  throw new RuntimeException("Could not begin transaction");
}
amorfis
Thanks for the answer. However, there is only one query in a transaction and most of the time it works so I would like to know why does the problem appear and why the query is not executed. Do you perhaps have any advice?
sass
Are you sure there is only one query in a transaction? Are you sure you are creating transaction before that query and finishing it after query (rollback or commit). Are you for sure finishing transaction if query throws exception (do you finish transaction in finally block)?
amorfis
That's an example:
sass
List object = null; try { org.hibernate.Transaction tx = session.beginTransaction(); Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')"); object = (List<Table>) q.list(); } catch (Exception e) { e.printStackTrace(); } return object; }
sass
Could you edit your question and add this code to the question? It is quite hard to read in comment. As I can see you are not finishing transaction.
amorfis
Sorry for that. I have edited the post. How do you finish the transaction?
sass
Is it not required to have session.close() as well in the finally block? Does it happen automatically?
sass
Still, I would prefer to find out why the queries are not processed correctly. The problem is that the first version of application did not have rollback or any error handling but it was working perfectly. Then I added a table in the database and had to change the queries slightly and then it started.
sass
Yes, you have to handle session as well. You didn't include code initializing the session (and that's good, it was not the problem here), neither did I, so I didn't care to close it as well. I don't know why your queries are not processed correctly. The first line of attached log has some error, this could be error in previous query, which causes next query to throw `ERROR: current transaction is aborted...` Maybe previous query has error, but is not throwing an exception. I don't know what `SQL Error: 0, SQLState: 25P02` means.
amorfis
Thanks a lot. Could this be a problem: Initial SessionFactory creation failed.java.lang.OutOfMemoryError: PermGen space ? And how to get rid of it?
sass
Increase PermGen memory. Add to jvm arguments: `-XX:MaxPermSize=640M` (of course you can put different value instead of 640)
amorfis