osworkflow api 之 util

osworkflow api 之 util

2006-01-31 23:44:22 编辑來源:互联网 繁體版 评论0
osworkflow api 之 util

2006-01-31 23:44:22 编辑來源:互联网 繁體版 评论0

 
com.opensymphony.workflow.util
  Interfaces 
Validatable 
  public void validate() throws InvalidWorkflowDescriptorException;
WorkflowListener 
  public void stateChanged(WorkflowEntry entry) throws RemoteException, WorkflowException;
WorkflowLocalListener
  public void stateChanged(WorkflowEntry entry) throws WorkflowException;
XMLizable 
   public static final String INDENT = " ";
   //~ Methods ////////////////////////////////////////////////////////////////
   public void writeXML(PrintWriter writer, int indent);
  大致可以看得出,最后这个接口是用来写xml的,indent代表缩进量。
  我真服气作者写注释这方面了,不管api还是源码上注释真少。里面就一个小例子,好多功能标签也没用过,带一大堆测试case,又不把jar包弄全。哎!是不是灵活就都这样啊!其实好多都看不懂!我faint!
  Classes
AllowOwnerOfStepCondition
  这个类实现Condition接口。包含一个方法passesCondition。* Checks owner of "stepId" in args and compares to current user
  大致是做这样的事情:
  1、 获取stepid
  2、 通过workflowstore寻找findHistorySteps
  3、 在hisotrystep中找与上面的获得到的stepid想匹配的项,
  if (((step.getOwner() != null) && (context.getCaller() != null)) && context.getCaller().equals(step.getOwner())) {
   return true;
  }
  上面的step指的是historysteps中的某一个(通过iterator获得),而context是通过WorkflowContext context = (WorkflowContext) transientVars.get("context");获得到的,两者进行比较,来返回boolean。
AllowOwnerOnlyCondition这个类实现Condition接口。包含一个方法passesCondition。
  大致做这样的事情:
  与AllowOwnerOfStepCondition一样。
  * Simple utility condition that returns true if the owner is the caller. Looks at
  ALL current steps unless a stepId is given in the optional argument "stepId".
  1、 获取stepid
  2、 WorkflowContext context = (WorkflowContext) transientVars.get("context");
  WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry");
  WorkflowStore store = (WorkflowStore) transientVars.get("store");
  List currentSteps = store.findCurrentSteps(entry.getId());可以看出这里获取的是当前的step,上面的类获取的history的。
  3、 stepid=0和!=0两种情况。
  4、 if ((step.getOwner() != null) && context.getCaller().equals(step.getOwner())) {
   return true;
   }
  判断owner和caller是否一致。
  如在例子程序中在stepid为1的情况下这样使用的:
  <condition type="class">
  <arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
  </condition>
DenyOwnerCondition
  * Simple utility condition that returns false if the owner is the caller. Looks at
  ALL current steps unless a stepId is given in the optional argument "stepId".
  实现接口和方法与上同。
  可以很好理解,这个就不多说了。
OSUserGroupCondition
  * Simple utility class that uses OSUser to determine if the caller is in
  the required argument "group".
  实现接口和方法与上同。
  这个类是用来判断caller是否在参数设置的group中的。
  里面代码很简单。
StatusCondition
  * Simple utility condition that returns true if the current step's status is
  * the same as the required argument "status". Looks at ALL current steps unless
  a stepId is given in the optional argument "stepId".
  实现接口和方法与上同。
  判断当前的step的status是否与需要要求的status一致。
  其他细节略,代码很好懂。
MostRecentOwner
  实现FunctionProvider接口,包含一个execute方法。
  1、 String stepIdString = (String) args.get("stepId");先从参数列表获得stepidstring,这是一个以“,”分隔的字符串。下面以一个变量名为stepids的list进行存储此stepidstring
  2、 WorkflowStore store = (WorkflowStore) transientVars.get("store");
  List historySteps = store.findHistorySteps(entry.getId());
  3、 在historySteps中进行迭代处理
  4、 if (stepIds.contains(String.valueOf(step.getStepId())) && TextUtils.stringSet(step.getOwner())) {
   transientVars.put("mostRecentOwner", step.getOwner());
   
  break;
   }
  这部分功能主要是判断stepids是否包含historysteps中的某一个。而TextUtils是oscore这个jar包的代码,暂时还没下源码(只能通过cvs获得),我试过,但是,没成功。
Caller 
  实现FunctionProvider接口,包含一个execute方法。
   public void execute(Map transientVars, Map args, PropertySet ps) {
   WorkflowContext context = (WorkflowContext) transientVars.get("context");
   transientVars.put("caller", context.getCaller());
   }
  这个没什么讲的,就是把供以后调用的caller。
EJBInvoker 
  略
JMSMessage
  略
LogRegisters
  实现Register接口,包含registerVariable方法
  在内部通过osworkflow+”.”+workflowname+”.”+”workflowid”作为参数传递给logfacotry。最终是由commons.logging.logfactory产生log对象返回。
ScheduleJob 
  这个类在上面的timer的时候提到过的。
  它实现FunctionProvider。
  ScheduleJob是一个FunctionProiver,因此具有execute方法。在该方法执行期间,ScheduleJob将会读取这些配置参数,创建好job实例(实际上是一个JobDetail实例)和trigger实例,然后启动schedule。
  主要作用就是在一个quartz里schedule一个job在未来一段时间内执行一或多次。下面这些参数是必须具备的:
  * <ul>
  * <li> triggerId - the id of the trigger function defined in the XML workflow
  * <li> jobName - the name to be given to the job
  * <li> triggerName - the name to be given to the trigger
  * <li> groupName - the group given to both the job and the trigger
  * </ul>
  下面这些参数是可选的:
  <ul>
  * <li> username – 用来在未来时间内执行function的系统帐户,如果这个值没有指定那么将会从WorkflowContext.getCaller()中取得值来使用。
  * <li> password – 系统帐户的密码。
  * <li> local – 如果设置为true,一个LocalWorkflowJob 生效,否则就是需要具备soap支持了。不设置此项即WorkflowJob。
  * <li> jobClass – 实现job 的类,在没有指定的情况下默认是WorkflowJob ,如果local为true,则默认为LocalWorkflowJob
  * <li>schedulerName – 一个已存在的scheduler的名字
  * <li>schdulerStart – 如果设置为true,则如果它还没启动则自动启动。
  * <li>txHack –如果在运行事务之时你得到锁,设置此为true 默认为false。
  * </ul>
  如果你想使用一个cron trigger,下面这些就是必须的了。
  * <ul>
  * <li> cronExpression – 如名
  * </ul>
  如果只是使用一个简单的trigger,下面这些是可选的。
  * <ul>
  * <li> startOffset – 从现在的时间开始的偏移量,以ms(毫秒)为单位,默认是0。
  * <li> endOffset -从现在的时间开始的偏移量,以ms(毫秒)为单位,默认是无限大。
  * <li> repeat – 重复次数。默认为0,可以设置为REPEAT_INDEFINITELY 
  * <li> repeatDelay – 在各个repeats之间的时间间隔。默认是0
  * </ul>
  这个类的作用就是根据上面设置的这些参数进行调度job。
UnscheduleJob
  * Unschedules a job that was scheduled previously. Accepts the following arguments:
  *Unschedule一个job(预先scheduled过的。)接受下面这些参数。
  * <ul>
  * <li>triggerName – 先前scheduled过的trigger name
  * <li>groupName - 先前scheduled过的group name
  * <li>schedulerName – 已存的scheduler的名字。(可选)
  * <li>txHack – 可选,默认false。
  * </ul>
  
ScriptVariableParser 
  这个类作用就是解析带有“.”的表达式 和 ${caller}这样表达式的。将其中的变量取出来返回。
SendEmail
  实现FunctionProvider。发送邮件类。
WebWorkExecutor
  实现FunctionProvider,执行WebWork功能,当老的actioncontext处于finished时候进行restore。进行如下转换过程:
  * <ul>
  * <li>inputs -> ActionContext#parameters</li>
  * <li>variables -> ActionContext#session</li>
  * <li>args -> ActionContext#application</li>
  *</ul>
  * <ul>
  * <li><b>action.name</b> - the actionName to ask from the ActionFactory</li>
  * </ul>
  这部分没弄明白。
WebWorkValidator
  实现Validator
WorkflowStateHelper
  只有一个getPossibleStates方法,获取当前state的可能下一状态,如created的下一状态则提示为activated。
XWorkExecutor
  执行一个Xwork的function。
  * <ul>
  * <li>inputs -> ActionContext#parameters</li>
  * <li>variables -> ActionContext#session</li>
  * <li>args -> ActionContext#application</li>
  * </ul>
  * <p>
  *
  * <ul>
  * <li><b>action.name</b> - the actionName to ask from the ActionProxy</li>
  * <li><b>namespace</b> - the namespace to ask from the ActionProxy</li>
  * </ul>
  没弄懂。
  欢迎大家教我不会的,互相学习。yun15291li@hotmail.com

 

 
 

com.opensymphony.workflow.util   Interfaces  Validatable   public void validate() throws InvalidWorkflowDescriptorException; WorkflowListener   public void stateChanged(WorkflowEntry entry) throws RemoteException, WorkflowException; WorkflowLocalListener   public void stateChanged(WorkflowEntry entry) throws WorkflowException; XMLizable      public static final String INDENT = "  ";      //~ Methods ////////////////////////////////////////////////////////////////      public void writeXML(PrintWriter writer, int indent);   大致可以看得出,最后这个接口是用来写xml的,indent代表缩进量。   我真服气作者写注释这方面了,不管api还是源码上注释真少。里面就一个小例子,好多功能标签也没用过,带一大堆测试case,又不把jar包弄全。哎!是不是灵活就都这样啊!其实好多都看不懂!我faint!   Classes AllowOwnerOfStepCondition   这个类实现Condition接口。包含一个方法passesCondition。* Checks owner of "stepId" in args and compares to current user   大致是做这样的事情:   1、  获取stepid   2、  通过workflowstore寻找findHistorySteps   3、  在hisotrystep中找与上面的获得到的stepid想匹配的项,   if (((step.getOwner() != null) && (context.getCaller() != null)) && context.getCaller().equals(step.getOwner())) {                  return true;   }   上面的step指的是historysteps中的某一个(通过iterator获得),而context是通过WorkflowContext context = (WorkflowContext) transientVars.get("context");获得到的,两者进行比较,来返回boolean。 AllowOwnerOnlyCondition这个类实现Condition接口。包含一个方法passesCondition。   大致做这样的事情:   与AllowOwnerOfStepCondition一样。   * Simple utility condition that returns true if the owner is the caller. Looks at   ALL current steps unless a stepId is given in the optional argument "stepId".   1、  获取stepid   2、  WorkflowContext context = (WorkflowContext) transientVars.get("context");   WorkflowEntry entry = (WorkflowEntry) transientVars.get("entry");   WorkflowStore store = (WorkflowStore) transientVars.get("store");   List currentSteps = store.findCurrentSteps(entry.getId());可以看出这里获取的是当前的step,上面的类获取的history的。   3、  stepid=0和!=0两种情况。   4、  if ((step.getOwner() != null) && context.getCaller().equals(step.getOwner())) {                      return true;    }   判断owner和caller是否一致。   如在例子程序中在stepid为1的情况下这样使用的:   <condition type="class">   <arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>   </condition> DenyOwnerCondition   * Simple utility condition that returns false if the owner is the caller. Looks at   ALL current steps unless a stepId is given in the optional argument "stepId".   实现接口和方法与上同。   可以很好理解,这个就不多说了。 OSUserGroupCondition   * Simple utility class that uses OSUser to determine if the caller is in   the required argument "group".   实现接口和方法与上同。   这个类是用来判断caller是否在参数设置的group中的。   里面代码很简单。 StatusCondition   * Simple utility condition that returns true if the current step's status is   * the same as the required argument "status". Looks at ALL current steps unless   a stepId is given in the optional argument "stepId".   实现接口和方法与上同。   判断当前的step的status是否与需要要求的status一致。   其他细节略,代码很好懂。 MostRecentOwner   实现FunctionProvider接口,包含一个execute方法。   1、  String stepIdString = (String) args.get("stepId");先从参数列表获得stepidstring,这是一个以“,”分隔的字符串。下面以一个变量名为stepids的list进行存储此stepidstring   2、  WorkflowStore store = (WorkflowStore) transientVars.get("store");   List historySteps = store.findHistorySteps(entry.getId());   3、  在historySteps中进行迭代处理   4、  if (stepIds.contains(String.valueOf(step.getStepId())) && TextUtils.stringSet(step.getOwner())) {                  transientVars.put("mostRecentOwner", step.getOwner());                   break;              }   这部分功能主要是判断stepids是否包含historysteps中的某一个。而TextUtils是oscore这个jar包的代码,暂时还没下源码(只能通过cvs获得),我试过,但是,没成功。 Caller   实现FunctionProvider接口,包含一个execute方法。      public void execute(Map transientVars, Map args, PropertySet ps) {          WorkflowContext context = (WorkflowContext) transientVars.get("context");          transientVars.put("caller", context.getCaller());      }   这个没什么讲的,就是把供以后调用的caller。 EJBInvoker   略 JMSMessage   略 LogRegisters   实现Register接口,包含registerVariable方法   在内部通过osworkflow+”.”+workflowname+”.”+”workflowid”作为参数传递给logfacotry。最终是由commons.logging.logfactory产生log对象返回。 ScheduleJob   这个类在上面的timer的时候提到过的。   它实现FunctionProvider。   ScheduleJob是一个FunctionProiver,因此具有execute方法。在该方法执行期间,ScheduleJob将会读取这些配置参数,创建好job实例(实际上是一个JobDetail实例)和trigger实例,然后启动schedule。   主要作用就是在一个quartz里schedule一个job在未来一段时间内执行一或多次。下面这些参数是必须具备的:   * <ul>   *  <li> triggerId - the id of the trigger function defined in the XML workflow   *  <li> jobName - the name to be given to the job   *  <li> triggerName - the name to be given to the trigger   *  <li> groupName - the group given to both the job and the trigger   * </ul>   下面这些参数是可选的:   <ul>   *  <li> username – 用来在未来时间内执行function的系统帐户,如果这个值没有指定那么将会从WorkflowContext.getCaller()中取得值来使用。   *  <li> password – 系统帐户的密码。   *  <li> local – 如果设置为true,一个LocalWorkflowJob 生效,否则就是需要具备soap支持了。不设置此项即WorkflowJob。   *  <li> jobClass – 实现job 的类,在没有指定的情况下默认是WorkflowJob ,如果local为true,则默认为LocalWorkflowJob   *  <li>schedulerName – 一个已存在的scheduler的名字   *  <li>schdulerStart – 如果设置为true,则如果它还没启动则自动启动。   *  <li>txHack –如果在运行事务之时你得到锁,设置此为true 默认为false。   * </ul>   如果你想使用一个cron trigger,下面这些就是必须的了。   * <ul>   *  <li> cronExpression – 如名   * </ul>   如果只是使用一个简单的trigger,下面这些是可选的。   * <ul>   *  <li> startOffset – 从现在的时间开始的偏移量,以ms(毫秒)为单位,默认是0。   *  <li> endOffset -从现在的时间开始的偏移量,以ms(毫秒)为单位,默认是无限大。   *  <li> repeat – 重复次数。默认为0,可以设置为REPEAT_INDEFINITELY   *  <li> repeatDelay – 在各个repeats之间的时间间隔。默认是0   * </ul>   这个类的作用就是根据上面设置的这些参数进行调度job。 UnscheduleJob   * Unschedules a job that was scheduled previously. Accepts the following arguments:   *Unschedule一个job(预先scheduled过的。)接受下面这些参数。   * <ul>   *  <li>triggerName – 先前scheduled过的trigger name   *  <li>groupName - 先前scheduled过的group name   *  <li>schedulerName – 已存的scheduler的名字。(可选)   *  <li>txHack – 可选,默认false。   * </ul>    ScriptVariableParser   这个类作用就是解析带有“.”的表达式 和 ${caller}这样表达式的。将其中的变量取出来返回。 SendEmail   实现FunctionProvider。发送邮件类。 WebWorkExecutor   实现FunctionProvider,执行WebWork功能,当老的actioncontext处于finished时候进行restore。进行如下转换过程:   * <ul>   *  <li>inputs -> ActionContext#parameters</li>   *  <li>variables -> ActionContext#session</li>   *  <li>args -> ActionContext#application</li>   *</ul>   * <ul>   *  <li><b>action.name</b> - the actionName to ask from the ActionFactory</li>   * </ul>   这部分没弄明白。 WebWorkValidator   实现Validator WorkflowStateHelper   只有一个getPossibleStates方法,获取当前state的可能下一状态,如created的下一状态则提示为activated。 XWorkExecutor   执行一个Xwork的function。   * <ul>   *  <li>inputs -> ActionContext#parameters</li>   *  <li>variables -> ActionContext#session</li>   *  <li>args -> ActionContext#application</li>   * </ul>   * <p>   *   * <ul>   *  <li><b>action.name</b> - the actionName to ask from the ActionProxy</li>   *  <li><b>namespace</b> - the namespace to ask from the ActionProxy</li>   * </ul>   没弄懂。   欢迎大家教我不会的,互相学习。yun15291li@hotmail.com
posted @ 2017-08-08 17:04  sky20080101  阅读(147)  评论(0)    收藏  举报