被调用方法的事物属性1、 事务的涵义和要求
事务是必需作为一个单元执行的一组操作——比如银行转账中一方账户里扣除金额同时在另一方账户中添加相应金额的两个操作,是要求作为一组操作来进行的(此类操作要求是同步的;EJB事务中的一组操作可以是同步的,也可以是异步的)。事务中的所有操作是在一个短周期内顺序或并行执行的。
2、 事务的属性——ACID
Atomicity(原子性):是指事务中所有操作是作为一个整体来完成的性质;它要求在事务结束时,所有操作全部完成(事务成功),或都没有完成(事务失败)。
Consisitency(一致性):是指数据保持完整;它要求在事务结束时,数据的逻辑规则得以保持;
Isolation(隔离性):要求事务的处理过程和中间状态对于外部环境应该是透明的
Durability(耐久性):要求事务提交时,其造成的改动对其它程序不透明。
3、 分布式事务和JTA
分布式事务是说这样的一种事务:它的所有操作使用不同进程或计算机上的资源,因此它要求在涉及的资源间进行专门的协调——JTA就是这样一个事务管理器:它定义了一组接口,省略了显式编写两阶段提交协议(一种策略,通过“准备”和“提交”两条命令来协调所有资源管理器的动作,以减少分布式操作中出现的冲突或错误)的环节,从而方便了客户、企业Bean或资源管理器参与到容错性分布式事务中。
4、 声明性的事务管理VS显式划分的事务管理
显式划分的事务管理:
需要用到一些相当复杂的API,还需要在业务逻辑中编写事务性代码。
声明性的事务管理:
EJB服务器可以根据部署其间定义的事物属性隐式地对事物进行管理,通过@java.ejb.!TrasactionAttribute注解或EJB部署描述文件,为整个EJB或其中的方法设置以下事务属性:
NotSupported
Supports
Required(默认事物属性)
RequiresNew
Mandatory
Never
从而只需修改注解或XML,就可以对EJB事务行为进行控制。
下面分别介绍这两种方法的使用:
1) 使用@!TrasactionAtrribute注解
!TrasactionAttribute是一种枚举类型,包括:MANDATORY, REQUIRED, REQUIRES_NEW, SUPPORTS,NOT_SUPPORTED, NEVER这几个值,可以应用于bean class,也可以单独应用于其中的每个方法。使用的方法是,在类或方法前注解:
@TransactionAttribute(NOT_SUPPORTED)
如果在一个已经注解了事物属性的bean类的方法上再注解不同的事物属性,那么该方法的事物属性可覆盖之前的bean类事物属性。
2) 在XML中设置事物属性
在XML部署描述文件中,可以用<container-transaction>元素指定EJB的事物属性。
5、 事务范围
事务范围是指涉及某个事务的所有EJB,它可以根据方法执行的线索来界定:在事务执行时,当EJB某个方法被调用,事务就会被传播到该EJB中,而该EJB也会被相应包含在事务范围内。
6、 事务属性的定义
定义事务属性的意义:
事务最大的特征在于其传播性,事务是靠传播来完成其工作单元的定义的,因此某个EJB或某个类是否会被传播到决定了它是否会被包含在整个事务的内,从而决定了事务管理器是否会对它进行托管。而事务属性就是定义了一个EJB或类被传播的特性。
事务是必需作为一个单元执行的一组操作——比如银行转账中一方账户里扣除金额同时在另一方账户中添加相应金额的两个操作,是要求作为一组操作来进行的(此类操作要求是同步的;EJB事务中的一组操作可以是同步的,也可以是异步的)。事务中的所有操作是在一个短周期内顺序或并行执行的。
2、 事务的属性——ACID
Atomicity(原子性):是指事务中所有操作是作为一个整体来完成的性质;它要求在事务结束时,所有操作全部完成(事务成功),或都没有完成(事务失败)。
Consisitency(一致性):是指数据保持完整;它要求在事务结束时,数据的逻辑规则得以保持;
Isolation(隔离性):要求事务的处理过程和中间状态对于外部环境应该是透明的
Durability(耐久性):要求事务提交时,其造成的改动对其它程序不透明。
3、 分布式事务和JTA
分布式事务是说这样的一种事务:它的所有操作使用不同进程或计算机上的资源,因此它要求在涉及的资源间进行专门的协调——JTA就是这样一个事务管理器:它定义了一组接口,省略了显式编写两阶段提交协议(一种策略,通过“准备”和“提交”两条命令来协调所有资源管理器的动作,以减少分布式操作中出现的冲突或错误)的环节,从而方便了客户、企业Bean或资源管理器参与到容错性分布式事务中。
4、 声明性的事务管理VS显式划分的事务管理
显式划分的事务管理:
需要用到一些相当复杂的API,还需要在业务逻辑中编写事务性代码。
声明性的事务管理:
EJB服务器可以根据部署其间定义的事物属性隐式地对事物进行管理,通过@java.ejb.!TrasactionAttribute注解或EJB部署描述文件,为整个EJB或其中的方法设置以下事务属性:
NotSupported
Supports
Required(默认事物属性)
RequiresNew
Mandatory
Never
从而只需修改注解或XML,就可以对EJB事务行为进行控制。
下面分别介绍这两种方法的使用:
1) 使用@!TrasactionAtrribute注解
!TrasactionAttribute是一种枚举类型,包括:MANDATORY, REQUIRED, REQUIRES_NEW, SUPPORTS,NOT_SUPPORTED, NEVER这几个值,可以应用于bean class,也可以单独应用于其中的每个方法。使用的方法是,在类或方法前注解:
@TransactionAttribute(NOT_SUPPORTED)
如果在一个已经注解了事物属性的bean类的方法上再注解不同的事物属性,那么该方法的事物属性可覆盖之前的bean类事物属性。
2) 在XML中设置事物属性
在XML部署描述文件中,可以用<container-transaction>元素指定EJB的事物属性。
5、 事务范围
事务范围是指涉及某个事务的所有EJB,它可以根据方法执行的线索来界定:在事务执行时,当EJB某个方法被调用,事务就会被传播到该EJB中,而该EJB也会被相应包含在事务范围内。
6、 事务属性的定义
一个概念:挂起——当事务要调用正在被调用的Bean方法,事务的传播会暂时停止,直到Bean方法调用返回。
被调用方法的事物属性 | 客户端(调用方)在事务范围内 | 客户端(调用方)不在事务范围内 |
NotSupported | 客户端事务被挂起,直到方法执行完毕 | |
Supports | 自动包含于客户端事务范围内 | 不发起新事务,正常执行 |
Required | 自动包含于客户端事务范围内 | 发起属于自己的一个新事务 |
RequiresNew | 发起属于自己的一个新事务 | 发起属于自己的一个新事务 |
Mandatory | 自动包含于客户端事务范围内 | 调用失败,抛出异常 |
Never | 调用失败,抛出异常 | 不发起新事务,正常执行 |
定义事务属性的意义:
事务最大的特征在于其传播性,事务是靠传播来完成其工作单元的定义的,因此某个EJB或某个类是否会被传播到决定了它是否会被包含在整个事务的内,从而决定了事务管理器是否会对它进行托管。而事务属性就是定义了一个EJB或类被传播的特性。