`

[#0x002D] variable的name和mapped-name

    博客分类:
  • jBPM
阅读更多

  看似是一个variable有name和mapped-name两个名称,其实情况很复杂。看例子。

 

  假定我们有一个极其简单的流程vartest (surprisingly it also means V-Artest, but i must say that i'm not a Laker fan) 。在start-state的controller里添加一个variable,name为"var",mapped-name为"variable",如下:

<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns=""  name="vartest">

	<start-state name="start-state1">
		<task>
			<controller>
				<variable access="read,write" name="var" mapped-name="variable"></variable>
			</controller>
		</task>
		<transition to="task-node1"></transition>
	</start-state>

	<task-node name="task-node1"		
		<transition to="end-state1"></transition>
	</task-node>

	<end-state name="end-state1"></end-state>

</process-definition>

 

  然后我们来写一个Test Case:

public class AccessVariable extends TestCase
{
	public void testPayProcess() throws Exception
	{
		JbpmContext jc = JbpmConfiguration.getInstance().
				createJbpmContext();
		
		ProcessDefinition pd = jc.getGraphSession().
				findLatestProcessDefinition("vartest");
		ProcessInstance pi = pd.createProcessInstance();
		ContextInstance ci = pi.getContextInstance();
		TaskInstance ti = pi.getTaskMgmtInstance().createStartTaskInstance()
		
		//hint 1:
		//ci can create new variable (not declared in <controller>)
		//and ti can access the variable ci created
		ci.setVariable("abc", "ABC");
		System.out.println(ti.getVariable("abc")); //ABC
		ti.setVariable("abc", "CBA");
		System.out.println(ci.getVariable("abc")); //CBA
	
		//hint 1:	
		//also, ti can create this kind of variables
		//and ci can access the variable ti created
		ti.setVariable("def", "DEF");
		System.out.println(ci.getVariable("def")); //DEF	
		ci.setVariable("def", "FED");
		System.out.println(ti.getVariable("def")); //FED
		
		//hint 2:		
		//for the variables declared in <controller>, it's the same situation
		//both ci and ti can create and access this kind of variable
		ci.setVariable("var", "VAR");
		System.out.println(ti.getVariable("var")); //VAR
		ti.setVariable("var", "RAV");
		System.out.println(ci.getVariable("var")); //RAV

		//hint 3:	
		//"var" doesn't affect "variable"
		System.out.println(ti.getVariable("variable")); //null
		System.out.println(ci.getVariable("variable")); //null

		//hint 4:	
		//things becaome a little different when using mapped-name
		ti.setVariable("variable", "VARIABLE");
		System.out.println(ti.getVariable("variable")); //VARIABLE
		System.out.println(ci.getVariable("variable")); //null
	
		//hint 4:	
		//it's clear that ti and ci both holds an "variable", respectively
		ci.setVariable("variable", "ELBAIRAV");
		System.out.println(ti.getVariable("variable")); //VARIABLE
		System.out.println(ci.getVariable("variable")); //ELBAIRAV

		//hint 3:	
		//and "variable" doesn't affect "var"
		System.out.println(ti.getVariable("var")); //RAV
		System.out.println(ci.getVariable("var")); //RAV
			
		ti.end();
		pi.end();
		jc.close();
	}
}  

输出结果如注释所示。

 

  可以看出,除了mapped-name之外,ti和ci可以随意SetVariable(key, value),SetVariable的过程包含了create的过程,key可以是name,也可以是其他字符串,且这种类型的变量(名称为name或是任意字符串,只要不是mapped-name)ti和ci可以随意访问,这类变量对ti和ci的作用域是一样的(类似于全局变量)。

  但name和mapped-name变量没有任何关系,如hint 3所示,"var"的值不会影响"variable",反过来"variable"的值也不会影响"var"。

  且mapped-name变量对ti和ci来说更像是2个变量,其作用域严格区分,没有任何交集,如hint 4所示。

分享到:
评论

相关推荐

    mapped-types:Nest框架的配置模块(node.js):wolf:

    $ npm i --save @nestjs/mapped-types 快速开始 构建功能时,在基本实体类型上构建变体通常很有用。 这种变体的一个很好的例子是数据传输对象(DTO)。 数据传输对象是用于封装数据并将其从应用程序的一部分发送到...

    go-mapped-csv:写入按列映射的CSV

    【go-mapped-csv:构建高效CSV处理的利器】 在编程世界中,CSV(Comma Separated Values)格式因其简洁性和通用性而被广泛应用。在Go语言中,标准库`encoding/csv`为我们提供了读写CSV文件的基础功能。然而,有时...

    Read-and-write-memory-mapped-file.rar_SLE4442_memory_映射内存 读写

    内存映射文件(Memory-Mapped File)是一种在操作系统中实现高效数据交换的技术,它允许将文件的内容直接映射到进程的虚拟地址空间中,使得文件的读写操作如同访问普通内存一样快速便捷。在Windows CE这样的嵌入式...

    web.xml详解(web-app_2_3.dtd)

    每个`context-param`包含一个`param-name`和一个`param-value`子元素,分别表示参数名和参数值。DTD定义如下: ```xml &lt;!ELEMENT context-param ((param-name, param-value), description?)&gt; &lt;!ELEMENT param-name ...

    浙江大学ACM模板(经典代码).pdf

    - **距离公式**:两点之间的距离可通过距离公式 \( d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \) 计算。 - **角度计算**:通过向量内积可以计算两个向量之间的夹角。 ##### 1.3 多边形 - **多边形面积计算**:可以...

    Memory-Mapped Files for Qualcomm Brew

    - **性能优化**:对于那些需要频繁读取的大型文件来说,使用Memory-Mapped Files可以显著加快读取速度,减少CPU和内存的负担。 - **安全性考量**:由于IFILE_Map API只支持只读模式,因此不会对文件内容造成意外修改...

    ibatis dynamic 用法

    ### ibatis Dynamic SQL ...- **`open`** 和 **`close`**:用于设置动态 SQL 片段的开头和结尾字符串,例如括号、引号等。 #### 四、示例解析 下面通过具体的示例来进一步理解 `&lt;dynamic&gt;` 标签的使用方法。 ```xml ...

    浙江大学ACM模板

    - **最小生成树(prim+mapped_heap邻接表)**:Prim算法结合映射堆用于求解最小生成树问题。 - **最小生成树(prim邻接阵)**:另一种实现Prim算法的方式。 #### 十二、图论—最短路径 - **最短路径(单源dijkstra+...

    Mapped-Country-Language-Codes:还有全名。 ISO 3166-1 和 639-1

    映射国家语言代码具有相应语言的国家/地区的哈希值和具有相应国家/地区的语言的哈希值。 包括全名和代码哈希。 ISO 3166-1 和 639-1 我在一个项目中需要这个,但在网络上的任何地方都找不到它,所以我做了一些爬行并...

    国家IP核设计标准术语表

    - **地址映射**(Address-Mapped):将物理地址转换为逻辑地址的过程,以便于数据存储和检索。 #### 高级库与数据包模型 - **高级库格式**(Advanced Library Format, ALF):一种用于描述IP核和硬件组件的标准...

    SimIt-ARM-3.0 ARM指令模拟器

    0x000080e4 : 0xe52d0004 str r0, [sp, #-4]!; 0x000080e8 : 0xe59f0010 ldr r0, [pc, #16]; 0x000080ec : 0xe59f3010 ldr r3, [pc, #16]; 0x000080f0 : 0xe52dc004 str ip, [sp, #-4]!; 0x000080f4 : 0xeb00003c bl...

    一个struts2的例子:彻底解决STRUTS2 错误There is no Action mapped for namespace / and action name login

    前几天在网上下载一个struts2的helloword的例子,那个作者也真够缺德的,搞个错误的程序,害得我查了一天的程序错误。 最后发现竟然是struts.xml被写成啦sturts.xml。 碰见这样的问题先鄙视下提供例子的作者, ...

    ibatis中文api文档

    ##### 4.1 MappedStatements - **Statement的类型**:包括`INSERT`、`UPDATE`、`DELETE`和`SELECT`等。 - **SQL语句**:定义具体的SQL语句。 - **自动生成的主键**:支持插入后自动生成主键。 - **存储过程**:支持...

    Life After BerkeleyDB- OpenLDAP's Memory-Mapped Database

    ### Life After BerkeleyDB: OpenLDAP's Memory-Mapped Database #### Introduction In the realm of database management systems, OpenLDAP's new MDB (Memory-Mapped Database) library marks a significant ...

    On-Chip FIFO Memory Core

    - **输入接口**:可以是Avalon® Memory Mapped (Avalon-MM)写入从属接口或Avalon Streaming (Avalon-ST)接收端接口。 - **输出接口**:可以是Avalon-ST发送端接口或Avalon-MM读取主控接口。无论何种信号(如通道、...

    NUC501 User's Manual rev.A1.3.pdf

    This section describes how the system memory is organized and mapped, including the allocation of addresses for the CPU, peripherals, and external memory. ###### 6.2.3 AHBBus Arbitration The Advanced...

    MDB: A Memory-Mapped Database and Backend for OpenLDAP

    本文主要介绍了一种名为MDB(Memory-Mapped Database)的读优化数据库库及其作为OpenLDAP后端的应用。该技术由Howard Chu开发,并在Symas Corp.以及OpenLDAP项目中得到应用。MDB作为一种专门为OpenLDAP设计的内存...

    PyPI 官网下载 | mapped_config-2.34-py2-none-any.whl

    标题中的"PyPI 官网下载 | mapped_config-2.34-py2-none-any.whl"表明这是一个从Python Package Index(PyPI)官方源获取的软件包,名为`mapped_config`,版本号为2.34。PyPI是Python开发者发布和分享他们创建的开源...

    MyBatis最完整的学习资料

    - **Mapped Statement**:代表了一个具体的 SQL 语句,包含了 SQL 文本、参数类型、结果类型等信息。 ##### 3.2 动态 SQL MyBatis 支持基于 XML 的动态 SQL 处理,允许开发者在 SQL 语句中使用 if、choose(when/...

Global site tag (gtag.js) - Google Analytics