在官方Java EE文档中,https://docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html 说“会话bean可以实现异步方法”。遵循本教程之后,我将无法异步执行方法。
它实际上有效,但与其他任何同步方法一样。(它不会启动任何其他线程)。
@ManagedBean(name = "inicioSSCCBean")
@SessionScoped
public class InicioSSCCBean implements Serializable {
...
@Asynchronous
public Future<String> sendMessage() {
String status;
try {
// Call to SAP server...
} catch (MessagingException ex) {
// Error handler
}
return new AsyncResult<String>(status);
}
public void otherMethod() {
String result = sendMessage().get(); // The result is what I expect
System.out.println(result);
}
...
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何实现来自会话bean的异步调用?主要目标是调用SAP服务,并异步获取结果。
我正在使用JSF 2.2,PrimeFaces。
提前致谢。
您误解了Java EE教程。术语“会话Bean”是指企业会话Bean(EJB),而不是会话范围内的受管Bean(JSF / CDI Bean)。
该@javax.ejb.Asynchronous
注解,因为它的软件包中已经暗示,只能在EJB中。EJB是由具有可识别@javax.ejb.Xxx
的类注释,例如@Stateless
或@Stateful
。
以下是正确的启动示例:
@Stateless
public class YourService {
@Asynchronous
public void asyncDoSomething() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
@ManagedBean
public class YourBean {
@EJB
private YourService yourService;
public void submit() {
yourService.asyncDoSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4524 次 |
最近记录: |