activiti工作流源码修改

最近公司要定制activiti工作流的画图工具activiti-explorer,可是这个东西本来就是经过一层一层封装,通过各种技术实现的。所以对于菜鸟级猴子改起来可能难度不小,特别是网上也没有一套完整的可参考的例子,甚至连《activiti实战》一书中,咖啡兔也是一笔带过,根本没有什么参考价值。后来本人花了不少时间,研究了一下,终于跑通了一个前后端的请求,写下步骤过程,供有需要的朋友参考,菜鸟文章,不喜勿喷。

activiti后端使用Java设计模式的命令模式,使用各种拦截器一层一层拦截,主要有日志拦截器,事务拦截器,调用命令拦截器,命令上下文拦截器等,可参考接口CommandInterceptor的实现。除了一堆拦截器在执行请求的时候会运行execute()方法外,还会调用Command接口相对应的实现类XXXXCmd.java的execute()方法,所以一个简单的请求,会执行N多的Java类,对于我这种菜鸟级别的,debug时简直一头雾水。但是使用命令模式却有它独到的好处,最起码,任何人来写开源的代码,都得遵循这样一个命令模式的规则,这点非常重要。

至于什么7的service和怎么配置怎么本地eclipse中部署运行activiti-explorer等网上很多的知识在这就不赘述了,主要说一下修改源码跑通请求需要做哪些事。

activiti-modeler(流程图设计页面)前端主要实现是angularjs写的,不了解的人可以看看,这是我见到过最强大的js,当然现在什么angularjs2,vuejs等也都出来了,但是没有项目用到,所以也没去看过。如果不在原来的angularjs的基础上修改,不用它原来的代码,那么前端的工作量也是非常巨大的。此例只说一个请求的过程,所以前端代码基本没啥变动,加一个$http请求就OK了。


以新建一个DeviceEntity实体为例,对这个实体对应的表进行插入操作,在activiti原服务上修改,下面是一些需要改的代码和相关的步骤:


1、创建实体类DeviceEntity: src/org/activiti/engine/impl/persistence/entity/DeviceEntity.java
      --需实现PersistentObject接口和序列化接口Serializable


2、创建实体管理类DeviceEntityManager:src/org/activiti/engine/impl/persistence/entity/DeviceEntityManager.java
      --操作实体类的管理类实现AbstractManager接口


3、生成默认mapper文件DeviceVoMapper:src/org/activiti/db/mapping/entity/DeviceVoMapper.xml
      --默认增删改查id规则为insertDevice、updateDevice等类似结构


4、mappings.xml文件配置实体类DeviceVoMapper.xml映射


5、修改AbstractManager接口,增加从session中获取 DeviceEntityManager getDeviceManager()的方法


6、修改CommandContext类,增加DeviceEntityManager getDeviceEntityManager()方法
      --获取DeviceEntityManager 实体类管理类方法


7、RepositoryService接口增加saveDevice(DeviceEntity device)方法,RepositoryServiceImpl实现saveDevice(DeviceEntity device)


8、ProcessEngineConfigurationImpl增加addSessionFactory(new GenericManagerFactory(DeviceEntityManager.class))
--增加实体管理类class到session工厂


9、增加命令保存类SaveDeviceCmd:/src/org/activiti/engine/impl/cmd/SaveDeviceCmd.java命令类
--执行命令方法execut(),调用实体类管理类中相关对实体类保存和更新的方法


10、修改DispatcherServletConfiguration类增加org.activiti.nrxt包扫描(springMVC的controller包)
--@ComponentScan({"org.activiti.rest,org.activiti.conf,org.activiti.nrxt"}) 


11、增加rest控制器DeviceController:/activiti-explorer/src/org/activiti/nrxt/controller/DeviceController.java
--前后台交互,调用repositoryService保存实体类方法saveDevice(record);


备注:源码中大部分类的初始化工作都在ProcessEngineConfigurationImpl中完成,这个类是activiti的核心加载类。感觉很牛XX的样子。

猜你喜欢

转载自blog.csdn.net/aust_zyl/article/details/64482645
今日推荐