我正在尝试使用@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.
}
}
ClassA更改为
ClassA {
@Inject
ClassB b;
public void runTest() {
b.exec();
b.exec1();
}
}
exec()和exec1()没有异步运行。这是否意味着ClassB不能包含多个@Asynchronous方法?
我也将@Asynchronous移到了ClassB上,但是它仍然无法正常工作。我该怎么做才能使exec()和exec1()异步运行?
答案 0 :(得分:0)
我发现了问题。
第一次。我将ClassB设置为:
@Named
@Singleton
@Startup
ClassB {
@Asynchronous
public void exec() {
// codes here.
}
}
有效。但是后来我遇到了另一个问题“ javax.ejb.ConcurrentAccessTimeoutException:WFLYEJB0241:QueryInfo上的EJB 3.1 PFD2 4.8.5.5.1并发访问超时-无法在5000MILLISECONDS中获得锁定”,所以我将@Singleton更改为@ConcurrencyManagement。此@ConcurrencyManagement仅适用于无状态Bean。因此,需要将@Stateless添加到ClassB。
@Named
@ConcurrencyManagement
@Stateless
@Startup
ClassB {
@Asynchronous
public void exec() {
// codes here.
}
@Asynchronous
public void exec1() {
// codes here.
}
}
现在可以使用。