I can't answer your specific question, but as an alternative approach (and not tied to Tapestry) you could implement an HttpSessionListener, like this (and configure it in your web.xml):
import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.apache.log4j.Logger; public class SessionListener implements HttpSessionListener { private static final Logger logger = Logger.getLogger(SessionListener.class); private static int currentSessions = 0; private static int totalSessions = 0; public void sessionCreated(HttpSessionEvent httpSessionEvent) { currentSessions++; totalSessions++; logger.info("Session created: current sessions = " + currentSessions + "; sessions since app started = " + totalSessions); } public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { currentSessions--; logger.info("Session destroyed: current sessions = " + currentSessions + "; sessions since app started = " + totalSessions); } } Your sessionDestroyed() method is called just *before* the session is invalidated (e.g. from a timeout). On Sun, Sep 23, 2012 at 9:58 AM, Matías Blasi <matias.bl...@gmail.com> wrote: > Hi all, > > I'm trying to implement a mechanism to track each user session, at least > the login and logout events. > The login is easy, because it occurs in a defined place, but the logout can > occurs explicitly or because of a timeout, so I thought in advising the > Tapestry Session.invalidate() method: > > @SuppressWarnings("unchecked") > @Advise(serviceInterface=org.apache.tapestry5.services.Session.class) > public static void adviseUserActivity(final UserService userService, > final MethodAdviceReceiver receiver) > throws SecurityException, NoSuchMethodException { > MethodAdvice advise = new MethodAdvice() { > @Override > public void advise(MethodInvocation invocation) { > userService.endSession(userService.getCurrentUser().getUserName()); > } > }; > > > receiver.adviseMethod(receiver.getInterface().getMethod("invalidate"), > advise); > } > > But oddly, I'm getting the following error when starting up the application: > > Caused by: java.lang.RuntimeException: Error invoking method public static > void > com.app.services.AppModule.adviseUserActivity(com.app.core.services.UserService,org.apache.tapestry5.ioc.MethodAdviceReceiver) > throws java.lang.SecurityException,java.lang.NoSuchMethodException: > org.hibernate.Session.invalidate() > at > org.apache.tapestry5.ioc.internal.util.MethodInvoker.invoke(MethodInvoker.java:61) > at > org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:42) > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74) > ... 79 more > Caused by: java.lang.NoSuchMethodException: > org.hibernate.Session.invalidate() > at java.lang.Class.getMethod(Class.java:1622) > at com.app.services.AppModule.adviseUserActivity(AppModule.java:198) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:616) > at > org.apache.tapestry5.ioc.internal.util.MethodInvoker.invoke(MethodInvoker.java:50) > ... 81 more > 2012-09-23 10:50:11.134::INFO: Started SelectChannelConnector@0.0.0.0:8080 > [INFO] Started Jetty Server > > Why is it trying to advise the org.hibernate.Sesssion.invalidate() method > if I explicitly > annotated: > @Advise(serviceInterface=org.apache.tapestry5.services.Session.class), > is it a bug? > > Anyway, do you think this is the best way of doing this, or is there any > other better mechanism to intercept a finished session? > > Best regards, > Matias. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org