分享
 
 
 

使用JOTM为Servlets增加事务支持(2)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

应用程序设计:

数据层:

在数据层,我们需要两个不同的数据库,在每个数据库中都存在一张表。为了让例子更加真实,我们会使用两个不同的数据库,因为从不属于用户账户所在银行的ATM上取钱是确实可能出现的情况。(根据以下信息配置数据库)

banktest包括account表,表示用户账户信息。

atmtest包括atm表,表示ATM信息。

逻辑层:

在逻辑层,我们有三个类访问资源并在资源上进行各种操作:

foo.BankAccount表示指定用户的银行账户并通过JDBC对数据库中的account表进行操作。

bar.ATM表示ATM并通过JDBC对atm表进行操作。

bar.CashDelivery使用上面两个类完成用户取钱的操作。

所有的逻辑都在CashDelivery.java类的deliverCash方法中完成。

javax.transaction.UserTransaction接口被用来指定是否使用事务,所有在utx.begin()和utx.commit()(或者utx.rollback())之间的操作都会在一个事务中完成。这就保证了你的Web应用不会陷入上面的场景所讨论的痛苦之中。

感谢事务,让应用的逻辑变得如此简单,仅仅包括如下几步:

1)开始事务;

2)与用户的银行联系,并从账户上支取相应的数额;

3)告诉ATM提供现金;

4)结束事务

a) 如果所有的事都成功完成,那么提交事务;

b) 否则,回滚事务

5)将事务的结果向用户报告。如果事务成功完成,那么用户得到现金,并且账户上会扣除相应的数额。否则,什么事都不会发生。

示例一:

CashDelivery.java

public boolean deliver(String client, int value) {

InitialContext ctx = new InitialContext();

UserTransaction utx = (UserTransaction)

ctx.lookup("java:comp/UserTransaction");

...

boolean success = false;

try {

// 开始事务

utx.begin();

// 与用户开户银行通信...

BankAccount account = new BankAccount(client);

// ... 并从账户上扣除相应的数额.

account.withdraw(value);

// 联系ATM...

ATM atm = new ATM();

// ... 提取现金给用户.

atm.deliverCash(value);

// 所有事情都成功完成.

success = true;

} catch (Exception e) {

// 有错误发生

// 必须向用户提供信息

explanation += e.getMessage();

} finally {

try {

if (success) {

/* 所有事情都成功完成, 我们提交事务.

* 只有在现在, 用户账户上才真正扣除相应的数额,

* 并且现金被送到用户手中

*/

utx.commit();

} else {

/* 有错误发生, 我们回滚事务.

* 任何在事务中进行的操作都不会真正发生

*/

utx.rollback();

}

} catch (Exception e) {

/* 在事务完成过程中有错误发生

* 我们仍然保证在事务中进行的操作不会真正发生

*/

// 我们必须向用户报告有关信息

explanation += "\n" + e.getMessage();

// 最后,事务没有成功

success = false;

} finally {

return success;

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有