Many thanks. I will give that a try.
On 11/13/08, Adam Ruggles <[EMAIL PROTECTED]> wrote:
>
> Use a struts interceptor instead of a servlet filter. That way you can
> check
> the return type of the action that gets executed and respond appropriately.
>
>
>
> Burton Rhodes wrote:
>>
>> I am having trouble getting Struts 2.x to implement validation and
>> hibernate using the HibernateSessionRequestFilter (the pattern
>> suggested on Hibernate.org). When the validation fails, Hibernate
>> will still update the object in the database when the HibernateFilter
>> closes the transaction. I get why this is happening, but I can't seem
>> to find anyone who has really figured out an *elegant* solution. Any
>> ideas?
>>
>>
>>
>> public class HibernateSessionRequestFilter implements Filter {
>>
>> static Logger log =
>> Logger.getLogger(HibernateSessionRequestFilter.class);
>>
>> private SessionFactory sf;
>>
>> public void doFilter(ServletRequest request,
>> ServletResponse response,
>> FilterChain chain)
>> throws IOException, ServletException {
>>
>> try {
>>
>> // This starts the Hibernate transaction
>> sf.getCurrentSession().beginTransaction();
>>
>> // Call the next filter (continue request processing)
>> chain.doFilter(request, response);
>>
>> // Commit and cleanup
>> sf.getCurrentSession().getTransaction().commit(); <----
>> ********* Data is written here no matter what ************
>>
>> } catch (StaleObjectStateException staleEx) {
>> log.fatal("This interceptor does not implement optimistic
>> concurrency control!");
>> log.fatal("Your application will not work until you add
>> compensation actions!");
>> // Rollback, close everything, possibly compensate for any
>> permanent changes
>> // during the conversation, and finally restart business
>> conversation. Maybe
>> // give the user of the application a chance to merge some
>> of his work with
>> // fresh data... what you do here depends on your
>> applications design.
>> throw staleEx;
>>
>> }
>> // This is a catch-all catch, define other Exceptions here
>> catch (Throwable ex) {
>> // Rollback only
>> ex.printStackTrace();
>> try {
>> if (sf.getCurrentSession().getTransaction().isActive()) {
>> log.fatal("Trying to rollback database transaction
>> after exception");
>> sf.getCurrentSession().getTransaction().rollback();
>> }
>> } catch (Throwable rbEx) {
>> log.fatal("Could not rollback transaction after exception!",
>> rbEx);
>> }
>>
>> // Let others handle it... maybe another interceptor for
>> exceptions?
>> throw new ServletException(ex);
>> }
>> }
>>
>> public void init(FilterConfig filterConfig) throws ServletException {
>> log.trace("Initializing filter...");
>> log.trace("Obtaining SessionFactory from static HibernateUtil
>> singleton...");
>> sf = HibernateUtil.getSessionFactory();
>> }
>>
>> public void destroy() {}
>>
>> }
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>
> --
> View this message in context:
> http://www.nabble.com/Using-validation-with-Hibernate...-tp20488996p20490241.html
> Sent from the Struts - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
--
Sent from my mobile device
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]