- 1、本文档共36页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 EJB高级——事务处理
EJB中的事务处理 EJB支持的事务种类 EJB容器支持两种类型的事务: 容器管理的事务(CMT-Container Managed Transaction) Bean自己管理事务(BMT-Bean Managed Transaction) 两种类型的事务不能在同一个EJB模块中混用 一、CMT Container Managed Transaction 程序员在Bean的源程序中没有事务边界控制的代码(如事务开始、回滚、提交等) 在部署描述符中指定事务属性,由容器控制事务的边界。 容器维护的事务是方法级的 即默认将一个方法当作一个事务执行 当方法执行的过程中,发生系统级异常,容器会自动将事务回滚,即将方法中所执行的数据库操作结果取消。 CMT示例 本示例创建一个名为Bank的EJB模块,用于银行的转账和查帐功能,其中转账和查帐都在数据库中进行 Banker是一个无状态会话Bean,主要含有以下商业方法: 商业方法trans将orgName账号中的指定金额转入dstName账号: 声明形式: public void trans(String orgName,dstName int amount) 功能: 如果将orgName账号中的金额在数据库中减少后,存入dstName账号时出现了问题,则该方法对应的数据库操作会自动取消,这是由容器管理的事务完成的。 商业方法getBalance检测指定账号的存款余额 声明形式: public int getBalance(String accountName) 创建TransDemo项目,加入Bank模块 加入Banker会话Bean 加入商业方法 将Banker加入到模块Bank中 修改BankerBean.java文件 加入ejbCreate方法和相关注释 修改getBalance商业方法 修改trans商业方法(处理转出账号) 修改trans商业方法(处理转入账号) trans商业方法中的事务执行过程 产生EJB Files 产生EJB Files之后的部署描述中的事务属性 部署Bank模块 创建测试客户端 修改TestBanker.java,引入必要的包 修改TestBanker的testBean方法 事件处理代码(转入按钮部分) 事件处理代码(查询余额部分) 事件处理代码(异常处理部分) ATM构造方法代码 运行TestBanker.java文件 TestBanker的运行初始化界面 正常转账的客户端和服务端信息 异常转账时的客户端和服务器信息 异常转账时服务端显示的交易信息 BMT Bean Managed Transaction 程序员在Bean的源程序中控制事务边界控制(如事务开始、回滚、提交等) 在部署描述符中指定由Bean控制事务的边界。 例子背景 银行账户例子 EJB提供存款、取款、获取余额的操作。 修改Bean类定义 修改withdraw方法 修改withdraw方法 修改withdraw方法 设置事务属性 一点说明 Bean Managed Transaction可以跨越方法边界 package bank; //import ... public class BankerBean implements SessionBean { SessionContext sessionCtx = null; DataSource ds; Connection conn; public void ejbCreate() throws CreateException{ //... } public void ejbRemove() {} public void ejbPassivate() {} public void ejbActivate() {} public void setSessionContext(SessionContext Context) { sessionCtx = Context; } //Part 2,3 } 保存容器传递的SessionContext引用: 因为bean自己控制事务时需要和容器交互获得用户事务的引用。 public void withdraw(String accountName, int amount) throws BankerFailureException{ try{ try{ UserTransaction userTrx = sessionCtx.getUserTransaction(); userTrx.begin(); }catch(...) //数据库操作... System.out.println
您可能关注的文档
最近下载
- 2024年时事政治题库及参考答案(100题).doc
- 2024年人教新课标小学数学知识点整理.doc
- 高中化学新教材选择必修3与旧版教材选修5对比分析.pdf VIP
- 生物人教版2024版七年级上册2.2.2 脊椎动物(鱼) 课件01.pptx VIP
- ISO27001信息安全管理体系信息安全风险评估表.pdf
- 宣讲“铸牢中华民族共同体意识”专题课件.ppt VIP
- NB_T 33018-2015 电动汽车充换电设施供电系统技术规范.pdf VIP
- 《教育家精神》全文课件.ppt
- 国开电大学习网国家安全教育(山东大学(威海))答案.pdf
- 学堂在线昆虫文化(安农)期末考试答案(65题卷).docx
文档评论(0)