Hi all, I’m getting a strange error with persistent session storage when deployed on Tomcat 8. I’m going for a website that can scale on ElasticBeanstalk. The setup is Tomcat 8 with Apache connected via ProxyPass with rewrites being done (see below). I tried to implement this a year or two ago but I ran into the same problem as below.
What’s happening is that I will load a page once. After that any second attempt to load a page will result in a null sessionID being passed to ERPersistentSessionStore.restoreSessionWithID. This doesn’t happen with the normal session store. The request cookies appear intact. Sessions are stored in the cookies with a path of “/“; In my configuration pages use ERRest HTML routing with IERXRouteComponent but I’ve also had this issue with normal pages. er.extensions.ERXSession.useSecureSessionCookies=true er.extensions.ERXSession.useHttpOnlySessionCookies=true The above properties can also be set to false and the same error will occur. I also get the same error when accessing via http or https. Here is the exception I’m getting: java.lang.IllegalArgumentException: Attempt to insert null object into an com.webobjects.foundation.NSDictionary. at com.webobjects.foundation.NSDictionary.<init>(NSDictionary.java:254) at com.webobjects.eoaccess.EOUtilities.objectsMatchingKeyAndValue(EOUtilities.java:189) at er.extensions.eof.EOEnterpriseObjectClazz.objectsMatchingKeyAndValue(EOEnterpriseObjectClazz.java:356) at er.extensions.eof.EOEnterpriseObjectClazz.objectMatchingKeyAndValue(EOEnterpriseObjectClazz.java:381) at er.persistentsessionstorage.ERPersistentSessionStore.restoreSessionWithID(ERPersistentSessionStore.java:37) at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID(WOSessionStore.java:182) at com.webobjects.appserver.WOApplication.restoreSessionWithID(WOApplication.java:1913) at er.extensions.appserver.ERXApplication.restoreSessionWithID(ERXApplication.java:2379) at com.webobjects.jspservlet.WOServletContext.session(WOServletContext.java:107) at com.webobjects.appserver.WOComponent.session(WOComponent.java:1324) at com.appname.components.BaseComponent.session(Unknown Source) at com.appname.components.PublicPageComponent.appendToResponse(Unknown Source) at com.webobjects.appserver.WOComponent._appendPageToResponse(WOComponent.java:1574) at com.webobjects.appserver.WOComponent._generateResponseInContext(WOComponent.java:1543) at com.webobjects.appserver.WOComponent.generateResponse(WOComponent.java:1538) at com.webobjects.appserver._private.WOActionRequestHandler._handleRequest(WOActionRequestHandler.java:278) at com.webobjects.appserver._private.WOActionRequestHandler.handleRequest(WOActionRequestHandler.java:161) at com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687) at er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:2092) at er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:2057) at com.appname.Application.dispatchRequest(Unknown Source) at com.webobjects.jspservlet._WOApplicationWrapper.servletDispatchRequest(_WOApplicationWrapper.java:131) at com.webobjects.jspservlet.WOServletAdaptor._handleRequest(WOServletAdaptor.java:727) at com.webobjects.jspservlet.WOServletAdaptor.doGet(WOServletAdaptor.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Apache Config RewriteEngine On # visually friendly rewrites # no uri or query then enter the app RewriteRule ^/$ /WebObjects/AppName.woa/ra/start [PT] # anything with the app prefix is meant for WebObjects RewriteCond %{REQUEST_URI} ^/app/.*$ [NC] RewriteRule ^/app/(.+) /WebObjects/AppName.woa/$1 [NC,PT,QSA] # anything else that is not static is meant to be passed to ERRest RewriteCond %{REQUEST_URI} !^/app/.*$ [NC] RewriteCond %{REQUEST_URI} !^/static/.*$ [NC] RewriteCond %{REQUEST_URI} !^/WebObjects/.*$ [NC] RewriteRule ^/(.+) /WebObjects/AppName.woa/ra/$1 [NC,PT,QSA] <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/ ProxyPreserveHost on Rewrite Properties er.extensions.ERXApplication.replaceApplicationPath.pattern=/WebObjects/AppName.woa er.extensions.ERXApplication.replaceApplicationPath.replace=/app Any pointers would be appreciated if anyone has seen this issue before. Thanks. _______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com