`
lushuaiyin
  • 浏览: 704929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBPM学习(二)--测试模块代码

 
阅读更多

此篇接上篇 JBPM学习(一)--与SSH整合

http://blog.csdn.net/lushuaiyin/article/details/8599253


SSH与JBPM整合好以后我们必须写测试代码才能确认到底整合成功与否。

在jbpm-4.4\examples\src\org\jbpm\examples路径下我们可以找到官方自带的Demo。

在不知JBPM如何使用前,最好看看Demo的代码。

我挑了这个目录下java这个文件夹里面的代码。把它拷贝到Eclipse中看看。

process.jpdl.xml是流程定义文件,这个打开后能看到图形,也可以看源码。


3个bean和一个测试类。我们要把这些代码整合到SSH中去,就把每个方法在Action重新定义一遍就可以了。

搞定之后,我们再照着自己再定义一个流程。

在Eclipse中新建一个jBPM 4 Process Definition文件。

然后就可以用Eclipse的插件来画流程图了。



WorkFlowTestAction

package org.jbpm.action;

import java.util.List;

import org.base.MyBaseAction;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;

public class WorkFlowTestAction  extends MyBaseAction {
	private static final long serialVersionUID = 1L;
	
	public String execute() throws Exception{
		
		return SUCCESS;
	}
	
	//发布流程
	public String setUp() throws Exception {
		RepositoryService repositoryService=getProcessEngine().getRepositoryService();
	    
		String pro="1";
		if(this.getHttpServletRequest().getParameter("pro")!=null){
			pro=(String)this.getHttpServletRequest().getParameter("pro");
			if(!pro.trim().equals("")){
				if(pro.equals("2")){
					
			    	deploymentId = repositoryService.createDeployment()
			        .addResourceFromClasspath("org/jbpm/config/process.jpdl.xml")//流程定义
			        .addResourceFromClasspath("org/jbpm/config/process.png")//流程定义图,这个可选
			        .deploy();
			    	System.out.println("发布流程2,ID:"+deploymentId);
				}else{
					
					deploymentId = repositoryService.createDeployment()
			        .addResourceFromClasspath("org/jbpm/config/myprocess.jpdl.xml")//流程定义
			        .addResourceFromClasspath("org/jbpm/config/myprocess.png")//流程定义图
			        .deploy();
					System.out.println("发布流程1,ID:"+deploymentId);
				} 
				
			}
		}
	    
	    return NONE;
	}
	
	//查询流程
	public String showAll() throws Exception {
		RepositoryService repositoryService=getProcessEngine().getRepositoryService();
		
		String proname="";
		if(this.getHttpServletRequest().getParameter("proname")!=null){
			proname=(String)this.getHttpServletRequest().getParameter("proname");
			if(proname.trim().equals("")){
				System.out.println("proname参数为空,查询所有流程");
				List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().list();
			    if(processDefinitions!=null){
			    	this.setValueToRequest("processDefinitions", processDefinitions);
			    }
			}else{
				System.out.println("proname参数"+proname);
				List<ProcessDefinition> processDefinitions = repositoryService
				.createProcessDefinitionQuery().processDefinitionName(proname).list();
				
			    if(processDefinitions!=null){
			    	this.setValueToRequest("processDefinitions", processDefinitions);
			    }
			}
			
		}
		
	    return SUCCESS;
	}
	
	//删除流程
	public String tearDown() throws Exception {
		RepositoryService repositoryService=getProcessEngine().getRepositoryService();
		String delId="";
		if(this.getHttpServletRequest().getParameter("delId")!=null){
			delId=(String)this.getHttpServletRequest().getParameter("delId");
			
			if(!delId.trim().equals("")){
				repositoryService.deleteDeploymentCascade(delId);
			    System.out.println("删除流程,ID:"+delId);
			}else{
				System.out.println("流程,ID为空,删除失败");
			}
		}else{
			System.out.println("流程,ID为空,删除失败");
		}
		
	    
	    return NONE;
	}
	
	
	
	public ProcessEngine processEngine;

	public ProcessEngine getProcessEngine() {
		return processEngine;
	}

	public void setProcessEngine(ProcessEngine processEngine) {
		this.processEngine = processEngine;
	}
	
	public String deploymentId;

	public String getDeploymentId() {
		return deploymentId;
	}

	public void setDeploymentId(String deploymentId) {
		this.deploymentId = deploymentId;
	}
}

struts_jbpm_test.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="jbpmtest" extends="base-struts-default" namespace="/jbpmtest">
		<action name="setUp" class="org.jbpm.action.WorkFlowTestAction" method="setUp">
		</action>
		<action name="tearDown" class="org.jbpm.action.WorkFlowTestAction" method="tearDown">
		</action>
		<action name="showAll" class="org.jbpm.action.WorkFlowTestAction" method="showAll">
		   <result name="success">/jsp/jbpmtest/listProcess.jsp</result>
		</action>
	</package>
</struts>

listProcess.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@page import="java.util.*"%>
<%@page import="org.jbpm.api.ProcessDefinition"%>
<% 
String path = request.getContextPath();
%>
<% 
List list=null;
if(request.getAttribute("processDefinitions")!=null){
	list=(List)request.getAttribute("processDefinitions");
}
%>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title></title>
	<script src="<%=path%>/script/jquery-1.7.1.min.js" type="text/javascript"></script>	
</head>
<body style="overflow: scroll; overflow: auto;">

<input type="hidden" name="path" id="path" value='<%=path%>' ></input>

      <table width="500px"  border="1" align="center">
        <tr>
			 <td align="center">流程名字:<input type="text"  id="proname" value='' ></input></td>
		</tr>
		<tr>
			 <td align="center"><h1><a href="javascript:void(0)" onclick="query()">查询</a></h1></td>
		</tr>
		
		<tr>
			 <td align="center"><input type="button" onclick="setUpProcess('1')"  value='发布流程1--myprocess' ></input></td>
		</tr>
		<tr>
			 <td align="center"><input type="button" onclick="setUpProcess('2')"  value='发布流程2--java' ></input></td>
		</tr>
		
	</table>
	
	 <table width="500px"  border="1" align="center">
        <tr>
			 <th align="center">流程id</th><th align="center">流程名字</th><th align="center">操作</th>
		</tr>
		<% 
		if(list!=null){
			for(int i=0;i<list.size();i++){
				ProcessDefinition process=(ProcessDefinition)list.get(i);
				if(process!=null){
					String proid="";
					String proname="";
					if(process.getDeploymentId()!=null){
						proid=process.getDeploymentId();
					}
					if(process.getName()!=null){
						proname=process.getName();
					}
		%>			
				<tr>
					 <td><%=proid%></td><td><%=proname%></td><td><input type="button" onclick="delprocess('<%=proid%>')"  value='删除' ></input></td>
				</tr>
		<%	
				}
			}
		}
		%>
		
	</table>
</body>
</html> 
<script type="text/javascript">	

function query(){
	var proname=document.getElementById("proname").value;
	var urlpath="<%=path%>/jbpmtest/showAll.action?proname="+proname+"&randomStr="+Math.random();
	window.location.href=urlpath;
	
}


function delprocess(id){
	var urlpath="<%=path%>"+"/jbpmtest/tearDown.action";
	$.ajax({
		   type:"POST",
		   url:urlpath,
		   data: "delId="+id+"&randomStr="+Math.random(),
		   success: function(msg){
			   alert("成功删除!");
		     window.location.reload();
		   }
		});
}


function setUpProcess(pro){
	
	var urlpath="<%=path%>"+"/jbpmtest/setUp.action";
	$.ajax({
		   type:"POST",
		   url:urlpath,
		   data: "pro="+pro+"&randomStr="+Math.random(),
		   success: function(msg){
			   alert("成功发布!");
		     window.location.reload();
		   }
		});
}
</script>

如下是整合后的package结构图:



在启动服务器时没有报错,但是在访问jsp页面时,却报错了:

严重: Servlet.service() for servlet jsp threw exception
java.lang.LinkageError: loader constraint violation: when resolving interface method


"javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the
class loader (instance of


org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the
class loader (instance of


org/apache/catalina/loader/StandardClassLoader) for resolved class,
javax/servlet/jsp/JspApplicationContext, have different


Class objects for the type javax/el/ExpressionFactory used in the signature
at org.apache.jsp.index_jsp._jspInit(index_jsp.java:24)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)


从网上找到了原因:

原因:

jbpm4 在tomcat6 下面ssh2 这个错误!
原因是项目中WEB-INF\lib中的三个jar包(juel.jar, juel-engine.jar, juel-impl.jar)和tomcat6下lib中jar
包(el-api.jar)冲突

解决方法:


方法一:换成tomcat5.5 一点问题也没有了

方法二:将juel.jar, juel-engine.jar, juel-impl.jar这三个包复制到tomcat6下lib中,并删除原来的
el-api.jar,切记要把WEB-INF\lib中的juel.jar, juel-engine.jar, juel-impl.jar删除。不然还是要冲突。

------------------------------------------------------------------------------------------------------------------------------------------------------------

继续。。。。

访问http://localhost:8080/frame/jbpmtest/showAll.action

分别请求action中的查询,发布,删除方法都正常。

好,到现在算是整合成功了。

看看效果吧:





分享到:
评论

相关推荐

    jbpm-starters-kit-3.1.2.part1

    jbpm-starters-kit-3.1.2.part1 和 jbpm-starters-kit-3.1.2.part2 是两个分卷压缩文件,它们共同组成一个完整的jbpm开发入门套件。jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于实现...

    jbpm_test.rar_ProcessImageTag_TestJBPM_jbpm_jbpm-te_报销

    “TestJBPM”可能是一个测试框架或项目模块,用于验证和调试所创建的流程。在开发过程中,测试是非常关键的,它确保了流程的正确性和性能。开发者可能已经编写了一些测试用例来验证报销流程的各种场景,比如正常提交...

    jbpm-5.0.0-installer.zip_jbpm_jbpm 5.0_jbpm installer

    【jbpm-5.0.0-installer.zip_jbpm_jbpm 5.0_jbpm installer】这个压缩包是JBoss Business Process Management (jbpm) 的5.0版本安装程序,它提供了完整的jbpm源代码,让我们来深入探讨一下jbpm以及它的5.0版本。...

    jbpm-jpdl-src.rar

    在jbpm-jpdl-src.rar这个压缩包中,我们可以找到jBPM 3.2.2版本的源代码,这对于学习和理解jBPM的工作原理以及如何自定义流程非常有帮助。 在这个源码包中,"org"目录很可能是项目的核心组件,包含了以下关键部分:...

    jbpm-form-modeler-examples-src

    - **Junit测试**:Java单元测试框架Junit可能用于编写测试代码,确保示例功能的正确性。 5. **开发与调试**: - **Eclipse或IntelliJ IDEA集成**:这些IDE提供了对Java项目良好的支持,包括代码调试、自动完成和...

    jbpm-case-mgmt:jBPM案例管理模块

    jBPM案例管理模块是基于Java技术的企业流程管理系统的一个重要组成...通过深入学习和应用jBPM-case-mgmt模块,企业能够更好地管理和优化其案例型业务流程,提高工作效率,减少错误,同时增强业务的灵活性和响应能力。

    JBPM源码包,包含JBPM的源代码

    这个源码包包含了JBPM的核心组件、示例代码以及相关的文档资料,对于深入理解其内部机制和进行二次开发非常有帮助。 1. **核心组件解析** - **jbpm-flow**: 包含了流程定义和执行的核心模块,包括流程定义模型BPMN...

    jbpm5源代码

    10. **jbpm-test**:测试套件,包含了对jbpm5各个模块的功能和性能测试,确保软件的质量和稳定性。 通过对这些源代码的分析和学习,开发者不仅可以掌握工作流管理的基本原理,还能深入了解如何利用jbpm5构建实际的...

    JBPM5.1入门学习

    - **示例流程**:新的`jbpm-examples`模块包含了大量示例流程,展示了JBPM的众多特性,如用户任务、数据传递、任务表单、循环、多实例等。 - **测试与调试**:改进了测试与调试能力,使得使用JUnit测试流程变得更加...

    jBPM5 用户指南-中文

    用户可以通过jBPM提供的示例来学习如何使用jBPM,并且可以利用单元测试来验证流程的正确性。 11. **Eclipse BPMN 2.0插件** Eclipse BPMN 2.0插件允许用户在Eclipse开发环境中创建、编辑和验证BPMN 2.0流程定义。...

    bsh.jar,jcr-1.0.jar,jbpm-identity.jar,jbpm-jpdl.jar

    它允许开发者在运行时动态地执行Java代码,这对于测试、调试或者在应用程序中实现脚本功能非常有用。在JBPM中,BeanShell被用来执行工作流中的脚本任务,提供了灵活的业务规则实现。 2. **jcr-1.0.jar**:这是Java ...

    bsh.jar/ jcr-1.0.jar/ jbpm-identity.jar/ jbpm-jpdl.jar

    在Java应用程序中,BeanShell可以用来动态地执行或测试Java代码,为开发者提供了一种灵活的方式来扩展或控制应用的行为。 **jcr-1.0.jar**:这个文件代表了Java Content Repository (JCR) API的实现,它是一个标准...

    spring2_struts2_jbpm3.2.rar_jbpm struts2_jbpm-demo_jbpm3 spring_

    通过以上步骤,我们就可以构建出一个集成了Spring、Struts2和JBPM的完整系统,它能够优雅地处理业务流程,同时保持代码的清晰和模块化。这样的系统不仅适用于常规的Web应用,也适合于需要复杂流程控制的企业级应用,...

    JBPM4 web设计器实践--命令模式的使用

    命令模式的引入使得流程设计更加模块化,方便代码复用,同时也增强了系统的灵活性,使得撤销/重做功能的实现变得容易。 3. **源码分析**:查看源码,我们可以学习到如何创建命令对象,如何在流程设计器中调用命令,...

    jbpm-工作流核心

    JUnit是一种广泛使用的Java测试框架,它帮助开发者编写可重复、独立的测试案例,确保每个功能模块都按照预期工作。通过单元测试,可以及早发现并修复潜在的bug,提高了软件的稳定性和可靠性。 #### 结论 综上所述...

    jbpm3.1

    jBPM 3.1 是一个开放源代码的工作流引擎,由 JBoss 提供支持,旨在简化业务流程管理(BPM)任务。它提供了一整套工具和服务来支持流程的设计、部署、执行和监控。 #### 二、概述 **1.1. 概述** jBPM 3.1 是一个...

    jbpm jar java

    - 利用jbpm的测试框架进行单元测试,确保流程的正确性。 7. **持续集成与部署** - 在持续集成环境中,可以自动构建包含jbpm的Java项目,并部署到生产环境。 - 使用Kubernetes或Docker等容器技术,实现jbpm服务的...

    jBPM Developer Guide.pdf

    #### 二、jBPM简介 **jBPM**(Java Business Process Model)是JBoss提供的一款开源业务流程管理系统(BPMS),它基于流程图模型来定义业务流程,并通过执行这些流程来实现自动化。jBPM支持BPMN 2.0标准,允许...

    JBPM4开发手册,相当不错的资源

    jbpm.jar 文件包含了多个模块,如 jbpm-api, jbpm-log, jbPM-test-base, jbpm-pvm, jbpm-jpdl 和 jbpm-enterprise,为开发者提供了便捷的一站式解决方案。 【孵化器】章节详细讨论了正在开发和测试的新功能,这些...

    JBPM3 和Eclipse3.6 (helios)的整合问题

    - 首先,下载JBPM3的源代码和相关库文件,包括jbpm-jpdl、jbpm-gwt等模块。 - 在Eclipse中,创建一个新项目,并将下载的JBPM3库导入到项目的类路径中。 2. **Eclipse Helios的准备**: - 安装JBoss Tools插件,...

Global site tag (gtag.js) - Google Analytics