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
applicationContext.xml<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>
==================
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.<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>
ServiceFinder.java
==============
Struts Action class:public class ServiceFinder {
public static ApplicationContext getContext(HttpServletRequest httpRequest) {
return WebApplicationContextUtils.getRequiredWebApplicati onContext(
httpRequest.getSession().getServletContext());
}
}
==============
here in my action class I am calling save* method of my service class(implemented ITransactionalSaveService)
ServiceImpl class:transferService.saveAccountTransfer(fromBean, toBean);
==============
DAO Impl class:public void saveAccountTransfer(UserBean fromBean,UserBean toBean){
// TODO Auto-generated method stub
getBankDAO().processTransfer(toBean,"To");
getBankDAO().processTransfer(fromBean,"From");
}
===========
After we execute thispublic void processTransfer(UserBean bean, String name) {
Session session=getSessionFactory().openSession();
session.saveOrUpdate(bean);
session.close();
}
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


Reply With Quote
