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: [email protected]
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]