收藏 分享(赏)

高级软件工程 (13).ppt

上传人:rav7596 文档编号:8025957 上传时间:2019-06-04 格式:PPT 页数:99 大小:804.50KB
下载 相关 举报
高级软件工程 (13).ppt_第1页
第1页 / 共99页
高级软件工程 (13).ppt_第2页
第2页 / 共99页
高级软件工程 (13).ppt_第3页
第3页 / 共99页
高级软件工程 (13).ppt_第4页
第4页 / 共99页
高级软件工程 (13).ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

1、第 十 三 讲事 务 服 务,一、动因 二、事务概念及特性 三、并发控制 四、分布式事务 五、CORBA 事务服务模型 六、JAVA 事务服务,内 容,一、动因,网络环境下故障的不可避免性: 硬件的可靠性变化软件的潜在缺陷,硬件的可靠性变化:,时间,发生故障的概率,1,导致:电源停电、介质信息丢失、线路中断等故障,浴盆曲线,如何面对错误?,在高层(操作层)进行处理,保持系统的正确性、完整性,例如:银行转帐系统,A,B,从银行A的帐号a向银行B的帐号b转帐 ¥10000.00(1)将A的帐号a中的金额减 ¥10000.00(2)将B的帐号b中的金额加 ¥10000.00,该过程中任何一个环节都可

2、能出错! 如何保证系统的可接受性?,逻辑越来越复杂 集成带来的特征交互越来越多,软件的潜在缺陷,导致:内存泄露、访问冲突、特征干扰等问题,访问冲突,网络环境下存在各种资源:处理器存储器外部设备数据库软件构件为提高资源利用率,往往允许许多客户能够访问它们 当它们同时访问同一资源时,访问冲突即可能发生 例如:更新丢失(lost updates)不一致的(inconsistent retrieval),更新丢失问题,存在3个银行帐号A、B、C 帐面金额分别为:¥1000,¥2000,¥3000客户C1 从帐号A向帐号B转 ¥400客户C2 从帐号C向帐号B转 ¥300 正常结束时 帐号A减少 ¥40

3、0帐号C减少 ¥300帐号B增加 ¥ 700假如 C1、C2 同时访问 B(同时读取、写回B的金额) 得到的结果可能是:帐号A减少 ¥400帐号C减少 ¥300帐号B增加 ¥400C2的更新丢失了!,客户C1:从帐号A向帐号B 转 ¥400 将帐号A上的金额减 ¥400 将帐号B上的金额加 ¥400,客户C2:从帐号C向帐号B 转 ¥300 将帐号C上的金额减 ¥300 将帐号B上的金额加 ¥300,Balance:=A.read() ¥1000 A.write(balance -400) ¥600balance:=C.read() ¥ 3000C.write(balance-300) ¥ 2

4、700 balance:=B.read() ¥2000balance:=B.read() ¥ 2000B.write(balance + 300) ¥ 2300 B.write(balance + 400) ¥2400,结果:客户C2的更新操作被丢失,不一致的读取问题,存在3个银行帐号A、B、C 帐面金额分别为:¥1000,¥2000 ,¥3000客户C1 从帐号A向帐号B转 ¥400客户C2 计算三个帐号的总额 正常结束时 总额为 ¥6000假如 C1、C2 同时操作 得到的结果可能是:总额为 ¥5600 总额计算错误!,客户C1:从帐号A向帐号B转 ¥400 将帐号A上的金额减 ¥400

5、将帐号B上的金额加 ¥400,客户C2:计算三个帐号的总额,Balance:=A.read() ¥1000 A.write(balance -400) ¥600balance:=A.read() ¥ 600balance:=balance+B.read() ¥ 2600balance:=balance+B.read() ¥ 5600 balance:=B.read() ¥2000 B.write(balance + 400) ¥2400,结果:客户C2得到的帐号总额为 ¥5600,与实际总额不一致!,解决上述问题需要掌握如下信息:该操作包括哪些低层操作? 这些低层操作涉及哪些持久数据?这些操作

6、的运行结果如何?如果出现错误怎样处理?,类似的问题已经出现在数据库管理系统分布式操作系统 等领域,解决该问题的关键概念:事务(Transaction),二、事务概念及特性,事务是一系列操作它们 或者全部完成或者全部不做,事务的ACID特性 事务的启动、提交与终止 事务的类别 事务的支持机制,什么是事务?其特性是什么?,(1)事务的ACID属性,Atomicity原子性Consistency一致性Isolation分离性Durability持久性,原子性(Atomicity)事务 或者被全部执行或者任何修改都不起作用事务的起点是 回卷点也是 重复执行的起点事务的终点是下一个事务的起点,共享的资源

7、(的状态)需要保持一致在下面情形中容易产生不一致的状态:多个并发事务在互相不知晓的情况下结束应用系统 定义一致性,并负责保证一致性如果事务不能解决不一致问题事务可以被终止,一致性(Consistency),分离性(Isolation),每个事务访问资源时任何其它事务的存在皆是透明的在事务执行过程中任何其它事务进行的修改皆是不可见的通过下列途径实现: 两阶段锁 乐观并发控制,持久性(Durability),对于一个完成的事务其结果总是持久的 尽管后来的事务可以进一步修改其结果的值在事务结束之前被修改的资源的状态必须被保存到持久存储体中例如:磁盘持续性RAMEPROM 等,Begin: 启动一个新

8、事务 Commit: 结束一个事务 存储事务过程所做的修改 使得修改可以被其它事务访问 Abort: 结束一个事务 取消事务过程所做的所有修改,(2)事务的启动、提交与终止,Begin,Commit,Abort,(3)事务的类别 平坦的事务与嵌套的事务,平坦事务:Flat Transactions,Main Transaction,Call,Call,Call,Commit,Begin Trans.,Begin Trans.,Commit,Begin Trans.,Commit,Begin Trans.,Commit,嵌套事务:Nested Transactions,(4)事务的支持机制单机环

9、境下:并发控制(2PL)多机环境下:全局控制(分布式事务:2PC),三、并发控制,1、概述 2、两阶段锁(Two Phase Locking :2PL) 3、乐观并发控制(Optimistic Concurrency Control) 4、比较(Comparison),并发控制的途径有哪些?,可串行化(Serializability) 避免死锁(Deadlock Freedom) 公平(Fairness) 并发粒度(Degree of Concurrency) 复杂度(Complexity),1、概述,评价并发算法的准则,2、两阶段锁,应用最广泛的并发控制技术 RDBMSs (Oracle,

10、Sybase, DB/2, etc.) ODBMSs (O2, ObjectStore, Versant, etc.) Transaction Monitors (CICS, etc) 并发过程需要对共享的资源进行加锁控制 如果锁操作与当前资源的状态不冲突,可以得到锁控制 两阶段锁机制保证操作的可串行化,锁是一个标记,标明一个进程正在以某种模式访问一个资源 最小的锁模式为:读、写 锁被用来指示多个并发进程对某一资源的当前使用状态,加锁:Locking,进程在访问共享的资源之前,必须获得所有的锁在访问共享的资源之后,必须释放所有的锁 2PL: 进程一旦开始释放锁,它再不能获取其它的锁 一个典型的

11、 2PL 加锁过程为:,所获得的锁 的数目,时间,两阶段提交的过程是怎样的?,锁的兼容性,进程是否能够获得锁取决于所请求的锁是否与资源目前的锁状态(其它进程已请求的锁)兼容 兼容性由锁兼容性矩阵决定 最小的锁兼容性矩阵:,Read,Write,Read,+,-,Write,-,-,锁冲突,如果所请求的锁与资源的锁状态不兼容,则不能获得锁请求的锁 这被称为“锁冲突” 处理锁冲突的方法有: 强迫请求进程等待,直到冲突的锁被释放 告诉请求进程,无法获得所请求的锁,死锁,2PL 可能导致死锁状态 在该状态下,多个进程分别获取部分所需的资源,并互相等待其它进程释放资源 死锁必须通过终止一个或多个相关的进

12、程才能得到解决 这需要被终止的进程放弃它们已经进行的所有操作 解决死锁的核心在于避免死锁,锁粒度,2PL适用于任意粒度的资源 并发程度高的进程将需要小粒度的锁机制 小粒度的锁机制将导致需要较大数目的锁实现 这将导致系统开销的增加 因此,在实现具体系统时,需要在并发度与锁开销之间进行权衡 层次锁是其中的一种折中方案,层次锁,用于内部包含其它内容的资源 例如: 文件 (包含多条记录) 集合或序列 (包含对象) 锁状态增加了 intention read (IR) 与intention write (IW)用于标识资源祖先的状态 锁的兼容性:,R,w,IR,IW,R,+,-,+,-,w,-,-,-,

13、-,IR,+,-,IW,-,-,+,+,+,+,锁的透明性,谁请求锁? 并发控制基础设施 构件的实现体 构件的客户 第一种情形很好,但不易实现: 基础设施必须管理所有资源 基础设施必须掌握所有对资源的访问 最后一种情形是不期望的、需要避免的!,3、乐观并发控制,2PL的复杂度与被访问资源的数目呈线性关系 如果冲突发生的概率较小时,开销偏大 乐观并发控制的思路是: 进程首先修改资源状态的(逻辑)副本 验证并发进程之间的冲突 如果没有冲突:写回副本 否则:取消所有修改并重新开始,4、比较,共性: 都保证可串行化 需要一个取消过程 两阶段锁: 锁开销较大 可能出现死锁 在易于冲突时工作得好 乐观控制

14、: 冲突概率小时开销小 不会出现死锁 在分布式系统种冲突集合得计算复杂 时间同步开销较大,四、分布式事务,1、基本概念2、两阶段提交,1、基本概念,分布式事务 是涉及多个服务器(结点)的事务例如:在不同银行之间进行转帐!,事务是一系列操作它们 或者全部完成或者全部不做,单机环境:,多机环境:,处理逻辑,单机控制机制,处理结点,单阶段提交(不加控制):客户直接向各结点发出提交命令如果某一结点提交失败则重复提交命令 不足:客户发出命令时,结点无权力终止事务,问题:如何保证参与事务的各个结点皆正确提交(Commit)?,解决方式: 基于单结点的并发控制机制(每个结点保证本结点操作的事务性)提供两阶段

15、提交(two-phase commit)机制,与分布式事务相关的分布式系统组成部分 可以被划分为如下三种角色: 事务性客户( Transactional Client ) 事务性服务器( Transactional Server ) 协调器( Coordinator ),事务性服务器,事务性客户,协调器,事务性客户,仅通过协调器获取与事务相关的具体操作内容 通过访问协调器 进行 事务的启动与提交动作 事务的实现 对于事务性客户是透明的 对于事务性客户而言,一个服务器是否是事务性的是透明的,分布式事务的启动者与提交者,事务性服务器,每个事务性服务器在事务协调器的控制下访问、修改 资源 事务性服务

16、器必须能随时访问协调器 事务性服务器必须在事务启动时向协调器注册以便于协调器进行控制 事务性服务器必须实现事务协议(两阶段提交协议),分布式事务具体操作的执行者,协调器,实现分布式事务的关键部件 分布式事务协调者负责处理事务的“开始”、“提交”以及“终止”操作 分布式事务协调器需要定位事务标识 不同的事务可以拥有不同的分布式事务协调器,分布式事务执行的控制者,Phase one: 投票(Voting)Phase two: 完成(Completion),2、两阶段提交,Phase One,投票阶段 协调器询问各服务器是否能够(愿意)进行提交操作? 各个服务器回应:Yes: 表明可以根据指令进行提

17、交但尚不知道是否真的将执行提交动作No: 表明终止当前的操作 因此:服务器可以 单方面地终止一个事务但不能单方面地提交一个事务,Phase Two,完成阶段 协调器收集投票,并决策: 如果每个服务器皆投 Yes,则进行提交 如果任何一个服务器投 No,则进行终止 所有投 Yes 的服务器将接受到:DoCommit 命令,如果事务将被提交Abort命令,如果事务不能被提交 各服务器提交自己包含的事务操作并对“DoCommit ”命令给予回复(HaveCommitted),服务器的不确定时期,服务器在投“Yes”票后,处于能够提交,但不清楚是否必须提交的状态 该时间段被称为server uncer

18、tainty期 通常该时间段很短 协调器从接受到处理各投票的时间段 仍然可能存在故障(小概率事件),导致系统发生错误,两阶段提交的恢复,2PC启动(各服务器开始投票)之前发生的任何故障将导致“终止” 协调器在“提交决策”之前发生错误将导致“终止” 在该时刻之后(进行“提交决策”)发生故障,协调器将重启动(该过程中协调器保存了事务参与者的信息),然后,重新对所有提交消息进行决策 如果在投票之后、提交之前发生故障,服务器将在重新启动后,通知协调器重新计算投票结果 如果提交之后、回复之前发生故障,服务器将在重新启动后,向协调器发送 HaveCommitted 消息,Coordinator,serve

19、r,step status,step status,prepared to commit (uncertain),Prepared to commit (waiting for votes),committed,committed,done,1,2,3,4,Can commit?,yes,DoCommit,HaveCommitted,两阶段提交的过程:,五、CORBA 事务服务模型,支持平坦事务及嵌套事务参与角色:Transactional Client Transactional ServerTransactional Object 集合Recoverable ServerRecoverab

20、le Object 集合至少包含一个可以进行注册的资源 Transaction Service控制事务的边界收集参与者的信息协调事务的完成,Transaction Service,Transactional Client,Transactional Server,Recoverable Server,Transactional Object,Resource,Transactional Operation,Transactional Operation,begin or end transaction,not involved in transaction completion, may fo

21、rce rollback,registers resource in transaction completion, may force rollback,Participates in transaction completion,Transaction context,IDL Interfaces,Transaction Service,Transaction context,transaction originator,recoverable server,与线程关联,与线程关联,Transaction context,Transaction context,Current,Transa

22、ctionFactory Control Terminator,Current,Control Coordinator RecoveryCoordinator,Resource SubtransactionAwareResource Synchronization,interface Current void begin() raises (.);void commit (in boolean report_heuristics)raises (NoTransaction, HeuristicMixed,HeuristicHazard);void rollback() raises(NoTra

23、nsaction);Status get_status();string get_transaction_name();Coordinator get_control();Coordinator suspend();void resume(in Coordinator which) raises(InvalidControl); ;,interface Coordinator Status get_status();Status get_parent_status();Status get_top_level_status();boolean is_same_transaction(in Co

24、ordinator tr);boolean is_related_transaction(in Coordinator tr);RecoveryCoordinator register_resource(in Resource r) raises(Inactive);void register_subtran_aware(in SubtransactionAwareResource r)raises(Inactive, NotSubtransaction);. ;,interface Resource Vote prepare();void rollback() raises(.);void

25、commit() raises(.);void commit_one_phase raises(.);void forget(); ;interface SubtransactionAwareResource:Resource void commit_subtransaction(in Coordinator p);void rollback_subtransaction(); ;,六、JAVA 事务服务,1、EJB事务模型 2、JTA 3、EJB事务情景 4、构件提供者的责任 5、应用系统装配者的责任 6、容器提供者的责任,1、EJB事务模型,EJB模型中的分布式事务服务涉及5个部分:事务管

26、理器:transaction manager应用服务器:application server资源管理器:resource manager应用系统: application program通讯资源管理器: communication resource manager通过实现相互之间的接口它们共同完成事务过程,事务管理器 提供的服务与管理功能包括:事务声明事务性资源管理同步事务上下文传播 应用服务器 (或者是传统的 TP monitor) 提供事务处理的基础设施以支持 应用的运行环境(包括事务语句管理)这样一个应用服务器的例子是EJB server,资源管理器 (通过一个资源适配器) 提供应用对资

27、源的访问 资源管理器实现一个事务资源接口事务管理器通过该接口进行 事务关联事务完成及 事务恢复 工作这样一个资源管理器的例子是一个关系数据库服务器,事务性应用系统依赖于应用服务器提供的事务属性声明来提供事务管理支持 这样一个应用系统的例子是利用EJB构件体系结构开发出来的应用系统 一些独立的Java 客户程序也希望通过使用由 应用服务器或事务管理器 提供的高层接口声明事务边界 通讯资源管理器向进入、发出的请求提供 事务上下文传播及访问事务服务 等功能,JTA 与 JTS,Java Transaction API (JTA) 是一个事务管理器 与参与分布式事务处理的其他部分例如:应用系统资源管理

28、器应用服务器 等之间的接口规范Java Transaction Service (JTS) API 是CORBA OTS规范的一个实现提供了在服务器之间利用IIOP传播事务上下文的互操作例如,一个EJB 服务器厂商可以使用一个 JTS实现 作为低层的事务管理器 EJB 体系结构不要求EJB 容器支持JTS 接口EJB 体系结构要求EJB 容器支持JTA 接口,JTA与JTS的关系是什么?,2、JTA,Java Transaction API 包含三部分:一个高层应用系统事务声明接口: UserTransaction 由事务性客户使用一个高层事务管理器接口TransactionManager T

29、ransaction Synchronization由应用服务器使用一个标准的X/Open XA 协议的JAVA 实现XAResource 由事务性资源管理器使用,UserTransaction 接口,UserTransaction 接口向应用系统提供控制事务边界的能力 可被Java 客户程序或者EJB 构件使用其中,begin 方法 启动一个全局性事务并将事务与调用者线程关联transaction-thread关联 由事务管理器透明地管理,public interface javax.transaction.UserTransactionpublic abstract void begin(

30、);public abstract void commit();public abstract int getStatus();public abstract void rollback();public abstract void setRollbackOnly();public abstract void setTransactionTimeout(int seconds); ,interface javax.transaction.Statuspublic final static int STATUS_ACTIVE;public final static int STATUS_COMM

31、ITTED;public final static int STATUS_COMMITTING;public final static int STATUS_MARKED_ROLLBACK;public final static int STATUS_NO_TRANSACTION;public final static int STATUS_PREPARED;public final static int STATUS_PREPARING;public final static int STATUS_ROLLEDBACK;public final static int STATUS_ROLLI

32、NG_BACK;public final static int STATUS_UNKNOWN; ,下面的代码段展示了一个构件管理事务的会话构件对UserTransaction 的使用/ In the session beans setSessionContext method,/ store the bean context in an instance variableSessionContext ctx = sessionContext;/ somewhere else in the beans business logicUserTransaction utx = ctx.getUser

33、Transaction();/ start a transactionutx.begin();.do work/ commit the mit();,EJB服务器 中对 UserTransaction 的使用,如果应用服务器支持由事务性客户执行的事务声明应用服务器必须支持客户程序通过JNDI方式获得 UserTransaction 对象应用一个通过系统属性获得 UserTransaction 名字字符串的例子为:/ get the system property value configured by administrator String utxPropVal = System.getPr

34、operty(“jta.UserTransaction”); / use JNDI to locate the UserTransaction object Context ctx = new InitialContext(); UserTransaction utx = (UserTransaction)ctx.lookup(utxPropVal); / start transaction work utx.begin();do work mit();,事务性客户中对 UserTransaction 的使用,TransactionManager 接口,TransactionManager 接

35、口允许应用服务器根据被管理应用系统的需求控制事务边界例如:EJB容器为事务性EJB构件 管理事务状态 容器利用 TransactionManager 接口 声明事务边界事务管理器将与线程关联的事务上下文作为其内部数据结构的一部分 进行维护线程的事务上下文 或者为空或者指向一个全局事务 多个线程可能同时与同一个全局事务关联,interface javax.transaction.TransactionManagerpublic abstract void begin();public abstract void commit();public abstract int getStatus();p

36、ublic abstract Transaction getTransaction();public void resume(Transaction tobj);public abstract void rollback();public abstract void setRollbackOnly();public abstract void setTransactionTimeout(int seconds);public abstract Transaction suspend() ; ,Transaction 接口应用于 与目标对象关联的事务 的操作当事务被创建时每个全局事务皆被与一个事

37、务对象关联事务对象可被用于: 注册事务涉及的事务性资源 注册事务同步回调函数 提交或者卷回事务 获得事务的状态,Transaction 接口,由应用服务器进行资源登记的目的在于: 通知 事务管理器 资源管理实例参与该全局事务这允许事务管理器通知参与的资源管理器有关所执行工作的信息 使事务管理器将每个事务使用的资源进行分组使事务管理器引导事务管理器与资源管理器之间的两阶段提交事务协议,interface javax.transaction.Transactionpublic abstract void commit();public abstract boolean delistResource

38、(XAResource xaRes, int flag);public abstract boolean enlistResource(XAResource xaRes);public abstract int getStatus();public abstract void registerSynchronization(Synchronization sync);public abstract void rollback();public abstract void setRollbackOnly(); ,synchronization 接口允许应用服务器在事务提交之前与之后的时刻获得从事

39、务管理器发来的通知 对于每次事务启动,应用服务器都可能注册一个事务 Synchronization 回调将被事务管理调用的对象: beforeCompletion 方法在两阶段提交之前被调用该方法在即将被提交的事务的上下文中执行 afterCompletion 方法在两阶段提交之后被调用事务的状态以参数的方式被提供,interface javax.transaction.Synchronizationpublic abstract void beforeCompletion(); public abstract void afterCompletion(int status); ,XAReso

40、urce 接口,.XAResource 接口是基于X/Open CAE规范的XA 接口的Java 实现XAResource 接口定义资源管理器与 事务管理器在分布式事务处理环境之间的契约一个资源管理器的资源适配器实现XAResource 接口以支持 全局事务与事务资源的关联例如一个与关系数据库的连接,public interface javax.transaction.xa.XAResourcepublic abstract void commit(Xid xid, boolean onePhase);public abstract void end(Xid xid, int flags);p

41、ublic abstract void forget(Xid xid);public abstract int getTransactionTimeout();public abstract boolean isSameRM(XAResource xares);public abstract int prepare(Xid xid);public abstract Xid recover(int flag);public abstract void rollback(Xid xid);public abstract boolean setTransactionTimeout(int secon

42、ds);public abstract void start(Xid xid, int flags); ,3、EJB事务情景,对多个数据库的更新,包含消息与数据库更新的事务,通过多个EJB服务器进行的数据库的更新,客户管理的事务声明,容器声明的事务声明,4、构件提供者的责任,Bean-managed 与 container-managed,当设计一个企业级构件时构件提供者必须决定由构件在业务方法中声明事务(构件管理的事务声明)还是由容器根据部署描述中的事务属性声明事务(容器管理的事务声明)一个会话构件或者消息驱动的构件可以 被设计为bean-managed 的事务声明或者 被设计为contai

43、ner-managed 事务声明但同时只能是其中的一个一个实体构件必须总是被设计为container-managed 事务声明,利用 bean-managed 事务声明的构件,一个有态构件实例可以 但不必须在业务方法返回前提交一个启动的事务如果一个事务在业务方法结束时还没有被提交容器保持事务与实例之间的关联直到实例最终完成事务一个无态构件必须在事务方法返回前提交一个事务一个消息驱动的构件必须在onMessage方法返回前提交一个事务,public class MySessionEJB implements SessionBean EJBContext ejbContext;public voi

44、d someMethod(.) javax.transaction.UserTransaction ut;javax.sql.DataSource ds1, ds2;java.sql.Connection con1, con2;java.sql.Statement stmt1, stmt2;InitialContext initCtx = new InitialContext();/ obtain con1 object and set it up for transactionsds1 = (javax.sql.DataSource)initCtx.lookup(“java:comp/env

45、/jdbc/Database1”);con1 = ds1.getConnection();stmt1 = con1.createStatement();/ obtain con2 object and set it up for transactionsds2 = (javax.sql.DataSource)initCtx.lookup(“java:comp/env/jdbc/Database2”);con2 = ds2.getConnection();stmt2 = con2.createStatement();,例子:,ut = ejbContext.getUserTransaction(

46、); / start the transaction ut.begin(); / Do some updates to both con1 and con2. The Container / automatically enlists con1 and con2 with the transaction. stmt1.executeQuery(.); stmt1.executeUpdate(.); stmt2.executeQuery(.); stmt2.executeUpdate(.); stmt1.executeUpdate(.); stmt2.executeUpdate(.); / co

47、mmit the transaction mit(); / release connections stmt1.close(); stmt2.close(); con1.close(); con2.close(); . ,public class MySessionEJB implements SessionBean EJBContext ejbContext;public void someMethod(.) java.sql.Connection con1, con2;java.sql.Statement stmt1, stmt2;con1 = .;con2 = .;stmt1 = con

48、1.createStatement();stmt2 = con2.createStatement();stmt1.executeQuery(.);stmt1.executeUpdate(.);stmt2.executeQuery(.);stmt2.executeUpdate(.);stmt1.executeUpdate(.);stmt2.executeUpdate(.);/ release connectionscon1.close();con2.close(); . ,利用 container-managed 事务声明的构件,5、应用组装者的责任,事务属性一个事务属性是与会话构件或实体构件的

49、remote接口或home接口中方法或者消息驱动构件的 onMessage接口中方法关联的一个值 事务属性指定了当客户调用一个方式时容器如何管理方法的事务事务属性 可以由构件提供者声明也可以由应用系统组装者声明, 会话构件:remote 接口(及其直接或间接的超级接口)定义的方法 除了:javax.ejb.EJBObject 接口中的方法不能为会话构件home接口中的方法 指定事务属性实体构件: remote 接口(及直接或间接的超级接口)定义的方法 除了getEJBHome, getHandle, getPrimaryKey, 及 isIdentical 方法home 接口(及其直接或间接超级接口)定义的方法除了getEJBMetaData 与getHomeHandle 方法消息驱动构件:onMessage方法,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报