论坛首页 Java版 Spring

Spring 1.2的hibernate事务处理

浏览 631 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-12-04 关键字: Spring 事务
Spring配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd">

<beans>
	<!-- 配置数据源 --> 
	<bean id="myDataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/zoice" />
		<property name="username" value="root" />
		<property name="password" value="123456" />
	</bean>
	
	<!-- 配置Hibernate的事务管理器 --> 
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<!-- 配置Hibernate的SessionFactory --> 
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="myDataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
		<property name="mappingLocations">
			<list>
				<value>classpath:com/sanseyu/pojo/*.hbm.xml</value>
			</list>
		</property>
	</bean>

	<bean id="baseTxProxy" lazy-init="true" abstract="true"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref local="transactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>
。。。。。。
	<bean id="sortService" parent="baseTxProxy">
		<property name="target">
			<bean class="com.sanseyu.service.SortService" autowire="byName">
                 <property name="sortDAO" ref="sortDAO"/>
             </bean>
		</property>
	</bean>

	<bean id="sortDAO" class="com.sanseyu.dao.SortDAOHibernateImp">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
         <bean name="/admin/sort/addSort"
		class="com.sanseyu.struts.action.SortAddAction">
		<property name="sortService">
			<ref bean="sortService" />
		</property>
	</bean>
。。。。。。
</beans>

Action类
public class SortAddAction extends Action {
	private SortService sortService;

	public static Logger logger = Logger
			.getLogger(LoginAction.class.getClass());

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
         。。。。。。。		
	}

	public void setSortService(SortService sortService) {
		this.sortService = sortService;
	}
}

Service类
public class SortService implements IService {
	private SortDAO sortDAO;

	public void addSort(String sortName, int serialNumber) {
		Sort sort = new Sort();
		sort.setSerialNumber(serialNumber);
		sort.setSortName(sortName);
		sortDAO.save(sort);
	}

	public void setSortDAO(SortDAO sortDAO) {
		this.sortDAO = sortDAO;
	}

	public List getSortList() {
		return sortDAO.getSortBySerialNumber();
	}

	public void delSort(String sortId) {
		Sort sort = new Sort();
		sort.setId(Long.parseLong(sortId));
		try {
			sortDAO.remove(sort);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Sort getSort(String sortId) {
		long id = Long.parseLong(sortId);
		return getSortById(id);
	}
	
	public Sort getSortById(long sortId){
		return sortDAO.get(sortId);
	}
	
	public void modSort(String sortName, int serialNumber,long id){
		Sort sort = getSortById(id);
		if(sort == null)
			return;
		sort.setSerialNumber(serialNumber);
		sort.setSortName(sortName);
		try {
			System.out.println("modSort");
			sortDAO.update(sort);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

业务接口
public interface IService {
}


TOMCAT启动错误:
ERROR - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/admin/article/articleManager' defined in ServletContext resource [/WEB-INF/action-servlet.xml]: Error setting property values; nested exception is PropertyAccessExceptionsException (1 errors)
PropertyAccessExceptionsException (1 errors)
org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [com.sanseyu.service.ArticleService] for property 'articleService'
	at org.springframework.beans.BeanWrapperImpl.doTypeConversionIfNecessary(BeanWrapperImpl.java:951)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:692)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:572)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:737)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:764)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:753)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1057)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:378)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
	at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
	at org.springframework.web.struts.ContextLoaderPlugIn.createWebApplicationContext(ContextLoaderPlugIn.java:353)
	at org.springframework.web.struts.ContextLoaderPlugIn.initWebApplicationContext(ContextLoaderPlugIn.java:296)
	at org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:225)
	at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:1158)
	at org.apache.struts.action.ActionServlet.init(ActionServlet.java:473)
	at javax.servlet.GenericServlet.init(GenericServlet.java:211)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
	at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
	at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
	at org.apache.catalina.core.StandardService.start(StandardService.java:480)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)


请教,是不是业务类或者接口写的有问题 
   
最后更新时间:2007-12-04
问题解决:spring的TransactionProxyFactoryBean是基于JAVA动态代理实现的,也就是接口AOP,所以在 action 这里要使用 

引用
private IService sortService


来定义
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐