在servlet中注入有状态的ejb

时间:2014-01-30 06:48:17

标签: java java-ee servlets jboss ejb-3.0

我是ejbs和cdi的新手。据我所知,有状态的ejb将数据存储在实例变量中,并在请求完成后销毁有状态的ejb。

我最近参加了面试,面试官问我在网上购物应用程序中会使用哪种ejb。

如果我必须在没有ejbs的情况下执行此操作,我会创建一个HttpSession,然后在会话中添加用户兴趣,然后向他显示另一个页面以继续或进行付款或退出。

如果我想使用有状态的ejbs完成相同的操作,我不明白我为什么要使用有状态的ejbs,它的意义是什么?因为一旦请求完成,ejb就会被销毁,用户兴趣/购物车细节也会被销毁。

其次我无法理解的是cdi,假设我将服务类注入到我的servlet中,因为只有一个服务类实例才会发生注入。当两个以上的请求到来时,有状态ejb的实例变量会被破坏。所以我想当我使用有状态的ejbs时,我必须使用@RequestScoped注释。我是对的吗?

1 个答案:

答案 0 :(得分:3)

有状态会话bean将允许您存储与http会话相同的状态。使用http会话的优点我可以想到:

  1. 可扩展性 - 您的SFSB可以部署在另一台服务器上,并使用远程接口独立扩展
  2. 非Web客户端 - 您可以使用SFSB维护无法使用http会话的非Web客户端的状态
  3. 使用EJB的other benefits
  4. 要在servlet中保存对有状态EJB的引用,您应该将@SessionScoped与@Inject一起使用,如answer

    所示