我想知道这里是否有人可以回答我的问题,因为我一直在网上搜索这些东西已经有一段时间了。我知道在将SFSB注入SLSB时可能会出现“意外结果”。我的理解是因为从SLSB到SFSB时交易状态丢失了。
我的问题是,如果我有一个只有一个异步业务方法的无状态bean,其中使用了一个注入的有状态EJB,那么我的缺点和可能的“意外结果是什么?”
根据我的理解,当调用异步方法并从另一个bean中分离出来时,事务状态仍会丢失,只有安全信息从上面传递给异步方法。因此,如果SFSB仅用于一个@Asynchronus方法,我可以将SFSB注入我的SLSB吗?我在这里错过了什么?
简化代码示例:
@Stateless
public class SeedValuesBean {
/**
* Async action bean.
*/
@EJB
private SeedValuesAsyncBean asyncBean;
public void performSeedValues() {
Future<String> result = asyncBean.seedValues():
logger.info("Result :"+ result.get());
}
}
@Stateless
public class SeedValuesAsyncBean {
@EJB
private LowerBusinessBean lowerBean; // is stateful
@Asynchronous
public Future<String> seedValues() {
return new AsyncResult<>(lowerBean.getResult());
}
}
@Stateful
public class LowerBusinessBean {
public String getResult() {
return Double.toString(Math.random());
}
}
对于上下文我问,因为如果我使 SeedValuesAsyncBean 有状态(所以我可以注入一个有状态的bean而不是违反代码),然后因为同样的原因使 SeedValuesBean 有状态,我失去了异步功能,一切都同步发生。
提前致谢。
答案 0 :(得分:1)
您可以通过@Singleton
委托给您的SFSB。然后,您将确保每次都获得相同的SFSB。