2013-04-10 36 views
5

Tôi có một ứng dụng với Jboss, Seam, Hibernate và h2. Tôi đã viết một hành động đơn giản để nhập dữ liệu vào cơ sở dữ liệu từ một tệp bên ngoài.Gây ra bởi: java.sql.SQLException: Kết nối không được liên kết với một connection.org.jboss.resource.ada được quản lý

@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(); 
} 

Nó hoạt động như mong đợi cho số, tuy nhiên, tại một số điểm tôi nhận được ngoại lệ sau đây:

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 

Trả lời

6

Lỗi này có nghĩa rằng mã của bạn đang sử dụng một kết nối đó là không còn giá trị (ví dụ. đóng/hủy kết nối do lỗi kết nối hoặc bộ đệm kết nối không hợp lệ bởi ứng dụng nơi kết nối được lưu trong bộ nhớ cache bị đóng bởi một số đoạn mã ngược dòng khác). Trong trường hợp của bạn, id kết nối từ hồ bơi là @3c4b0529. Vì vậy, bạn có thể tham khảo điều này trong nhật ký mức TRACE để xem liệu bạn có thể tìm hiểu lý do tại sao kết nối bị đóng (do một số lỗi như DB đã giết kết nối hoặc các vấn đề mạng hoặc mã ứng dụng xử lý kết nối không chính xác).

  1. Bạn nên tối ưu hóa mã của bạn để không mất thời gian cho giao dịch để hoàn thành. Các tùy chọn khác là để tăng thời gian giao dịch trong deploy/transaction-jboss-beans.xml cho đậu TransactionManager: -

    .... ....

    Giá trị mặc định là 5 phút (300 giây). Việc tăng thời gian giao dịch này có thể giúp nhưng điều này không thực sự giải quyết được nguyên nhân gốc rễ, đó là các giao dịch chạy dài mà bạn có trong ứng dụng của mình. Một tác dụng phụ của việc tăng thời gian giao dịch là bạn đang giữ tài nguyên lâu hơn để nó tác động tiêu cực đến hiệu suất của các dịch vụ khác trong JBoss.

Tôi hy vọng bạn không định sử dụng h2 trong quá trình sản xuất. h2 không có nghĩa là để sử dụng sản xuất cho sự kiên trì.

  1. Bạn cũng nên kiểm tra cài đặt nguồn dữ liệu để đảm bảo rằng bạn idle-timeout-minutes không bị tắt (được đặt thành 0). Mặc định là 15 phút, bạn có thể tăng nó nếu kết nối của bạn không hoạt động giữa các giao dịch lâu hơn khoảng thời gian đó.

  2. Cuối cùng, đảm bảo bạn không lưu trong bộ nhớ cache bất kỳ đối tượng kết nối nguồn dữ liệu hoặc câu lệnh nào mà bạn có thể đang giữ kết nối cũ hoặc tuyên bố quá lâu.

+0

Cảm ơn bạn đã trả lời. Thật không may tăng thời gian chờ đã không giải quyết được vấn đề .. – user2266685

+0

Bạn có thực sự thấy các giao dịch định thời gian ở bất kỳ đâu không? Tôi đã thảo luận 3 giải pháp khả thi. Tùy thuộc vào cách bạn mã hóa và cấu hình ứng dụng của bạn, giải pháp sẽ thay đổi. – CoolBeans

+0

Không, tôi không thấy nó hết thời gian, nhưng khi tôi giảm số lượng hồ sơ để nhập mọi thứ có vẻ ổn. – user2266685

0

Gần đây tôi đã phải đối mặt với cùng một vấn đề, sau khi gỡ lỗi nó tôi tìm ra rằng tôi đã đóng kết nối trước khi tôi thực hiện một Statement, đảm bảo kết nối của bạn vẫn mở và HỢP LỆ.

Các vấn đề liên quan