您的位置:首页 > 编程语言 > Java开发

传智播客JAVA培训2010-5-4JBPM总结.

2010-05-04 22:43 447 查看

五一假过去了,这也是在校的最后一个长假,同学们却几乎没有回家的,我认识的人都仍然沉浸在学习的氛围中,感觉不到这个五一假和平时的时间有什么区别,看到这些,你就不得不感触到,现在的人都是那么的努力,社会竞争日经激烈,人人都似乎知道这个要在这个社会上立足是需要太多的努力和回报中,中国,泱泱之国,培训学校数以千计,每个月从培训学校出来的JAVA程序何止万千,人人都知道现在的回报已经不是当时供过于求情景,岂不能自危,但在心情不安之余只能通过万分努力的今天才能勉强得到十分回报的今天,更加有针对性的冲电,方可在千万大军中,挣得自己的一席之地。或许是老生常谈,但人们又何尝知道,付出要执之以恒是何其艰难,但还是要加油!
北京的天气忽然从冬天来到了夏天,仿佛没有春天一样,冷热交替,他们都说没有春天的温和了。今天的路,十年寒窗未苦读的选择,但我真心的希望这不会晚,也相信我的努力不会晚吧,二年了,一直都在坚持,现在是我最后的一地博,咱们拭目以待。
Work Flow 工作流。工作流程的计算模型。
JBPM 即java Business Process Management,基于java的业务流程管理系统。引擎底层基于Active Diagram模型。
一个简单的JBPM 工作流的运用:
1.流程的设计。今天采用的是eclipse安装了jbpm的插件,就直接可以在eclipse中进行设计了。在mycclipse 6.5中JBPM插件的安装。
设计完成之后,产生三个文件:一个JPG格式的图片,及两XML文件。然后将这三个文件压缩中.zip格式的文件的压缩文件。
要运用JBPM,首先要导入其所需要的jar包,并且配置hibernate.cfg.xml文件,因为JBPM采用hibernate的方式映射数据库,其提供的API的操作流程文件时,也会一一记录到数据库中。当数据库驱动是必不可少的,同时其还运用到log4j记录日志文件,所以log4j.propertiy文件也要导入。
2.部署流程到系统中.
JbpmConfiguration jcfg =  JbpmConfiguration.getInstance();
JbpmContext jbpmContext = cfg.createJbpmContext();
ProcessDefinition pd = null;
JbpmContext 包装了hibenate的Session及事务操作,大家都知道hibernate操纵数据库是用sessin来进行操作的,同进,操作时,还涉及到数据库的事务操作,所以,在使用时,也要异常处理进,要同时处理事务的回混以及执行完成之后的关闭。
采用程序部署的方法有三种:
1.将.zip直接部署。
2.将xml文件部署。
3.传入一个流。
如下:(写的练习代码)
// 一、部署zip
// 相对于 classpath 的相对路径
// pd = ProcessDefinition.parseParResource("test/test.zip");
// pd = ProcessDefinition.parseParZipInputStream(zipInputStream);
// 二、部署xml文件
// 相对于 classpath 的相对路径
pd = ProcessDefinition.parseXmlResource("helloworld/processdefinition.xml");
// pd = ProcessDefinition.parseXmlInputStream(inputStream);
// pd = ProcessDefinition.parseXmlReader(reader);
// 三、部署字符串形貌式的路径
// pd = ProcessDefinition.parseXmlString(xmlString);
3.对流程的简单的操作。
当把流程文件部署到系统中之后,我们就可以对其进行操作了,
在这中间JbpmConfiguration,JbpmContext是非常重要的两个类。JbpmConfiguration是jBPM的相关配置信息。相当于HIBERNATE中的configuration。并有创建JbpmContext的功能,可以把JbpmConfiguration想像成Hibernate中的Configuration与SessionFactory的结合体。使用JbpmConfiguration.getInstance()方法创建一个JbpmConfiguration对象,其使用默认的jbpm配置文件:jbpm.cfg.xml。或者是使用getInstance(String configFilePath)方法,用指定的配置文件构造。
Jbpm中所有的持久化操作都是通过JbpmContext完成的,可以把他想像成Hibernate中的Session。他是通过JbpmConfiguration.createJbpmContext()方法创建的,JbpmContext中包装有一个Hibernate的Session(通过他做的数据库操作)。使用完JbpmContext后一定要调用他的close()方法,否则所有信息都不会持久化到数据库当中。因为在调用JbpmConfiguration.createJbpmContext()方法时会创建一个Hibernate的Session并开始事务;在调用JbpmContext.close()方法时会提交事务并且关闭所关联的Session。如果在执行JbpmContext.close()之前调用方法jbpmContext.setRollbackOnly(),则在JbpmContext.close()时会回滚事务。
工作流,字面意思上理解,就是工作的流程!用计算机程序来模拟现实工作中的流程,以避免不需要的时间浪费,提高工作的效率。一个新的流程添加到系统中之后,我们接下来的就是使用。
1.要使用流程,肯定要取得流程的实例才可以!
jbpmContext.getGraphSession().findAllProcessDefinitions()。取得系统中所有的流程。
jbpmContext.getGraphSession().findLatestProcessDefinition("helloworld");根据名字取得对应的流程。
2.一个流程有开始状态和结束状态。当刚刚创建一个流程的实例时,是处于开始状态。
 pd.createProcessInstance()。创建一个流程的实例,一个流程可以有多个实例。从这儿也可以体现出,当创建一个流程之后,就可以反复的使用了。而在数据库的中,有对应的processInstance表与之对应。每次创建一个实现数据库表中就会增加一条记录。
要离开开始结点的方法:getRootToken().signal().
3.一个流程中,由许许多多结点组成,每一个节点都有自己要处理的东西!当然一个结点应该也有该谁来处理。所以,当创建一个流程离开开始结点之后,就开始了他生命之旅。
一个简单的流程的XML文件:
 <?xml version="1.0" encoding="UTF-8" ?> 
- <process-definition xmlns="" name="helloworld">
- <start-state name="start">
  <transition to="task-node1" /> 
  </start-state>
- <task-node name="task-node1">
- <task name="提交申请">
  <assignment actor-id="员工" /> 
  </task>
  <transition to="task-node2" /> 
  </task-node>
- <task-node name="task-node2">
- <task name="部门经理审批">
  <assignment actor-id="部门经理" /> 
  </task>
  <transition to="task-node3" /> 
  </task-node>
- <task-node name="task-node3">
- <task name="副总经理审批">
  <assignment actor-id="副总经理" /> 
  </task>
  <transition to="end" /> 
  </task-node>
  <end-state name="end" /> 
  </process-definition> 
从该工作流的特点可知,总是一步完成之后,就会自动进入下一个流程如果没有完成,是不会进行下一个流程的。
根据:
jbpmContext.getTaskList(actorId) 就可以根据actorId得到对应的所有流程。而当处理完一个流程之后,自动流入下一个结点,然后再根据actorId时。因为该工作已经处理,自然就得不到!
路漫漫而修远兮,吾将上下而求索!老师经常说的一句话,也是现在的年青人可能大都具备的特点----浮躁。一定不要急于求成,脚踏实地的走好每一步。加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息