2013-04-10 12 views
5

Ho un'applicazione con Jboss, Seam, Hibernate e h2. Ho scritto una semplice azione per importare dati nel database da un file esterno.Causato da: java.sql.SQLException: la connessione non è associata a una connessione managed.org.jboss.resource.ada

@Name("importAction") 
@AutoCreate 
@Scope(ScopeType.CONVERSATION) 
@Transactional 
public class ImportCosAction extends AbstractAction { 

saveOrUpdate(member); 

protected void saveOrUpdate(AbstractEntity entity) { 
    final Session session = getSession(); 
     session.saveOrUpdate(entity); 
    flushSession(); 
} 

Esso funziona come previsto per il numero, però, ad un certo punto ricevo la seguente eccezione:

16:50:13,558 ERROR [JDBCExceptionReporter] Connection is not associated with a managed connec[email protected]3c4b0529 
16:50:13,558 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session 
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update 
     at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) 
     at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114) 
     at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109) 
     at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244) 
     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) 
     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2688) 
     at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79) 
     at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) 
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) 
     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 
     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) 
     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) 
     at org.jboss.seam.persistence.HibernateSessionProxy.flush(HibernateSessionProxy.java:187) 
     at com.capecapital.dealmarket.usecase.AbstractAction.flushSession(AbstractAction.java:434) 
     at com.capecapital.dealmarket.usecase.registration.AbstractRegistrationAction.createNewAccount(AbstractRegistrationAction.java:251) 
     at com.capecapital.dealmarket.usecase.registration.RegistrationAction.primRegister(RegistrationAction.java:71) 
     at com.capecapital.dealmarket.usecase.registration.AbstractRegistrationAction.register(AbstractRegistrationAction.java:146) 
     at com.capecapital.dealmarket.usecase.importCoS.ImportCosAction.register(ImportCosAction.java:401) 
     at com.capecapital.dealmarket.usecase.importCoS.ImportCosAction.execute(ImportCosAction.java:154) 
     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:597) 
     at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) 
     at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32) 
     at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) 
     at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) 
     at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) 
     at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97) 
     at org.jboss.seam.util.Work.workInTransaction(Work.java:47) 
     at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91) 
     at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) 
     at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) 
     at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) 
     at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) 
     at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185) 
     at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103) 
     at com.capecapital.dealmarket.usecase.importCoS.ImportCosAction_$$_javassist_seam_18.execute(ImportCosAction_$$_javassist_seam_18.java) 
     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:597) 
     at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335) 
     at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:280) 
     at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) 
     at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java:65) 
     at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
     at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
     at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) 
     at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
     at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
     at javax.faces.component.UICommand.broadcast(UICommand.java:387) 
     at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329) 
     at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304) 
     at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261) 
     at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474) 
     at org.openfaces.ajax.richfaces.A4JAjaxViewRoot.access$301(A4JAjaxViewRoot.java:28) 
     at org.openfaces.ajax.richfaces.A4JAjaxViewRoot$1.parentProcessApplication(A4JAjaxViewRoot.java:51) 
     at org.openfaces.ajax.CommonAjaxViewRoot.processApplication(CommonAjaxViewRoot.java:197) 
     at org.openfaces.ajax.richfaces.A4JAjaxViewRoot.processApplication(A4JAjaxViewRoot.java:112) 
     at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
     at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.openfaces.util.ResourceFilter.doFilter(ResourceFilter.java:99) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83) 
     at org.jboss.seam.web.RewriteFilter.doFilter(RewriteFilter.java:63) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at com.capecapital.dealmarket.filter.UserAgentFilter.doFilter(UserAgentFilter.java:46) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at com.capecapital.dealmarket.filter.DealmarketExceptionFilter.doFilter(DealmarketExceptionFilter.java:72) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) 
     at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
     at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) 
     at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 
     at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at com.capecapital.dealmarket.filter.RequestLoggingFilter.doFilter(RequestLoggingFilter.java:90) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 
     at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) 
     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 
     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 
     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 
     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:330) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: java.sql.SQLException: Connection is not associated with a managed connec[email protected]3c4b0529 
     at org.jboss.resource.adapter.jdbc.WrappedConnection.lock(WrappedConnection.java:81) 
     at org.jboss.resource.adapter.jdbc.WrappedStatement.lock(WrappedStatement.java:64) 
     at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:767) 
     at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
     at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) 
     ... 117 more 

risposta

6

Questo errore significa che il codice utilizza una connessione che non è più valido (es. connessione chiusa/distrutta a causa di un errore di connessione o cache di connessione non valida dall'applicazione in cui la connessione memorizzata viene chiusa da qualche altro pezzo di codice a monte). Nel tuo caso l'ID della connessione dal pool è @3c4b0529. Quindi puoi fare riferimento a questo nel logging del livello TRACE per vedere se riesci a scoprire perché la connessione è stata chiusa (a causa di alcuni errori come la connessione DB interrotta o problemi di rete o il codice dell'applicazione che gestisce la connessione in modo errato).

  1. Si dovrebbe ottimizzare il codice di non prendere tutto il tempo per la transazione per il completamento. L'altra opzione è quella di aumentare il tempo di transazione nel deploy/transaction-jboss-beans.xml per il bean TransactionManager: -

    .... ....

    Il valore predefinito è 5 minuti (300 secondi). Aumentare il timeout della transazione potrebbe essere d'aiuto, ma in realtà non risolve la causa principale, ovvero le transazioni a lungo termine che si hanno nell'applicazione. Un effetto collaterale di aumentare il timeout della transazione è che si mantengono le risorse più a lungo in modo che influiscano negativamente sulle prestazioni di altri servizi in JBoss.

Spero che non abbiate intenzione di utilizzare h2 in produzione. h2 non è destinato all'uso di produzione per la persistenza.

  1. Si dovrebbe anche controllare le impostazioni di origine dei dati per garantire che idle-timeout-minutes non è disattivato (impostato su 0). L'impostazione predefinita è 15 minuti, è possibile aumentarla se le connessioni sono inattive tra le transazioni per un periodo superiore a tale periodo.

  2. Infine, accertarsi di non memorizzare nella cache gli oggetti di connessione all'origine dati o le istruzioni in cui si potrebbe tenere per troppo tempo una connessione o una dichiarazione obsoleta.

+0

Grazie per la risposta. Sfortunatamente l'aumento del timeout non ha risolto il problema. – user2266685

+0

In effetti, le transazioni sono state fuori tempo? Ho discusso 3 possibili soluzioni. A seconda di come hai codificato e configurato la tua applicazione, la soluzione varierà. – CoolBeans

+0

No, non l'ho visto scadere, ma quando riduco il numero di record da importare, tutto sembra funzionare correttamente. – user2266685

0

Recentemente stavo affrontando lo stesso problema, dopo il debug Mi capire che stavo chiudendo la connessione prima di eseguire un'istruzione, assicurarsi che la connessione è ancora aperto e valido.

Problemi correlati