当前位置:  开发笔记 > 运维 > 正文

将EJB作为实例变量注入servlet是否安全?

如何解决《将EJB作为实例变量注入servlet是否安全?》经验,为你挑选了1个好方法。

我们都知道,在Web层中,可能只存在给定Servlet的单个实例,该实例为多个请求提供服务.这可能导致实例变量中的线程问题.

我的问题是,使用@EJB注释将EJB作为实例变量注入servlet是否安全?

在假设EJB的同一实例同时为多个请求提供服务的情况下,我的初衷是不.看起来这也是许多其他程序员的本能:不要注入servlet

但是我得出了错误的结论.显然,注入servlet的是一个代理,在容器下,容器实际上是用不同的实例为每个请求服务并保持线程安全吗?正如这个论坛所建议的那样:注入servlet

似乎存在很多相互矛盾的观点.哪个是对的???



1> 小智..:

只要EJB是无状态的,将Servlet中的EJB作为Servlet实例变量注入是安全的.你必须永远不要在Servlet中注入有状态Bean.

您必须实现EJB无状态,因为它不包含任何本身具有有状态值的实例变量(如持久性上下文).如果需要使用持久性上下文,那么必须在EJB的方法中获取它的实例.您可以通过将PersistenceContextFactory作为EJB实例变量来实现,然后在EJB的方法中从Factory获取实体管理器的实例.

PersistenceContextFactory是线程安全的,因此可以将其注入实例变量中.

只要您遵守上述规则,在Servlet中注入无状态Bean应该是线程安全的

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有