jbpm与ssh完整示例.docx
- 文档编号:5383268
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:36
- 大小:27.94KB
jbpm与ssh完整示例.docx
《jbpm与ssh完整示例.docx》由会员分享,可在线阅读,更多相关《jbpm与ssh完整示例.docx(36页珍藏版)》请在冰豆网上搜索。
jbpm与ssh完整示例
目录
说明1
流程的定义1
流程的发布3
流程实例的启动3
流程节点的流转3
查看流程节点图片3
说明
Jbpm的开发流程可以按如下几步进行:
流程的定义、流程的发布、流程实例的启动、流程节点的流转、查看流程节点图片。
本示例是在spring2.0、hibernate3.2、struts1.2下开发。
如果是其它版本的框架也很容易做程序的迁移。
流程的定义
流程的定义建议使用jbpm提供的eclipse下的插件,图形化配置插件安装文件可以到jbpm-starters-kit-3.1.4\jbpm-designer\jbpm-gpd-feature\eclipse下找到,需注意版本。
使用这种方式可以把定义的流程描述的三个文件压缩成zip包,统一的部署到数据库中,方便b/s系统中显示图片当前节点信息。
1插件安装
把jbpm-gpd-feature文件夹复制到C:
\ProgramFiles\MyEclipse-6.0M1\eclipse\plugins下,注意自己的ecplise路径。
在C:
\ProgramFiles\MyEclipse-6.0M1\eclipse\links文件夹下建立jbpm-gpd.link文件。
内容如下:
path=C:
\\ProgramFiles\\MyEclipse-6.0M1\\eclipse\\plugins\\jbpm-gpd-feature。
这样再重新启动eclipse就可以使用流程定义功能了。
2流程的定义
在eclipse环境中选择file->new->other下的jbossjbpm->processdefinition流程定义。
要在自己的项目文件中先指定文件要创建的文件夹。
这样会产生三个文件:
gpd.xml、processdefinition.xml、processimage.jpg。
processdefinition.xml为描述流程定义文件,本例为:
xmlversion="1.0"encoding="UTF-8"?
>
processimage.jpg文件是定义流程产生的图片、gpd.xml文件是图形文件的座标说明。
用于在b/s下显示流程流转的图片位置。
本例中的gpd.xml文件
xmlversion="1.0"encoding="UTF-8"?
>
流程的发布
流程的发布常用的有二种方式:
直接发布processdefinition.xml定义的xml文件,在以前的文章描述中使用的方式。
建议使用第二种方式,gpd.xml、processdefinition.xml、processimage.jpg压缩成zip文件上传。
注rar不可以,java当中不支持这种商业化的压缩文件。
代码如下:
1deployjbpm.jsp下选择zip压缩文件上传
<%@pagecontentType="text/html;charset=UTF-8"%>
<%@includefile="/commons/taglibs.jsp"%>
method=deploy"enctype="multipart/form-data"method="post"/> 选择zip类型流程上传: 2struts中的action文件 importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importmons.logging.Log; importmons.logging.LogFactory; importorg.apache.struts.action.ActionForm; importorg.apache.struts.action.ActionForward; importorg.apache.struts.action.ActionMapping; importmons.core.web.StrutsAction; importcom.shane.security.service.UploadProcessManager; publicclassJbpmActionextendsStrutsAction{ privatestaticLoglog=LogFactory.getLog(JbpmAction.class); privateUploadProcessManageruploadProcessManager; publicvoidsetUploadProcessManager(UploadProcessManageruploadProcessManager){ this.uploadProcessManager=uploadProcessManager; } /** *上传流程文件 *@parammapping *@paramform *@paramrequest *@paramresponse *@return */ publicActionForwarddeploy(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ log.info("执行流程部署! "); log.info(uploadProcessManager.handleRequest(request)); returnmapping.findForward("delpoyindex"); } } 3Service类,使用时要修改自已的hibernate的封装。 代码中使用spring的设置式注入方式。 相关文件可以自行编写。 本方式是根据jbpm自带的示例改写。 3.1接口定义 importjava.io.IOException; importjavax.servlet.http.HttpServletRequest; publicinterfaceUploadProcessManager{ publicvoidprintInput(HttpServletRequestrequest)throwsIOException; publicStringhandleRequest(HttpServletRequestrequest); } 3.2实现类 importjava.io.IOException; importjava.io.InputStream; importjava.util.Iterator; importjava.util.List; importjava.util.zip.ZipInputStream; importjavax.servlet.http.HttpServletRequest; importmons.fileupload.DiskFileUpload; importmons.fileupload.FileItem; importmons.fileupload.FileUpload; importmons.fileupload.FileUploadException; importorg.jbpm.JbpmConfiguration; importorg.jbpm.JbpmContext; importorg.jbpm.graph.def.ProcessDefinition; importmons.core.dao.HibernateEntityDao; publicclassUploadProcessManagerImplextendsHibernateEntityDaoimplementsUploadProcessManager{ privateJbpmConfigurationjbpmConfiguration; publicvoidprintInput(HttpServletRequestrequest)throwsIOException{ InputStreaminputStream=request.getInputStream(); StringBufferbuffer=newStringBuffer(); intread; while((read=inputStream.read())! =-1){ buffer.append((char)read); } } publicStringhandleRequest(HttpServletRequestrequest){ if(! FileUpload.isMultipartContent(request)){ return"Notamultipartrequest"; } try{ DiskFileUploadfileUpload=newDiskFileUpload(); Listlist=fileUpload.parseRequest(request); Iteratoriterator=list.iterator(); if(! iterator.hasNext()){ return"Noprocessfileintherequest"; } FileItemfileItem=(FileItem)iterator.next(); if(fileItem.getContentType().indexOf("application/x-zip-compressed")==-1){ return"Notaprocessarchive"; } returndoDeployment(fileItem); }catch(FileUploadExceptione){ e.printStackTrace(); return"FileUploadException"; } } publicStringdoDeployment(FileItemfileItem){ try{ ZipInputStreamzipInputStream=newZipInputStream(fileItem.getInputStream()); JbpmContextjbpmContext=JbpmContext.getCurrentJbpmContext(); if(jbpmContext==null){ jbpmContext=this.getJbpmContext(); } ProcessDefinitionprocessDefinition=ProcessDefinition.parseParZipInputStream(zipInputStream); jbpmContext.deployProcessDefinition(processDefinition); zipInputStream.close(); return"Deployedarchive"+processDefinition.getName()+"successfully"; }catch(IOExceptione){ return"IOException"; } } privateJbpmContextgetJbpmContext(){ JbpmContextcontext=jbpmConfiguration.getInstance().createJbpmContext(); context.setSession(this.getSession()); returncontext; } publicvoidsetJbpmConfiguration(JbpmConfigurationjbpmConfiguration){ this.jbpmConfiguration=jbpmConfiguration; } } 流程实例的启动 1编写测试的主体页面index_demo.jsp。 index_demo.jsp代码如下: <%@pagecontentType="text/html;charset=UTF-8"%> <%@includefile="/commons/taglibs.jsp"%>
method=createDoc">创建公文 method=bingDoc">将公文与流程绑定(即需要创建流程实例) method=submitDoc">公文创建者提交公文 method=getNode">当前所处的节点 method=getTask">某用户的是否有公文等待其审批 method=goNext">查找到当前的任务对应的公文之后,即可对其审批,并继续流转 method=isFinish">到达终点 method=viewImage&id=246"target="_blank">查看