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]

Reply via email to