org.jbpm.context.def && org.jbpm.context.exe

especialjie 2009-03-30

org.jbpm.context.def包下:

-org.jbpm.context.def

--Access.java

--ContextDefinition.java

--VariableAccess.java

--ContextDefinition.hbm.xml

--VariableAccess.hbm.xml

Access控制对Variable变量的访问控制,访问权限有read,write,required,还有一个lock参数,一个很简单的类,下面来看一下equals()方法,代码如下:

public boolean equals(Object object) {
    if (object instanceof Access) {
      //将object强制转换为Access
      Access other = (Access) object;
      //Access的equals方法,比较object对象的各种权限,如下,是否可读,是      //否可写,是否被请求,是否锁住了...
      return (isReadable()==other.isReadable())
             && (isWritable()==other.isWritable())
             && (isRequired()==other.isRequired())
             && (isLock()==other.isLock());
    } else {
      return false;
    }
  }

VariableAccess与jbpm数据库的JBPM_VARIABLEACCESS表相对应,JBPM_VARIABLEACCESS表有四个字段,ID_为VariableAccess的标识,VARIABLENAME_为变量的名字,ACCESS_为AccessType类,位置在org.jbpm.db.hibernate.AccessType,MAPPEDNAME_为被映射的名字.

ContextDefinition继承ModuleDefinition,代码很简单,ModuleDefinition会在后面介绍.

org.jbpm.context.exe包下:

-org.jbpm.context.exe

--ContextInstance.java

--ContextInstance.hbm.xml

--Converter.java

--jbpm.varmapping.xml

--JbpmType.java

--JbpmTypeMatcher.java

--TokenVariableMap.java

--TokenVariableMap.hbm.xml

--VariableContainer.java

--VariableInstance.hbm.xml

--VariableInstance.java

Converter是一个转换器接口,提供了三个方法的定义,supports(),convert(),revert(),supports()方法判断转换器是否支持以给的类型,支持返回true,convert()转换方法,revert()还原方法.

ContextInstance是ModuleInstance的子类(ModuleInstance将会在后面介绍),ContextInstance类是对变量variable的一些操作,比如说创建variable,获取variable,添加variable,删除variable等等.

JbpmTypeMatcher是一个借口,定义了matches()方法,

jbpm.varmapping.xml定义了使用何种类完成某种Java对象转换为jBPM中可存储的数据库实例.

JbpmType指定jbpm如何支持一个JAVA类型,getJbpmTypes()方法通过读取jbpm.varmapping.xml,获得一个jbpmType的List.

VariableInstance是一个抽象类,在数据库中,它作为一个基类存储变量值。对应于JBPM数据库表JBPM_VARIABLEINSTANCE。

VariableInstance的create()方法代码:

public static VariableInstance create(Token token,
                                        String name, 
                                        Object value) {
    
    VariableInstance variableInstance = null;
    //假如value为空
    if (value==null) {
    	//创建NullInstance(NullInstance是VariableInstance的子类)
      variableInstance = new NullInstance();
    } else {
    	//不为空,调用createVariableInstance()方法,createVariableInstance()方法获得JbpmType匹配value,返回一variableInstance
      variableInstance = createVariableInstance(value);
    }
    
    //设置token
    variableInstance.token = token;
    //设置名字
    variableInstance.name = name;
    //设置流程实例 
    variableInstance.processInstance = (token!=null ? token.getProcessInstance() : null );
    if (token!=null) {
      token.addLog(new VariableCreateLog(variableInstance));
    }
    variableInstance.setValue(value);
    return variableInstance;
  }

VariableContainer(抽象类),一个变量容器,提供了设置、获取、添加、删除变量等方法.

相关推荐