@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.
}
}
现在有效。
我正在尝试使用@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.
}
}
现在有效。