Shark让更多的人联想到了XPDL,而忘了OMG的一些东东。
Shark不仅支持XPDL,而且还扩展了OMG's Workflow Management Facility Specification 。
所以你会在Shark中见到 WfExecutionObject,WfRequester等等让你并不是非常明白的类。
如果研究Shark,那么首先可以花费一些时间将 wfmopen 这个引擎研究一下。两者没有什么必然的联系,只是wfmopen简单一些,其中给出了一些omg core对象的关系和说明,而shark却很少提及。
WfMOpen is a J2EE based implementation of a workflow facility (workflow engine) as proposed by the Workflow Management Coalition (WfMC) and the Object Management Group (OMG).
The workflow component is based on a set of JAVA interfaces that define an API for a workflow management facility. The basic "omgcore" interfaces follow OMG's Workflow Management Facility Specification, V1.2 very closely, while making some modifications to adapt the CORBA service to the established design practices for a Java API.
下面这张图,很值得推敲。
http://wfmopen.sourceforge.net/userapi/de/danet/an/workflow/omgcore/doc-files/domain.gif
这个中的关系弄明白了,对shark的核心的类关系,也就大致了解了。
在下面这篇文档中,有这几个类的简要介绍:
http://www-db.stanford.edu/CHAIMS/Doc/RelatedWork/SWAP_jFLOW_CS446/paper.htm
其中还稍稍提及了流程实例的应该如何创建,看完以后,对你明白shark的流程创建非常有帮助。从这一点上你需要明白,shark的很多设计思想,是基于OMG规范的。
不过,在shark中,有client和internal之分。
下面的代码摘自WfProcessWrapper中创建流程实例的一段,为了看得直接,有删节:
public WfProcess create_process (SharkTransaction t,WfRequester requester) {
WfProcessMgrInternal mgr=WfProcessMgrWrapper.getProcessMgrImpl(t,name);
WfRequesterInternal req=
SharkEngineManager.getInstance().getObjectFactory().createDefaultRequester(userAuth);
WfProcessInternal procInternal=mgr.create_process(t,req);
WfProcess proc=
SharkEngineManager.getInstance().getObjectFactory()
.createProcessWrapper(userAuth,procInternal.key(t));
return proc;
}
Shark的org.enhydra.shark.api.client.wfmodel 包类似于wfmopen中的de.danet.an.workflow.omgcore ,是对omg的核心类的接口定义。
但是Shark却还有内部重要的api接口:org.enhydra.shark.api.internal 包。