传智播客oa学习,配置struts+ hibernate + jbpm

     今天开始oa的学习,汤老师讲了一个员工请假的jpbm的比较好的例子,对jpbm的重点,难点的掌握很有帮助。然后就在开始了在实际项目中使用jbpm的oa项目,又复习了一遍struts和hirbernate,感觉前段时间学的还是可以的,汤老师在一部分的实现之前会先讲一下要实现的功能,然后让大家试着去实现。感觉效果不错,即使有的地方做不出来,因为已经思考过了,再听汤老师讲解,有助于理解和

记忆。

 

 员工请假流程:
1, 填写请假单。
2, 交由部门经理的批准。
3, 在批复申请之后,由系统给申请人发送消息,通知其批复结果。
4, 在请假被批准之前,申请人可以撤销请假申请。
5, 申请人撤销申请后,系统应发消息,通知正在审批的领导申请已撤销。

   流程实现的主要部分在  4, 在请假被批准之前,申请人可以撤销请假申请。
可以设置个fork和join 对撤销请假和部门经理审批进行分支,在join中添加事件,

并添加事件的action类,

public class JionActionHandler implements ActionHandler {

 public void execute(ExecutionContext executionContext) throws

Exception {
  System.out.println("正在取消其他分支----");
          //获取当前token
 Token currToken=executionContext.getToken();
          //获取父token
 Token parent=currToken.getParent();
 //map<name,obj>
 Map<String, Token> tokens=parent.getChildren();
 for(Token token:tokens.values())
 {
  if(token!=currToken){
  //获得token上所有未完成的任务实例
    Collection<TaskInstance>

taskInstances=executionContext.getTaskMgmtInstance().getUnfinishedTasks

(token);
  
    for(TaskInstance taskInstance: taskInstances)
    {         //阻止流程继续
   taskInstance.setSignalling(false);
                                      //关闭任务实例
   taskInstance.cancel();
   System.out.println("已取消实

例:"+taskInstance.getName());
    }
  //关闭token
    token.end();
    System.out.println("已结束Token:"+token.getName());
      }
   }
 
}

}


    oa项目使用两层架构:view + service(service+dao)使用的dao很简单,与
service结合一起了。

使用技术:struts1 + jstl1.1 + hibernate + jbpm
添加相应的jar包:
      jbpm3.2.2的jar包(包含了Hibernate3.2.3,不用在添加Hibernate的jar包);
      struts1.3.8的jar包;
      jstl1.1;
      相应的jdbc驱动;
添加配置文件:
    jbpm.cfg.xml
 hibernate.cfg.xml
 log4j.properties
 修改hibernate.cfg.xml中的数据库连接信息;
     整个项目比较重要的是控制事务,不使用jbpm的项目都是由Hibernate控制的

,但是加入jbpm以后就不一样了,一个请求使用同一个JbpmContext;操作数据

库的Session是从JbpmContext中取得的。JbpmContext有一个getSession()的方法。要获得JbpmContext,用到的方法JbpmConfiguration.getCurrentJbpmContext()

,这个方法是返回与当前线程对应的JbpmContext,如果没有,返回null。
在调用JbpmConfiguration.createJbpmContext()后,新建的JbpmContext会自动和当前线程对应起来。
     今天的学习中遇到了一个很奇怪的异常,汤老师对解决方法进行了讲解
java.lang.RuntimeException:javax.servlet.ServletException:java.lang.SecurityExc

eption:class"org.apache.commons.collections.SquenceHashMap" 's signer information does not match signer information of other classes in the same package
     这个错误是由两个包引起的,commons-beanutils-1.7.0.jar和 commons-

collections.jar 从项目中移除这两个jar包 ,再到spring 的lib/jakarta-commons目录下找到两个jar包commons-beanutils.jar 和commons-collections.jar 把他们添加进项目,再重新部署项目,问题就解决了。
   我在学习还遇到一个异常,异常就不详细介绍了,太简单了,但牵扯到的知识

还是很重要的,action类中 除了unspecified方法要用protected,其他方法都要用

public,否则会抛出找不到该方法的异常,以后一定要注意。

你可能感兴趣的:(传智播客oa学习,配置struts+ hibernate + jbpm)