instanceid6666是什么意思思

(window.slotbydup=window.slotbydup || []).push({
id: '2014386',
container: s,
size: '234,60',
display: 'inlay-fix'
下载本文档需要登录,并付出相应积分。()
(已有1人评价)
下载:1次格式:doc页数:81贡献者:Lilballa143上传时间: 16:44
0人评价81页
0人评价1页
0人评价16页
0人评价46页
0人评价14页
所需积分:(友情提示:所有文档均可免费预览!下载之前请务必先预览阅读,以免误下载造成积分浪费!)
(多个标签用逗号分隔)
文不对题,内容与标题介绍不符
广告内容或内容过于简单
文档乱码或无法正常显示
若此文档涉嫌侵害了您的权利,请参照说明。Uploadify&3.2&参数属性、事件、方法函数详解
设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 。
buttonClass
buttonCursor
鼠标指针悬停在按钮上的样子
buttonImage
浏览按钮的图片的路径 。
buttonText
‘SELECT FILES’
浏览按钮的文本。
checkExisting
文件上传重复性检查程序,检查即将上传的文件在服务器端是否已存在,存在返回1,不存在返回0
如果设置为true则表示启用SWFUpload的调试模式
fileObjName
‘Filedata’
文件上传对象的名称,如果命名为’the_files’,PHP程序可以用$_FILES['the_files']来处理上传的文件对象。
fileSizeLimit
上传文件的大小限制 ,如果为整数型则表示以KB为单位的大小,如果是字符串,则可以使用(B, KB, MB, or
GB)为单位,比如’2MB’;
如果设置为0则表示无限制
fileTypeDesc
‘All Files’
这个属性值必须设置fileTypeExts属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileTypeDesc为“请选择rar
doc pdf文件”
fileTypeExts
设置可以选择的文件的类型,格式如:’*.*.*.rar’ 。
JSON格式上传每个文件的同时提交到服务器的额外数据,可在’onUploadStart’事件中使用’settings’方法动态设置。
设置浏览按钮的高度 ,默认值
itemTemplate
用于设置上传队列的HTML模版,可以使用以下标签:
instanceID & Uploadify实例的ID
fileID & 列队中此文件的ID,或者理解为此任务的ID
fileName & 文件的名称
fileSize & 当前上传文件的大小
插入模版标签时使用格式如:${fileName}
提交方式Post或Get
设置为true时可以上传多个文件。
overrideEvents
设置哪些事件可以被重写,JSON格式,如:’overrideEvents’ : ['onUploadProgress']
preventCaching
如果为true,则每次上传文件时自动加上一串随机字符串参数,防止URL缓存影响上传结果
progressData
‘percentage’
设置上传进度显示方式,percentage显示上传百分比,speed显示上传速度
设置上传队列容器DOM元素的ID,如果为false则自动生成一个队列容器。
queueSizeLimit
队列最多显示的任务数量,如果选择的文件数量超出此限制,将会出发onSelectError事件。
注意此项并非最大文件上传数量,如果要限制最大上传文件数量,应设置uploadLimit。
removeCompleted
是否自动将已完成任务从队列中删除,如果设置为false则会一直保留此任务显示。
removeTimeout
如果设置了任务完成后自动从队列中移除,则可以规定从完成到被移除的时间间隔。
requeueErrors
如果设置为true,则单个任务上传失败后将返回错误,并重新加入任务队列上传。
successTimeout
文件上传成功后服务端应返回成功标志,此项设置返回结果的超时时间
‘uploadify.swf’
uploadify.swf 文件的相对路径。
uploadify.php
后台处理程序的相对路径。
uploadLimit
最大上传文件数量,如果达到或超出此限制将会触发onUploadError事件。
设置文件浏览按钮的宽度。
onCancel(file)
当点击文件队列中文件的关闭按钮或点击取消上传时触发,file参数为被取消上传的文件对象
onClearQueue(queueItemCount)
当调用函数cancel方法时触发,queueItemCount参数为被取消上传的文件数量。
onDestroy()
当destory方法被调用时触发
onDialogClose(queueData)
当文件浏览框关闭时触发,如果将此事件被重写,则当向队列添加文件上传出错时不会弹出错误消息提示。
queueData对象包含如下属性:
filesSelected 文件选择对话框中共选择了多少个文件
filesQueued 已经向队列中添加了多少个文件
filesReplaced 已经向队列中替换了多少个文件
filesCancelled 取消了多少个文件 filesErrored 出错了多少个文件
onDialogOpen()
当文件选择对话框弹出时立即出发,但可能在文件选择对话框被关闭之前并不能全部执行。
onDisable()
当disable方法禁用Uploadify上传按钮时被调用时触发。
onEnable()
当disable方法启用Uploadify上传按钮时被调用时触发。
onFallback()
当Uploadify初始化过程中检测到当前浏览器不支持flash时触发。
首次初始化Uploadify结束时触发。
onQueueComplete(queueData)
文件上传队列处理完毕后触发。
queueData对象包含如下属性:
uploadsSuccessful & 上传成功的文件数量
uploadsErrored & 上传失败的文件数量
onSelect(file)
选择文件后向队列中添加每个上传任务时都会触发。
onSelectError(file, errorCode, errorMsg)
选择文件后向队列中添加每个上传任务时如果失败都会触发。
file & 文件对象
errorCode & 错误代码如下:
QUEUE_LIMIT_EXCEEDED & 任务数量超出队列限制;
FILE_EXCEEDS_SIZE_LIMIT & 文件大小超出限制;
ZERO_BYTE_FILE & 文件大小为0
INVALID_FILETYPE & 文件类型不符合要求
errorMsg & 错误提示,可通过’this.queueData.errorMsg’定制
onSWFReady()
Flash文件载入成功后触发。
onUploadComplete(file)
每个文件上传完毕后无论成功与否都会触发。
onUploadError(file, errorCode, errorMsg, errorString)
文件上传出错时触发,参数由服务端程序返回。
onUploadProgress(file, bytesUploaded, bytesTotal,
totalBytesUploaded, totalBytesTotal)
处理上传队列的过程中会多次触发此事件,每当任务状态有更新时都会触发。
file & 文件对象
bytesUploaded & 已上传的字节数
bytesTotal & 文件总字节数
totalBytesUploaded & 当前任务队列中全部文件已上传的总字节数
totalBytesTotal & 当前任务队列中全部文件的总字节数
onUploadStart(file)
当文件即将开始上传时立即触发
onUploadSuccess(file, data, response)
当文件上传成功时触发
file & 文件对象
data & 服务端输出返回的信息
response &
有输出时为true,如果无响应为false,如果返回的是false,当超过successTimeout设置的时间后假定为true
cancel(fileID, suppressEvent)
取消队列中的任务,不管此任务是否已经开始上传
fileID & 要取消的文件ID,如果为空则取消队列中第一个任务,如果为’*'则取消所有任务
suppressEvent & 是否阻止触发onUploadCancel事件,当清空队列时非常实用。
取消第一个
开始上传所有任务
销毁Uploadify实例并将文件上传按钮恢复到原始状态
销毁Uploadify实例
disable(setDisabled)
禁用或启用文件浏览按钮
setDisabled & 设置为true表示禁用,false为启用
settings(name, value, resetObjects)
获取或设置Uploadify实例参数
name & 属性名称,如果只提供属性名称则表示获取其值
value & 属性值
resetObjects & 设置为true时,更新postData对象将清空现有的值。否则,新的值将被添加到其末尾。
$(‘#file_upload’).uploadify(‘settings’,'buttonText’,'BROWSE’);
$(‘#file_upload’).uploadify(‘settings’,'buttonText’));
停止当前正在上传的任务
upload(fileID)
立即上传指定的文件,如果fileID为’*'表示上传所有文件,要指定上传多个文件,则将每个文件的fileID作为一个参数
开始上传所有文件
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。乱弹纪录III:Geometry Instancing—OpenGL技术-ZwqXin
乱弹纪录III:Geometry Instancing
Geometry Instancing(几何体实例化),是一种用于大批量重复物件渲染的GPU技术,以降低客户端和显卡端数据传输量,所谓的&一次提交,多次渲染&。在OpenGL 3.x下的Instancing技术已经是作为核心,本文也大致地记录一下自己最近使用时的一些思维片段罢。&&.com[][]&本文来源于 ZwqXin (), 转载请注明&&&&&&原文地址:不由得想起当年的CityDreamSnow,在那个Demo中,&涉世未深&的我是这样绘制封闭街道两旁的建筑群的:四种手工建筑,按一定顺序和错落关系列于两侧,整个场景中,每种建筑都大概有4、5个吧&&而且几乎都是一样的(可以回想的不同之处大概除了位置、旋转和缩放度外,还有配色和一些动画的随机控时之类)。对于每种建筑,大概是这样绘制的:
for(int&i&=&0;&i&&#&++i)&&
&&topColor&=&nTopCol[rand()&%&COLCOUNT];&&
&&glPushMatrix();&&
&&glTranslate(...);&&
&&glRotate(...,&0,&1,&0);&&
&&glScale(..);&&
&&DrawArchitecture(topColor,&stripColor,&startTick,...);&&
&&glPopMatrix();&&
}&&这里是通过一个循环调用了NUM个DrawCall(DrawCall在DrawArchitecture里,当然,那时候都是用glBegin/glEnd的,但是这里看做一个glDrawXX好了),在调用前可以设置这次渲染的各种状态(不仅GL状态,还包括上述的各种矩阵变换、配色等等的状态)。把一次DrawCall作为一个Batch,这样做相当于我们在本地客户端(我们的程序所在)向显卡(OpenGL的&服务端&)连续传输同一份顶点数据共NUM次,这NUM个Batch不同之处仅在于一些顶点属性(attribute)之类的。对于更大的建筑群,或者说广阔的草簇群、NPC群,这样的NUM可能就是成千上万之巨了。显卡不会对这种重复数据多次传输做优化,所以内存和GPU的数据传输负载随着DrawCall的调用次数增多而增大,当程序的效率更多地损失在数据传输上之时,就造成了渲染瓶颈,FPS惨不忍睹。Geometry Instancing技术就是为了这样的场合而产生的。这时候,我们可以只调用一次DrawCall,把该份顶点数据(VBO所维护的)传输到显卡,并告诉显卡需要绘制多少次(或者说,执行多少次Vertex Shader)。这就是Insatncing所谓的&一次提交,多次渲染&。对于OpenGL来说,这样的操作只需要简单地调用Draw函数的Intanced版本就可以了:
void&glDrawArraysInstanced(GLenum&mode,&GLint&first,&GLsizei&count&&GLsizei&primcount);&&&
void&glDrawElementsInstanced(GLenum&mode,&GLsizei&count,&GLenum&type,&const&void&*indicies,&&GLsizei&primcount);&&对于VBO([]
[] )有了解的话,对上述DrawCall函数的原生版本也不会陌生:glDrawArrays和glDrawElements。这里的Instanced版本也就在最后加了个primcount的参数指明需要绘制的次数而已。当然还有其他的变式函数(OpenGL的DrawCall函数的某些变式的名字那可是很让人惊叹的东西),就不一一列举。调用该函数后,对于传入流水线的每个顶点,其Vertex Shader会执行primcount次(当然包括后面的对应的流水线阶段了,都是执行primcount次),每一次就作为一次实例化,亦即一个Instance。在Vertex Shader或者Geometry Shader([] )里,可以使用gl_InstanceID这个attribute变量来获悉当前的Shader是该DrawCall的第几次执行(当前处理的是第几个Instance)。慢着!这样说的话,Instanced版本的Draw函数下,所有顶点的所有Instance都用同一个Vertex Shader,同一套流水线操作,那岂不最终的结果就是一模一样的?!这primcount个物件岂不完全重叠在一起?恩。当然咯。那么我们以前是怎样做的呢?多个DrawCall下,我们可以在DrawCall之前设置好该DrawCall的所有属性。考虑一个简单的情况:让各个物件的位置各不相同,那就在调用DrawCall前传入不同的模型矩阵作为Vertex Shader的uniform。那在Geometry Instancing下,我们只有一个DrawCall,怎样做到上述的效果呢?我们还有另一种方法向Vertex Shader输入数据:Attribute变量。我们可以把模型矩阵作为顶点的attribute变量,那么每个顶点就有它的一份模型矩阵了。等等,你说这有啥用?是的,这本身没啥改变:因为我们需要的是该顶点的每个Instance有不同的模型矩阵,反而是同一个Instance的所有顶点的模型矩阵都应该是相同的。这里要说的是,我们可以对每个Instance做同样的事情&&我们可以把模型矩阵作为顶点的attribute变量,让每个实例(Instance)有它的一份模型矩阵。
glGenVertexArrays(1, &m_nFloorVAO);
glBindVertexArray(m_nFloorVAO);
glGenBuffers(1,&&nFloorLVBO);&&
glBindBuffer(GL_ARRAY_BUFFER,&nFloorLVBO);&&
glBufferData(GL_ARRAY_BUFFER,&floorLocations.size()&*&sizeof(ZWVector3),&floorLocations.data(),&GL_STATIC_DRAW);&&
glEnableVertexAttribArray(FLOOR_ATTRIB);&&
glVertexAttribPointer(FLOOR_ATTRIB,&3,&GL_FLOAT,&GL_FALSE,&0,&NULL);&&
glVertexAttribDivisor(FLOOR_ATTRIB,&1);&&这里都是司空见惯的代码了(见[] ),我们直接使用一个位置向量作为attribute(当然你也可以使用矩阵,但就要多使用几个attribute location来划分了。事实上我只需要&不同的位置&,那直接使用位置向量,在Shader里再结合进一个单位模型矩阵岂不更好)。但不同之处在于FLOOR_ATTRIB这个shader attribute location的设置方法,有两点:第一点是数据本身。
std::vector&ZWVector3&&floorL&&
for&(int&i&=&0;&i&&&m_nInstanceC&++i)&&
&&&&floorLocations.push_back(..floorLocation[i]);&&
}&&上述交代了数据大致是怎么定义的。注意到了吗,总数是m_nInstanceCount,也就是说它不是按顶点个数来组织的,而是以Instance个数来组织的&&它不是顶点的Attribute而是Instance的Attribute。如果单纯从数据量来改变,这是没有效果的(默认还是把这数据当做顶点的数据,一般如果数据个数小于顶点数,那渲染结果就是后半的顶点要悲剧了 - -),真正让它成为Instance专属数据的是glVertexAttribDivisor这个函数&&这是第二点。glVertexAttribDivisor第一个参数也还是attribute location,第二个参数指明当前的数据(floorLocations)是每多少个Instance变更一次。这里1的意思是每一个Instance(实例)变更一次,所以渲染时第一个Instance的vertex shader中的FLOOR_ATTRIB对应的attribute都将全是floorLocations[0]这个数据,第二个Insatnce则是对应floorLocations[1]这个数据&&第m_nInstanceCount个Instance则是对应floorLocations[m_nInstanceCount - 1]这个数据:
glBindVertexArray(m_nFloorVAO);&&
glDrawElementsInstanced(GL_TRIANGLES,&6,&GL_UNSIGNED_SHORT,&NULL, m_nInstanceCount);&&这就是我们需要的。接下来就是在Vertex Shader里根据该attribute去构建模型矩阵,把顶点移到floorLocations[i]指定的位置了。无论是变换矩阵、配色还是其他任何特定于各个Instance的特性,都可以通过这种方法去实现。回到开头的那段代码,应用Geometry Instancing的话:
glGenVAO(...,&m_nVAO);&&
glBindVAO(...,&m_nVAO);&&
glGenVBO(...);&&
glBindVBO(...);&&
glBufferData(...InstanceData...);&&
glEnableVertexAttrib(...);&&
glVertexAttribPointer(..);&&
glVertexAttribDivisor(..,&1);&&
glBindVAO(...,&NULL);&&
glBindVAO(...,&m_nVAO);&&
DrawArchitecture(...,&NUM);&&&&这里只有一个DrawCall,而且所有实例Attribute都用VAO存储好。渲染的时候就简单很多了,&一次提交,多次渲染&。再提一下,glVertexAttribDivisor的第二个参数,如果是2的话,那就是每两个Instance变更一次instance attribute&&如此类推。那如果是0呢?那就是跟以前一样,数据&退化&变成顶点Attribute了,呵呵。还有没有其他方法呢?再回头看一看Uniform这种类型的输入参数。Uniform一般是针对每个DrawCall的,目前是无法&降格&到针对每个Insatnce(与此相对,attribute一般是针对每个顶点的,可以&升格&到针对每个Instance,如上所述)。但是我们也可以把所有的Instance数据打包成一个Array,作为uniform传入vertex shader&&上面不是提及gl_InstanceID这个东西的作用了么?用它来检索这个Array不就OK了么!当然了这个方法需要在DrawCall前传入一个或许很&重&的unifom变量(使用UBO或许可以减小GLSL对uniform变量占宽的限制),Vettex Shader里也得多个检索。至于什么方法更好,就看应用场合+见仁见智了。像如果每个实例需要不同的纹理,那最好的方案是传入一个texture Array([] ),然后使用gl_InstanceID来检索(注意它是个int值,传入fragment shader里的时候要指定flat来避免栅格化插值)。像一个天空盒SkyBox,六个面都是矩形,模型矩阵和纹理不一样,就可以这样做。
#version&330&&
#extension&GL_EXT_gpu_shader4&:&enable&&
uniform&sampler2DArray&&&basetexA&&
in&vec2&varying_&&
flat&in&int&varying_InstanceID;&&
layout(location&=&0)&out&vec4&fragC&&
void&main(void)&&
&&&vec4&texCol&=&texture2DArray(basetexArray,&vec3(varying_texcoord,&varying_InstanceID));&&
&&&fragColor&=&texC&&&
}&&再谈到Geometry Shader的缺点,其中一个就是对于CPU端的视锥体剔除(在渲染前设立条件,视锥体外的物体都不渲染)。因为只有一个DrawCall,你将无法根据预先判断把不在视锥体内的Insatnce剔除渲染阵列&&所有流水线操作都将执行,这样对于大场景的大批量渲染的场景管理策略失效,会造成效率的负向影响,甚至Geometry Instancing这应用也得不偿失了。在往后的文章,我将会谈及另一种针对Instanced Objects的剔除方法,也就是在[]中提及的利用Geometry Shader进行几何元剔除的方式,通过额外的一个简单Pass判定可见性,剔除并FeedBack到第二个Pass渲染视锥体可见的物件。这种方式可以一定程度减小Instancing的上述负向影响。本文到此结束。随着GPU图形技术的发展,以及大批量物件渲染的需要,过去使用范围很受限的Geometry Instancing如今也越来越重要了,OpenGL对这类技术的支持也越来越丰富,也将越来越更丰富。&本文来源于 ZwqXin (), 转载请注明&&&&&&原文地址:
&&( 15:5:43)&&( 15:30:17)&&( 14:46:59)&&( 15:43:51)&&( 14:50:43)&&( 17:11:7)&&( 21:14:49)&&( 22:3:26)&&( 17:12:38)&&( 16:55:35)
大神,VAO,VBO做OpenGL instance我知道怎么做,用display list怎么做?能否提供点思路,感激不尽!
Powered ByIBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
学习如何构建基于公共事件基础架构(Common Event Infrastructure,CEI)的应用程序用于测试事件群和事件选择器。作者提出这种称为 EventTester 的应用程序,然后向您展示了将事件访问接口用于基于指定的事件选择器和事件群来查询历史事件。本文向您展示了如何为基于业务流程执行语言(Business Process Execution Language,BPEL)的标有“Business Relevant”的流程创建事件选择器。
, 咨询软件工程师, IBM
Naveen Sachdeva 是 IBM Application Integration Middleware 开发小组 WebSphere Competency Center 的一名咨询软件工程师。他在大规模系统集成以及分布式计算系统的设计和开发方面有超过 10 年的经验。目前他使用 IBM 产品帮助业务伙伴从事技术实现和提供概念验证。
引言CEI 为您提供了可以用来查询历史事件的事件访问接口。为了查询事件,您需要指定一个事件群,并且随意指定一个事件选择器(请见侧栏的来获取更多信息)。CEI 包括了应用程序——CBEViewer——您可以用于查询基于指定事件群的事件。但是在您创建事件群之前,需要测试相应的事件选择器。除此之外,您也可以在使用这样的组合代码之前与事件群一起测试事件选择器。本文提出了应用程序——EventTester——您可以利用它来测试事件选择器、事件群以及使用事件选择器的事件群。本文同时也向您展示了如何使用该应用程序与 CBEViewer 应用程序的组合来创建事件选择器。事件访问(Event Access)接口CEI 支持 XPath 语法的子集来进行事件查询。您可以使用事件访问接口来查询事件,该接口是由 EventAccess 会话 bean 实现。您可以使用相应的本机接口来创建 EventAccess bean 实例,如 所示。清单 1.创建 EventAccess bean 的实例// use home interface to create remote event access bean
InitialContext context = new InitialContext();
Object eventAccessHomeObj =
context.lookup("ejb/com/ibm/events/access/EventAccess");
EventAccessHome eventAccessHome = (EventAccessHome)
PortableRemoteObject.narrow(eventAccessHomeObj,
EventAccessHome.class);
eventAccess = (EventAccess) eventAccessHome.create();Event Access 接口支持以下的查询事件的方法:全局实例标识符——使用它的可以用作主关键字的 globalInstandId 事件特性来获取事件。CommonBaseEvent event =
eventAccess.queryEventByGlobalInstanceId(eventId);事件群——检索属于指定事件群的事件并且使用事件选择器来(随意地)匹配指定的标准。使用 ascendingOrder 参数按照事件创建的时间以升序或者降序的方式命令事件。maxEvent 参数用于指定从事件查询返回的事件的最大数目。CommonBaseEvent[] events =
eventAccess.queryEventsByEventGroup(eventGroup, eventSelector, 关联类型——通过 associationType 检索相关的事件来获取给定的事件。事件可以有其它相关的或者关联的事件。关联类型属性定义了关系类型,例如:contains、cleared、causedBy、multiPart 或者 correlated。CommonBaseEvent[] events =
eventAccess.queryEventsByAssocation(associationType,
eventId);EventTester 应用程序EventTester 应用程序是一个基于事件访问接口的应用程序,您可以使用它来测试事件选择器和事件群。在下载(Download)部分中有可用的完整代码(单击本文顶部或者底部的 code 图标来下载代码)。 展示了用于该应用程序的图形用户接口。给定事件群及事件选择器,此应用程序将返回相应的事件。您也可以通过使用事件群的缺省值或者 All events 来分别测试事件选择器。类似地,您可以通过使用事件选择器的缺省值或者 CommonBaseEvent[@globalInstanceId] 来分别测试事件群。 这些事件以表格的格式显示,每行代表了一个事件。图 1. 事件测试器(Event Tester)应用程序该应用程序包括了一个 Java Server Page(JSP)和一个 servlet。 和(侧面的文件中显示了代码清单)分别显示了该应用程序的 JSP 和 servlet 代码。JSP 提供了该应用程序的前端部分。当您单击 Display Events 按钮时,它调用了 DisplayEvents servlet。该 servlet 使用事件访问接口来查询事件,并且将结果提交给 JSP。然后该 JSP 编排这些事件,并将它们显示给用户。为了编排这些事件,JSP 假定这些事件是 CBE 版本 1.0.1 的(有关 CBE 的详细信息,请参考部分中的使用通用基础事件(Common Base Event)模型来标准化消息)。使用 EventTester 应用程序您可以通过或者不通过 CBEViewer 应用程序来使用 EventTester 应用程序。因为 CBEViewer 有一个更好的用户接口和过滤机制,所以我建议通过利用 CBEViewer 应用程序来使用 EventTester 应用程序。您可以首先使用 CBEViewer 来查询所有的事件(使用 All Events 事件群)并了解您所感兴趣的事件的结构或者模式,然后创建相应的 XPath 查询,并使用 EventTester 应用程序对其进行测试。例如,假设您有一个名为 MileStoneManager 的流程,标有“BusinessRelevant”;换句话说,无论在它启动或者停止的时候都会发出事件,并且您对查询所有的启动事件和相关的停止事件感兴趣。为了理解这些事件的结构,您使用 CBEViewer 应用程序。 显示了 CBEViewer 中所需的事件,并且 和 显示了它们的详细信息。从启动事件的详细信息中,您可以看到该事件的 extensionName 是“WPC:ProcessInstanceEvent”。它有一个名为“processTemplateName”的 extendedDataElement,它显示了该事件是由 MileStoneManager 发出的,而且该情形下的 categoryName 是“StartSituation”,这表明了该事件是在流程启动时发出。与之类似,从停止事件的详细信息中,您可以查看到该事件的 extensionName 也是“WPC:ProcessInstanceEvent”。它没有任何字段表明该事件是由 MileStoneManager 发出的,但是它的 contextDataElement 与启动事件的 contextDataElement 相同,并且该情形的 categoryName 是“StopSituation”。图 2. CBEViewer 应用程序以下是有关 MileStoneManager 启动事件的详细信息:表 1. MileStoneManager 启动事件的详细信息名称值版本-1.0.1globalInstanceIdCEC05DB5C52F6EECDextensionNameWPC:ProcessInstanceEventlocalInstanceIdcreationTimeT19:34:53.213Z严格性10msg优先权-sequenceNumber1repeatCount0elapsedTime0ContextDataElement:
ECSCurrentID / contextValue_PI:fb340d.ac3cd9f6.ContextDataElement:
ECSParentID / contextValue_PI:fb33fe.ac3cd9f6.ExtendedDataElement:
UsernameUNAUTHENTICATEDExtendedDataElement:
processTemplateNameMileStoneManagerExtendedDataElement:
processTemplateId_PT:fcafbd.ac3cd9f6.cfc80161ExtendedDataElement:
processInstanceId_PI:fb340d.ac3cd9f6.ExtendedDataElement:
processInstanceExecutionState2 - STATE_RUNNINGExtendedDataElement:
processTemplateValidFromWed
00:00:00.000reporterComponentIdsourceComponentId / componentWBI-SF#Platform 5.1 [BASE 5.1.1 a0426.01] [JDK 1.4.1 ${build.level}] [PME 5.1.1 o0429.02]sourceComponentId / subComponentWPCsourceComponentId / componentIdTypeProductNamesourceComponentId / instanceIdlocalhost\localhost\server1sourceComponentId / applicationsourceComponentId / executionEnvironmentWindows .0sourceComponentId / locationnaveen.sourceComponentId / locationTypeHostnamesourceComponentId / processId1520sourceComponentId / threadIdServlet.Engine.Transports : 0sourceComponentId / componentType/namespaces/autonomic/Workflow_EnginemsgDataElementsituation / categoryNameStartSituationsituation / situationType / reasoningScopeEXTERNALsituation / StartSituation / successDispositionSUCCESSFULsituation / StartSituation / situationQualifierSTART_COMPLETED以下表格概述了 MileStoneManager 停止事件的详细信息:表 2. MileStoneManager 中止事件的详细信息名称值版本1.0.1globalInstanceIdCEC05DB5C52F6EextensionNameWPC:ProcessInstanceEventlocalInstanceIdcreationTimeT19:36:32.889Z安全10msg优先权-sequenceNumber1repeatCount0elapsedTime0ContextDataElement: ECSCurrentID / contextValue_PI:fb340d.ac3cd9f6.ContextDataElement: ECSParentID / contextValue_PI:fb340d.ac3cd9f6.ExtendedDataElement: WPCEventCode21004ExtendedDataElement: processInstanceExecutionState3 - STATE_FINISHEDreporterComponentIdsourceComponentId / componentWBI-SF#Platform 5.1 [BASE 5.1.1 a0426.01] [JDK 1.4.1 ${build.level}] [PME 5.1.1 o0429.02] sourceComponentId / subComponentWPCsourceComponentId / componentIdTypeProductNamesourceComponentId / componentIdTypelocalhost\localhost\server1sourceComponentId / applicationsourceComponentId / executionEnvironmentWindows .0sourceComponentId / locationnaveen.sourceComponentId / locationTypeHostnamesourceComponentId / processId1520sourceComponentId / threadIdServlet.Engine.Transports : 0sourceComponentId / componentType/namespaces/autonomic/Workflow_EnginemsgDataElementsituation / categoryNameStopSituationsituation / situationType / reasoningScopeEXTERNALsituation / StopSituation / successDispositionSUCCESSFULsituation / StopSituation / situationQualifierSTOP_COMPLETED基于这些启动事件的详细信息,您可以创建以下的事件选择器来查询所有的 MileStoneManager 启动事件:CommonBaseEvent[extensionName='WPC:ProcessInstanceEvent']
and extendedDataElement[name='processTemplateName'
and type='string' and values='MileStoneManager']
and situation[categoryName='StartSituation']您可以使用 EventTester 应用程序测试这个事件选择器,如 所示。此页面显示了基于上面的事件选择器的事件的详细信息。既然您已经验证了该事件选择器可以正常工作,那么就您可以创建相应的事件群——MileStoneManagerStartEventGroup(有关如何创建事件群的详细信息,请参考部分中的“随需应变的业务流程生命周期,第 8 部分:业务流程监督——创建关键性能指示器”),然后使用 EventTester 应用程序再对其进行测试。图 3. 测试启动事件选择器为了查询给定的启动事件的停止事件,您可以使用以下的事件选择器:CommonBaseEvent[extensionName='WPC:ProcessInstanceEvent'
and situation[categoryName='StopSituation']
and contextDataElements[name='ECSCurrentID'
and type='ECSID' and values='&start event values&']]在运行时要指明 &start event values& 的地方(例如 PI:fb340d.ac3cd9f6.)。因为事件群只能创建成静态事件选择器,所以您不能创建该事件选择器相应的事件群。但是您可以将该事件选择器分为两个事件选择器,如下所示:CommonBaseEvent[extensionName='WPC:ProcessInstanceEvent' and situation[categoryName='StopSituation']]CommonBaseEvent[contextDataElements[name='ECSCurrentID' and type='ECSID' and values='&start event values&']]既然您已经创建了第一个事件选择器相应的 ProcessStopEventGroup,并且利用第二个事件选择器来使用它进行查询合适的停止事件(有关如何创建事件群的详细信息,请参考部分中的“随需应变的业务流程生命周期,第 8 部分:业务流程监督——创建关键性能指示器”)。但是在您编写相应的代码之前,可以使用 EventTester 应用程序来测试该场景,如 所示。图 4. 测试停止事件选择器结束语本文中,您学会了如何构建基于 Common Event Infrastructure(CEI)的应用程序用于测试事件群和事件选择器。您也学会了该应用程序如何使用事件访问接口来查询基于指定事件选择器和事件群的历史事件,以及如何为标有“Business Relevant”的流程创建事件选择器。
下载描述名字大小Event tester WAR file9 KB
您可以参阅本文在 developerWorks 全球站点上的 。访问 来获取更多有关 XPath 限定的信息。通过文章(developerWorks,2005 年 3 月)学习如何创建事件群。通过文章(developerWorks,2004 年 2 月)学习更多有关通用基础事件模型的知识。访问
可以看到技术书籍的完整清单,包括数以百计的 。通过参与 ,加入 developerWorks 社区。IBM developerWorks 开发小组在世界范围内拥有上百份,您可以免费获取。想要更多资料吗?developerWorks 的 专区有数以百计的科技文献以及关于如何开发 Web 服务应用程序的入门级、中级和高级教程。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
为灾难恢复构建应用,赢取现金大奖。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=SOA and web servicesArticleID=63081ArticleTitle=构建 CEI 应用程序用于测试事件选择器和事件群publish-date=}

我要回帖

更多关于 instanceof什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信