@Asynchronous 不能在同一个 class 中使用多个异步方法

@Asynchronous doesn't work with more than one asynchronous methods in the same class

我正在尝试使用@Asynchronous 来执行业务。当我使用:

ClassA {

  @Inject
  ClassB b; 

  public void runTest() {
     b.exec();
  }

}

@Named
@ConcurrencyManagement
@Startup
ClassB {
    @Asynchronous
    public void exec() {
    // codes here.
}
}

有效。但是如果ClassB改为

@Named
@ConcurrencyManagement
@Startup
ClassB {
    @Asynchronous
    public void exec() {
    // codes here.
    }

    @Asynchronous
    public void exec1() {
    // codes here.
    }
}

A 类更改为

ClassA {

  @Inject
  ClassB b; 

  public void runTest() {
     b.exec();
     b.exec1();
  }

}

exec() 和 exec1() 不是 运行 异步的。这是否意味着 ClassB 不能包含多个@Asynchronous 方法?

我也动了@Asynchronous注解ClassB,还是不行。我应该怎么做才能使 exec() 和 exec1() 异步运行?

我找到问题了。

第一次。我将 ClassB 设置为:

@Named
@Singleton
@Startup
ClassB {
    @Asynchronous
    public void exec() {
    // codes here.
}
}

有效。但是后来我遇到了另一个问题"javax.ejb.ConcurrentAccessTimeoutException: WFLYEJB0241: EJB 3.1 PFD2 4.8.5.5.1 concurrent access timeout on QueryInfo - could not obtain lock within 5000MILLISECONDS"所以我把@Singleton改成了@ConcurrencyManagement。此 @ConcurrencyManagement 仅适用于无状态 bean。所以@Stateless需要添加到ClassB中。

@Named
@ConcurrencyManagement
@Stateless
@Startup
ClassB {
    @Asynchronous
    public void exec() {
    // codes here.
    }

    @Asynchronous
    public void exec1() {
    // codes here.
    }
}

现在有效。