在拜读了idior兄的Transaction in ADO.net 2.0之后,偶也忍不住手痒,写下了关于J2EE Tranaction的几个基本概念一文。在阅读以及总结的过程中,我发现在Transaction的支持上,ADO.net仍需继续努力的哦。也许你会认为我瞎说,那么就来看一下两者Transaction Scope Option上的对比吧。
首先,Transaction Scope主要是解决在方法调用过程中Transaction嵌套的问题。ADO.net 2.0在Transaction Scope上提供的Option有三个:Require,Requires New和Suppress。在idior兄的Post里面,还有一张表和一个示意图,你是否都看懂了呢?表中列出的六种情况,你又是否了然于胸了呢?以下图表引用于idior兄的Post:
1. 表中的第一行对应着图中Code block with no ambient Transaction对Scope1的调用。对照表中的第三列:New Transaction。我们可以得出,当一个与Transaction无关的MethodA调用了Transaction Scope为Required的MethodB,Transaction Manager将会为MethodB创建一个新的Transaction,这个新的Transaction就对应着图中Transaction A。
2. 表中的第二行在图中没有画出来,可类比第五行。
3. 表中的第三行在图中没有画出来,可类比第六行。
4. 表中的第四行在图中对应着Scope1对Scope2的调用。对照表中的第三列:Ambient Transaction。 我们可以得出, 当一个与Transaction有关的MethodA调用了Transaction Scope为Required的MethodB, Transaction Manager并不会创建新的Transaction,而是让MethodB与MethodA所在的Tranaction关联起来。
5. 表中的第五行在图中对应着Scope1对Scope3的调用。对照表中的第三列:New Transaction。我们可以得出,当一个与Transaction有关的MethodA调用了Transaction Scope为Requires New的MethodB, Transaction Manager会为MethodB创建一个新的Transaction,这个新的Transaction就对应着图中的TransactionB了。
6. 表中的第六行在图中对应着Scope1对Scope4的调用。对照表中的第三列:No Transaction。我们可以得出,当一个与Transaction有关的MethodA调用了Transaction Scope为Suppress的MethodB, Transaction Manager既不会为MethodB创建新的Transaction,也不会将MethodB与MethodA所在的Transaction关联起来。
总之,Required会视调用者的情况决定是否创建新的Transaction,而另外两个Option则不管调用者的情况如何,都会有一致的结果。打个比方吧,Required意味着精打细算,原来存在Transaction就拿来用,没有才会创建一个新的;Requires New就意味着要求纯粹了,不管你原来有没有Transaction,到了偶的地盘都得有Transaction;Suppress就是不理不睬了,管你原来有没有Transaction,反正俺这里不要。
说完了ADO.net的情况,就让我们来看看J2EE下面的Transaction Scope Option吧。在J2EE的文档中,会有一个特别的名词Transaction Attribute与ADO.net的Transaction Scope Option想对应。 Transaction Attribute有六个可选值:Required,Requires New,Mandatory,Not Supported,Supports和Never。为了不再重复上面繁琐的陈述,还是用下面的图表来说明这几种Attribute的含义吧:
Figure1. Invoker with no client transaction
Figure2. Invoker with client transaction
从以上的图表,你可以发现两者的Required和Requires New是对应的,而Not Supported则对应于ADO.net中的Suppress。而Mandatory,Supports和Never则是J2EE下特有的。正是因为增加了这三个Attributes,所覆盖的可能性范围就增大了许多,处理Transaction Scope的问题也相应变得更加灵活,更能满足复杂业务逻辑的需要了。
分享到:
相关推荐
### J2EE与.NET比较分析白皮书关键知识点解析 #### 一、引言与背景 随着互联网技术的发展,Web Services 成为了连接不同系统的重要桥梁。本文将对比分析两种主流的Web Services 开发平台——Java2 Platform, ...
C#的大多数关键字来源于C++,使得其在书写风格上与Java不同。另一方面,C#严格的类型转换等概念却明显借鉴了Java。 总的来说,J2EE与.NET在架构和技术实现上有许多相似之处,但也存在差异。J2EE侧重于跨平台的开放...
J2EE平台通过提供诸如Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等组件和服务,以及JTA(Java Transaction API)和JPA(Java Persistence API)等工具,实现了上述特性,为企业级应用...
在 ASP.NET 应用程序中集成 Oracle 数据库,并实现高效且可靠的事务处理是非常重要的。事务管理是确保数据一致性和完整性的重要手段之一,尤其是在涉及多条 SQL 语句或多张表的操作时。 #### 二、环境配置 在开始...
### 中间件与J2EE技术详解 #### J2EE技术概览 ...综上所述,中间件和J2EE技术在企业级应用开发中扮演着至关重要的角色。它们不仅为企业提供了强大的技术支持,还促进了整个行业的技术创新和发展。
9. **分布式计算**:J2EE支持分布式计算,通过RMI(Remote Method Invocation)和EJB等技术,使得Java对象可以在网络中的不同节点上进行交互。 10. **安全性**:J2EE提供了强大的安全模型,包括用户认证、授权、...
之前一直找原因,最后知道了解决方法,具体请下载源码查看。特别是用到throw的事务中
在提供的源码中,"J2EE项目开发与设计--源代码--修改后"可能包含以上提到的一些或全部技术的实例。通过对这些源码的分析和学习,开发者可以加深对J2EE设计模式的理解,掌握实际项目开发中的最佳实践,从而提升自己的...
结合Spring.NET和Nhibernate,我们可以利用Spring.NET的Transaction Management来处理数据库事务。这意味着我们可以在Spring.NET的管理下定义事务边界,确保数据操作的一致性。例如,我们可以使用@Transactional注解...
总的来说,J2EE JAR包见证了Java在企业级应用开发领域的不断演进,从J2EE 1.3的初步成熟到1.4的完善,再到5.0的显著简化,它们反映了软件开发趋势的变化,即从繁重的手动配置转向更简洁、更具生产力的开发方式。...
4. **JMS(Java Message Service)**:JMS是Java平台上的标准接口,用于在应用程序之间发送和接收消息。它是异步通信的重要工具,可以实现解耦和可扩展性。 5. **JNDI(Java Naming and Directory Interface)**:...
.NET 存储过程安装指南和版本说明 重要事项: 如果您要在 Windows Vista 上安装 ODAC 10.2.0.2.21,请参阅安装说明以了解特定于 Windows Vista 的安装步骤。 下载包括 Oracle ...
提到的"codefans.net"可能是提供编程资源或教程的网站,可能包含有关JSP和J2EE的实例代码、示例项目、论坛讨论等内容,对于学习和实践这些技术非常有帮助。通过这个平台,你可以找到更多的实践材料,加深理解和应用...
- **定义与定位**:myBatis.net并非纯粹的ORM(Object-Relational Mapping)框架,而是一种半自动化、高度灵活的持久层解决方案。相较于完全自动化的ORM框架(如NHibernate),myBatis.net给予开发者更大的控制权,...
在VB.NET中进行数据库操作是开发应用程序时常见且重要的任务,尤其当涉及到数据存储和检索时。本程序示例展示了如何使用VB.NET直接与数据库进行交互,包括支持SQL Server和Access这两种常见的数据库系统。 首先,VB...
这些组件可以在服务器上运行,处理业务逻辑、数据存储和用户交互。J2EE架构通常分为客户端层、Web层、业务逻辑层和数据访问层,每个层都有特定的角色和功能。 1. **客户端层**:通常由轻量级的富客户端应用或Web...
在.NET框架中,Visual Basic .NET(VB.NET)是一种面向对象的编程语言,它为开发者提供了强大而便捷的工具来创建各种类型的应用程序,尤其是在数据库开发领域。VB.NET结合了微软的ADO.NET(ActiveX Data Objects ...
ADO.NET提供了Transaction类,可以在ASP.NET中管理数据库事务。通过设置TransactionScope,可以确保一组操作要么全部成功,要么全部回滚,确保数据一致性。 **错误处理与日志记录** 在ASP.NET中,使用try-catch块...
J2EE在早期版本中主要包含了Web组件、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JTA(Java Transaction API)等核心技术。 **一、J2EE架构** J2EE架构基于分层模型,通常包括以下层次: 1. **...