It might just be an order of interceptors problem. One of your first interceptors should be your login check. That should definitely happen before the standard paramsPrepareParamsStack is run. (*Chris*)
On Wed, Mar 9, 2011 at 11:04 AM, CRANFORD, CHRIS <chris.cranf...@setech.com>wrote: > Francois - > > I use the standard paramsPrepareParamsStack interceptor from Struts. > > All I have done on my end is wrap this interceptor stack with a few > application specific interceptors that control things such as authentication > required, auditing, and logging. I stepped upon my issue one day when I had > returned from lunch and my session had timed out. I hit the SAVE button on > a form and it redirected me to our login page. > > But prior to logging back in; I checked the database and noticed that the > record was in fact persisted with the changes from the form. All I can > gather is the following: > > 1. Request comes in for Struts > 2. Hibernate Session opened via OSIV > 3. Model is loaded from DB via prepare() > 4. Struts copies parameters into the model > 5. Validation/Interceptors fire > 6. Authentication Interceptor detects timed out session, returns LOGIN > 7. User presented with login page > 8. OSIV filter closes, changes from #4 persisted. > > I then created a simple test action where I load a persist entity from the > DB in a ModelDriven action, I call the action passing parameters that are > properties on the entity. Then the execute() method does nothing more than > return SUCCESS which maps to my /pages/done.jsp. The changes are committed. > > I'd prefer that changes aren't committed unless I explicitly call to do so > on the EntityManager; however I understand Hibernate/JPA's reasons behind > why it works the way it does. > > > > > -----Original Message----- > > From: François Rouxel [mailto:rouxe...@yahoo.com] > > Sent: Wednesday, March 09, 2011 12:24 PM > > To: Struts Users Mailing List > > Subject: Re : Re : ModelDriven & Hibernate Entities > > > > Hi Chris, > > first, > > you might have another pb, because struts2 does not change your model > > if a > > validation failed. In may case, the model is not changed so not > > persisted. Do u > > use validation and workflow interceptor ? > > second, > > you are right about MVC pattern, but, just be aware that when you use > > OSIV > > pattern, hibernate call backend service when loading data...:-)) so > > your JSP is > > not just a view in that case.... > > > > > > I wrote my first mail thinking you wanna rollback after an exception > > occured. > > maybe it's gonna help others. > > > > fr/ > > > > > > ____________________________________________ > > ____________________________________________ > > > > > > > > ----- Message d'origine ---- > > De : "CRANFORD, CHRIS" <chris.cranf...@setech.com> > > À : Struts Users Mailing List <user@struts.apache.org> > > Envoyé le : Mer 9 mars 2011, 13h 09min 33s > > Objet : RE: Re : ModelDriven & Hibernate Entities > > > > Francois - > > > > While that may work for you, I wouldn't place anything Hibernate or > > persistence > > related in my JSP pages at all. In my mind, this breaks the entire > > reasoning > > behind MVC and the view simply there to render data. If the view is > > doing > > anything beyond that, I have a design problem, but again that's my > > opinion. > > > > But what about when you use the INPUT result code in your execute() > > method. > > > > If I return the user to the INPUT method because maybe I'm not using > > the Struts > > validation framework and doing it myself in my execute() method or I > > have some > > complex conditions I must check for before I save the data. In this > > case, by > > returning INPUT and setting some action field or error messages to be > > shown to > > the user, the error exception handler isn't fired, thus your rollback > > isn't > > fired either; leaving your entity persisted with likely dirty data. > > > > > -----Original Message----- > > > From: François Rouxel [mailto:rouxe...@yahoo.com] > > > Sent: Wednesday, March 09, 2011 11:43 AM > > > To: Struts Users Mailing List > > > Subject: Re : ModelDriven & Hibernate Entities > > > > > > same issue > > > this how I fixed it : (the main idea is to redirect to a jsp if an > > > exception > > > occured, and the jsp rollback) > > > > > > create an error page error.jsp > > > <%@page import="com.rdvcentral.util.persistance.HibernateUtil"%> > > > <%@ page contentType="text/html;charset=UTF-8" language="java" %> > > > <%@ taglib prefix="s" uri="/struts-tags" %> > > > <%@ taglib prefix="sj" uri="/struts-jquery-tags" %> > > > > > > > > > <%@page import="org.hibernate.Transaction"%> > > > <%@page import="org.apache.log4j.Logger"%> > > > > > > <s:property value="%{logError(exception)}"/> > > > <% > > > Transaction tx = new > > > > > HibernateUtil().getSessionFactory().getCurrentSession().getTransaction( > > > ); > > > if (tx != null && tx.isActive()) { > > > tx.rollback(); > > > } > > > %> > > > > > > In your struts mapping file : > > > > > > <global-results> > > > <result name="unhandledException">/error.jsp</result> > > > </result> > > > </global-results> > > > > > > <global-exception-mappings> > > > <exception-mapping exception="java.lang.Exception" > > > result="unhandledException" /> > > > </global-exception-mappings> > > > > > > hope it will help you > > > > > > > > > ____________________________________________ > > > ____________________________________________ > > > > > > > > > > > > ----- Message d'origine ---- > > > De : "CRANFORD, CHRIS" <chris.cranf...@setech.com> > > > À : Struts Users Mailing List <user@struts.apache.org> > > > Envoyé le : Mer 9 mars 2011, 12h 34min 32s > > > Objet : ModelDriven & Hibernate Entities > > > > > > I had started down a path of using the ModelDriven interface from > > > Struts > > > because I find it really helps maintain a class action class without > > > large numbers of get/set methods for screens that contain a lot of > > form > > > fields. > > > > > > However, I am finding at least with how I have attempted to approach > > > ModelDriven to have several drawbacks. For example, by using the > > OSIV > > > (Open Session In View) filter, I am finding that when Struts sets the > > > properties on the entity and afterward if an exception is thrown, > > > caught > > > and handled and doesn't trigger Hibernate to actually "rollback"; the > > > changes are persisted which leaves my entity in a dirty inconsistent > > > state. > > > > > > How have others solved this by using your entity domain POJOs in your > > > view? > > > > > > Do you use them detached from the session so that you explicitly have > > > to > > > merge them to the session to be persisted? If so, how do you deal > > with > > > multiple lazy loaded collections in your entity? > > > > > > Or would using DTO objects from my service layer a better alternative > > > to > > > insure that no data is actually persisted to the database that > > > shouldn't > > > be? > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > > For additional commands, e-mail: user-h...@struts.apache.org > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > > For additional commands, e-mail: user-h...@struts.apache.org > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > For additional commands, e-mail: user-h...@struts.apache.org > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > For additional commands, e-mail: user-h...@struts.apache.org > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > >