Do you use a connection pool? e.g. datasource definition in your container, dbcp or c3p0? If not, use one.
Martijn On Tue, Aug 25, 2009 at 11:10 PM, Dane Laverty<danelave...@gmail.com> wrote: > I think I've discovered the source of the problem, but not the solution. On > a normal page request, the console output says: > > DEBUG - log - REQUEST /post-job on > org.mortbay.jetty.httpconnect...@1b9db06 ... > DEBUG - ConnectionManager - opening JDBC connection > DEBUG - SQL - select > jobcategor0_.job_category_id... > > And everything goes normally from there. But on double-clicking the link, > the console says: > > DEBUG - log - REQUEST /post-job on > org.mortbay.jetty.httpconnect...@1b9db06 ... > DEBUG - ConnectionManager - opening JDBC connection > DEBUG - log - REQUEST /post-job on > org.mortbay.jetty.httpconnect...@a78af0 ... > DEBUG - ConnectionManager - opening JDBC connection > > And then the application freezes. Apparently it is trying to open a second > JDBC connection before the first one closed, and something doesn't like > that. I'm not sure where to start looking to solve this -- any suggestions? > > thanks again, > > Dane > > > > On Tue, Aug 25, 2009 at 1:22 PM, Dane Laverty <danelave...@gmail.com> wrote: > >> Progress is being made. Thanks again for your suggestion, Martijn. I >> discovered this thread ( >> http://www.nabble.com/Storing-user-entity-in-session--td22113666.html#a22113666) >> where you discussed putting the user in the RequestCycle in some more >> detail. That helped me rebuild my RequestCycle [1]. >> >> The new RequestCycle solved the LazyInitializationException, but created a >> new problem. The application runs fine, but if I click a link twice in rapid >> succession, the application hangs for all users until I restart the server. >> This is kind of a major problem :) I've pasted the server output below [2]. >> The console stops on the line "DEBUG - ConnectionManager - opening JDBC >> connection" for a couple minutes, then throws the "java.net.SocketException: >> Connection reset" stack trace. >> >> Googling "java.net.SocketException: Connection reset" shows that the error >> is connected to a wide array of issues. Has anyone here run into the problem >> before? And if so, how did you solve it? >> >> thanks, >> >> Dane >> >> ------- >> >> [1] - public class WicketRequestCycle extends WebRequestCycle implements >> Serializable { >> >> EntityModel<UserInfo> userInfoModel; >> ... >> public UserInfo getUserInfo() { >> if (userInfoModel != null) return userInfoModel.getObject(); >> UserInfo userInfo = WicketSession.get().generateUserInfo(); >> if (userInfo == null) return null; >> userInfoModel = new EntityModel<UserInfo>(userInfo); >> return userInfoModel.getObject(); >> } >> >> @Override >> public void detach() { >> super.detach(); >> if (userInfoModel != null) >> userInfoModel.detach(); >> } >> } >> >> >> [2] - TRACE - SessionImpl - closing session >> TRACE - ConnectionManager - connection already null in cleanup : >> no action >> DEBUG - log - RESPONSE /images/lotus.png 200 >> DEBUG - log - REQUEST /login on >> org.mortbay.jetty.httpconnect...@7d0f44 >> DEBUG - log - Got Session ID 1haooq2s24av1 from >> cookie >> DEBUG - log - >> sessionmanager=org.mortbay.jetty.servlet.hashsessionmana...@3411a >> DEBUG - log - >> session=org.mortbay.jetty.servlet.HashSessionManager$Session:1haooq2s24...@18296160 >> DEBUG - log - servlet=default >> DEBUG - log - >> chain=open.hibernate.session.in.view->wicket.careerconnect->default >> DEBUG - log - servelet holder=default >> DEBUG - log - call filter >> open.hibernate.session.in.view >> DEBUG - OpenSessionInViewFilter - Using SessionFactory 'sessionFactory' >> for OpenSessionInViewFilter >> DEBUG - DefaultListableBeanFactory - Returning cached instance of singleton >> bean 'sessionFactory' >> DEBUG - OpenSessionInViewFilter - Opening single Hibernate Session in >> OpenSessionInViewFilter >> DEBUG - SessionFactoryUtils - Opening Hibernate Session >> DEBUG - SessionImpl - opened session at timestamp: >> 5125043523203072 >> TRACE - SessionImpl - setting flush mode to: NEVER >> DEBUG - tionSynchronizationManager - Bound value >> [org.springframework.orm.hibernate3.sessionhol...@117a49c] for key >> [org.hibernate.impl.sessionfactoryi...@737f58] to thread [btpool0-4 - >> /login;jsessionid=1haooq2s24av1?wicket:interface=:0:loginForm::IFormSubmitListener::] >> DEBUG - log - call filter wicket.careerconnect >> DEBUG - SessionFactoryUtils - Opening Hibernate Session >> DEBUG - SessionImpl - opened session at timestamp: >> 5125043523203073 >> TRACE - QueryPlanCache - located HQL query plan in cache ( >> select employerInfo from EmployerInfo as employerInfo inner join >> employerInfo.contactPoints as contactPoints where contactPoints.contactInfo >> = ? and employerInfo.password = md5_digest(?)) >> TRACE - QueryPlanCache - located HQL query plan in cache ( >> select employerInfo from EmployerInfo as employerInfo inner join >> employerInfo.contactPoints as contactPoints where contactPoints.contactInfo >> = ? and employerInfo.password = md5_digest(?)) >> TRACE - HQLQueryPlan - find: select employerInfo from >> EmployerInfo as employerInfo inner join employerInfo.contactPoints as >> contactPoints where contactPoints.contactInfo = ? and >> employerInfo.password = md5_digest(?) >> TRACE - QueryParameters - parameters: [dane, asdf] >> TRACE - QueryParameters - named parameters: {} >> DEBUG - AbstractBatcher - about to open PreparedStatement (open >> PreparedStatements: 0, globally: 4) >> DEBUG - ConnectionManager - opening JDBC connection >> DEBUG - log - EXCEPTION >> java.net.SocketException: Connection reset >> at java.net.SocketInputStream.read(SocketInputStream.java:168) >> at org.mortbay.io.ByteArrayBuffer.readFrom(ByteArrayBuffer.java:172) >> at org.mortbay.io.bio.StreamEndPoint.fill(StreamEndPoint.java:107) >> at >> org.mortbay.jetty.bio.SocketConnector$Connection.fill(SocketConnector.java:196) >> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:279) >> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:204) >> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379) >> at >> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226) >> at >> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) >> DEBUG - log - EOF >> >> >> >> On Mon, Aug 24, 2009 at 6:06 PM, Dane Laverty <danelave...@gmail.com>wrote: >> >>> I took your advice and added a UserInfo variable to the RequestCycle [1]. >>> Now my pages look for the UserInfo in the RequestCycle. If it's null, the >>> RequestCycle loads it from the ID in Session [2]. However, I still get the >>> LazyInitializationException when a page wants to access a collection from >>> userInfo [3], presumably because the Hibernate session was closed after the >>> Session loads the UserInfo. I thought that the OpenSessionInViewFilter was >>> supposed to keep the session open during the entire request, but apparently >>> I'm using it wrong. >>> >>> [1] - public class WicketRequestCycle extends WebRequestCycle implements >>> Serializable { >>> >>> UserInfo userInfo; >>> ... >>> public UserInfo getUserInfo() { >>> if (userInfo != null) return userInfo; >>> userInfo = WicketSession.get().generateUserInfo(); >>> return userInfo; >>> } >>> } >>> >>> >>> [2] - public class WicketSession extends AuthenticatedWebSession { >>> >>> @SpringBean(name = "userInfoDao") >>> private UserInfoDao userInfoDao; >>> >>> private Long userInfoID; >>> ... >>> public UserInfo generateUserInfo() { >>> if (userInfoID == null) return null; >>> return personInfoDao.load(personInfoId, personInfoClass); >>> } >>> } >>> >>> [3] - public class UserRolesAuthorizer implements IRoleCheckingStrategy >>> { >>> public boolean hasAnyRole(Roles roles) >>> { >>> PersonInfo personInfo = WicketRequestCycle.get().getPersonInfo(); >>> // THIS NEXT LINE THROWS THE ERROR, since it's trying to load >>> BasicUser >>> return userInfo.getBasicUser().hasAnyRole(roles); >>> } >>> >>> } >>> >>> >>> On Mon, Aug 24, 2009 at 2:12 PM, Martijn Dashorst < >>> martijn.dasho...@gmail.com> wrote: >>> >>>> Don't put the models in your session! Session access is not guaranteed >>>> to be confined to a single thread - multi window support, resources >>>> and such all attach the session to their own threads, making the >>>> session non-thread safe. >>>> >>>> Best option is to put the ID of your entities in your session object, >>>> and store the entities in your request cycle for request processing. >>>> >>>> Martijn >>>> >>>> On Mon, Aug 24, 2009 at 9:21 PM, Dane Laverty<danelave...@gmail.com> >>>> wrote: >>>> > I understand that a Hibernate-generated object needs to be kept in a >>>> > LoadableDetachableModel in order to avoid errors across requests. I >>>> also >>>> > understand that a LDM has to belong to a component in order for its >>>> detach >>>> > to be called at the end of a request. So what should I do with >>>> > Hibernate-generated objects that live in the session, specifically a >>>> > UserInfo object? Since the session doesn't have a model, how do I >>>> inform >>>> > Wicket to detach these models after each request? >>>> > >>>> > thanks, >>>> > >>>> > Dane >>>> > >>>> >>>> >>>> >>>> -- >>>> Become a Wicket expert, learn from the best: http://wicketinaction.com >>>> Apache Wicket 1.4 increases type safety for web applications >>>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0 >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>>> For additional commands, e-mail: users-h...@wicket.apache.org >>>> >>>> >>> >> > -- Become a Wicket expert, learn from the best: http://wicketinaction.com Apache Wicket 1.4 increases type safety for web applications Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0 --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org