2012-12-07 6 views
0

저는 GWT를 초보자로 삼아 프로젝트에서 Spring 프레임 워크와 GWT를 통합합니다. 모듈 페이지에는 LeftSide (트리 뷰)와 RightPanel (그리드 뷰)의 두 부분이 있습니다. 데이터베이스 (Department, Employee)에서 treeview 노드를 빌드합니다. Gridview는 treeview에서 노드를 선택할 때 결과를 표시하는 데 사용됩니다. 문제는 내가 URL (http://127.0.0.1:8888/ams.html?gwt.codesvr=127.0.0.1:9997), 가끔 열어, treeview 쇼 아무것도, 콘솔에 다음과 같은 예외가 인쇄됩니다. 하지만 오른쪽 gridview는 괜찮습니다. 나는 EntityLocator의의 isLive를 오버라이드 (override)하는 경우 다음 방법 (그냥 사실을 반환)이 항상 OKGWT에서 EntityLocator의 isLive를 재정의하는 방법

javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not load an entity: [com.sparj.ams.server.domain.staff.Department#50001] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:635) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:589) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365) 
    at $Proxy31.find(Unknown Source) 
    at com.sparj.ams.server.locator.EntityLocator.find(EntityLocator.java:47) 
    at com.sparj.ams.server.locator.EntityLocator.find(EntityLocator.java:1) 
    at com.google.web.bindery.requestfactory.shared.Locator.isLive(Locator.java:96) 
    at com.google.web.bindery.requestfactory.server.LocatorServiceLayer.doIsLive(LocatorServiceLayer.java:188) 
    at com.google.web.bindery.requestfactory.server.LocatorServiceLayer.isLive(LocatorServiceLayer.java:85) 
    at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.isLive(ServiceLayerDecorator.java:116) 
    at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.isLive(ServiceLayerDecorator.java:116) 
    at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.createReturnOperations(SimpleRequestProcessor.java:282) 
    at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:240) 
    at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:135) 
    at com.google.web.bindery.requestfactory.server.RequestFactoryServlet.doPost(RequestFactoryServlet.java:133) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097) 
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:324) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: org.hibernate.exception.JDBCConnectionException: could not load an entity: [com.sparj.ams.server.domain.staff.Department#50001] 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.loader.Loader.loadEntity(Loader.java:2041) 
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86) 
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76) 
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3268) 
    at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496) 
    at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477) 
    at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227) 
    at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285) 
    at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152) 
    at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090) 
    at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1005) 
    at org.hibernate.impl.SessionImpl.get(SessionImpl.java:998) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:614) 
    ... 41 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.Util.getInstance(Util.java:386) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1014) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) 
    at com.mysql.jdbc.StatementImpl.checkClosed(StatementImpl.java:463) 
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3783) 
    at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3832) 
    at com.mysql.jdbc.PreparedStatement.setLong(PreparedStatement.java:3849) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setLong(NewProxyPreparedStatement.java:703) 
    at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:52) 
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:89) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:282) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:277) 
    at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1873) 
    at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1844) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:801) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.loadEntity(Loader.java:2037) 
    ... 53 more 

답변

2

문제는 당신이 당신의 하이버 네이트 세션의 라이프 사이클을 관리하는 방법 그것의,하지 isLive입니다 : 어떻게 든 세션이 isLive 닫기 직전이라고합니다 .

RequestFactory를 사용하면 의 세션 당 HTTP 요청 (OpenSessionInView라고도 함) 패턴을 사용할 수 있습니다.

+0

안녕하세요, Thomas, 도와 주셔서 감사합니다. 나는 지금 OpenSessionInView를 조사 할 것이다. :) –

+1

+1 "open-session-in-view"에 대한 별명 인 "session-per-http-request" (JSP와는 대조적으로) 클라이언트 인 경우, 세션 (작업 단위)은 클라이언트 측보기로 확장되지 않습니다. –

+0

@ChrisLercher 당신 말이 맞습니다. 편집 된 답변을 제출하고 지금부터 해당 용어를 사용하려고합니다. –