基于Jini的工作流与软件代理技术解析
1. 工作流系统核心组件——邮件事件处理程序
MailEventHandler是客户端监听器,由登录工作流系统用户的客户端用户界面注册。当写入与连接到系统的用户ID匹配的StarEntry时,它会接收通知。以下是MailEventHandler类的代码:
package org.jworkplace.mailbox;
import java.rmi.RemoteException;
import java.rmi.RemoteEventListener;
import java.rmi.MarshalledObject;
import java.rmi.server.UnicastRemoteObject;
import net.jini.core.event.UnknownEventException;
import net.jini.core.event.RemoteEvent;
import org.jworkplace.workflow.WorkProcessManager;
import org.jworkplace.workflow.Resource;
import org.jworkplace.workflow.Activity;
import org.jworkplace.workflow.WorkItemModel;
import org.jworkplace.workflow.Task;
public class MailEventHandler extends UnicastRemoteObject implements
RemoteEventListener {
private EventView view;
private WorkItemModel model;
public MailEventHandler(EventView view, WorkItemModel model)
throws RemoteException
{
this.view = view;
this.model = model;
}
public synchronized void notify(RemoteEvent event)
throws UnknownEventException,
RemoteException
{
// the marshalled object contains the user id
try {
MarshalledObject object = event.getRegistrationObject();
String worker = (String)object.get();
// get the tasks assigned
Task[] items = model.getTasksAssigned(worker);
// update the user display
view.callback(items);
} catch (Exception e) { e.printStackTrace(); }
}
}
在 notify 方法中,它会从事件的注册对象中获取用户ID,然后通过 WorkItemModel 获取分配给该用户的任务,并更新用户界面显示。
2. 内容管理工作流示例
以在Web上发布医疗保健内容的流程为例,该流程定义涉及多个活动,每个活动都为发布过程添加了特定的内容审批标准和质量控制。
- 创建流程定义 :流程定义名为“Health Care Content Publishing”,由内容管理员拥有。在流程定义用户界面中创建和分配工作项,可提供简短描述性说明,并记录计划的开始和完成时间。创建流程面板提供导出功能,将流程发布到 WorkflowService 。
- 日程安排显示 :日程安排显示展示了流程中定义的所有工作项、计划的开始和结束时间以及分配的资源。默认时间显示为凌晨12:00,但任务可以在任何时间尺度上安排开始和完成。
- 任务分配显示
- 作者任务分配 :作者连接到 EventMailbox 管理器并接收任务分配,状态列显示发布过程中分配给作者的两个任务尚未开始。作者通过选择“Activate”按钮表示任务开始,完成任务后选择“Complete”按钮,这会触发对远程工作流服务的更新。
- 编辑者任务分配 :作者完成第一个活动后,编辑者的显示会立即反映状态变化,编辑者的审核任务变为可用。
3. 软件代理概述
随着互联网的普及,软件代理技术应运而生,用于组织和解释互联网上大量可用的信息。同时,电子商务的发展也推动了软件代理技术的进步,新型软件代理旨在提高电子市场和交易所的交易效率。
Jini和JavaSpaces为构建代理框架提供了基础,具有以下优势:
|优势|描述|
| ---- | ---- |
|软件移动性|开箱即用的软件移动能力|
|分布式存储|使用JavaSpaces进行分布式存储|
|分布式事件通信|支持使用分布式事件进行代理通信|
|信息与服务查找|提供查找信息、服务和代理的框架|
|事务支持|支持使用两阶段提交协议的事务|
|加密通信|具备使用加密通道进行通信的能力|
4. 简单代理框架
关于什么是代理以及它与其他软件程序的区别,一直存在很多讨论。研究人员通过多种方式对软件代理进行分类:
|分类方式|具体类型|
| ---- | ---- |
|角色分类|搜索代理、导航代理、管理代理、特定领域代理、开发和帮助代理等|
|特性分类|智能代理、协作学习代理、协作代理和接口代理|
代理与普通软件程序的区别还体现在以下特性上:
- 学习能力 :软件程序无需重新编程即可获取知识的能力。
- 目标导向 :软件程序能够接受期望结果的指令,并确定所达到结果的准确性。
- 社区协作 :软件能够与其他软件进行通信,以模拟知识获取和目标导向行为。
5. 移动代理与个人助理
- 移动代理 :自主代理通常可以代表用户行动,并具有学习和与环境协作的能力。移动代理可以跨机器和网络移动以执行任务。Jini通过可下载的代理支持代码在机器间移动,为移动代理提供了基础。可以通过RMI接口语义快速定义远程代理和移动代理的接口,例如:
public interface RemoteAgent extends java.rmi.Remote {
public void tell(Sender sender, Receiver receiver, Content
content)
throws RemoteException;
}
public interface MobileAgent extends java.io.Serializable {
public void tell(Sender sender, Receiver receiver, Content
content)
throws RemoteException;
}
- 个人助理 :个人助理是一种半自主为用户服务的软件代理,可完成管理用户日历、过滤和排序电子邮件、管理活动和任务、定位和交付信息、购买物品以及规划旅行等任务。例如,麻省理工学院媒体实验室的Henry Lieberman开发的Web浏览代理Letizia,结合了界面代理和自主代理的特点,帮助用户浏览Web内容。
6. 示例流程控制代理
流程控制代理类似于个人助理,用于监控任务进度并通过通知消息提醒用户。它展示了 LeaseRenewalService 作为资源监控框架和JavaSpaces作为分布式通信平台的应用。
graph LR
A[WorkflowService] -->|写入ProcessEntry| B(JavaSpaces)
C[AgentService] -->|注册ProcessListener| B
B -->|触发通知| C
C -->|创建LeaseRenewalSet| D(LeaseRenewalService)
D -->|设置过期警告监听器| E(LeaseRenewalSet)
E -->|过期触发事件| C
- 监控流程和任务定义 :当定义新流程时,
WorkflowService会将ProcessEntry写入JavaSpaces。AgentService创建一个流程监听器,当有新流程定义时,监听器会将通知事件委托给AgentService,后者创建关联的流程监视器。
package org.jworkplace.workflow;
import java.rmi.RemoteException;
import net.jini.entry.AbstractEntry;
import com.sun.jini.proxy.UUID;
public class ProcessEntry extends AbstractEntry implements
ActivityState {
public UUID processId;
public ProcessEntry() { this(null); }
public ProcessEntry(UUID processId) {
this.processId = processId;
}
public void start() throws RemoteException { }
public void terminate() throws RemoteException { }
public void suspend() throws RemoteException { }
public void resume() throws RemoteException { }
}
- 监控流程和任务完成 :
LeaseRenewalService可用于管理租约,并为监控工作流活动提供早期预警通知系统。LeaseRenewalSet是一种具有特殊语义的租约资源,通过设置过期警告监听器,可以在租约到期前触发远程事件。
public synchronized void notify(RemoteEvent event)
throws UnknownEventException,
RemoteException
{
try {
if(event instanceof ExpirationWarningEvent) {
ExpirationWarningEvent evt =
(ExpirationWarningEvent)event;
Lease lease = evt.getRenewalSetLease();
MarshalledObject handback = evt.getRegistrationObject();
}
} catch (Exception e) { e.printStackTrace(); }
}
AgentService 的 activateMonitor 方法用于检索 ProcessEntry 和关联的 ProcessDef ,设置租约过期时间,并创建租约更新集。 monitorAlert 方法根据注册的回传对象识别触发警告的流程和工作项,确定下一个要监控的工作项并更新关联的租约更新集。
综上所述,基于Jini的工作流和软件代理技术为企业提供了强大的协作和工作流处理能力,通过有效的任务分配、监控和通知机制,提高了工作效率和协作效果。同时,软件代理技术的发展也为企业在信息管理和决策支持方面提供了更多的可能性。
基于Jini的工作流与软件代理技术解析
7. 监控流程和任务定义的详细步骤
在监控流程和任务定义方面,有一系列具体的操作步骤,下面为详细说明:
1. 定义新流程 :当新流程被定义时, WorkflowService 会将 ProcessEntry 写入JavaSpaces。 ProcessEntry 类的代码如下:
package org.jworkplace.workflow;
import java.rmi.RemoteException;
import net.jini.entry.AbstractEntry;
import com.sun.jini.proxy.UUID;
public class ProcessEntry extends AbstractEntry implements
ActivityState {
public UUID processId;
public ProcessEntry() { this(null); }
public ProcessEntry(UUID processId) {
this.processId = processId;
}
public void start() throws RemoteException { }
public void terminate() throws RemoteException { }
public void suspend() throws RemoteException { }
public void resume() throws RemoteException { }
}
这个类继承自 AbstractEntry 并实现了 ActivityState 接口,主要用于存储流程的唯一标识符 processId 。
2. 创建流程监听器 : AgentService 会创建一个单一的流程监听器 ProcessListener ,并将其注册到JavaSpaces,用于接收流程条目写入的通知。
3. 触发通知 :当新流程定义时, WorkflowService 将 ProcessEntry 写入空间,此时 ProcessListener 的 notify 方法会被调用。
4. 委托通知事件 : ProcessListener 将通知事件委托给 AgentService , AgentService 会创建一个关联的流程监视器,用于提醒用户代理任务出现问题。
5. 移除条目与创建租约更新集 : AgentService 从JavaSpaces中移除 ProcessEntry ,并创建一个 LeaseRenewalSet 。通过调用 LeaseRenewalService 的 createLeaseRenewalSet 方法来创建,实现对每个流程的租约管理。
8. 监控流程和任务完成的详细机制
对于监控流程和任务完成, LeaseRenewalService 起到了关键作用,具体机制如下:
1. 使用 LeaseRenewalService 管理租约 : LeaseRenewalService 是一个辅助服务,可让Jini客户端和服务将租约更新职责委托给它。这样,服务在不使用时可以处于休眠状态,而不会丢失对资源的访问权限。
2. 设置过期警告监听器 : LeaseRenewalSet 本身是一个具有特殊语义的租约资源,通过调用其 setExpirationWarningListener 方法,可以设置一个远程事件监听器,在租约更新集租约到期前触发通知。以下是相关代码示例:
public synchronized void notify(RemoteEvent event)
throws UnknownEventException,
RemoteException
{
try {
if(event instanceof ExpirationWarningEvent) {
ExpirationWarningEvent evt =
(ExpirationWarningEvent)event;
Lease lease = evt.getRenewalSetLease();
MarshalledObject handback = evt.getRegistrationObject();
}
} catch (Exception e) { e.printStackTrace(); }
}
在这个代码片段中,当接收到 ExpirationWarningEvent 事件时,会获取租约和回传对象。
3. 生成过期时间 : LeaseRenewalSet 的过期时间设置为与流程定义中下一个工作项的完成时间一致。通过 AgentService 的 computeWarningTime 方法生成通知值,当租约更新集触发远程事件时,会调用 ProcessListener 的 notify 方法,进而调用 AgentService 的 monitorAlert 方法。
4. AgentService 的关键方法
- activateMonitor 方法 :用于检索 ProcessEntry 和关联的 ProcessDef ,设置租约过期时间,并创建租约更新集。代码如下:
public void activateMonitor(RemoteEvent event) {
try {
// get the process to monitor
ProcessEntry template = new ProcessEntry();
ProcessEntry entry = (ProcessEntry)
space.takeStar(template);
// get the process definition
ProcessDef processDef =
workflowManager.getProcessDef(entry.processId);
// get lease set renewal time
long renewalTime = getRenewalTime(processDef, 0);
// are there tasks to monitor for this process
if(renewalTime > 0) {
// create a lease set for this process
LeaseRenewalSet leaseRenewalSet =
leaseRenewalService.createLeaseRenewalSet(renewalTime);
// create the handback
MarshalledObject handback =
new MarshalledObject(new
AgentProcessControl(entry.processId));
// activate process monitor
setMonitor(leaseRenewalSet, computeWarningTime(),
handback);
// update the processMap
processMap.put(entry.processId, leaseRenewalSet);
}
} catch (Exception e) { e.printStackTrace(); }
}
- **`monitorAlert`方法**:根据注册的回传对象`AgentProcessControl`识别触发警告的流程和工作项,确定下一个要监控的工作项并更新关联的租约更新集。如果所有任务完成,则取消租约更新集的租约,并将流程从代理监视器中移除。
9. 总结与应用场景
基于Jini的工作流和软件代理技术结合,为企业提供了高效的协作和工作流处理解决方案。通过工作流系统的任务分配、监控和通知机制,以及软件代理的智能处理能力,可以在多个领域得到应用:
|应用领域|具体应用场景|
| ---- | ---- |
|医疗保健|在医疗内容发布流程中,实现内容审批、任务分配和进度监控,确保信息准确及时发布。|
|电子商务|优化订单处理、库存管理和客户服务流程,提高交易效率和客户满意度。|
|项目管理|对项目任务进行合理分配和监控,及时提醒项目成员任务进度,确保项目按时完成。|
通过合理运用这些技术,可以提高企业的工作效率、降低成本,并提升企业在市场中的竞争力。同时,随着技术的不断发展,基于Jini的工作流和软件代理技术也将不断完善和拓展,为更多领域带来创新的解决方案。
超级会员免费看
58

被折叠的 条评论
为什么被折叠?



