我们正在学校学习EJB 3.0,我们正试图确定我们老师提出的问题的最佳实践。我们还没有使用Spring。
问题如下: 创建一个EJB,用于跟踪同一用户最后一次调用bean的时间(调用第一个用户John)并在Web(servlet)上下文中显示它。如果一个不同的用户(称他为Bill)调用bean,它会显示Bill最后一次调用bean,这与John上次执行的时间不同。
现在,我们可以使用servlet Request中的会话对象来完成此操作。这将为每个会话分配一个EJB实例,而不是利用依赖注入。像这样(伪代码):
doGet{
timeManagerEJB = session.getattribute("localTimeEJB");
if(timeManagerEJB == null) {
timeManagerEJB = InitialContext.lookup("path...");
session.setAttribute("localTimeEJB", timeManagerEJB);
}
}
这是最好的方法,还是EJB框架内置了一个函数来处理有状态EJB的多个实例,可能会利用依赖注入?
答案 0 :(得分:1)
这是最好的方法,还是EJB框架内置了一个函数来处理有状态EJB的多个实例,可能会利用依赖注入?
您不能将有状态会话Bean注入无状态对象,例如可能由多个并发客户端共享的无状态会话Bean或Servlet,在这种情况下您必须使用JNDI(并将引用放入http会话中) )。