Uploaded image for project: 'Geronimo'
  1. Geronimo
  2. GERONIMO-3907

Persistence Exception is not visible/lost for client.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.0.2, 2.1
    • 2.1.1
    • persistence
    • Security Level: public (Regular issues)
    • None
    • Linux, Windows

    Description

      I am trying an insert on a table. The Entity class is wrong annotated, one column was renamed in the table. Then the following situation occurs.

      The call to persist(entity) is successfully, no exception is thrown. On leaving the ejb container and returning to tomact a commit is performed (it's a managed datasource, so container performs commit). This leads to the insert on database. This insert fails, a rollback is performed. On return to the JSF bean no exception can be seen by the bean. In the same class i have got a query method. If i replace the call to persist with the call to the query method everything works ok. The exception is thrown and is visible at the client site.

      This is the geronimo console output. The last line comes from the JSB bean which reports a successful insert.

      11:58:04,390 WARN [Transaction] Unexpected exception from beforeCompletion; transaction will roll back
      <openjpa-1.0.1-r420667:592145 fatal general error> org.apache.openjpa.persistence.PersistenceException: The transaction has been rolled back. See the nested exceptions for details on the errors that occurred.
      at org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2107)
      at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
      at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
      at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1770)
      at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
      at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
      at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
      at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
      at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
      at org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
      at org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
      at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:233)
      at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
      at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
      at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
      at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
      at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
      at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
      at $Proxy75.anlegenBenutzer(Unknown Source)
      at de.nrw.hagen.ggrz.benutzer.controler.BenutzerControler.anlegenBenutzer(BenutzerControler.java:44)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
      at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
      at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
      at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:75)
      at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:54)
      at javax.faces.component.UICommand.broadcast(UICommand.java:121)
      at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:292)
      at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
      at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
      at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
      at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
      at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
      at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
      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:175)
      at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
      at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:396)
      at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
      at java.lang.Thread.run(Thread.java:595)
      Caused by: <openjpa-1.0.1-r420667:592145 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: FEHLER: Spalte »letzte_benutzer_gruppe« von Relation »benutzer« existiert nicht

      {prepstmnt 17230170 INSERT INTO vesuv.benutzer (id, anzahl_anmeldeversuche, anzahl_anmeldungen, benutzer_kennung, datum_letzte_passwort_aenderung, email_anlage, historie_fk, ist_gesperrt, ist_gesperrt_seit, kostenbefreiung_online_auskunft, letzte_benutzer_gruppe, letzter_anmeldeversuch, passwort_fehlversuche_zaehler, passwort_historie, passwort_sha256hash, passwort_wechsel_erst_anmeldung, person_info, sperrgrund, verknuepft_mit, zuletzt_angemeldet_am) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [params=(long) 31, (long) 0, (long) 0, (String) a, (Timestamp) 1970-01-01 01:00:00.0, (boolean) false, (long) 0, (boolean) false, (Timestamp) 1970-01-01 01:00:00.0, (boolean) false, (long) 0, (Timestamp) 3908-03-21 10:22:00.0, (long) 0, (String) nixx, (String) b, (boolean) false, (long) 0, (String) keiner, (long) 1, (Timestamp) 3908-03-21 10:22:00.0]}

      [code=0, state=42703]
      FailedObject: de.nrw.hagen.ggrz.bv.benutzer.db.BenutzerPAO@8b394
      at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3938)
      at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
      at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
      at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
      at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
      at org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flushPrimaryRow(OperationOrderUpdateManager.java:203)
      at org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java:89)
      at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
      at org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
      at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
      at org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
      ... 53 more
      Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: FEHLER: Spalte »letzte_benutzer_gruppe« von Relation »benutzer« existiert nicht

      {prepstmnt 17230170 INSERT INTO vesuv.benutzer (id, anzahl_anmeldeversuche, anzahl_anmeldungen, benutzer_kennung, datum_letzte_passwort_aenderung, email_anlage, historie_fk, ist_gesperrt, ist_gesperrt_seit, kostenbefreiung_online_auskunft, letzte_benutzer_gruppe, letzter_anmeldeversuch, passwort_fehlversuche_zaehler, passwort_historie, passwort_sha256hash, passwort_wechsel_erst_anmeldung, person_info, sperrgrund, verknuepft_mit, zuletzt_angemeldet_am) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [params=(long) 31, (long) 0, (long) 0, (String) a, (Timestamp) 1970-01-01 01:00:00.0, (boolean) false, (long) 0, (boolean) false, (Timestamp) 1970-01-01 01:00:00.0, (boolean) false, (long) 0, (Timestamp) 3908-03-21 10:22:00.0, (long) 0, (String) nixx, (String) b, (boolean) false, (long) 0, (String) keiner, (long) 1, (Timestamp) 3908-03-21 10:22:00.0]}

      [code=0, state=42703]
      at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
      at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
      at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
      at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
      at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
      at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
      at org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
      ... 60 more
      [de.nrw.hagen.ggrz.benutzer.controler.BenutzerControler] >> $$Success from neuer Benutzer = true

      Attachments

        Issue Links

          Activity

            People

              djencks David Jencks
              rbaumhof Ralf Baumhof
              Votes:
              2 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 5m
                  5m
                  Remaining:
                  Remaining Estimate - 5m
                  5m
                  Logged:
                  Time Spent - Not Specified
                  Not Specified