由于工作需要,新接到一个小项目,什么?项目,ofbiz走起!项目中需要用到两个小流程,什么?流程 activiti5走起~
activiti5 是原生支持spring 的,可是怎么能让它与ofbiz整合到一块呢,ofbiz确实有自己的sharp 啥的,可是弄不懂啊,资料太少了。可是ofbiz与activiti5整合的资料更少啊,没办法,面对activii5的流程编辑器的诱惑,自己想招吧!
其实整合起来并不复杂,代码量也不多,我就来一步一步说具体操作
1.下载activiti5,我是从官网下的最新版 下载下来解压,我了个去这么些jar ,其实用到的也不多,主要用的有
activiti-bpmn-converter-5.17.0.jar
activiti-bpmn-layout-5.17.0.jar
activiti-bpmn-model-5.17.0.jar
activiti-common-rest-5.17.0.jar
activiti-crystalball-5.17.0.jar
activiti-diagram-rest-5.17.0.jar
activiti-engine-5.17.0.jar
activiti-explorer-5.17.0.jar
activiti-image-generator-5.17.0.jar
activiti-json-converter-5.17.0.jar
activiti-modeler-5.17.0.jar
activiti-process-validation-5.17.0.jar
activiti-simple-workflow-5.17.0.jar
commons-lang3-3.3.2.jar
jackson-annotations-2.2.3.jar
jackson-core-2.2.3.jar
jackson-databind-2.2.3.jar
javaGeom-0.11.1.jar
joda-time-2.6.jar
mybatis-3.2.5.jar
2.我使用的是ofbiz13就是最新版本那个,下一步就是新建一个component 叫做workflow模块
我是建在了framework 下面的,架构级么哈哈,新建component 我就不多介绍了,很多资料可以参考,我新建的component 包含了一下内容:
3 导入jar 包 并且添加classpath中(也就是说在ofbiz-component.xml中包含workflow的lib文件夹),如果component创建的配置都对的话,把你新建的component 加入到component-loader中,启动一下不报错说明你添加jar包成功了。
4.我的整合思路是通过ofbiz 启动加载 acitiviti 的processEngine 并且提供一个processEngineFactory 来获取activiti 的主要接口,那么在我们业务中随时都可以调用工作流引擎了.所以第一步要正确的加载ProcessEngine
ofbiz 强大之处就体现出来了,可以使用它的container 来加载我们的processEngine,我们创建一个workflowcontainer,并实现ofbiz 的container 接口:
package com.ly.workflow;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.ofbiz.base.container.Container;
import org.ofbiz.base.container.ContainerException;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilProperties;
import java.util.Properties;
/**
* Created by bo on 15/4/14.
*/
public class WorkflowContainer implements Container {
private String name;
private String dbFile= "workflow.db.properties";
@Override
public void init(String[] args, String name, String configFile) throws ContainerException {
this.name = name;
Debug.log("---启动工作流模块---");
//获取工作流数据库配置文件
Properties jdbc=UtilProperties.getProperties(dbFile);
//配置工作流引擎
ProcessEngineConfiguration pecfg = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
pecfg.setJdbcUsername(jdbc.getProperty("username"));
pecfg.setJdbcPassword(jdbc.getProperty("password"));
pecfg.setJdbcUrl(jdbc.getProperty("url"));
pecfg.setJdbcDriver(jdbc.getProperty("driver"));
//连接池设置
pecfg.setJdbcMaxActiveConnections(Integer.valueOf(jdbc.getProperty("jdbcMaxActiveConnections")));
pecfg.setJdbcMaxIdleConnections(Integer.valueOf(jdbc.getProperty("jdbcMaxIdleConnections")));
pecfg.setJdbcMaxCheckoutTime(Intege