EJB3.0:使用依赖注入而不是会话对象

时间:2010-08-23 08:38:19

标签: java session ejb-3.0

我们正在学校学习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的多个实例,可能会利用依赖注入?

1 个答案:

答案 0 :(得分:1)

  

这是最好的方法,还是EJB框架内置了一个函数来处理有状态EJB的多个实例,可能会利用依赖注入?

您不能将有状态会话Bean注入无状态对象,例如可能由多个并发客户端共享的无状态会话Bean或Servlet,在这种情况下您必须使用JNDI(并将引用放入http会话中) )。