- 浏览: 472818 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 2092Linux下Trac安装手记 版权声明 :可以 ... -
Trac+subversion拥有强大的bug管理能力(介绍和Windows下安装)
2009-07-29 10:53 2451Trac+subversion拥有强大 ... -
读取properties属性文件中的配置信息
2009-03-19 17:55 1714示例代码: // 将指定路径下的资源文件中的 ... -
SQLServerException: Invalid object name '***_VIEW_
2009-03-19 13:52 3307现象:本地测试(拉了最新代码),选择类别的时候,页 ... -
“妖怪”问题也是有原因的
2009-03-17 16:48 994今天,bug对应过程中 ... -
如何处理日文系统中的NEC拡張字
2009-03-16 17:04 1860http://blog.csdn.net/luyang101 ... -
通知メールで文字化け
2009-03-16 16:46 1659邮件乱码问题 通知メールで ... -
搜索条件 关键字
2009-03-16 16:44 1255如果条件入力部分支持多个入力关键字的,也就是以空格分隔关键字的 ... -
读取XSL文件指定节点(Subject)的值
2009-03-16 11:40 3642调用方: //以URL形式获取到连接到邮件文本xsl文件 ... -
NBS编码小结2
2009-03-11 20:56 1889SQL 语句错误: Caused by: ... -
NBS编码小结1
2009-03-11 19:50 1271千万注意:对象非空的判断一定要时时刻刻注意!否则极有可能 ... -
BVT应该测些什么?
2009-03-06 19:36 1944BVT应该测些什么? ... -
截图啊截图
2009-02-24 23:22 1067UT 测试时,发现 bug ,在 Track ... -
虚拟机重启后,使用域帐户却进不去了。
2009-02-23 21:25 2107虚拟机重启后,使用域帐户却进不去了。 尝试: ... -
临时map、正式map、数据库
2009-02-17 20:00 1289临时 map 、正式 map 、数据库 主 ... -
将int类型转换成String类型、List的使用和Eclipse插件implementors
2009-02-13 21:13 3558将 int 类型转换成 String 类型: ... -
SVN的getLock问题和数据库表中“日時”字段的长度问题
2009-02-12 17:47 1675SVN 的 getLock 问题:想修改 doc ... -
工具check Style和Find Bugs生成的report、Code两点
2009-02-11 18:55 995工具 check Style 和 Find Bug ... -
SVN使用小记
2009-02-10 18:36 4422SVN 使用小记 问题 1 : S ... -
IMのバッチ機能でメール送信バッチ 15分間一回実行
2009-01-19 16:09 1245日方客 户 想实现一种功能:每 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应用程序至关重要。
本篇将深入探讨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`类来创建...
子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。...在主线程中,我们可以使用 try-catch 语句来捕获异常,并进行事务的回滚。