Thank both of you! I'll analyze these options.
Anyway, I am curious about why my approach is not working, I insist, is it a bug? Best regards, Matias. On Sun, Sep 23, 2012 at 10: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. >