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.
>

Reply via email to