Hi Chris, First of all thanks for reply.
On Nov 15, 2007 8:09 PM, Christopher Schultz <[EMAIL PROTECTED]> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Jacek, > > Jacek Olszak wrote: > > The problem is that the method > > HttpSessionActivationListener.sessionDidActivate() is called before > > any context listeners. I have a ContextLoaderListener configured in > > my web.xml which creates the Spring context. > > Do you mean a ServletContextListener? > Yes, I mean ServletContextListener. > > I want my session beans have access to this context, but they are > > activated before the context is done. Is there a way to change this > > behavior? > > Section 10.3.4 of the servlet spec says that, during shutdown, session > listeners are notified before context listeners, so I would imagine that > the opposite is true for startup (although the 2.4 spec doesn't > explicitly state that AFAICT). > > Looking at StandardContext in the TC 6.0 sources, I don't see any > mention of HttpSessionActivationListener, so I think those are ignored > during startup (and shutdown). Only when the session manager starts (or > stops) should you see notifications to your session listeners. > > Can you provide evidence to support your claim? Do you have log > statements in your ServletContextListener and your > HttpSessionActivationListener with timestamps that support your claim? > If so, please post them so we can take a look at them. I've created some simple application for testing - with one session bean "test.SessionBean" which implements HttpSessionActivationListener and context listener "test.MyServletContextListener" which implements ServletContextListener. And here is the log: Log when starting server without any session beans stored: 2007-11-16 10:36:38 org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080 2007-11-16 10:36:38 org.apache.catalina.startup.Catalina load INFO: Initialization processed in 557 ms 2007-11-16 10:36:38 org.apache.catalina.core.StandardService start INFO: Starting service Catalina 2007-11-16 10:36:38 org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/6.0.14 2007-11-16 10:36:38 org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile(C:\eclipse\workspaces\europa\tomcat-test\target\tomcat-test-1.0-SNAPSHOT\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class DEBUG 2007-11-16 10:36:38,875 test.MyServletContextListener Context initialized 2007-11-16 10:36:38 org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 2007-11-16 10:36:38 org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 2007-11-16 10:36:38 org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/31 config=null 2007-11-16 10:36:38 org.apache.catalina.startup.Catalina start INFO: Server startup in 511 ms Log when stopping the server (with one attribute in session): 2007-11-16 10:38:06 org.apache.coyote.http11.Http11Protocol pause INFO: Pausing Coyote HTTP/1.1 on http-8080 2007-11-16 10:38:07 org.apache.catalina.core.StandardService stop INFO: Stopping service Catalina DEBUG 2007-11-16 10:38:07,140 test.MyServletContextListener Context destroyed 2007-11-16 10:38:07 org.apache.coyote.http11.Http11Protocol destroy INFO: Stopping Coyote HTTP/1.1 on http-8080 Log when starting the server (with one session attribute stored in file): 2007-11-16 10:38:32 org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080 2007-11-16 10:38:32 org.apache.catalina.startup.Catalina load INFO: Initialization processed in 570 ms 2007-11-16 10:38:33 org.apache.catalina.core.StandardService start INFO: Starting service Catalina 2007-11-16 10:38:33 org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/6.0.14 2007-11-16 10:38:33 org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile(C:\eclipse\workspaces\europa\tomcat-test\target\tomcat-test-1.0-SNAPSHOT\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class DEBUG 2007-11-16 10:38:33,375 test.SessionBean Session did activate DEBUG 2007-11-16 10:38:33,406 test.MyServletContextListener Context initialized 2007-11-16 10:38:33 org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 2007-11-16 10:38:33 org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 2007-11-16 10:38:33 org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/31 config=null 2007-11-16 10:38:33 org.apache.catalina.startup.Catalina start INFO: Server startup in 509 ms As you see session did activate before executing contextInitialized on test.MyServletContextListener. Here is the sources: MyServletContextListener.java: package test; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MyServletContextListener implements ServletContextListener { private Log log = LogFactory.getLog(MyServletContextListener.class); public void contextInitialized(ServletContextEvent sce) { log.debug("Context initialized"); } public void contextDestroyed(ServletContextEvent sce) { log.debug("Context destroyed"); } } SessionBean.java: package test; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class SessionBean implements HttpSessionActivationListener, Serializable { private static final long serialVersionUID = 1L; private Log log = LogFactory.getLog(SessionBean.class); public void sessionDidActivate(HttpSessionEvent se) { log.debug("Session did activate"); } public void sessionWillPassivate(HttpSessionEvent se) { log.debug("Session will passivate"); } } SimpleServlet.java: package test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SimpleServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getSession().setAttribute("sessionBean", new SessionBean()); } } log4j.properties: log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.conversionPattern=%-5p %d %C %m%n log4j.logger.test=DEBUG,stdout web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <listener> <listener-class>test.MyServletContextListener</listener-class> </listener> <servlet> <servlet-name>simpleServlet</servlet-name> <servlet-class>test.SimpleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>simpleServlet</servlet-name> <url-pattern>/simple</url-pattern> </servlet-mapping> </web-app> Best regards, Jacek > > - -chris > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.7 (MingW32) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQFHPJlO9CaO5/Lv0PARAtWbAJ9T4bmo6HOHCV6rBcIhvUpFRQLiMgCeKs5L > YJXop4aiJnZt+6xIrzrN4a8= > =q5+j > -----END PGP SIGNATURE----- > > --------------------------------------------------------------------- > To start a new topic, e-mail: users@tomcat.apache.org > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]