struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Altenhof, David Aron" <dalte...@iupui.edu>
Subject Interceptor attempt
Date Wed, 10 Nov 2010 20:45:49 GMT
Hello all, I'm trying to write my own interceptor, and have a question or two...

I'd like to write a simple interceptor that will manage hibernate sessions for me. I know
that there are more sophisticated ways to do this using Spring, etc. but this is mainly a
learning experience.

So, given the simple code below, my questions are:


1)      Does it appear to be thread-safe?

2)      Is there any condition, other than an unhandled exception elsewhere in the app, that
would cause the transaction not to be committed?

3)      Are there any better places to stash the session and transaction references other
than the Action? I tried putting it on the value stack, but that wreaked havoc with the Params
interceptor.

Thanks!

David

public class HibernateInterceptor implements Interceptor {

                public String intercept(ActionInvocation actionInvocation) throws Exception
{

                                Session sess = HibernateUtil.getSession();
                                Transaction tx = sess.beginTransaction();

                                // Put sess, tx in Action
                                Action action = (Action) actionInvocation.getAction();
                                if(action instanceof MyAction ) {
                                                ((MyAction)action).setHibSession(sess);
                                                ((MyAction)action).setHibTransaction(tx);
                                }

                                String rslt = actionInvocation.invoke();

                                try {
                                                // Try to commit:
                                                tx.commit();

                                } catch (Exception ex) {
                                                // Try to rollback and do other stuff here
...
                                }
                                return rslt;
                }
                public void destroy() {}
                public void init() {}
}


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message