hi all, i am using struts2 with hibernate i have a basic form which inputs the given data via hibernate. I get the hibernate session from my custom hibernate interceptor and from that interceptor i call the action which creates the hibernate transaction with data from its form and after that i return the success case from action but there is a finally statement in my hibernate interceptor which commits the transaction that's data filled in my action class. But for ex. if the data is exist in db before which means duplicate then it gives an error and when i get this error i return and ACTION.ERROR from my hibernate interceptor but what i see on the page is the SUCCESS result from the action class. What could be the problem ? :) Any help will be usefull thanks for your support Here is my default stack and action conf. <interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servlet-config"/> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <interceptor-ref name="static-params"/> <interceptor-ref name="params"/> <interceptor-ref name="hibernate"/> </interceptor-stack>
<action name="CreateService" class="tr.com.mkk.admin.action.CreateServiceAction"> <result name="input" > <param name="location">/admin/createService.jsp</param> </result> <result name="success" > <param name="location">/admin/viewService.jsp</param> </result> <interceptor-ref name="validation"/> <interceptor-ref name="validatorErrors"/> <interceptor-ref name="defaultStack"/> </action> Here is my interceptor class : public String intercept(ActionInvocation invocation) throws Exception { Action action = (Action)invocation.getAction(); if ( !(action instanceof BaseActionSupport) ) return invocation.invoke(); if (null == factoryName || null == packageName) throw new IllegalArgumentException("factoryName and packageName parameters should be given \n" + "check parameters in xml file <param name='factoryName'> \n" + "and <param name='packageName'>\n"); // adds factory to cache if not available HibernateSessionFactory.addFactory(factoryName, packageName, extConfigFilePath); HibernateSession hs = new HibernateSession(); hs.setFactoryName(factoryName); ((BaseActionSupport)action).setHibernateSession(hs); try { result = invocation.invoke();//calls the action here it creates transaction data } // Note that all the cleanup is done // after the view is rendered, so we // have an open session in the view catch (Exception e) { hs.setRollBackOnly(true); if (e instanceof HibernateException) { LOG.error("HibernateException in execute()", e); return Action.ERROR; } else { LOG.error("Exception in execute()", e); throw e; } } finally { try { hs.disposeSession();//commits transaction , and closes hibernate session return result;//expected result when an exception occurs with hibernate operations } catch (HibernateException e) { LOG.error("HibernateException in dispose()", e); return Action.ERROR; } } } ---------------------Action Class---------------------------------------------------------- public class CreateServiceAction extends BaseActionSupport { private Service service; public CreateServiceAction() { service = new Service(); } public String execute() throws Exception { ServiceManager.getInstance().createService(getSession(), service);//gets the hibernate session and sends it to the serviceManager object which creates transaction set("service", service); return SUCCESS; } public Service getService() { return service; } } ********* -- View this message in context: http://www.nabble.com/Struts-2-exception-problem-tf3525255.html#a9835135 Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]