非CORBA独立持久对象参与事务及工作流建模新技术
立即解锁
发布时间: 2025-08-18 00:54:18 阅读量: 2 订阅数: 17 

### 非CORBA独立持久对象参与事务及工作流建模新技术
在当今的软件开发领域,事务处理和工作流建模是两个至关重要的方面。事务处理确保数据的一致性和完整性,而工作流建模则帮助我们清晰地描述业务流程的执行逻辑。下面将详细介绍非CORBA独立持久对象参与事务的新技术以及基于有色Petri网的工作流建模方法。
#### 非CORBA独立持久对象参与事务
在事务处理中,资源对象(Resource object)在特定事务中的职责取决于其投票方式。若资源对象回复“VoteCommit”,除了常规功能外,还需记录IPO影子对象(IPO shadow object)。这些影子对象可以像持久对象一样存储在持久对象存储中。
当资源对象调用“WriteShadowObject”时,IPO接口会将“ShadowId”及其相关的“ObjectId”导入到匹配表(MatchTable)中。在提交阶段,匹配表的条目用于查找主持久对象标识符(ObjectId)。
在接收到所有资源的投票后,协调器(coordinator)会决定是提交还是回滚事务,并将决定结果发送给各个资源。对于IPO对象而言,如果接收到提交消息,它会将IPO影子对象复制到稳定存储中的主IPO对象上;若接收到回滚消息,则无需对IPO对象进行任何操作,只需移除在准备阶段记录的IPO影子对象。
为了验证该方案的可行性,在Visibroker上实现了一个支持IPO参与事务的原型OTS(Object Transaction Service)。以银行应用为例,每个银行服务器都有一个账户管理器(AccountManager),负责创建账户对象(Account object)。账户对象是持久且可恢复的对象,以下是相关的IDL代码:
```idl
module Bank {
interface Account :: Resource {
float Balance ();
Void WithDraw (in float amount);
Void Deposit (in float amount);
};
interface AccountManager {
Account Open (in string coordinatorreference, in string name);
Void EndWork (in string name);
};
};
module TransactionManager {
interface Coordinator{
…
Void RegisterResource (in Bank:: Account account);
…
};
};
```
在这个例子中,客户端首先向事务服务发起事务请求,然后向账户管理器请求创建账户A和账户B。客户端会调用账户A的“WithDraw”方法和账户B的“Deposit”方法,最后发起提交请求。此时,协调器会启动并执行两阶段提交(2PC)协议。
与其他基于OTS的实现相比,该方案具有诸多优势:
- 持久对象无需承担XA开销。
- 事务管理器无需了解Redo - Undo机制。
- 摆脱了日志开销,例如在Redo - Undo方法中,对于n字节大小的数据,至少需要3n字节存储在日志中(包括数据本身、后像和前像)。
- 记录事务结果前的恢复过程非常简单,无需额外工作;记录结果后,只需将影子对象复制到稳定存储中的真实持久对象上。
- IPO接口层是一个接口,因此该方案可以在持久对象存储层部署任何对象持久化机制,例如Total - e对象状态存储机制。
#### 工作流建模
工作流建模旨在将业务流程的逻辑转化为形式化表示。传统的基于Petri网的建模方法在学术界较为流行,但存在建模困难和结构复杂的问题,实用性欠佳。因此,引入了一种基
0
0
复制全文
相关推荐








