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() {}
}