Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 如何使用参数化名称侦听所有Seam上下文事件?_Events_Seam_Observer Pattern_Jbpm - Fatal编程技术网

Events 如何使用参数化名称侦听所有Seam上下文事件?

Events 如何使用参数化名称侦听所有Seam上下文事件?,events,seam,observer-pattern,jbpm,Events,Seam,Observer Pattern,Jbpm,Seam将触发与特定作用域、任务或流程相关的事件,并将作用域、任务或流程的名称附加到事件的末尾 我如何收听同一类型的所有事件 例如,对于任何,我都想听听这样的事件: org.jboss.seam.createProcess.-在创建进程时调用 org.jboss.seam.endProcess.-在进程结束时调用 org.jboss.seam.initProcess.-当进程与对话关联时调用 org.jboss.seam.startTask.-在任务启动时调用 org.jboss.seam.e

Seam将触发与特定作用域、任务或流程相关的事件,并将作用域、任务或流程的名称附加到事件的末尾

我如何收听同一类型的所有事件

例如,对于任何
,我都想听听这样的事件:

  • org.jboss.seam.createProcess.
    -在创建进程时调用
  • org.jboss.seam.endProcess.
    -在进程结束时调用
  • org.jboss.seam.initProcess.
    -当进程与对话关联时调用
  • org.jboss.seam.startTask.
    -在任务启动时调用
  • org.jboss.seam.endTask.
    -任务结束时调用
我需要这样做,尽管我不知道前面的有效姓名列表…:-(


我希望使用@Observer创建观察器或类似的东西,我将在同一个组件中最多听两个事件类。

您可以通过使用自己的实现替换Seam的事件类来轻松完成此操作。然后查找以特定字符串开头的事件:

@Scope(ScopeType.STATELESS)
@BypassInterceptors
@Name("org.jboss.seam.core.events")
@Install(precedence=APPLICATION)
public class Events extends org.jboss.seam.core.Events
{
   @Override
   public void raiseEvent(String type, Object... parameters )
   {
       super.raiseEvent( type, parameters );

       if ( type.startsWith( "org.jboss.seam.createProcess" ) )
       {
           super.raiseEvent( "org.jboss.seam.createProcess", parameters );
       }
       //etc.
   }
}

现在,您可以观察“org.jboss.seam.createProcess”来获取所有createProcess事件。

在if中,您必须编写super.raiseEvent(…),否则您将获得一个无限循环。

被否决,可能看起来有些苛刻,但看到一个新的(ish)会让我感到痛苦用户正在获得代表,以发布应为注释的答案。是,这应为注释comment@SimonGibbs的新用户不能在任何地方发表评论,你需要至少50个声誉才能获得这一特权。