测试jbpm6.2使用的基础类

方便了解jbpm6.2功能我们可以建立一个测试项目,在其中构建一个测试基础类,具体步骤如下所示。

在集成了插件org.drools.updatesite-6.2.0.Final.zip的eclipse中新建jbpm project。插件在参考链接1中jbpm-6.2.0.Final-installer-full.zip内已包含。

将此项目引入依赖的jbpm所需要的jar——在安装的jbpm6.2-installer-full\runtime中,参见上节jbpm6.2 installer安装过程。

在项目目录src\main\resources\META-INF中增加persistence.xml文件,此JPA文件中配置测试JBPM功能的必要entity。persistence.xml文件内容如下所示。


<persistence 

  version="2.0"

  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

                      http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"

  xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns="http://java.sun.com/xml/ns/persistence">

 

  <persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <jta-data-source>jdbc/jbpm-ds</jta-data-source>        

    

        <mapping-file>META-INF/JBPMorm.xml</mapping-file>

        <mapping-file>META-INF/Taskorm.xml</mapping-file>

        <mapping-file>META-INF/TaskAuditorm.xml</mapping-file>

 

        <class>org.drools.persistence.info.SessionInfo</class>

        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>

        <class>org.drools.persistence.info.WorkItemInfo</class>

        <class>org.jbpm.persistence.correlation.CorrelationKeyInfo</class>

        <class>org.jbpm.persistence.correlation.CorrelationPropertyInfo</class>

 

        <class>org.jbpm.process.audit.ProcessInstanceLog</class>

        <class>org.jbpm.process.audit.NodeInstanceLog</class>

        <class>org.jbpm.process.audit.VariableInstanceLog</class>

 

        <!-- manager -->

        <class>org.jbpm.runtime.manager.impl.jpa.ContextMappingInfo</class>

 

        <class>org.jbpm.services.task.impl.model.AttachmentImpl</class>

        <class>org.jbpm.services.task.impl.model.ContentImpl</class>

        <class>org.jbpm.services.task.impl.model.BooleanExpressionImpl</class>

        <class>org.jbpm.services.task.impl.model.CommentImpl</class>

        <class>org.jbpm.services.task.impl.model.DeadlineImpl</class>

        <class>org.jbpm.services.task.impl.model.DelegationImpl</class>

        <class>org.jbpm.services.task.impl.model.EscalationImpl</class>

        <class>org.jbpm.services.task.impl.model.GroupImpl</class>

        <class>org.jbpm.services.task.impl.model.I18NTextImpl</class>

        <class>org.jbpm.services.task.impl.model.NotificationImpl</class>

        <class>org.jbpm.services.task.impl.model.EmailNotificationImpl</class>

        <class>org.jbpm.services.task.impl.model.EmailNotificationHeaderImpl</class>

        <class>org.jbpm.services.task.impl.model.PeopleAssignmentsImpl</class>

        <class>org.jbpm.services.task.impl.model.ReassignmentImpl</class>

 

        <class>org.jbpm.services.task.impl.model.TaskImpl</class>

        <class>org.jbpm.services.task.impl.model.TaskDataImpl</class>

        <class>org.jbpm.services.task.impl.model.UserImpl</class>

 

        <!--BAM for task service -->

        <class>org.jbpm.services.task.audit.impl.model.BAMTaskSummaryImpl</class>

 

        <!-- Event Classes -->

        <class>org.jbpm.services.task.audit.impl.model.TaskEventImpl</class>

 

        <!-- Task Audit Classes -->

        <class>org.jbpm.services.task.audit.impl.model.AuditTaskImpl</class>

 

    <properties>

      <property name="hibernate.max_fetch_depth" value="3"/>

      <property name="hibernate.show_sql" value="true" />	

 

      <!-- BZ 841786: AS7/EAP 6/Hib 4 uses new (sequence) generators which seem to cause problems -->      

      <property name="hibernate.id.new_generator_mappings" value="false" />            

 

      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.BitronixJtaPlatform" />

    </properties>        

  </persistence-unit>

    

</persistence>

建立测试基础类。在此类中构建数据源、JBPM RuntimeManager(加载待测试流程),代码如下所示。


package com.chenwd.jbpm.test.base;

 

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;

 

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

 

import org.jbpm.process.audit.strategy.StandaloneJtaStrategy;

import org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder;

import org.jbpm.services.task.identity.JBossUserGroupCallbackImpl;

import org.junit.After;

import org.junit.Before;

import org.kie.api.io.ResourceType;

import org.kie.api.runtime.manager.RuntimeEnvironment;

import org.kie.api.runtime.manager.RuntimeManager;

import org.kie.api.runtime.manager.RuntimeManagerFactory;

import org.kie.api.task.UserGroupCallback;

import org.kie.internal.io.ResourceFactory;

 

import bitronix.tm.resource.jdbc.PoolingDataSource;

 

public class jbpmTestBase {

 

 

    protected static EntityManagerFactory emf;

    protected static StandaloneJtaStrategy persistenceStrategy;

    protected static EntityManager em;

    private static PoolingDataSource ds;

 

    @Before

    public void setup() {

    	 ds = setupDataSource();

    	 

        Map configOverrides = new HashMap();

        configOverrides.put("hibernate.hbm2ddl.auto", "none");

        configOverrides.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");

        emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa", configOverrides);

        if(emf != null){

        	persistenceStrategy = new StandaloneJtaStrategy(emf);

        	em = persistenceStrategy.getEntityManager();

        }

    }

 

    @After

    public void teardown() {

        if (ds != null) {

            ds.close();

        }

    }

    

    protected static void out(Object o){

    	System.out.println(String.valueOf(o));

    }

    

    private static RuntimeManager getRuntimeManager(String process) {

        Properties properties = new Properties();

        properties.setProperty("krisv", "");

        properties.setProperty("mary", "");

        properties.setProperty("john", "");

        UserGroupCallback userGroupCallback = new JBossUserGroupCallbackImpl(properties);

 

        RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault().persistence(true)

                .entityManagerFactory(emf).userGroupCallback(userGroupCallback)

                .addAsset(ResourceFactory.newClassPathResource(process), ResourceType.BPMN2)

                .get();

        return RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment);

 

    }

    

    

    private static PoolingDataSource setupDataSource() {

        PoolingDataSource pds = new PoolingDataSource();

        pds.setUniqueName("jdbc/jbpm-ds");

        pds.setClassName("bitronix.tm.resource.jdbc.lrc.LrcXADataSource");

        pds.setMaxPoolSize(5);

        pds.setAllowLocalTransactions(true);

        pds.getDriverProperties().put("user", "root");

        pds.getDriverProperties().put("password", "root");

        pds.getDriverProperties().put("url", "jdbc:mysql://localhost:3306/jbpm2");

        pds.getDriverProperties().put("driverClassName", "com.mysql.jdbc.Driver");

        pds.init();

        return pds;

    }

}

在上面的类中,getRuntimeManager方法加载的用户的数量有限,在使用它做试验时能够动态设置task
actorid的账号比较少,而且没有group。我们可以在构建RuntimeEnvironment时自己实现userGroupCallback接口,这样可以对用户和组进行java编码验证。如下所示。


private static RuntimeManager getRuntimeManager(String process) {

        RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault().persistence(true)

                .entityManagerFactory(emf).userGroupCallback(new UserGroupCallback() {

        			public List<String> getGroupsForUser(String userId, List<String> groupIds, List<String> allExistingGroupIds) {

        				List<String> result = new ArrayList<String>();

        				if ("chenwd".equals(userId)) {

        					result.add("group1");

        				} 

        				return result;

        			}

        			public boolean existsUser(String arg0) {

        				return true;

        			}

        			public boolean existsGroup(String arg0) {

        				return true;

        			}

        		})

                .addAsset(ResourceFactory.newClassPathResource(process), ResourceType.BPMN2)

                .get();

        return RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment);

 

    }

在此方法中chenwd为group1的成员。如果处理group task可以采用这种构建方式进行测试。之后我们的具体测试类可以继承这个类,获取kieSession和taskServcie进行流程发起和task处理。示例如下所示。


public class JbpmTest extends JbpmTestBase{

 

    @Test

    public void testStartProcess() throws Exception {

 

        try {

 

            RuntimeManager manager = getRuntimeManager("sample.bpmn");

            RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get());

            KieSession ksession = runtime.getKieSession();

 

 

            //设置流程variables,发起流程

            Map<String, Object> params = new HashMap<String, Object>();

            ProcessInstance pi = ksession.startProcess("com.sample.bpmn.hello", params);

 

 

            manager.disposeRuntimeEngine(runtime);

 

        } catch (Throwable th) {

            th.printStackTrace();

        }

    }

}

参考

1. jbpm6.2发布内容

http://sourceforge.net/projects/jbpm/files/jBPM%206/jbpm-6.2.0.Final/

2. jbpm6.2 user guide

http://docs.jboss.org/jbpm/v6.2/userguide/

3. jbpm6.2 API

http://docs.jboss.org/jbpm/v6.2/javadocs/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-15 11:08:59

测试jbpm6.2使用的基础类的相关文章

測试jbpm6.2使用的基础类

方便了解jbpm6.2功能我们能够建立一个測试项目,在当中构建一个測试基础类,详细过程例如以下所看到的. 在集成了插件org.drools.updatesite-6.2.0.Final.zip的eclipse中新建jbpm project.插件在參考链接1中jbpm-6.2.0.Final-installer-full.zip内已包括. 将此项目引入依赖的jbpm所须要的jar--在安装的jbpm6.2-installer-full\runtime中,參见上节jbpm6.2 installer安

Selenium Web测试基础类及方法

package testNG; import java.awt.Desktop; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.text.SimpleDateFormat; import java.util.Date;

Atitit.可视化编程jbpm6 的环境and 使用总结...

Atitit.可视化编程jbpm6 的环境and 使用总结... 1. Jbpm的意义 1 2. Jbpm6环境配置 2 2.1. Down 2 2.2. Install eclipse jbpm plugin 2 2.3. Set Jbpm6_Runtimes 2 3. 顺序执行的流程配置 3 3.1. Cretae demo prj 执行自动生成的测试代码 3 3.2. 建立新的流程bpmn文件 3 3.3. 添加start 跟end控件 4 3.4. 添加一个script task控件..

测试多线程下载的java类

多线程下载的基础类,类似于迅雷,qq旋风等下载器一样的原理 package com.shenzhen.mutiledownload2014; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /** * 测试多线程下载的样例 * * @author mayubao * */ public class TestDow

web测试

web开发中为了确保程序的正确性,单元测试必不可少.但是不借助测试框架,测试的后,每次修改都要重启Tomcat等服务容器,很麻烦.Junit是个很不错的单元测试框架.若用JUnit4测试SSH框架的架构,尤其是Service层或Action层,若通过自动注解的方式,通常会碰到nullPointer的问题,我现在不能从原理的高度来解释,但是可以给出解决此类的方法. 1.新建一个基础类,用户加载配置文件,我将其设置为 /** * 加载配置文件的基础类 * * Created by li on 201

.NET单元测试的艺术-3.测试代码

开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录: 1.入门 2.核心技术 3.测试代码 一.测试层次和组织 1.1 测试项目的两种目录结构 (1)集成测试和单元测试在同一个项目里,但放在不同的目录和命名空间里.基础类放在单独的文件夹里. (2)集成测试和单元测试位于不同的项目中,有不同的命名空间. 实践中推荐使用第二种目录结构,因为如果我们不把

去IOE--中国人自主知识产权Android测试工具

软件测试工具,作为一个软件的细分领域,它和基础类的操作系统一样,一直是国人难以触及的技术领域,它的研发需要对软件语言最底层的编译技术以及软件测试方法有非常深入的技术储备.软件测试工具,尤其是可以达到商用标准的白盒测试工具一直被国外的几大老牌软件测试工具所垄断,即使中国的军方以及航天航空领域也通常别无选择.在斯诺登事件发生以后,信息安全问题已经上升到国家安全的高度,并且随着数字化.网络化.智能化.服务化的发展,软件应用的比重在逐年加大,软件的安全对国家信息安全有了越来越大的影响,软件国产化也就成为

SpringMVC是用junit测试

架包支持:junit.jar;org.springframework.test-3.1.0.RELEASE.jar 测试Dao基础类:JUnitDaoBase Java代码   package test.test; import javax.annotation.Resource; import javax.sql.DataSource; import org.junit.runner.RunWith; import org.springframework.test.context.Contex

SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法

使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java.util.Date类型 1 import java.util.Date; 2 3 public class User { 4 5 private int userId; 6 private String userName; 7 private Date createDate; 8 9 public