事务策略之API层策略

事务策略之API层策略

ID:38692737

大小:76.52 KB

页数:12页

时间:2019-06-17

事务策略之API层策略_第1页
事务策略之API层策略_第2页
事务策略之API层策略_第3页
事务策略之API层策略_第4页
事务策略之API层策略_第5页
资源描述:

《事务策略之API层策略》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、不论您是在EJB2.1或3.0中使用容器环境,还是使用SpringFramework环境,或者是Tomcat和Jetty等带有JavaOpenTransactionManager(JOTM)的Web容器环境,都需要一种事务策略来确保数据库的一致性和完整性。JavaTransactionAPI(JTA)指定了与事务处理有关的语法和接口(参见参考资料),但是并没有描述如何将这些构建块组合起来。正如建筑工人需要根据一张设计图来将一堆木材建造成一栋房子一样,您需要一种策略来描述如何将事务构建块组合在一起。关于本系列事务可以改善数据的质量、完整

2、性和一致性,并使您的应用程序更加健壮。在Java应用程序中实现成功的事务处理并非易事,它涉及到设计和编码。在这个系列文章中,MarkRichards将指导您为从简单应用程序到高性能事务处理等各种用例设计有效的事务策略。我将在本文介绍的策略名为APILayer事务策略。它是最健壮、最简单并且是最容易实现的事务策略。但是其简单性也带来了一些限制和一些需要考虑的因素,我将对此加以解释。我在代码示例中使用EJB3.0规范;同样的概念也适用于SpringFramework和JOTM。基本结构APILayer事务策略的命名基于这样一个事实:所有事

3、务逻辑包含在逻辑应用程序架构的API层。这个层是一个逻辑层—有时也被称为应用程序的域层(domainlayer)或facade层,它以公共方法或接口的形式向客户机(或表示层)公开功能。之所以说是逻辑层,是因为可以从本地访问域层(通过直接实例化和调用),或通过HTTP、远程方法调用(RMI)、通过EJB使用RMIoverInternetInter-OrbProtocol(RMI-IIOP),甚至通过JavaMessageService(JMS)进行远程访问。图1展示了大多数Java应用程序的典型逻辑应用程序层堆栈:图1.架构层和事务逻辑

4、图1中的架构实现了APILayer事务策略。包含事务逻辑的类使用红色背景表示。注意,这些只包含应用程序架构的域类(API层)。客户机层、业务层和表示层没有包含事务逻辑,意味着这些层并不能开始、提交或回滚事务,也不会包含事务注释,比如EJB3.0中的@TransactionAttribute注释。整个应用程序架构中用于启动、提交和回滚事务的惟一方法就是API层的域类中包含的公共方法。这就解释了为什么API层是最健壮、最简单的事务策略。不要局限在图1所示的4个层上。应用程序架构可以包含更多的层,也可能包含比这更少的层。可以将表示层和域层结

5、合放到单个WAR文件中,或将域类单独放到一个EAR文件中。您可能将域类中包含的业务逻辑作为一个层,而不是两个。这都不会影响事务策略的工作方式或实现方式。这个事务策略非常适合拥有粗粒度API层的应用程序。并且由于表示层并未包含任何事务逻辑(甚至更新请求),因此此策略非常适合那些必须支持多客户机通道的应用程序,包括Web服务客户机、桌面客户机和远程客户机。但是这种灵活性需要付出一定代价—即客户机层仅限于对给定事务工作单元的单一请求。我将在本文后面解释这一限制的必要性。策略设置和特征以下规则和特征将应用到APILayer事务策略:·只有包含

6、在应用程序架构的API层中的公共方法包含事务逻辑。其他方法、类或组件都不应包含事务逻辑(包括事务注释、编程式事务逻辑和回滚逻辑)。·API层中的所有公共写方法(包括插入、更新和删除)都应当使用事务属性REQUIRED加以标记。·API层中的所有公共写方法(包括插入、更新和删除)都应当包含回滚逻辑,以标记对检查出的异常执行回滚的事务。·API层中的所有公共读方法默认情况下都应使用事务属性SUPPORTS加以标记(参见“事务策略:了解事务陷阱”中的事务策略:了解事务陷阱侧边栏内容)。这将确保在一个事务范围的上下文内调用读方法时,该方法被包

7、括在事务范围内。否则,它将在事务上下文之外运行,并假设它是惟一一个在逻辑工作单元(LUW)内得到调用的方法。我在这里假设这个读操作(作为API层的入口点)不会反过来对数据库调用写操作。·API层的事务将传播到在事务所有者内调用的所有方法(如下一小节定义的那样)。·声明式事务(DeclarativeTransaction)模型通常用于这种模式,并假设API层类由一个JavaEE容器环境管理,或由另一个框架(比如Spring)管理。如果不是这样的话,那么很可能需要使用编程式事务(ProgrammaticTransaction)模型。(参见

8、“Transactionstrategies:Modelsandstrategiesoverview”了解更多有关这些事务模型的信息)。根据上面列出的几条规则,如果您仔细观察的话,可能会注意到这个策略有些小问题。由于执行

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。