这些注解提供声明式对话分界(declarative conversation demarcation)。它们在Seam组件方法中使用,通常是动作监听器方法(Action Listener Method)。
每个Web请求有一个对话上下文和它关联。这些对话的大多数在请求结束时结束。如果你想要一个对话跨越多个请求,你必须通过调用标志为 @Begin 的方法来“提升”当然的对话为一个长期运行的对话(long-running conversation)。
-
@Begin
当此方法无异常的返回一个非空结果时,一个长期运行的对话开始。
@Begin(join=true)
若已经处于长期运行对话中,简单的延续此对话上下文。
@Begin(nested=true)
若已经处于长期运行对话中,一个新的被 嵌套(nested) 对话上下文开始。 该被嵌套的对话在遇到下一个
@End时结束,并且外部上下文将恢复。在同一个外部对话中同时嵌套多个对话是完全合法的。@Begin(pageflow="process definition name")
指定该对话的页面流(pageflow)的jBPM进程定义名。
@Begin(flushMode=FlushModeType.MANUAL)
指定任何Seam管理的持久上下文的flush模式。
flushMode=FlushModeType.MANUAL支持 原子对话(atomic conversations),这里所有写操作在会话上下文进入队列,直到显式调用flush()(调用通常发生在对话结束时)。-
join— 定义当长期对话已经存在时的行为。 若是true,传播上下文。若为false,抛出一个异常。 默认为false。当指定nested=true时,将忽略该设置。 -
nested—当长期对话已经存在时,一个嵌套对话应该建立。 -
flushMode— 设置任何在此会话期间创建的,被Seam管理的Hibernate Session或JPA持久上下文的flush模式。 -
pageflow— 由org.jboss.seam.bpm.jbpm.pageflowDefinitions部署的一个jBPM处理的进程定义名。
-
-
@End
当这个方法无异常的返回一个非空输出时,长期对话结束。
-
beforeRedirect— 默认情况下,若有重定向,直到所有的重定向结束后,对话才会被真正destory。 设置beforeRedirect=true指定该对话应在当前request结束时就结束,并且在一个新的临时对话上下文中处理重定向。
-
-
@StartTask
"开始"一个jBPM任务。当此方法无异常的返回一个非空输出时,长期运行对话开始。此对话同在某个request具名参数中被指定的jBMP任务相关联。 在该会话上下文中,还定义了一个业务流程上下文(business process context),用作任务实例的业务流程实例。
jBPM的
TaskInstance在request context中以taskInstance的名字作为变量出现。 jPBM的ProcessInstance在request context中以processInstance的名字作为变量出现。(当然,这些对象也可用于通过@In注入。)-
taskIdParameter— 保存有task id的request参数的名字。 默认为"taskId",同时也是SeamtaskListJSF component使用的默认值。 -
flushMode— 设置任何在此对话期间创建的,被Seam管理的Hibernate Session或JPA持久上下文的flush模式。
-
-
@BeginTask
恢复一个未完成的jBMP任务。当此方法无异常的返回一个非空值时,长时间运行的对话开始。此对话同在某个request参数中指定的jBMP任务相关联。 在该对话上下文中,还定义了一个业务流程上下文(business process context),用作任务实例的业务流程实例。
jBPM的
org.jbpm.taskmgmt.exe.TaskInstance在request context中以taskInstance的名字作为变量出现。 jBPM的org.jbpm.graph.exe.ProcessInstance在request context中以processInstance的名字作为变量出现。-
taskIdParameter— 保存有task id的request参数的名字。 默认为"taskId",同时也是SeamtaskListJSF component使用的默认值。 -
flushMode— 设置任何在此会话期间创建的,被Seam管理的Hibernate Session或JPA持久上下文的flush模式。
-
-
@EndTask
"结束"一个jBPM任务。当此方法无异常返回一个非空输出时,结束长时间运行的会话。触发一个jBMP 流转(transition)。 若没有调用
transition内置组件的Transition.setName()方法,实际被触发的将是默认的transition。@EndTask(transition="transitionName")
触发给定jBPM流转。
-
transition— 当任务结束时触发的jBPM流转名。默认为默认的流转transition。 -
beforeRedirect— 默认情况下,若有重定向,直到所有的重定向结束后,会话才会被真正destory。 设置beforeRedirect=true指定该会话应在当前request结束时就结束,并且在一个新的临时会话上下文中处理重定向。
-
-
@CreateProcess(definition="process definition name")
当方法无异常返回一个非空输出时,建立一个新的jBPM流程实例。
ProcessInstance对象在上下文中以processInstance的名字作为一个变量出现。-
definition— 通过org.jboss.seam.bpm.jbpm.processDefinitions部署的jBPM 流程定义的名字。
-
-
@ResumeProcess(processIdParameter="processId")
当方法无异常返回一个非空输出时,重新进入一个已存的jBPM 流程实例的context。
ProcessInstance对象在上下文中以processInstance的名字作为一个变量出现。-
processIdParameter— 保存有该流程id的request参数名。默认是"processId".
-
-
@Transition("cancel")当此方法返回一个非空结果时,向在当前jBPM流程实例中发送一个流转信号。
@Begin
@End
@StartTask
@BeginTask
@EndTask
@CreateProcess
@ResumeProcess
@Transition
本文介绍Seam框架中的对话管理机制,包括如何使用@Begin、@End等注解启动和结束对话,以及如何处理嵌套对话和长期运行对话。此外,还介绍了如何与jBPM集成以管理业务流程。
377

被折叠的 条评论
为什么被折叠?



