当前位置: 首页 > 知识库问答 >
问题:

CDI 2具有@Priority的事件排序不起作用

龚沛
2023-03-14

但在我的示例中不起作用:

@Stateless
public class EventTest {

  @Inject
  @QualifierA
  private Event<String> eventA;

  @Inject
  @QualifierB
  private Event<String> eventB;


  @Test
  public void test() throws VerarbeitungsException {
    eventB.fire("B");
    eventA.fire("A");
  }

  public void observerA(@Observes(during = TransactionPhase.AFTER_SUCCESS) @Priority(value = 1) @QualifierA String xml) {
    send(xml);
  }

  public void observerB(@Observes(during = TransactionPhase.AFTER_SUCCESS) @Priority(value = 2) @QualifierB String xml) {
    send(xml);
  }

  private void send(String xml){
    System.out.println(xml);
  }
}

在我的testclass中,我触发事件B,然后触发事件A。测试日志显示B/A,但我将按照@Priority定义的那样expact A/B。我在CDI 2.0中使用WildFly14。事件排序只对同一事件/限定符的观察者有效吗?

共有1个答案

沃瑾瑜
2023-03-14

排序是在同一事件的观察者之间进行的。但是您定义了两个事件,使用了不同的限定符。

要正确测试优先级,您应该只激发一个事件,并为该事件设置两个观察者。

例如:

@Stateless
public class EventTest {

  @Inject
  @QualifierA
  private Event<String> eventA;


  @Test
  public void test() throws VerarbeitungsException {
    eventA.fire("A");
  }

  public void observerA(@Observes(during = TransactionPhase.AFTER_SUCCESS) @Priority(value = 1) @QualifierA String xml) {
    send("A: " + xml);
  }

  public void observerB(@Observes(during = TransactionPhase.AFTER_SUCCESS) @Priority(value = 2) @QualifierB String xml) {
    send("B: " + xml);
  }

  private void send(String xml){
    System.out.println(xml);
  }
}
 类似资料:
  • 问题内容: 我有一个非常简单的JTable,我想按列0升序对其进行排序。代码非常简单。但是它不能正确地对行进行排序。我不知道怎么了。以下是我的代码: 这是我运行程序时的结果 结果: 任何帮助将不胜感激。结果附后。提前致谢。 问题答案: 从DefaultTableModel的文档中: 警告:DefaultTableModel返回Object的列类。当将DefaultTableModel与TableR

  • 寻找有关以下用例的建议或解决方案 应用程序接收按功能键(如员工id)标识的更改时间排序的消息。功能键可以有多条消息 每条消息都会触发一个工作流。如果员工有待定工作流,则希望将新消息排队,直到待定工作流完成 是否有任何方法可以在节奏中对消息重新排序,以将它们作为由消息中的功能键标识的组进行处理?

  • 问题内容: 当我尝试对文件进行排序并将其输出保存在自身中时,就像这样 file1的内容将被完全删除,而当我尝试使用“ tee”命令执行同样的操作时 它运行良好 [ed:仅对具有幸运时机的小文件“运行良好”,会在大文件上或在无用的进程调度中导致数据丢失] ,即它会覆盖file1本身的排序输出并在标准输出中显示。 有人可以解释为什么第一种情况不起作用吗? 问题答案: 它不起作用,因为’>’重定向意味着

  • 在我的 spring boot 应用程序中,我无法使用在带注释的类上正确排序 swagger JSON。 然后,当我在URL < code > http://localhost:[port]/[servlet-context-path]/v2/API-docs 请求Json输出时,位置顺序似乎不起作用:

  • 问题内容: 我有一份注册表,正在使用它提交。 这是我的AJAX请求: 在我的 Submit1.php 文件中,我检查数据库中是否存在 电子邮件地址 和 用户 名字 段。如果这些值存在 而没有页面刷新, 则希望显示一条错误消息。 如何将其添加到我的AJAX请求的 成功 回调中? 问题答案: 结果可能不是JSON格式,因此当jQuery尝试如此解析时,它将失败。您可以使用回调函数捕获错误。 无论如何,

  • 我在编辑时注册了触发器- 我也试过了,但没有注册触发器,以防发生奇怪的碰撞。是否需要执行其他操作来触发该函数?