`
qingwei201314
  • 浏览: 168000 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring + jbpm工作流

阅读更多

1.先修改jbpm-human-task/src/man/resources/META-INF/persistence.xml文件,将其修改成要链接的数据库,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence version="1.0"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                                 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
                                 http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_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.task">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <class>org.jbpm.task.Attachment</class>
  <class>org.jbpm.task.Content</class>
  <class>org.jbpm.task.BooleanExpression</class>
  <class>org.jbpm.task.Comment</class>
  <class>org.jbpm.task.Deadline</class>
  <class>org.jbpm.task.Comment</class>
  <class>org.jbpm.task.Deadline</class>
  <class>org.jbpm.task.Delegation</class>
  <class>org.jbpm.task.Escalation</class>
  <class>org.jbpm.task.Group</class>
  <class>org.jbpm.task.I18NText</class>
  <class>org.jbpm.task.Notification</class>
  <class>org.jbpm.task.EmailNotification</class>
  <class>org.jbpm.task.EmailNotificationHeader</class>
  <class>org.jbpm.task.PeopleAssignments</class>
  <class>org.jbpm.task.Reassignment</class>
  <class>org.jbpm.task.Status</class>
  <class>org.jbpm.task.Task</class>
  <class>org.jbpm.task.TaskData</class>
  <class>org.jbpm.task.SubTasksStrategy</class>
  <class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class>
  <class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class>
  <class>org.jbpm.task.User</class>
  <properties>
   <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
   <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
   <property name="hibernate.connection.url" value="jdbc:oracle:thin:@192.168.1.101:1521:XE" />
   <property name="hibernate.connection.username" value="kevin" />
   <property name="hibernate.connection.password" value="asdfff" />
   <property name="hibernate.connection.autocommit" value="false" />
   <property name="hibernate.max_fetch_depth" value="3" />
   <property name="hibernate.show_sql" value="true" />
  </properties>
 </persistence-unit>
</persistence>

2.修改完成后可用一个写好的类启动mina,起动mina的类内容如下:

package com.kevin;

import java.io.IOException;
import java.io.Reader;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.drools.SystemEventListenerFactory;
import org.jbpm.task.AccessType;
import org.jbpm.task.AllowedToDelegate;
import org.jbpm.task.Attachment;
import org.jbpm.task.BooleanExpression;
import org.jbpm.task.Comment;
import org.jbpm.task.Deadline;
import org.jbpm.task.Deadlines;
import org.jbpm.task.Delegation;
import org.jbpm.task.Escalation;
import org.jbpm.task.Group;
import org.jbpm.task.I18NText;
import org.jbpm.task.Notification;
import org.jbpm.task.OrganizationalEntity;
import org.jbpm.task.PeopleAssignments;
import org.jbpm.task.Reassignment;
import org.jbpm.task.Status;
import org.jbpm.task.Task;
import org.jbpm.task.TaskData;
import org.jbpm.task.User;
import org.jbpm.task.query.TaskSummary;
import org.jbpm.task.service.TaskService;
import org.jbpm.task.service.TaskServiceSession;
import org.jbpm.task.service.mina.MinaTaskServer;
import org.mvel2.MVEL;
import org.mvel2.ParserContext;
import org.mvel2.compiler.ExpressionCompiler;

public class MinaServer {

 public static void main(String[] args) {
  EntityManagerFactory emf = Persistence
    .createEntityManagerFactory("org.jbpm.task");
  TaskService taskService = new TaskService(emf,
    SystemEventListenerFactory.getSystemEventListener());
  TaskServiceSession taskSession = taskService.createSession();
  // Add users
  // Map vars = new HashMap();
  // Reader reader = new InputStreamReader(
  // BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );
  // Map<String, User> users = ( Map<String, User> ) eval( reader, vars );
  // for ( User user : users.values() ) {
  // taskSession.addUser( user );
  // }

//   增加ActionId, by Kevin.
//   taskSession.addUser(new User("register"));
//   taskSession.addUser(new User("divert"));
//   taskSession.addUser(new User("deal"));
//   taskSession.addUser(new User("finish"));
  //
  // reader = new InputStreamReader( BaseTest.class.getResourceAsStream(
  // "LoadGroups.mvel" ) );
  // Map<String, Group> groups = ( Map<String, Group> ) eval( reader, vars
  // );
  // for ( Group group : groups.values() ) {
  // taskSession.addGroup( group );
  // }
  // start server
  MinaTaskServer server = new MinaTaskServer(taskService);
  Thread thread = new Thread(server);
  thread.start();
  System.out.println("Mina has stated.");
  taskSession.dispose();
 }

 @SuppressWarnings({ "rawtypes" })
 public static Object eval(Reader reader, Map vars) {
  try {
   return eval(toString(reader), vars);
  } catch (IOException e) {
   throw new RuntimeException("Exception Thrown", e);
  }
 }

 public static String toString(Reader reader) throws IOException {
  int charValue = 0;
  StringBuffer sb = new StringBuffer(1024);
  while ((charValue = reader.read()) != -1) {
   // result = result + (char) charValue;
   sb.append((char) charValue);
  }
  return sb.toString();
 }

 @SuppressWarnings({ "deprecation", "rawtypes" })
 public static Object eval(String str, Map vars) {
  ExpressionCompiler compiler = new ExpressionCompiler(str.trim());

  ParserContext context = new ParserContext();
  context.addPackageImport("org.drools.task");
  context.addPackageImport("java.util");

  context.addImport("AccessType", AccessType.class);
  context.addImport("AllowedToDelegate", AllowedToDelegate.class);
  context.addImport("Attachment", Attachment.class);
  context.addImport("BooleanExpression", BooleanExpression.class);
  context.addImport("Comment", Comment.class);
  context.addImport("Deadline", Deadline.class);
  context.addImport("Deadlines", Deadlines.class);
  context.addImport("Delegation", Delegation.class);
  context.addImport("Escalation", Escalation.class);
  context.addImport("Group", Group.class);
  context.addImport("I18NText", I18NText.class);
  context.addImport("Notification", Notification.class);
  context.addImport("OrganizationalEntity", OrganizationalEntity.class);
  context.addImport("PeopleAssignments", PeopleAssignments.class);
  context.addImport("Reassignment", Reassignment.class);
  context.addImport("Status", Status.class);
  context.addImport("Task", Task.class);
  context.addImport("TaskData", TaskData.class);
  context.addImport("TaskSummary", TaskSummary.class);
  context.addImport("User", User.class);

  return MVEL.executeExpression(compiler.compile(context), vars);
 }
}

3.对spring进行配置,配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/jee
   http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/task
   http://www.springframework.org/schema/task/spring-task-3.0.xsd">

 <context:component-scan base-package="*" />
 <context:annotation-config />
 <aop:aspectj-autoproxy />

 <tx:annotation-driven transaction-manager="txManager"
  proxy-target-class="true" />

 <bean id="txManager"
  class="org.springframework.transaction.jta.JtaTransactionManager" />

 <jee:jndi-lookup id="datasource" jndi-name="jdbc/mvnstruts2" />

 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="datasource" />
  <property name="packagesToScan" value="com.kevin.entity" />
 </bean>
 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <!-- 启动 Mina 供工作流用. -->
 <bean id="myemf"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="datasource" />
  <property name="persistenceUnitName" value="org.jbpm.mvnstruts2" />
  <property name="loadTimeWeaver">
   <bean
    class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
  </property>
 </bean>
 <bean
  class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

 <bean id="minaClient" class="com.kevin.workflow.MinaClient" />
 <bean id="taskClient" factory-bean="minaClient" factory-method="getTaskClient" />
 <bean id="ksession" class="com.kevin.workflow.Ksession"
  init-method="start" />
</beans>

 

3.1 tomcat中server.xml的context内容如下:

  <Context docBase="jbpm_ssh" path="/jbpm_ssh" reloadable="true"
     source="org.eclipse.jst.jee.server:jbpm_ssh">
     <Resource name="jdbc/mvnstruts2" auth="Container"
      type="javax.sql.DataSource" factory="org.objectweb.jotm.datasource.DataSourceFactory"
      driverClassName="oracle.jdbc.driver.OracleDriver" username="kevin"
      password="asdfff" url="jdbc:oracle:thin:@192.168.1.101:1521:XE" />
     <Resource name="UserTransaction" auth="Container"
      type="javax.transaction.UserTransaction" />
     <Transaction factory="org.objectweb.jotm.UserTransactionFactory"
      jotm.timeout="60" />
    </Context>

 

4.spring.xml配置中,Ksession的内容如下:

package com.kevin.workflow;

import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.persistence.jpa.JPAKnowledgeService;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.jbpm.process.workitem.wsht.WSHumanTaskHandler;

public class Ksession {
 private StatefulKnowledgeSession ksession;
 private EntityManagerFactory emf;

 @PersistenceUnit(name = "org.jbpm.mvnstruts2")
 public void setEntityManagerFactory(EntityManagerFactory emf) {
  this.emf = emf;
 }

 public void start() {
  KnowledgeBase kbase;
  try {
   Environment env = KnowledgeBaseFactory.newEnvironment();
   env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);

   kbase = readKnowledgeBase();
   ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase,
     null, env);
   KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
     .newThreadedFileLogger(ksession, "test", 1000);
   ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
     new WSHumanTaskHandler());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 private KnowledgeBase readKnowledgeBase() throws Exception {
  KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
    .newKnowledgeBuilder();
  kbuilder.add(ResourceFactory.newClassPathResource("eventProcess.bpmn"),
    ResourceType.BPMN2);
  return kbuilder.newKnowledgeBase();
 }

 public ProcessInstance startProcess(Map<String, Object> parameters) {
  ProcessInstance processInstance = ksession.startProcess(
    "com.kevin.eventProcess", parameters);
  return processInstance;
 }
}

5.spring配置中minaclient的内容如下:

package com.kevin.workflow;

import org.drools.SystemEventListenerFactory;
import org.jbpm.task.service.TaskClient;
import org.jbpm.task.service.mina.MinaTaskClientConnector;
import org.jbpm.task.service.mina.MinaTaskClientHandler;

public class MinaClient {
 private TaskClient taskClient;

 public MinaClient() {
  SystemEventListenerFactory
    .setSystemEventListener(new SystemEventListener());
  taskClient = new TaskClient(new MinaTaskClientConnector(
    "MinaConnector", new MinaTaskClientHandler(
      SystemEventListenerFactory.getSystemEventListener())));
  taskClient.connect("127.0.0.1", 9123);
 }

 public TaskClient getTaskClient() {
  return taskClient;
 }

 private static class SystemEventListener implements
   org.drools.SystemEventListener {
  public void debug(String arg0) {
  }

  public void debug(String arg0, Object arg1) {
  }

  public void exception(Throwable arg0) {
  }

  public void exception(String arg0, Throwable arg1) {
  }

  public void info(String arg0) {
  }

  public void info(String arg0, Object arg1) {
  }

  public void warning(String arg0) {
  }

  public void warning(String arg0, Object arg1) {
  }
 }
}

 

6.处理过程可参考jbpm-example中humantask的例子。

分享到:
评论

相关推荐

    struts+hibernate+spring+jbpm智能工作流系统

    Struts、Hibernate、Spring 和 jBPM 是四个在企业级应用开发中广泛使用的开源框架,它们结合在一起可以构建出高效且灵活的智能工作流系统。下面将分别介绍这些技术及其在工作流系统中的作用。 **Struts** Struts 是...

    struts2+spring+hibernate+jbpm工作流实例

    在这个“struts2+spring+hibernate+jbpm工作流实例”中,主要展示了如何利用这些技术实现一个公文审批流转的过程。 首先,Struts2是一个基于MVC设计模式的Web应用框架,它负责处理HTTP请求,并将这些请求映射到相应...

    struts+hibernte+spring+jbpm 智能工作流系统

    Struts、Hibernate、Spring 和 jBPM 是四个在IT行业中广泛应用的开源框架和技术,它们共同构建了一个智能工作流系统。这个系统集成了多种技术,旨在提供高效、灵活且可扩展的工作流程管理解决方案。 首先,Struts ...

    spring+struts1+hibernate+jbpm实例

    **JBPM**:JBPM是业务流程管理(BPM)和工作流引擎,用于设计、执行和管理业务流程。它可以定义、执行和监控复杂的业务流程,并且与Spring和其他Java框架有很好的集成。在这个实例中,jbpm-demo可能包含了一个具体的...

    基于struts+spring+hibernate+jbpm的工作流系统

    基于Struts、Spring和Hibernate的集成框架SSH,加上流程管理工具jbpm,构建出的工作流系统是一种高效、灵活的企业级应用解决方案。这种系统主要用于实现业务流程自动化,提升企业的运营效率。 **Struts**:Struts是...

    spring+struts+hibernate+jbpm +dwr整合开发的OA办公系统源码

    4. **jbpm流程引擎**:jbpm是一款开源的工作流和业务流程管理系统,它可以管理和执行业务流程。在OA办公系统中,jbpm负责定义和执行各种审批流程,如请假申请、报销审批等,使得工作流程自动化。 5. **DWR(Direct ...

    spring+hibernate+jbpm整合

    而jBPM则是一种灵活的工作流引擎,用于实现复杂多变的业务流程管理。将这三个技术进行整合能够提供一个全面的企业级应用解决方案。 #### 二、Spring框架简介 Spring框架是一个轻量级的Java开发框架,它支持多种...

    struts+hibernate+spring+jbpm例

    **jBPM** 是一个开源的工作流和业务流程管理系统,用于处理业务流程自动化。它支持BPMN(Business Process Model and Notation)标准,允许设计、执行和监控业务流程。jBPM可以与Spring、Hibernate等其他框架集成,...

    Struts+Hibernate+spring+jpa+lucene+jbpm+compass配置文件

    6. **JBPM**:JBPM 是一个业务流程管理(BPM)和工作流引擎,用于设计、执行和管理业务流程。JBPM的配置涉及流程定义文件(.bpmn或.xml)、数据源、事务管理等。 7. **Compass**:Compass 是一个基于Lucene的搜索...

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...

    Struts+Spring+Hibernate+Jbpm实现的OA办公系统

    **Jbpm** 是一个开源的工作流管理系统,它允许开发者定义、执行和监控业务流程。Jbpm提供了一种图形化的方式来设计流程,可以灵活地定义审批流程、任务分配等。在OA系统中,Jbpm可能用于实现如请假申请、报销审批等...

    ssh+jbpm5.4 (2)

    这个项目组合提供了从表现层到数据持久化层的全面解决方案,并通过jbpm5.4来实现流程自动化和工作流管理。 Spring框架是SSH的核心部分,它负责管理应用对象的生命周期和依赖关系,提供了AOP(面向切面编程)和IoC...

    ssh+jbpm oa 项目源码

    包括配置文件(如struts.xml、spring配置文件)、实体类(对应数据库表)、DAO(数据访问对象)、Service(业务逻辑服务)、Action(Struts2的控制器)、流程定义文件(jbpm的工作流定义)、以及视图层的JSP或...

    spring4.1.1+jbpm6.4.0+maven

    总结来说,"spring4.1.1+jbpm6.4.0+maven"的组合提供了一种高效、灵活且易于管理的方式来开发和部署包含复杂工作流的企业级应用。通过熟练掌握这三个工具的使用,开发者可以构建出强大且易于维护的业务系统。

    SSH最新项目(struts+spring +hibernate+Jbpm+freemarker)

    在这个最新的SSH项目中,结合了Jbpm工作流引擎和FreeMarker模板引擎,使得项目的功能更加强大和完善。 1. **Struts**:Struts 是一个基于MVC设计模式的Web应用框架,主要用于控制应用程序的流程。它通过Action类...

    Spring+hibernate4+SpringMVC+Jbpm4.4

    Jbpm 4.4 版本提供了工作流建模、执行、监控和管理的功能,支持BPMN 2.0标准,允许通过图形化界面设计流程。在本项目中,Jbpm 4.4 被整合到Spring框架中,用于实现流程驱动的应用,如审批流程、订单处理等。 **...

    activiti+spring+srping Mvc+mybatis+maven整合

    本项目是关于"activiti+spring+spring Mvc+mybatis+maven"的整合,旨在创建一个基于Activiti工作流引擎、Spring、Spring MVC、MyBatis以及Maven的开发环境。下面将详细介绍这些技术及其整合过程。 首先,`activiti`...

    ssh+jbpm整合.doc

    本文旨在详细介绍如何将JBPM工作流框架与SSH框架进行整合,并通过具体的步骤来解决实际开发过程中可能遇到的问题。 #### 二、SSH框架简介 1. **Spring**:一种轻量级的Java EE应用程序框架,用于简化企业级应用开发...

    Extjs4.1+jbpm4综合案例视频教程

    **标题解析:** "Extjs4.1+jbpm4综合案例视频教程" 指的是一个教学资源,涵盖了使用Extjs 4.1版本(一个JavaScript框架,用于构建富客户端Web应用程序)与jbpm4(一个开源的工作流管理系统)进行集成开发的实践案例...

    Spring与JBoss JBPM工作流集成开发指南

    Spring与JBoss JBPM工作流集成开发指南 Spring与JBoss JBPM工作流集成开发指南是关于JBPM与Spring框架集成的开发文档,涵盖了工作流的基本概念、设计要点、常见问题解答、参考资源等。下面是从该文件中生成的相关...

Global site tag (gtag.js) - Google Analytics