- 浏览: 474660 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jyjava:
呵呵,不错,跟把结果放到哈市map中一样,在查询数据库之前,先 ...
if (log.isDebugEnabled()) {}使用场景初析 -
eileennaly:
你好 我最近在研究S2dao(工作需要)但是因为菜鸟一枚(刚刚 ...
S2Dao的执行 -
nswish:
谢谢,受教了!
单例模式中的饿汉式和懒汉式 -
shangweiqiang24:
正要用到,捡到宝啦! 谢谢啊。
Seasar和S2Dao简介 -
hugh1st:
模糊测试主要适合哪些软件/项目的测试呢?看《测试之美》的时候了 ...
模糊测试(Fuzzing Test)个人小结
<!-- --><!-- --> <!-- -->
要求能 够 不 论 BL的方法 访问 多少个 DAO,一旦失 败 都能 够 回 滚 。
解决方案:在 S2DAO 例子程序基础上实现事务管理( JDBC 中的事务管理,出错时进行回滚)
核心问题:只使用一个 container (该容器内不仅可以装 DAO ,比如我们前面熟知的 EmployeeDao 和 DepartmentDao ;还可以装业务逻辑,比如 HogeImpl 类的 foo 方法)
核心配置文件 HogeClient.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="dao.dicon"/> <include path="j2ee.dicon"/> <component class="examples.dao.EmployeeDao "> <aspect>dao.interceptor</aspect> </component> <component class="examples.dao.DepartmentDao "> <aspect>dao.interceptor</aspect> </component> <component class="examples.tx.HogeImpl "> <aspect>j2ee.requiredTx </aspect> </component> </components>
测试类 HogeClient.java:
package examples.tx; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.S2ContainerFactory; import examples.dao.DepartmentDao; import examples.dao.EmployeeDao; public class HogeClient { private static final String PATH = "examples/tx/HogeClient.dicon" ; public static void main(String[] args) { S2Container container = S2ContainerFactory.create ( PATH ); container.init(); HogeImpl hoge = (HogeImpl) container.getComponent(Hoge. class ); hoge.foo(); } }
接口 Hoge.java:
package examples.tx; public interface Hoge { public void foo(); }
实现类 HogeImpl.java:
package examples.tx; import examples.dao.Department; import examples.dao.DepartmentDao; import examples.dao.Employee; import examples.dao.EmployeeDao; public class HogeImpl implements Hoge { private EmployeeDao empDao ; private DepartmentDao deptDao ; public void setEmpDao(EmployeeDao empDao) { this . empDao = empDao; } public void setDeptDao(DepartmentDao deptDao) { this . deptDao = deptDao; } public void foo () { try { //insert emp Employee emp = new Employee(); emp.setEmpno( 1 ); emp.setDeptno(10); empDao.insert(emp); System. out .println(emp); //insert dept Department dept = new Department(); dept.setDeptno( 1 ); dept.setDname( "foo" ); deptDao.insert(dept); System. out .println(dept); } finally { // container.destroy(); } } }
-》在实现类的foo方法中,有两段跟数据库打交道的操作,算是一个事务。(20090519追加)
备注:J2ee.dicon文件的配置请参考前面一篇blog
(对于requiredTx的配置原先就有,不用动它;注释掉默认的HSQL,使用PostgreSQL数据库)。
-》HSQL是一种内存数据库,PostgreSQL是实实在在的数据库。(20090519追加)
说明:这个实现综合了官网上事务的自动控制部分<!-- --><!-- --> <!-- -->http://s2container.seasar.org/2.3/ja/tx.html
和下载的s2DAO示例程序。
首先自己在原先示例程序基础上再做个例子,合并两个dao的插入操作,然后将这段逻辑放入foo方法,在配置文件中对这个业务逻辑进行事务管理,从而实现了对两个dao的insert等操作进行事务处理。
对
BL(
Business Logic)
层
的事
务处
理
测试结
果:
在下面的情况下
进
行
测试
:
2个
dao的
insert方法,在一个
BL方法中先后
执
行,第一个
insert成功,第二个
insert失
败
。判断
测试结
果的方法是
查
看数据
库
表里的数据。
测试
1:当不使用事
务时
,第一个表插入成功,第二个表插入失
败
。
测试
2:当使用事
务时
,第一个表插入失
败
,第二个表插入失
败
。
结论 : Dao和 BL层对 象从一个 S2Container( DIContainer)中 获 取, 对 BL对 象添加事 务 要求 。
说明:实现思路和测试说明来源于部门首席技术专家!
<!-- --><!-- -->
<!-- -->
补充:
container.init(); 执行这句时,进行才初始化工作。
会调用 setEmpDao 和 setDeptDao 方法,将从容器中拿出的 empDao 和 deptDao 对象赋值给 HogeImpl 中的两个成员变量 empDao 和 deptDao 。
评论
元旦过后就开始封闭开发
用鬼子的网络
兄台表达能力真好
我想了半天也没总结出来这么一篇来
呵呵
呵呵,谢谢你的表扬哦!听着心里美滋滋的:)
可是我们不使用这个s2DAO了,不继续往下调查了,因为日本客户改变主意了,唉:(
我想了半天也没总结出来这么一篇来
呵呵
发表评论
-
Linux下Trac安装手记
2009-07-29 10:59 2098Linux下Trac安装手记 版权声明 :可以 ... -
Trac+subversion拥有强大的bug管理能力(介绍和Windows下安装)
2009-07-29 10:53 2482Trac+subversion拥有强大 ... -
读取properties属性文件中的配置信息
2009-03-19 17:55 1719示例代码: // 将指定路径下的资源文件中的 ... -
SQLServerException: Invalid object name '***_VIEW_
2009-03-19 13:52 3312现象:本地测试(拉了最新代码),选择类别的时候,页 ... -
“妖怪”问题也是有原因的
2009-03-17 16:48 1010今天,bug对应过程中 ... -
如何处理日文系统中的NEC拡張字
2009-03-16 17:04 1866http://blog.csdn.net/luyang101 ... -
通知メールで文字化け
2009-03-16 16:46 1665邮件乱码问题 通知メールで ... -
搜索条件 关键字
2009-03-16 16:44 1276如果条件入力部分支持多个入力关键字的,也就是以空格分隔关键字的 ... -
读取XSL文件指定节点(Subject)的值
2009-03-16 11:40 3650调用方: //以URL形式获取到连接到邮件文本xsl文件 ... -
NBS编码小结2
2009-03-11 20:56 1919SQL 语句错误: Caused by: ... -
NBS编码小结1
2009-03-11 19:50 1278千万注意:对象非空的判断一定要时时刻刻注意!否则极有可能 ... -
BVT应该测些什么?
2009-03-06 19:36 1961BVT应该测些什么? ... -
截图啊截图
2009-02-24 23:22 1075UT 测试时,发现 bug ,在 Track ... -
虚拟机重启后,使用域帐户却进不去了。
2009-02-23 21:25 2133虚拟机重启后,使用域帐户却进不去了。 尝试: ... -
临时map、正式map、数据库
2009-02-17 20:00 1304临时 map 、正式 map 、数据库 主 ... -
将int类型转换成String类型、List的使用和Eclipse插件implementors
2009-02-13 21:13 3564将 int 类型转换成 String 类型: ... -
SVN的getLock问题和数据库表中“日時”字段的长度问题
2009-02-12 17:47 1678SVN 的 getLock 问题:想修改 doc ... -
工具check Style和Find Bugs生成的report、Code两点
2009-02-11 18:55 1003工具 check Style 和 Find Bug ... -
SVN使用小记
2009-02-10 18:36 4429SVN 使用小记 问题 1 : S ... -
IMのバッチ機能でメール送信バッチ 15分間一回実行
2009-01-19 16:09 1255日方客 户 想实现一种功能:每 15 分钟,运行一次 ...
相关推荐
在这个“spring简单实例 事务回滚”的案例中,我们将深入探讨Spring如何处理事务回滚,以及它是如何在Java源码层面实现这一功能的。 首先,让我们理解什么是事务。在数据库操作中,事务是确保数据一致性的重要机制...
本实例将详细讲解如何在C#中实现简单的事务回滚功能,以应对在执行多条SQL语句时可能出现的错误。 首先,我们需要理解事务的基本概念。事务是数据库操作的基本单元,它包含一组操作,这些操作要么全部成功,要么...
"JDBC事务管理的简单实现" 在JDBC编程中,事务管理是非常重要的一部分。为了实现数据一致性,需要在代码中显示的调用Connection方法的事务相关API来完成工作。下面是关于JDBC事务管理的简单实现的知识点。 一、...
7. **实现事务回滚**:当在@Transactional注解的方法中发生异常时,Spring会自动回滚事务。例如,如果在保存数据时发生错误,整个事务将被回滚,保证数据的一致性。 8. **测试与调试**:完成整合后,通过编写单元...
标题中的“Spring JDBC事务管理”是指在Spring框架中如何利用JDBC进行数据库操作时的事务控制。Spring提供了多种方式来管理事务,使得开发者能够在复杂的业务逻辑中更好地控制数据的持久化过程,确保数据的一致性和...
在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...
在这个例子中,我们可能关注的是声明式事务管理,因为它是Spring中最常用的方式。 首先,我们需要在Spring配置文件中启用事务管理器,例如使用`<tx:annotation-driven>`标签。这将扫描带有@Transactional注解的方法...
在Java编程中,Oracle...总的来说,Oracle在Java中的事务处理和异常回滚是通过JDBC接口实现的,它保证了数据库操作的原子性、一致性、隔离性和持久性。理解并熟练掌握这些概念对于开发健壮的Java应用程序至关重要。
回滚处理是事务管理的重要部分,它允许在事务执行过程中遇到错误或不满足业务规则时撤销所有变更。在.NET 2.0中,无论是显式还是隐式事务,都可以通过抛出异常或调用`Rollback`方法来触发回滚。回滚事务可以防止脏...
本篇将深入探讨JDBC中的事务处理,以及如何在Java应用程序中实现事务控制。 **一、JDBC事务的基本概念** 事务(Transaction)是数据库操作的一个逻辑单元,包含一组操作,这些操作要么全部执行,要么全部不执行。...
5. **事务管理**:在业务层调用DAO时,包裹在try-catch-finally块中,进行事务的开启、提交或回滚。 **4. 示例代码** ```java // UserDAO.java public interface UserDAO { void addUser(User user); List<User>...
java 应用程序操作数据库实例,若出现sql异常则事务回滚。
这可以通过在Web或Windows应用程序中创建一个数据网格视图来实现,将Excel数据动态加载到控件中展示。用户可以查看、编辑甚至排序数据,然后再决定是否导入。 日志功能是追踪系统运行状态的重要工具。在导入过程中...
1. Spring AOP:AOP允许我们在程序运行时,动态地将一些关注点(如事务管理)插入到目标对象的方法调用中。通过定义切面(Aspect),我们可以指定哪些方法需要进行事务管理,并定义事务的传播行为和异常回滚策略。 ...
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
JDBC事务管理是数据库操作的重要组成部分,特别是在多用户并发访问数据库的环境中,保证数据的一致性和完整性至关重要。本文主要探讨了事务的基本概念、ACID原则、数据库并发问题以及解决方案。 首先,事务是数据库...
在本例中,我们关注的是与MySQL数据库交互时使用JDBC进行事务处理所需的相关jar包。 首先,我们需要`mysql-connector-java.jar`,这是MySQL提供的驱动程序,用于建立Java应用程序与MySQL数据库之间的连接。这个jar...
“JDBC事务管理项目”涵盖了如何在Java应用中利用JDBC进行事务控制,包括开启手动事务、提交、回滚以及设置事务隔离级别等。理解并掌握这些知识对于开发健壮的数据库应用至关重要,能够确保数据的完整性和一致性。
基于JDBC实现的DAO(Data Access Object)是一种在Java编程中常见的数据访问模式,它用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦,提高了代码的可复用性和可维护性。以下是关于基于JDBC实现DAO的一些...
3. **事务管理**:在导入过程中,使用数据库事务可以确保数据的一致性。事务可以包裹整个导入过程,一旦发生错误,所有更改都将被回滚,保持数据库状态不变。在.NET中,可以使用ADO.NET的`TransactionScope`类来创建...