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

Java EJB3.0:使用依赖项注入而不是会话对象,java,session,ejb-3.0,Java,Session,Ejb 3.0,我们正在学校学习EJB3.0,并试图为老师提出的问题确定最佳实践。我们还没有使用弹簧 问题如下: 创建一个EJB,跟踪同一用户(调用第一个用户John)上次调用bean的时间,并在web(servlet)上下文中显示该时间。如果另一个用户(称他为Bill)调用该bean,它将显示Bill上次调用该bean的时间,这与John上次调用该bean的时间不同 现在,我们可以使用servlet请求中的session对象来实现这一点。这将为每个会话分配一个EJB实例,而不会利用依赖注入。像这样(伪代码):

我们正在学校学习EJB3.0,并试图为老师提出的问题确定最佳实践。我们还没有使用弹簧

问题如下: 创建一个EJB,跟踪同一用户(调用第一个用户John)上次调用bean的时间,并在web(servlet)上下文中显示该时间。如果另一个用户(称他为Bill)调用该bean,它将显示Bill上次调用该bean的时间,这与John上次调用该bean的时间不同

现在,我们可以使用servlet请求中的session对象来实现这一点。这将为每个会话分配一个EJB实例,而不会利用依赖注入。像这样(伪代码):

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

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

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

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

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

doGet{

   timeManagerEJB = session.getattribute("localTimeEJB");

   if(timeManagerEJB == null) { 

timeManagerEJB = InitialContext.lookup("path...");

session.setAttribute("localTimeEJB", timeManagerEJB);

}

}