Activiti学习——整合ActivitiModeler到项目中

学习来源

自己学习Activiti,主要是通过拆解和重新组装咖啡兔的项目而学习的。

咖啡兔博客:http://www.kafeitu.me/

项目地址:https://github.com/henryyan/kft-activiti-demo

基础准备

上面的GitHub中有maven版本和no-maven版本,我下的是no-maven版本

kft-activiti-demo-no-maven下载

解压并部署项目

项目结构,报错地方是xml或者js文件,可以忽略

项目

本文就是为了将对应功能拆分出来:流程管理->模型工作区->创建功能

功能实现

实现思路

  1. 将咖啡兔项目中我们能用到的类拷贝过来

  2. 参考咖啡兔项目,修改对应配置文件

  3. 将Activiti5.16.4项目中activiti-explorer.war中相关文件拷贝到自己项目的指定位置中

  4. jar包就使用官方示例中的jar包

  5. 为什么不全部使用咖啡兔项目的文件, 是因为我完全使用咖啡兔项目的文件弄不出来。没办法,只好使用官方示例对照参考。

拷贝咖啡兔项目相关文件

参考咖啡兔项目,发现其模型【新建】接口调用的是下图中ModelController的create方法

拷贝到自己项目中的controller中,分析其代码

使用到HttpServletResponse,则项目需要引入tomcat的lib中的servlet-api.jar

使用到/service/editor接口,根据日志发现该接口不在spring管理中,则就有可能是在web.xml中配置的servlet

查看咖啡兔项目的web.xml果然在里面,在自己项目的web.xml中添加下面的代码

局部代码


    <!-- Restlet adapter, used to expose modeler functionality through REST -->

    <servlet>

        <servlet-name>ExplorerRestletServlet</servlet-name>

        <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>

        <init-param>

            <!-- Application class name -->

            <param-name>org.restlet.application</param-name>

            <param-value>org.activiti.explorer.rest.ExplorerRestApplication</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

        <servlet-name>ExplorerRestletServlet</servlet-name>

        <url-pattern>/service/*</url-pattern>

    </servlet-mapping>

使用到org.activiti.explorer.rest.ExplorerRestApplicatio这个类,开始以为是jar包中的文件,找半天没找到,后来看到居然是项目自己的包路径(⊙﹏⊙)b,果断拷贝到自己的项目中

至此,咖啡兔项目中的能用的代码就拷贝完了

create方法


    @RequestMapping(value = "/create",method = RequestMethod.POST)  

    public void getEditor(

            @RequestParam("description") String description,

            @RequestParam("name") String name,

            @RequestParam("key") String key,

            HttpServletRequest request, HttpServletResponse response){  

        try {

            ObjectMapper objectMapper = new ObjectMapper();

            ObjectNode editorNode = objectMapper.createObjectNode();

            editorNode.put("id", "canvas");

            editorNode.put("resourceId", "canvas");

            ObjectNode stencilSetNode = objectMapper.createObjectNode();

            stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");

            editorNode.put("stencilset", stencilSetNode);

            Model modelData = repositoryService.newModel();

            ObjectNode modelObjectNode = objectMapper.createObjectNode();

            modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name);

            modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);

            description = StringUtils.defaultString(description);

            modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);

            modelData.setMetaInfo(modelObjectNode.toString());

            modelData.setName(name);

            modelData.setKey(StringUtils.defaultString(key));



            repositoryService.saveModel(modelData);

            repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));

            System.out.println("跳转页面");

            response.sendRedirect(request.getContextPath() + "/service/editor?id=" + modelData.getId());

        } catch (Exception e) {

           System.out.println("创建模型失败");

        }

    }  

拷贝官方示例相关文件

在下载下来的Activiti5.16.4中找到activiti-explorer.war,解压得到部署文件夹

将下图指定文件夹拷贝到WebRoot中

将WEB-INF->classes中下图文件拷贝到自己项目的src中

为什么是上列这些文件,只能说是一点一点对照咖啡兔项目摸索出来的,(⊙﹏⊙)b人笨了就靠这样来弄了

编写自己的新增页面

就是要调用controller的页面,需要传递三个参数,怎么实现都可以,

我用的是bootstrap-3.3.5框架

用form表单提交的

示例结果

页面

新增

保存成功并跳转到ActivitiModeler

在数据库表act_re_model中可以查看刚刚添加的数据

示例下载

点击下载示例

出现问题

ClassNotFound

jar包没拷贝完,直接将官方示例中的jar包全部拷贝过来,实在不行,直接下载本示例,直接在上面改试试

后续

后续就可以进行咖啡兔项目的分解学习了

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/flygoa/article/details/51890434
个人分类: activiti
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭