用Shark已经是很长时间了,Shark是一个很庞大的工作流引擎,内部集成了很多的功能组件,并且其源码也比较凌乱,如需重新的改造,为我们所用, 首先需要了解其内部的核心工作原理,并抽取与整理成属于自己的业务流引擎。以下是Shark的一些基本配置说明,转自网上,可以作为其初步的参考,很多的配置项,也正是说明了其对应的功能点。
Shark是什么?
Shark是完全基于WfMC[http://www.wfmc.org/standards/docs/if2v20.pdf]和OMG[http://www.omg.org/docs/formal/00-05-02.pdf]标准的工作流程引擎。
·它使用WfMC的工作流过程描述语言地址http://www.wfmc.org/standards/docs/TC-1025_10_xpdl_102520.pdf](XPDL)为工作流定义格式。
·In its standard kernel implementation[ly1] ,它是一个没有自己线程的类库,并且可以运行在许多不同的环境(WEB应用,swing应用,部署为CORBA服务,EJB容器)。我们的工程中有一个通过CORBA服务的Swing应用使用Shark的例子,也可以从JSP客户端应用。
·它是可配置的,提供了所有的内部接口,也可以被其它的实现替换完整的核心接口。
·它可以同时运行在多个虚拟机上(在集群环境)。
·它提供POJO接口,CORBA客户端应用程序通过提供的CORBA接口与部署的CORAB服务通信。[ly2]
·它可以配置使用定义在LDAP服务器上的组织结构(通过使用Shark用户组和认证组件的具体实现)。
·它不使用XPDL的扩展属性为执行角色。
·它接口允许外部事务通过(用在一些应用中),因此,客户端的事务能够工作。
·它使用DODS(Enhydra的OR/M工具),它几乎可以使用任何的数据库系统存储信息,并且很容易配置数据库与连接字符串标签(它有预订的数据库脚本,并且在那些数据库中用Enhydra的ETL工具自动创建适当数据库表)。
·它实现了WfMC定义执行自动活动工具的工具代理接口(Shark提供了几个有用的工具代理)。
·Shark可以使用自定的Java类(恰当的接口或抽象类)为流程变量。
启动Shark
Shark可以从客户端应用中首先配置然后获取一个实例启动它。如下是从应用中使用Shark的常用方式。
String confFilePath = “Shark.conf”;
Shark.configure(confFilePath);
Shark shark = Shark.getInstance();
通过Shark提供的接口可以做任何事。
如果你想通过CORBA接口使用Shark,首先你需要启动Shark CORBA服务(通过适当的运行脚本),然后你可以通过网络用Shark的CORBA API访问Shark(你可以用“runA”脚本启动Shark的管理应用体验一下)。通过“run”脚本启动服务器时,该计算机上的名称服务器自动启动。
Shark CORBA 服务器是Shark库的范例用法。
配置Shark
有四种不同的方式配置Shark:
1、 用configure()方法没有参数:
配置shark的配置文件仅仅来自于它的jar文件中。Shark被配置在默认设置方式下工作,没有许多内部API的特殊实现(例如:缓存,认证,用户组等等接口)。
2、 用configure(String filePath)方法:
该方法获取filePath字符串为文件路径创建File对象,并且调用configure(File configFile)方法运行下一步。
3、 用configure(File configFile)方法:
Shark首先基于它的jar文件中的配置文件属性做基本配置,然后从该文件细节中添加配置。如果配置文件定义与jar中的默认配置文件相同的属性,这些属性将覆盖默认的属性,来自于文件或属性集中的额外属性将被添加到Shark的配置中。你传递的实参配置文件不需要定义完整的配置,但是将重定义一些默认的配置参数(例如:engineName,ObjectFactoryClassName,….)和增加一些额外的配置参数(例如:AssignmentManagerClassName)。
4、 用configure(Properties props)方法:
该方法与上一个方法基本相同(事实上,上一个方法转换文件内容到Properties对象),但是提供给客户端应用可能使用Java Properties对象配置Shark的情况使用。
你可以使用配置不同的许多shark实例(你需要定义不同的配置文件或路径或者定义不同的Property对象)。如果你想在相同的数据库是使用多个Shark实例(多于一个的虚拟机),事实上你总是使用不同的配置“enginename”属性(同样,如果使用多个虚拟机,所有配置必须覆盖DODS缓存大小属性(必须设置为0),CacheManagerClassName属性将被删除)。因为流程同步执行,一个虚拟机平台上在一个流程上的操作Shark实例会加锁(根据“enginename”属性识别),因些在该加锁的Shark实例操作完成解锁之前其它的虚拟机是不可用的。
上面已经提到,Shark是可配置的引擎,并且它的所有组件,包括核心接口可以被一个自定义实现所替换。
通常配置Shark的方式是定义自定义的Shark.conf文件,在这个文件中你将描述如何配置Shark,通过Shark分发的标准Shark.conf文件简要地说明各项的意思:
设置Shark引擎名称参数
你可以编辑enginename属性设置shark实例名称。这里是为了配置该属性的Shark配置文件的一部份:
######################### NAME
# the name of shark instance - if shark is used in several VMs, this property
# MUST be different for each of them
enginename=Shark
如果shark部署到多个虚拟机使用相同的数据库,每个shark实例必须配置不同的engingname属性。这是非常生要的,因为流程锁。在一个线程中使用的流程同时不能在其它线程中使用,即使这些线程在不同的虚拟机上。流程锁是基于shark实例名称和流程ID。
设置分支条件不满足的行为
当然,这个参数仅仅表示该活动至少有一个分支转移。
这里是为了配置该属性的Shark配置文件的一部份:
######################### KERNEL SETTING for UNSATISFIED SPLIT CONDITIONS
# There can be a cases when some activity that has outgoing transitions other
# then to itself (other then circular one), has nowhere to go based on
# calculation of these conditions (all of the conditions are evaluated to false)
# In that case, the process could hang (it will not go anywhere, and it will
# also not finish), finish (if there is no other active activities), or
# the last transaction that finishes the activity will be rolled back.
# This settings apply to the block activity's activities also, but the difference
# is that if you set parameter to FINISH_IF_POSSIBLE, shark will actually
# finish block activity if possible.
# The possible values for the entry are IGNORE, FINISH_IF_POSSIBLE and ROLLBACK,
# and default kernel behaviour is FINISH_IF_POSSIBLE
#SharkKernel.UnsatisfiedSplitConditionsHandling=FINISH_IF_POSSIBLE
因此,有三个可能的方案描述,并且默认的方式是结束流程。
设置否则条件最后求值
XPDL定义中没有声明OTHERWISE类型转移条件仅仅在没有其它转移条件为真时执行(XOR分支情况)。因此,如果设置OTHERWISE类型转移条件为一些活动的第一个转移条件,那么其它的转移条件将不被执行。
你可以配置shark改变这种情况,所以OTHERWISE类型转移条件仅仅在没有其它转移条件为真时被计算和执行。
SharkKernel.handleOtherwiseTransitionLast=false
为任务创建设置核心参数
默认值为True,将创建任务。当任务创建不是必须的和总是用WfAactivity的change_state()方法执行活动时。
SharkKernel.createAssignments=true
因为这一个设置影响完全的引擎,你应该谨慎地考虑是否你正在访问的shark应用允许改变默认认定。
设置核心行为在shark引擎启动时重新评估任务
这个设置强制shark引擎重新评估任务在shark初始化期间。能够用下面的属性改变这种行为。
#Assignments.InitialReevaluation=false
如果设置这个属性的值为True,所有没有接受的任务将被重新评估(旧的任务将被删除,新的任务将基于当前的参与者映射,用户/用户组信息和AssignmentMananger接口的实现类创建)。
默认核心设置是不重新评估任务。
为任务处理设置核心参数
决定在某人接受/拒绝任务时是否从数据库中删除其它任务,并且第次重新评估任务。如果设置为true,副作用是有重分配并且用户获取重分配任务拒绝该任务之后他将不能再获取该任务。
SharkKernel.deleteOtherAssignments=true
Shark核心设置默认值为true。
设置核心行为在shark启动时填充缓存
如果你想在shark启动时填充它的流程和资源到缓存,你将从shark.conf配置文件中编辑下面项目:
#Cache.InitProcessCacheString=*
#Cache.InitResourceCacheString=*
如果你不注释上在的两行,所有的流程和资源将基于数据库数据进行创建并且填充到缓存中去(事实上,数量是受限于缓存大小的)。
这个属性值可以设置为以逗号分隔的在流程启动时需要放入缓存的流程/资源id列表,例如:
Cache.InitProcessCacheString=1_test_js_basic, 5_test_js_Game
Shark核心设置默认是不初始化缓存的。
为重新评估超期限制行为设置核参数
如果你想shark每次在外部超期管理超期检查时不重新评估超期,你将设置下面的参数为false(默认核心设置是true)。
#Deadlines.reevaluateDeadlines=true
决定重新评估超期时流程和活动上下文是否将使用。默认核心设置是使用活动上下文。
Deadlines.useProcessContext=false
决定是否异步超期仅仅被唤起一次,或者每次超期检查被执行时。默认核心设置为true(换起超期仅仅一次)。
Deadlines.raiseAsyncDeadlineOnlyOnce=true
为子流程锁设置核心参数
决定在子流程活动执行期间是否创建流程锁。在你执行打开线程的工具代理的情况和shark通信,这些情况(在XPDL中定义了自动执行子流程)锁是需要的。
SharkKernel.lockSubProcesses=false
默认核心设置为false。
为持久化历史事件审计数据设置核心和事件审计管理器
决定是否对历史事件审计数据进行持久化。默认是要持久化。这个属性值必须考虑shark核心与事件审计管理器。
PERSIST_OLD_EVENT_AUDIT_DATA=true
默认核心设置为true。
设置外部XPDL仓库文件夹
通过改变下面shark配置文件中的一部份你可以设置用于shark查找能够被装载到shark内存的XPDL文件的仓库位置。
######################## EXTERNAL REPOSITORY FOLDER SETTING
# Shark currently uses File system repository for holding XPDL definitions, and
# this is where you can specify location of this repository.
# If you want to specify it by relative path, you must know that this path must
# be relative to the Shark.conf file (in conf folder)
EXTERNAL_PACKAGES_REPOSITORY=repository/external
警告:Unix操作系统平台上,应用需要有写该文件夹的权限。
通过设置这个参数决定shark的XPDL仓库的位置。
外部XPDL仓库可以被客户端管理应用管理,XPDL文件(包)可以从该仓库中被添加或删除。该仓库中只有XPDL文件能够被装载到shark引擎,并且基于这些文件中的定义进行实例化流程。
为浏览LDAP服务器设置属性
如果你使用LDAP服务器保存组织结构,你可以配置shark使用我们的LDAP用户组和认证接口实现(),并且你必须定义一些LDAP属性。
此刻,shark用户组和认证接口支持LDAP的两类结构。第一种结构是标记类型为0,第二种结构标记类型为1。LDAP结构详细说明在Shark中的LDAP文件中(html[../ldap_structure/LDAP_structure.html]),pdf[../ldap_structure/LDAP_structure.pdf]。
你可以基于你的LDAP服务器配置设置这个属性,通过改变下面shark配置文件中的一部份:
######################### LDAP SETTINGS
# Shark can use LDAP implementation of Authentication and UserGroup interfaces,
# and these are settings required by these implementations to access and
# browse the LDAP server
LDAPHost=localhost
LDAPPort=389
# possible values for LDAPStructureType parameter are 0 and 1
# 0 is simple structure, the possibility that one group or user belongs to more
# than one group is not supported
# 1 is more complex structure that supports the possibility that one group or
# user belongs to more than one group is not supported
LDAPStructureType=1
LDAPSearchBase=
LDAPGroupObjectClasses=organizationalUnit
LDAPUserObjectClasses=inetOrgPerson
# parameter LDAPRelationObjectClasses is only needed for LDAPStructureType=1
LDAPRelationObjectClasses=groupOfNames
LDAPGroupUniqueAttributeName=ou
LDAPGroupDescriptionAttributeName=description
LDAPUserUniqueAttributeName=userid
# parameter LDAPRelationUniqueAttributeName is only needed for LDAPStructureType=1
LDAPRelationUniqueAttributeName=cn
# parameter LDAPRelationMemberAttributeName is only needed for LDAPStructureType=1
LDAPRelationMemberAttributeName=member
LDAPUserPasswordAttributeName=userpassword
LDAPUserRealNameAttributeName=cn
LDAPUserFirstNameAttributeName=givenName
LDAPUserLastNameAttributeName=sn
LDAPUserEmailAttributeName=mail
LDAPUser=sasaboy
LDAPPassword=s
# parameter LDAPGroupGroupsName is only needed for LDAPStructureType=1
LDAPGroupGroupsName=Groups
# parameter LDAPGroupUsersName is only needed for LDAPStructureType=1
LDAPGroupUsersName=Users
# parameter LDAPGroupGroupRelationsName is only needed for LDAPStructureType=1
LDAPGroupGroupRelationsName=GroupRelations
# parameter LDAPGroupUserRelationsName is only needed for LDAPStructureType=1
LDAPGroupUserRelationsName=UserRelations
·LDAPHost – 运行LDAP服务器的计算机地址
·LDAPPort – LDAP服务器能够被访问的端口
·LDAPStructoureType – 如果设置为0,简单结构用于不支持将一个组或用户分配到多个组,设置为1,复合结构用于不支持将一个组或用户分配到多个组。
·LDAPSearchBase – 上下文名称或对象搜索(这是所有查寻将开始的根LDAP模式)。
·LDAPGroupObjectClasses – 描述用户组的以逗号分隔的LDAP对象类列表。这些类必须有一个在LDAP树中唯一鉴别每个条目的属性值是很得要的。
·LDAPUserObjectClasses – 描述shark用户的以逗号分隔的LDAP对象列表。这些类必须有一个在LDAP树中唯一鉴别每个条目的属性值是很得要的。
·LDAPRelationObjectClasses – 只使用在结构类型为1中,描述shark用户与组或shark组之间的关系的用逗号分隔的LDAP对象类。这些类必须有一个在LDAP树中唯一鉴别每个条目的属性值是很得要的。
·LDAPGroupUniqueAttributeName – 描述用户组的LDAP对象类属性名称。属性值必须是唯一的为LDAP树中的每一个LDAP对象条目。
·LDAPGroupDescriptionAttributeName – 描述用户组的组描述的LDAP对象类属性名称。
·LDAPUserUniqueAttributeName – 描述用户的每个LDAP对象类的强制属性名称。在LDAP树中这些对象类的每个LDAP条目的属性值必须是唯一的。在shark使用LDAP为认证和用户组管理时,这个属性描述的名称将记录到shark。
·LDAPRelationUniqueAttributeName – 只用在结构类型为1,描述组或组和用户关系的每个LDAP对象类强制属性名称。
·LDAPRelationMemberAttributeName – 只用在结构类型为1,描述包含(用户或组)在关系中的成员的LDAP对象类(描述组或组与用户的关系)的属性名称。
·LDAPPasswordAttributeName – 描述用户的每个LDAP对象类强制属性名称。在shark使用LDAP为认证和用户组管理时,该属性描述的密码需要记录到shark中。
·LDAPUserRealNameAttributeName – 描述shark用户真实名称的LDAP对象类的属性名称。
· LDAPUserFirstNameAttributeName – 描述shark用户姓氏的LDAP对象类的属性名称。
·LDAPUserLastNameAttributeName -描述shark用户名的LDAP对象类的属性名称
·LDAPUser – 在LDAP服务器需要读信任时,这个用户名被用于连接LDAP服务器。
· LDAPPassword – 在LDAP服务器需要读信任时,这个密码被用于连接LDAP服务器。
·LDAPGroupGropusName – 只用在结构类型1,必须被创建的组定义名称,并且将包含所有的组。
·LDAPGroupUsersName – 只用在结构类型1,必须创建的组定义名称,并且将包含所有的用户。
·LDAPGroupGroupRelationsName – 只用在结构类型1,必须被创建组定义名称,并且将包含所有组之间的关系。
·LDAPGroupUserRelationName – 只用在结构类型1,必须创建组定义名称,并且将包含所有组和用户之间的关系。
设置核心的回调公用接口实现类
如何任何人想获取自己对CallbackUtilities接口的实现,他可以通过改变下面的属性做到:
######################### CALLBACK UTILITIES
# used for logging, and getting the shark properties
# the default kernel setting is as follows
#CallbackUtilitiesClassName=org.enhydra.shark.CallbackUtil
被使用的类型默认是注释的。
设置核心的对象工厂接口实现类
如果任何人想替换核心的一部份为自己的实现,他将基于这个接口创建自己的实现类,并且配置到Shark配置文件中使用它。
可以通过改变下面的shark配置文件中的一部份做到:
######################### OBJECT FACTORY
# the class name of the factory used to creating kernel objects
# the default kernel setting is as follows
#ObjectFactoryClassName=org.enhydra.shark.SharkObjectFactory
被使用的类型默认是注释的。
设置核心的工具代理管理器接口实现类
如果任何人想设置自己的工具代理管理器执行,将工具代理通信使用与标准实现不同的方式,他可以配置下面的参数:
######################### TOOL AGENT MANAGER
# the class name of the manager used to execute tool agents
# the default kernel setting is as follows
#ToolAgentManagerClassName=org.enhydra.shark.ToolAgentManagerImpl
在shark.conf中设置新的组件
ExpressionBuilderManager是Shark框架中新引进的组件。它的功能性只是没有适合任何的先前现有的。表达式构造者提供一个N层接口易于Wf*Iterator表达式构造.
ExpressionBuilderManagerClassName=org.enhydra.shark.ExpressionBuilderMgr
默认设置提供DODS兼容实现。
Wf-XML协同工作能力(WfMC接口4)引进另一个组件到shark.该组件主要任务是提供与其它引擎通过Wf-XML的连通性。
如果你不想部署Shark为Wf-XML服务,你可以保留这个注释,但是你想制造你的Shark引擎部署到其它通信(其它卖主的引擎),首先设置是托管的。其它两个是帮助这个组件到选择监听的IP地址或名称和端口。
WfEngineInteroperabilityManagerClassName=org.enhydra.shark.interoperability.WfXMLInteroperabilityImpl
Interoperability.Host=localhost
Interoperability.Port=8080
注意:[ly3] ,但我们不想包装完整的服务器,Shark使用SimpleAxisServer API文件清晰的表示:“这是一个HTTP服务器的简单实现为流程SOAP请示经过Apache的xml-axis.不想为产品使用,它想使用为演示,调试,和执行轮廓。”
数据库配置
这个shark配置文件片段是涉及到DODS数据持久化执行API。
在shark的分发中,我们为创建大部分数据库表提供DODS支持的SQL脚本,可以被Octopus用于创建提供了相应驱动器的数据库表的LoaderJob文件。这些文件可以在conf/sql文件夹中找到。
默认数据库使用HSQL,其它数据库设置被注释,下面是shark配置文件中设置的一部份:
#
# The jdbc driver to use, and Database url.
DatabaseManager.DB.sharkdb.JdbcDriver="org.hsqldb.jdbcDriver"
DatabaseManager.DB.sharkdb.Connection.Url="jdbc:hsqldb:C:/users/sasaboy/sdb/Shark/output/Shark/db/hsql/hsql"
DatabaseManager.DB.sharkdb.ObjectId.NextWithPrefix = true
DatabaseManager.DB.sharkdb.Connection.ShutDownString = SHUTDOWN
# DB2
#DatabaseManager.DB.sharkdb.JdbcDriver="COM.ibm.db2.jdbc.app.DB2Driver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:db2:shark"
# HypersonicSQL
#DatabaseManager.DB.sharkdb.JdbcDriver="org.hsqldb.jdbcDriver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:hsqldb:C:/users/sasaboy/Shark/output/Shark/db/hsql/hsql"
# Informix
#DatabaseManager.DB.sharkdb.JdbcDriver="com.informix.jdbc.IfxDriver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:informix-sqli://localhost/shark"
# MSQL
#DatabaseManager.DB.sharkdb.JdbcDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shark;SelectMethod=cursor"
# MySQL
#DatabaseManager.DB.sharkdb.JdbcDriver="org.gjt.mm.mysql.Driver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:mysql://localhost/shark"
# Oracle
#DatabaseManager.DB.sharkdb.JdbcDriver="oracle.jdbc.driver.OracleDriver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:oracle:thin:@localhost:1521:shark"
# PostgreSQL
#DatabaseManager.DB.sharkdb.JdbcDriver="org.postgresql.Driver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:postgresql://localhost/shark"
#DatabaseManager.ObjectIdColumnName=ObjectId
#DatabaseManager.VersionColumnName=ObjectVersion
# Sybase
#DatabaseManager.DB.sharkdb.JdbcDriver="com.ddtek.jdbc.sybase.SybaseDriver"
#DatabaseManager.DB.sharkdb.Connection.Url="jdbc:sybase://localhost/shark"
事实上你能够使用大部分的数据库,你也需要设置用户名和密码参数,通过更改下面shark配置文件中的一部份做到:
#
# Database user name. All connection are allocated by this user.
#
DatabaseManager.DB.sharkdb.Connection.User="sa"
# Database user password.
#
DatabaseManager.DB.sharkdb.Connection.Password=""
配置shark使用另一个数据库,你可以简单注释HSQL设置,并且释放编辑你想使用的数据设置,更改用户名和密码条目(也可以在工程中编辑configure.properties文件自动执行,并且调用配置脚本)。
有另一个重要的DODS配置方面 – 缓存大小:
#
# Default cache configuration
#
DatabaseManager.defaults.cache.maxCacheSize=100
DatabaseManager.defaults.cache.maxSimpleCacheSize=50
DatabaseManager.defaults.cache.maxComplexCacheSize=25
如果你了解用在多虚拟机上的shark多实例使用同一数据库的情况,你应该设置所有虚拟机上的缓存为0。与此相同,缓存管理器实现(在下文中将说明)将不被使用。
设置持久化组件可用数据模型
下列选项描述聚合,虽然他们影响不同的组件,选项的意图和影响发生是相同的。
决定存储在VARCHAR字段中的字符串最大长度。超过该长度的字符串将存储为BLOB数据类型。字符串最大长度可设置为4000(默认设置)。
DODSPersistentManager.maxVARCHARSize=4000
DODSEventAuditManager.maxVARCHARSize=4000
决定那种数据模型用于存储流程和活动变量。有两个选项:
1.标准数据模型,所有的数据类型存储到一张表中(包括存储自定义的Java对象和大字符串的BLOB数据类型);
2.可选数据模型,除BLOB数据类型以外的所有数据类型存储到一张表中,BLOB数据类型存储到另一张表中,并且只存储BLOB数据类型数据(自定义的Java对象和大字符串数据)。如果使用Oracle数据库,并且没有很多自定义Java对象和大字符对象和Shark与DODS的缓存都没有使用时该选项的性能是高效的。
默认使用标准数据模型,但使用可选数据模型可以改善没有许多自定义Java对象和大字符串对象并且shark和DODS缓存没有使用时的执行效率,特别是使用Oracle数据时效果更佳。
DODSPersistentManager.useStandardVariableDataModel=true
DODSEventAuditManager.useStandardVariableDataModel=true
设置应用程序映射持久化执行参数
该API用到存储XPDL应用程序与工具代理应用之间的映射信息。Shark自身提供DODS基本的应用程序映射持久化执行。
你可以提供自己的应用程序映射持久化接口实现,并且替换当前的实现。默认的实现是DODS。
#=============================================================================
# Default application map persistence manager is DODS
#
#-----------------------------------------------------------------------------
#
# DODS application map persistent manager defaults
#
ApplicationMapPersistenceManagerClassName=org.enhydra.shark.appmappersistence.DODSApplicationMappingMgr
# If set to true, the debug information on application mapping transaction will be
# written to console
#DODSApplicationMappingMgr.debug=false
注意:如果你注释上面的行,shark将工作在没有应用程序映射API执行的环境中。
设置任务管理器接口实现类
如果任何人想创建自己的任务管理器接口实现,任务是创建一个活动的决定,他可以实现自己的任务管理器接口,并且通过更改下列设置配置shark使用它:
AssignmentManagerClassName=org.enhydra.shark.assignment.StandardAssignmentManager
Shark提供三种不同的管理器实现:
·标准实现 - 通过一个参数返回用户列表或者在列表中没有用户返回创建相应流程的用户;
·历史有关的 – 如果在XPDL中为一些活动定义定义了一些特殊“扩展属性”,执行检查任务历史创建关于创建任务决定。
·XPDL参与者映射 – 为XPDL活动执行者有相同ID的用户创建任务。
注意:如果你没有设置任何实现(你简单注释上面的行),shark将使用默认程序。事实上,标准任务API实现不是非常有用的,它基本上返回第一个有效选项的结果。
设置认证管理器接口实现类
Shark提供两种认证和用户组API接口实现。第一种是基于数据库的(使用数据库存储和接收组织结构信息),另一种是基本LDAP的(使用LDAP服务器设置组织信息)。
这儿是设置认证管理器实现在shark配置文件中的一部份:
#=============================================================================
# Default AuthenticationManager is DODS
#
# WARNING: This and user/group manager must comply.
#-----------------------------------------------------------------------------
#
#AuthenticationManagerClassName=org.enhydra.shark.authentication.LDAPAuthenticationManager
AuthenticationManagerClassName=org.enhydra.shark.authentication.DODSAuthenticationManager
# Specifies the size of LRU cache for holding user attributes (for shark performance reason)
# for LRU implementation
LDAPClient.userAttributesCacheSize=100
# Specifies the size of LRU cache for holding group attributes (for shark performance reason)
# for LRU implementation
LDAPClient.groupAttributesCacheSize=100
# The database used for Authentication when using DODS implementation
#DODSAuthenticationManager.DatabaseName=sharkdb
它是非常生要的,如果你使用LDAP为认证API接口实现,你必须使用LDAP为用户组API接口实现(DODS实现也是如此)。
默认情况,shark使用数据库基于DODS实现,并且转换到LDAP实现,你将简单流程引用DODS的行,释放LDAP涉及的行并编辑以前描述的LDAP设置。
注意:如果你没有设置任何实现(简单注释上面的行),shark将不执行任何认证。