java - two transaction within one transaction hibernate -


i'm making maintenance of app struts 1, spring 3 , hibernate 3. want join 2 services, each service have 1 transaction. solution thinking make 1 service 1 transaction include 2 services. it's possible this?

-the transaction located in dao's.

*service expediente:

public void saveexpedientecoactivo(coatexpc coatexpc, auditoria auditoria, string numeracionautomaticaexpediente) throws exception, businessexception{     iexpedientecoactivodao dao = (iexpedientecoactivodao)getdao();     try{ //business rules dao.saveexpedientecoactivo(coatexpc, numeracionautomaticaexpediente); catch{...} } 

*dao expediente:

public synchronized void saveexpedientecoactivo(coatexpc coatexpc, string numeracionautomaticaexpediente) throws exception {     session sessionhibernate = this.getsessionfactory().getcurrentsession();     savepoint savepoint = sessionhibernate.connection().setsavepoint();     try{ sessionhibernate.saveorupdate(coatexpc); sessionhibernate.connection().commit(); }catch(exception e) {         sessionhibernate.connection().rollback(savepoint);         sessionhibernate.gettransaction().rollback();         system.out.println(this.getclass().getname()+", error="+e);         throw new exception(e);     } } 

*service resolucion:

public void saveresolucion(coatrcoa coatrcoa, auditoria auditoria) throws exception, businessexception{     iresoluciondao dao = (iresoluciondao)getdao();     try{     //business rules dao.saveresolucion(coatrcoa); }catch{...} } 

*dao resolucion:

public synchronized void saveresolucion(coatrcoa coatrcoa) throws exception {     session sessionhibernate = this.getsessionfactory().getcurrentsession();     savepoint savepoint = sessionhibernate.connection().setsavepoint();     try{ //more code , sql here sessionhibernate.saveorupdate(coatrcoa); //more code sql sessionhibernate.connection().commit();      }catch(exception e) {         sessionhibernate.connection().rollback(savepoint);         sessionhibernate.gettransaction().rollback();         system.out.println(this.getclass().getname()+", error="+e);         throw new exception(e);     } } 

*applicationcontext.xml:

<bean id="sessionfactory" class="org.springframework.orm.hibernate3.localsessionfactorybean">     <property name="datasource">         <ref local="datasource"/>     </property>     <property name="mappingdirectorylocations">         <list>             <value>classpath:gob/osinerg/spjc/configuracion/domain/mapping</value>             <value>classpath:gob/osinerg/spjc/notificaciones/domain/mapping</value>             <value>classpath:gob/osinerg/spjc/judicial/domain/mapping</value>             <value>classpath:gob/osinerg/spjc/coactiva/domain/mapping</value>             <value>classpath:gob/osinerg/spjc/common/domain/mapping</value>             <value>classpath:gob/osinerg/alfresco/domain/mapping</value>             </list>     </property>     <property name="hibernateproperties">         <props>             <prop key="hibernate.dialect">${hibernate.dialect}</prop>             <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>         </props>     </property> </bean>    <bean id="transactionmanager" class="org.springframework.orm.hibernate3.hibernatetransactionmanager">     <property name="sessionfactory">         <ref local="sessionfactory"/>     </property> </bean>  <bean id="txproxytemplate" abstract="true" class="org.springframework.transaction.interceptor.transactionproxyfactorybean">     <property name="transactionmanager">         <ref local="transactionmanager"/>     </property>     <property name="transactionattributes">         <props>             <prop key="get*">propagation_required,readonly</prop>             <prop key="find*">propagation_required,readonly</prop>             <prop key="load*">propagation_required,readonly</prop>             <prop key="save*">propagation_required</prop>             <prop key="delete*">propagation_required</prop>         </props>     </property> </bean> 

now, it's possible this?

public class servicetransactionimp implements servicetransaction{ public void dotwosavetransaction(){ session sessionhibernate = this.getsessionfactory().getcurrentsession(); savepoint savepoint = sessionhibernate.connection().setsavepoint(); try{     serviceexpediente.saveexpedientecoactivo(coatexpc,auditoria,numeracionautomaticaexpediente); serviceresolucion.saveresolucion(coatrcoa,auditoria); sessionhibernate.connection().commit();      }catch(exception e) {         sessionhibernate.connection().rollback(savepoint);         sessionhibernate.gettransaction().rollback();         system.out.println(this.getclass().getname()+", error="+e);         throw new exception(e);     } } 

i'm not sure if works, because session distinct between proceses , if possible rollback of saveresolucion affect service of saveexpedientecoactivo have commit(); idea execute rollback proceses.

or other solution?


Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Website Login Issue developed in magento -

Can the constants be defined inside a model file of a framework in PHP? -