`
wateriness
  • 浏览: 17463 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SEAM框架之我见--Business Process Management

阅读更多

一、 概念
相对PageFlow(页面流)由同一用户与系统之间的一系列交互完成一项任务不同,Business Process Management(工作流)的范围更宽,它包含一系列相关任务,这些任务一般由不同人在不同时间完成。
Seam对jbpm的集成的方便性我认为表现在三个方面:
1. 提供内置对象显示任务列表给用户;
2. 前文曾提到seam除新增conversation上下文外,还新增了business_ process上下文,这就是为工作流管理提供的,应用程序可以将流程中涉及的相关状态作为jbpm变量存储于business process上下文,然后seam可以持久化这些jbpm变量;
3. 提供方便的标签开始一个流程,开始一个任务、结束一个任务。
二、 用法
下面我还是用一个示例讲述工作流的用法,这个示例是一个客户订单审批的例子:客户在网上提交一个订单后,开始订单审批流程;经理查看任务列表,接收订单,查看订单明细信息,根据情况批准或不批准此订单。
1. 流程定义
流程图:
    (见附件)
Jpdl文件:

    (见附件) <process-definition name="订单管理"></process-definition>

2. 初始化actor ids
Jbpm对流程中用户的管理是通过actor id和group actor ids.为此seam内置了一个部件Actor来方便指定当前的actor ids.这个工作一般在用户登陆时完成。
@In(create=true) Actor actor

Public String login(){
  …
  Actor.setId(user.getUserName());
  Actor.getGroupActorIds().addAll(user.getGroupNames());
  …
}
3. 启动一个工作流
@out(scope=ScopeType.BUSINESS_PROCESS,required=false)
Long orderId;
@Out(scope=ScopeType.BUSINESS_PROCESS,required=false)
Float amount;
@Out(value=”customer”,scope=ScopeType.BUSINESS_PROCESS,required=false)
String customerName;

  @CreateProcess(definition="OrderManagement")
      public void submitOrder() {
        try {
            completedOrder = purchase(customer, currentOrder);

            orderId      = completedOrder.getOrderId();
            amount       = completedOrder.getNetAmount();
            customerName = completedOrder.getCustomer().getUserName();
        } catch (InsufficientQuantityException e) {
           …       
        } catch (Throwable t) {
            …
        }
      }    
4. 任务分配
当开始一个工作流的时候,任务实例被创建,任务实例必须分配给一个用户或用户组,相应seam中分配任务有二种方式—分配给用户或用户组,如:
分配给用户:
<task description="ship order" name="ship"></task>(见附件)
          <assignment actor-id="#{ shipperAssignment.actorId}"></assignment>                    
  
分配给用户组:
<task description="Ship order" name="ship"></task>(见附件)
           <assignment pooled-actors="#{shipperAssignment.pooledActors}"></assignment>

5. 任务列表
有两个内置的seam部件方便显示任务列表—一个是显示分配给组用户的任务,一个是显示分配给当前用户的指定类型的任务。
显示分配给当前用户的指定类型的任务示例如下:
<h:datatable var="task" value="#{taskInstanceListForType['ship']}">
            (见附件)<h:column>               </h:column>              
</h:datatable>
显示分配给当前用户所属组的任务示例如下:
<h:datatable var="task" value="#{pooledTaskInstanceList}">(见附件)<h:column>            </h:column>
            <h:column>
                  <s:link value="Assign" action="#{pooledTask.assignToCurrentActor}" taskinstance="#{task}" linkstyle="button">
             </h:column>
</h:datatable>

6. 开始任务
Seam提供了两个标注开始任务:@StartTask和@BeginTask.开始任务时开始一个conversation上下文,能在其中访问保存在business process上下文中的变量。
@BeginTask
      public String viewTask() {
    order = (Order) em.createQuery("select o from Order o join fetch o.orderLines where o.orderId = :orderId")
            .setParameter("orderId", orderId)
            .getSingleResult();
          return "accept";
}
7. 结束任务
Seam提供@EndTask标注结束任务,并指明下一步流程。如:
@EndTask(transition="approve")
      public String accept() {
          order.process();
          return "admin";
 }
8. 系统配置
和配置pageflow类似,seam在component.xml文件中配置JBPM.
<component class="org.jboss.seam.core.Jbpm">(见附件)  </component>

  • 大小: 15.5 KB
  • 大小: 247.8 KB
分享到:
评论
2 楼 kingliujy 2008-12-01  
你好, 现在在学习中, 不清楚在后续的START TASK中如何使用以前的上下文变量, 如在文章中所提到的地方:

@BeginTask
      public String viewTask() {
    order = (Order) em.createQuery("select o from Order o join fetch o.orderLines where o.orderId =rderId")
            .setParameter("orderId", orderId)

其中 orderId 就是在

try {
            completedOrder = purchase(customer, currentOrder);

            orderId      = completedOrder.getOrderId();


这里面设置的orderId吗?

现在发现在实际调用
@BeginTask
      public String viewTask() {
这个函数时, 得不到任何以前设置的相关变量, 如 orderId

是不是什么地方搞错了?
1 楼 pf_miles 2008-04-03  
谢谢,我正找这些东西,很有参考价值。

相关推荐

    seam_reference.pdf

    - **待办事项示例**(Seam and jBPM: the todo list example):这个示例结合了Seam和jBPM(Java Business Process Management),演示了如何将工作流集成到Seam应用中。具体包括任务的创建、分配和完成等操作。 - *...

    seam_reference英文文档,讲解Seam更详细

    - **理解代码**:这部分介绍了如何结合Seam框架和jBPM(Java Business Process Management)来实现待办事项列表的应用场景。 - **工作原理**:详细解释了业务流程管理在Seam框架中的集成方式。 ##### 5. ...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Java EE 框架..................................................................................................................................................................................1 ...

    Open Eye - Business Process Management-开源

    Seam 是一个全面的 Java EE 开发框架,简化了企业级应用的开发过程。它将多种技术,如 JavaServer Faces (JSF)、Java Persistence API (JPA) 和 EJB,融合在一起,为开发者提供了一个统一的平台。在 Open Eye 中,...

    Practical_JBoss_Seam书的源代码

    2. **bpm**:Business Process Management (BPM) 文件夹可能包含Seam与工作流和业务流程管理相关的示例代码。Seam支持使用JBoss jBPM进行流程建模和执行,这使得开发者可以方便地创建和管理业务流程。 3. **page...

    Jboss Seam中文版

    结合了Seam和jBPM(Java Business Process Management),实现了一个待办事项管理应用,展示了如何集成工作流引擎。 1. **代码理解**:重点介绍了如何定义业务流程,并将其与Seam组件关联起来。 2. **工作原理**:...

    jboss-seam2.0文档.rar

    1. 流程管理:Seam支持BPM(Business Process Management),可以用来定义和执行复杂的业务流程。 2. 国际化与本地化:Seam提供了便捷的国际化支持,方便应用适应不同地区的用户需求。 3. 模板技术:Seam可以与...

    自己做的seam例子

    它集成了许多技术,如JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.0、Java Business Integration (JBI) 和Business Process Management (BPM) 等,旨在简化开发过程并提高...

    Seam JBPM Eclipse工程例子

    JBPM(JBoss Business Process Management)是一款开源的工作流和业务流程管理系统。它允许开发者设计、执行和监控业务流程。JBPM提供了图形化的流程建模工具,支持BPMN2标准,使得非技术人员也能理解流程。在"Seam...

    seam in action 第14章

    - **定义与概念**:业务流程管理(Business Process Management, BPM)是一种用于模型化、自动化和优化业务流程的方法。它旨在通过标准化和改善流程来提高效率并减少错误。 - **BPM在IT中的作用**:BPM工具,如jBPM,...

    jbpm3.2.x开发所需jar包

    在Java企业级应用开发中,业务流程管理(Business Process Management,BPM)扮演着重要角色,而Jbpm是一个开源的BPM框架,它提供了流程定义、执行、监控和优化等一系列功能。在使用Jbpm进行开发时,确保正确配置和...

    jbpm简介\jbpm简介

    jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用服务器或简单的配置了JDBC的JVM环境中运行。jBPM的核心...

    JBPM工作流应用开发文档

    JBPM(java Business Process Management)是一个基于JavaEE的轻量级工作流管理系统,旨在支持企业级的流程定义、部署、执行和管理。作为JBoss的一个子项目,它与其他优秀开源项目如Seam、Drools和Hibernate紧密集成...

Global site tag (gtag.js) - Google Analytics