`
izuoyan
  • 浏览: 9402400 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

TransactionProxyFactoryBean总结并测试事务异常

阅读更多
TransactionProxyFactoryBean总结并测试事务异常
2008年09月11日 星期四 17:21
-----------------------------------------------------------------------------------------------------------
TransactionProxyFactoryBean总结并测试事务异常
-----------------------------------------------------------------------------------------------------------
不处于事务控制下
无论是否发生导常
都 不提交记录
-----------------------------------------------------------------------------------------------------------
处于事务控制下
发生导常
不提交记录
-----------------------------------------------------------------------------------------------------------
SQL
-----------------------------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `test`.`users`;
CREATE TABLE `test`.`users` (
`id` varchar(32) NOT NULL,
`name` varchar(40) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-----------------------------------------------------------------------------------------------------------

用TransactionProxyFactoryBean测试事务异常
TransactionProxyFactoryBean总结
配置文件最好分开

-----------------------------------------------------------------------------------------------------------

先添加Spring Capabilities
再添加Hibernate Capabilities
-----------------------------------------------------------------------------------------------------------
Users.hbm.xml
-----------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class table="users" catalog="test">
<id type="java.lang.String">
<column length="32" />
<generator ></generator>
</id>
<property type="java.lang.String">
<column length="40" />
</property>
</class>
</hibernate-mapping>
-----------------------------------------------------------------------------------------------------------
applicationContext.xml
-----------------------------------------------------------------------------------------------------------


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


<bean
>
<property
value="classpath:hibernate.cfg.xml">
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>

<!-- 开发者添加 -->
<!-- 定义事务管理器,使用适用于Hibernte的事务管理器-->

<bean
>
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<!-- service manager Template-->
<bean abstract="true"
>
<property ref="transactionManager" />
<property >
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="disable*">PROPAGATION_REQUIRED</prop>
<prop key="enable*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>

<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

<bean parent="txProxyTemplate">
<property >
<bean >
<property ref="UsersDAO" />
</bean>
</property>
</bean>
<!-- 没有事务
<bean >
<property ref="UsersDAO" />
</bean>

-->
<!-- 开发者添加 -->

</beans>
-----------------------------------------------------------------------------------------------------------

hibernate.cfg.xml
-----------------------------------------------------------------------------------------------------------

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property >root</property>
<property >
jdbc:mysql://localhost:3306/test
</property>
<property >
org.hibernate.dialect.MySQLDialect
</property>
<property >
local_mysql
</property>
<property >
com.mysql.jdbc.Driver
</property>

<!-- 开发者添加 -->
<property >true</property>

<!-- 开发者添加 -->
<mapping resource="dao/Users.hbm.xml" />

</session-factory>

</hibernate-configuration>
-----------------------------------------------------------------------------------------------------------

package service;

public class ServiceFactory extends HibernateDaoSupport {
public static ApplicationContext ctx;
public static ApplicationContext getApplicationContext() {
if (ctx == null) {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
return ctx;
}
// public static BeanFactory factory;
protected BeanFactory factory;
public BeanFactory getBeanFactory() {
if (factory == null) {
// ApplicationContext context = new ClassPathXmlApplicationContext(
// new String[] { "applicationContext.xml" });
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
factory = (BeanFactory) context;
}
return factory;
}
}

-----------------------------------------------------------------------------------------------------------

package service;
import dao.Users;
public interface UsersService {
public void save(Users c);
}
-----------------------------------------------------------------------------------------------------------

package service;
import dao.Users;
import dao.UsersDAO;
public class UsersServiceImpl implements UsersService {
public void save(Users c) {
usersdao.save(c);
// 下面两行代码没有实际意义,仅仅为了引发数据库异常
// DataSource ds = null;
// DataSourceUtils.getConnection(ds);
}
private UsersDAO usersdao;
public UsersDAO getUsersdao() {
return usersdao;
}
public void setUsersdao(UsersDAO usersdao) {
System.out.println("注入 dao");
this.usersdao = usersdao;
}
}
-----------------------------------------------------------------------------------------------------------

package test;
import service.ServiceFactory;
import service.UsersService;
import dao.Users;
public class Demo {
public static void main(String[] args) {
ServiceFactory serviceFactory = new ServiceFactory();
UsersService service = (UsersService) serviceFactory.getBeanFactory()
.getBean("UsersServiceImpl");
Users c = new Users();
c.setName("xiong0001");
service.save(c);
System.out.println("END");
}
}
-----------------------------------------------------------------------------------------------------------

测试成功
-----------------------------------------------------------------------------------------------------------

action-servlet.xml
-----------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
>
<property ref="UsersServiceImpl" />
</bean>
</beans>
-----------------------------------------------------------------------------------------------------------

struts-config.xml
-----------------------------------------------------------------------------------------------------------

<!-- 开发者添加 -->

<controller
processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />

<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/action-servlet.xml" />
</plug-in>
<!-- 开发者添加 -->
-----------------------------------------------------------------------------------------------------------

user.jsp
-----------------------------------------------------------------------------------------------------------

<html:form action="/user.do?method=save" method="post">
-----------------------------------------------------------------------------------------------------------

package com.yourcompany.struts.action;

public class UserAction extends DispatchAction {
private UsersService userService;
public UsersService getUserService() {
return userService;
}
public void setUserService(UsersService userService) {
System.out.println("注入 action");
this.userService = userService;
}
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;
Users c = new Users();
c.setName(userForm.getName());
userService.save(c);
System.out.println("END");
return null;
}
}
-----------------------------------------------------------------------------------------------------------





本篇日志被作者设置为禁止发表新评论


©2008 Baidu



引文来源TransactionProxyFactoryBean总结并测试事务异常_熊熊之家
分享到:
评论

相关推荐

    Spring使用TransactionProxyFactoryBean声明式事务配置实例

    TransactionProxyFactoryBean是Spring提供的一种工具,用于创建带有事务策略的对象代理,它是基于动态代理实现的,能够帮助我们将事务管理逻辑与业务代码分离,提高代码的可维护性和可测试性。 首先,让我们了解...

    spring声明式事务配置方法.docx

    这种方式极大地简化了事务管理,使得事务处理与业务逻辑解耦,提高了代码的可维护性和可测试性。以下是关于Spring声明式事务配置方法的详细解释。 首先,Spring声明式事务管理主要依赖于AOP(面向切面编程)实现。...

    Spring整合JDBC实现转账业务-动态代理模式

    5. 测试类:通过测试类验证转账业务的正确性和事务管理的有效性。 总结起来,通过Spring整合JDBC和动态代理模式,我们可以将复杂的事务管理从业务代码中解耦,提高代码的可读性和可维护性。同时,这种设计也遵循了...

    Spring的事务管理以及转账案例

    在测试环节中,通过模拟调用转账方法,并检查数据库中的结果,可以验证事务管理是否按预期工作。如果测试通过,说明事务控制成功,业务操作的完整性得到了保证。 总结来说,Spring的事务管理提供了强大的工具来处理...

    浅谈Spring+Hibernate整合(共16页).doc

    此外,Spring 还支持使用 AOP 来进行事务管理,通过 TransactionProxyFactoryBean 创建事务代理,实现事务的声明式管理,这样事务的边界逻辑被封装在事务拦截器中,业务代码更简洁,降低了耦合度。 Spring 的事务...

    ssh struts+hibernate+spring

    **Spring事务管理** 的配置主要涉及到`TransactionProxyFactoryBean`,它可以创建事务代理,根据指定的事务属性(如`transactionAttributes`)决定事务的传播行为。这些传播行为决定了新事务何时开始、何时结束,...

    struts spring集成【下】

    这样,当Action执行过程中抛出异常时,Spring可以捕获并按照预设的方式进行处理,比如返回错误页面或者记录日志。 7. **整合测试**:集成后的系统需要进行充分的单元测试和集成测试,确保各个组件协同工作,事务...

    spring面试题大全

    使用TransactionProxyFactoryBean可以创建事务代理,实现事务的自动提交和回滚。 总之,Spring作为一款强大的框架,提供了DI、IOC、事务管理等多种功能,极大地简化了企业级应用的开发工作。理解并掌握这些核心概念...

    Spring.3.x企业应用开发实战(完整版).part2

    TransactionProxyFactoryBean 9.5.3 基于tx/aop命名空间的配置 9.6 使用注解配置声明式事务 9.6.1 使用@Transactional注解 9.6.2 通过AspectJ LTW引入事务切面 9.7 集成特定的应用服务器 9.7.1 BEA WebLogic 9.7.2 ...

    Spring3.x企业应用开发实战(完整版) part1

    TransactionProxyFactoryBean 9.5.3 基于tx/aop命名空间的配置 9.6 使用注解配置声明式事务 9.6.1 使用@Transactional注解 9.6.2 通过AspectJ LTW引入事务切面 9.7 集成特定的应用服务器 9.7.1 BEA WebLogic 9.7.2 ...

    spring-orm源码

    源码中,你可以看到TransactionProxyFactoryBean和PlatformTransactionManager是如何协同工作的,它们是如何实现事务的回滚和提交的。 3. **ORM集成** Spring-ORM对多种ORM框架进行了封装,如Hibernate、JPA和...

    spring面试大全

    声明式事务管理通过TransactionProxyFactoryBean或@Transactional注解实现,更简洁且易于维护,支持PROPAGATION_REQUIRED等事务传播行为,可以在出现异常时自动回滚事务。 综上所述,Spring 框架以其强大的功能和...

    spring hibernate struts整合开发实例

    6. **TransactionProxyFactoryBean**:这是一个特殊的Spring Bean,用于创建事务代理。它可以定义事务属性,比如`find*`方法被标记为只读事务,其他方法则默认为读写事务。 7. **Struts与Spring集成**:在Struts中...

    spring-framework-3.0.5.RELEASE-src

    3.0.5.RELEASE版本支持编程式和声明式事务管理,源代码中可以学习到TransactionProxyFactoryBean、PlatformTransactionManager等类的工作原理,以及如何使用@Transactional注解进行事务控制。 最后,Spring的测试...

    SSH框架配置说明(配置文件的管理)

    - 使用`TransactionProxyFactoryBean`配置事务代理,定义事务传播行为、异常处理等。 3. **struts.xml**:Struts2的配置文件,定义Action的映射,包括Action的类、方法以及结果视图等。需要确保Action的name属性与...

    《企业应用架构设计-Struts2 Hibernate3 Spring 2》谢星星 第十九章整合源码

    - **Spring-Hibernate集成**:Spring可以管理SessionFactory的生命周期,通过TransactionProxyFactoryBean创建事务代理,实现事务管理。 6. **FirstS2SH项目**:这个文件很可能是书籍中示例项目的名称,用于展示...

Global site tag (gtag.js) - Google Analytics