相信看完第一节的朋友都已经把Activiti需要的环境搭建起来了吧,那么咱们来干一件程序员学习一门新的技术都喜欢干的事情 HelloWorld!! 本文将会讲到如果和创建activiti运行时所需要的数据库 以及如何绘制流程图、如何发布一个流程、如何启动一个流程、和如何结束一个流程。
要想写这个HelloWorld还是需要费点劲的,因为这个不像别的HelloWorld一样直接写一些代码就行 这个还涉及到了数据库的操作。所以咱们第一步就是创建Acitviti运行时所需要的数据库。
创建数据库
创建Acitviti运行时需要的数据库有好几种方法,比如运行Acitviti项目然后让其自动创建。但本人不太喜欢这种方式,我还是喜欢你给我sql语句我自己去执行 用着比较自然……那么我们当前之急就是去找所需要的sql脚本哈,在咱们下载的activiti的jar中activiti-engine-5.8.jar 这个包中就有我们要的东西。首先加压这个包 然后进到 org/activiti/db/create目录下 大家可以看到各种sql 那么大家根据自己使用的数据库来选择相应的脚本 本人使用的mysql 所以我选择如图中的四个脚本。
首先创建数据库activiti(名称随便) 然后到这个数据库中直接上述四个创建表的脚本,执行完毕后。数据库的工作就完成了哈,简单吧!
创建项目(J2EE)导入jar包
编写配置文件
绘制流程图
创建一个流程图(如图)点击next以后 filename 自己随便输入 这里面我输入 HelloWorld.activiti 然后直接Finsh.
创建完后会发现它自动把流程图放到main.resources.diagrams 包下面了,如果不想放在这下面可以直接移动过去。本人移动到了activiti.process.def包下面,这样比较符合编码规范。
接下来就是打开创建的流程图,开始绘制了。这个涉及到JBPM的东西了,本文就不详述。
按照上面绘制完后,就该编写相应的代码了。既然是HelloWorld那么咱们就在走到HelloWorld流程的时候就输出一个HelloWorld吧。
package activiti.process;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
public class ProcessHelloWorld implements JavaDelegate {
@Override
public void execute(DelegateExecution arg0) throws Exception {
System.out.println("HelloWorld");
}
}
然后给HelloWorld这个节点指定相应的执行相应的代码,需要打开流程图HelloWorld.activiti 然后点击HelloWorld节点 在下面的点开Main config选项卡里面指定Service class 为刚才写的流程代码。这样当流程走到这一步的时候就会执行这个类里面的execute方法。
接下来咱们需要做的就是发布流程以及启动流程了。
编写ProcessUtil封装一些方法,方便调用。
package activiti.process;
import java.util.HashMap;
/**
* 与流程有关的工具类
*
*
*/
public class ProcessUtil {
/**
* 发布流程的方法
*/
public static void deploy() {
RepositoryService service = (RepositoryService) CommonUtil.getBean("repositoryService");
service.createDeployment().addClasspathResource("activiti/process/def/HelloWorld.bpmn20.xml")
.addClasspathResource("activiti/process/def/HelloWorld.png").deploy();
}
/**
* 启动流程
*/
public static String start() {
RuntimeService service = (RuntimeService) CommonUtil.getBean("runtimeService");
ProcessInstance instance = service.startProcessInstanceByKey("HelloWorld");
return instance.getProcessInstanceId();
}
}
CommonUtil代码
public class CommonUtil implements ApplicationContextAware {
private static ApplicationContext springFactory = null;
public static Object getBean(String name) {
return springFactory.getBean(name);
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
springFactory = applicationContext;
}
}
编写相应的servlet,方便咱们的操作。
public class ProcessAction extends HttpServlet {
private static final long serialVersionUID = 1L;
public ProcessAction() {
super();
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
* response)
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String cmd = request.getParameter("cmd");
String page = null;
if ("deploy".equals(cmd)) {
ProcessUtil.deploy();
request.setAttribute("result", "流程发布成功");
page = "success.jsp";
} else if ("start".equals(cmd)) {
String id = ProcessUtil.start();
request.setAttribute("result", "流程启动成功,流程ID:" + id);
page = "success.jsp";
}
request.getRequestDispatcher(page).forward(request, response);
}
}
相应的页面index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
流程测试
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
成功
处理结果:<%=request.getAttribute("result") %>
返回
contextConfigLocation
classpath*:*.xml
org.springframework.web.context.ContextLoaderListener
ProcessAction
com.hollycrm.servlet.ProcessAction
ProcessAction
/process
至此编码工作已经全部完成, 那么接下来就是验证下大家的代码了哈……
发布应用进入index.jsp,首先点击发布流程。然后再点击启动流程。现在大家看看是不是控制台输出了HelloWorld! 因为ServiceTask
为自动任务不需要人工干预,所以会自动执行。启动流程以后直接进入到了HellorWorld执行完后流程也就结束了。
本文只是演示如何运行起来Activiti的HelloWorld,万事开头难 有了开头那么接下来学起来也就比较容易了。后面的文章我将会与大家一起学习Activiti的一些核心方法,敬请期待!