Announcement Announcement Module
Collapse
No announcement yet.
Using Spring AOP based transaction with Struts1.x Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Using Spring AOP based transaction with Struts1.x

    Hi Friends,

    I am developing one application using Struts1.3+Spring2.5+Hibernate3.6 to do practice.
    In this application I am using Spring AOP transactions, but transaction is not working for me.

    Please check my code snippets and help me.

    web.xml
    =======
    in addition to general entries, I have added the following code as well

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

    <listener>
    <listener-class>org.springframework.web.context.ContextLoade rListener</listener-class>
    </listener>
    applicationContext.xml
    ==================

    <bean id="transactionManager"
    class="org.springframework.orm.hibernate3.Hibernat eTransactionManager">
    <property name="sessionFactory" ref="mySessionFactory" />
    </bean>

    <bean id="matchAllWithSave"
    class="org.springframework.transaction.interceptor .NameMatchTransactionAttributeSource" lazy-init='true'>
    <property name="properties">
    <props>
    <prop key="save*">
    PROPAGATION_REQUIRED,-Exception</prop>
    <prop key="start*">
    PROPAGATION_REQUIRED,-Exception</prop>
    <prop key="newTx*">
    PROPAGATION_REQUIRES_NEW,-Exception</prop>
    <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
    </props>
    </property>
    </bean>
    <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.Hibernat eInterceptor">
    <property name="sessionFactory" ref="mySessionFactory" />
    </bean>
    <bean id="matchSaveTxInterceptor"
    class="org.springframework.transaction.interceptor .TransactionInterceptor" lazy-init="true">
    <property name="transactionManager"><ref bean="transactionManager"/></property>
    <property name="transactionAttributeSource"><ref bean="matchAllWithSave"/></property>

    </bean>
    <bean id="autoProxyCreator"
    class="com.mokjas.extra.InterfaceAutoProxyCreator" lazy-init="true">
    <property name="interceptorNames">
    <list>
    <idref local="matchSaveTxInterceptor"/>
    <idref local="hibernateInterceptor"/>

    </list>
    </property>
    <property name="interfaces">
    <list>
    <value>com.mokjas.service.ITransactionalSaveServic e</value>
    </list>
    </property>
    </bean>
    Here all my service classes implemented this "ITransactionalSaveService" marker interface. So as per the above configuration,any service class which has save* method should wrap with transactions. But for me it is not working.

    ServiceFinder.java
    ==============
    public class ServiceFinder {
    public static ApplicationContext getContext(HttpServletRequest httpRequest) {
    return WebApplicationContextUtils.getRequiredWebApplicati onContext(
    httpRequest.getSession().getServletContext());
    }
    }
    Struts Action class:
    ==============
    here in my action class I am calling save* method of my service class(implemented ITransactionalSaveService)

    transferService.saveAccountTransfer(fromBean, toBean);
    ServiceImpl class:
    ==============

    public void saveAccountTransfer(UserBean fromBean,UserBean toBean){
    // TODO Auto-generated method stub

    getBankDAO().processTransfer(toBean,"To");
    getBankDAO().processTransfer(fromBean,"From");

    }
    DAO Impl class:
    ===========
    public void processTransfer(UserBean bean, String name) {
    Session session=getSessionFactory().openSession();
    session.saveOrUpdate(bean);
    session.close();

    }
    After we execute this
    session.saveOrUpdate(bean);
    my hibernate is not saving the beans accordingly because there is no transaction applied. so hibernate is generating only select statement,not update statement.

    Please help me to solve my issue.

    Thanks,
    Bunny

  • #2
    Don't use openSession... use getCurrentSession and don't mess around with closing the session yourself, springs transactionmanagement does that for you.

    Also you really should be using dependency injection and I consider your ServiceFinder an anti pattern you should inject the dependencies.

    Comment


    • #3
      Using Spring AOP based transaction with Struts1.x

      Thanks A lot Marten Deinum. Really I am very happy with your support.

      Also you really should be using dependency injection and I consider your ServiceFinder an anti pattern you should inject the dependencies.
      I cann't understand your point. Could you please elaborate more by taking my application code.

      Thanks,
      Bunny

      Comment

      Working...
      X