我希望将一个sessionscoped CDI bean注入到一个stateless EJB中。在访问EJB时,应该使用调用者sessionscope中的正确实例sessionscoped cdi bean。我知道可以通过stateful EJB解决这个问题,但是我真的很想知道是否也可以通过CDI来解决。由于EJB和Servlet运行在同一个war中,我认为它们共享同一个线程,容器应该能够找出EJB中正确的sessionscoped bean。
例如:
EJB:
例如:
EJB:
@Stateless
@LocalBean
public class StatelessSessionBean {
@Inject
Instance<SessionData> sessionData;
public String testMethod() {
SessionData bean = sessionData.get();
String result = "Retrieved bean " + bean + " with UUID "+ bean.uuid + ". Created on: " + new SimpleDateFormat("dd.MM.yyyy HH:mm").format(bean.creationDate);
return result;
}
}
CDI Bean:
@SessionScoped
public class SessionData implements Serializable {
String uuid;
Date creationDate;
public SessionData() {
uuid = UUID.randomUUID().toString();
creationDate = new Date();
}
}
当我从servlet访问无状态EJB时,我想让testMethod使用与调用者的HTTPSession关联的CDI bean。因此,如果来自不同浏览器/HTTP会话的两个客户端访问Servlet,则它们应该都获得不同的结果字符串。
我需要一个CDI Provider
来代替Instance
吗?如果需要,如何为给定的会话生成正确的bean实例?
我考虑过获取BeanManager并搜索SessionData的实例,但我不知道如何获取正确的实例。
非常感谢任何帮助!