Jakarta ee 在Servlet瓶颈中注入ejbbean

Jakarta ee 在Servlet瓶颈中注入ejbbean,jakarta-ee,ejb-3.1,servlet-3.0,Jakarta Ee,Ejb 3.1,Servlet 3.0,据我所知,EJB容器有会话bean的池。i、 当客户端从JNDI查找bean时,ejb容器创建新实例或从池中返回它。 无状态会话bean的一个实例一次执行一个请求,当其他请求到达该bean时,ejb容器创建新的请求或从池中返回 一切正常,但假设我们将注入bean到Servlet @Stateless public class StatelessBean {} @WebSerlvet public class Servlet extends HttpServlet { @EJB

据我所知,EJB容器有会话bean的池。i、 当客户端从JNDI查找bean时,ejb容器创建新实例或从池中返回它。 无状态会话bean的一个实例一次执行一个请求,当其他请求到达该bean时,ejb容器创建新的请求或从池中返回

一切正常,但假设我们将
注入
bean到
Servlet

@Stateless
public class StatelessBean {}

@WebSerlvet
public class Servlet extends HttpServlet {
    @EJB
    StatelessBean bean;

    public void doPost() {
         bean.handle();
    }
servlet实例总是一个。当多个客户端请求此servlet时,它仅在不同的线程中运行。因此,这些线程共享注入的
无状态Bean
。所以当多线程调用
bean.handle()
方法时

  • 这是瓶颈吗
  • Ejb容器是否创建了新的容器(我认为这是不可能的)
  • 当ejb容器乘以bean时,当客户端从JNDI查找时,或者当客户端调用bean实例上的方法时

当您使用
@EJB
注入EJB时,实际上您有一个到这个EJB的代理,而不是特定的bean实例。通过使用这个代理容器,可以从bean池中选择一个bean实例。使用您的示例—这样,两个单独的EJB bean实例就可以为两个单独的客户机对servlet的请求提供服务,所以这绝对不是瓶颈。 当池中没有可用的空闲实例可供选择时(前提是当前活动bean实例的数量不超过最大bean池大小),容器可以创建bean的新实例。当客户机(例如servlet)向EJBbean发送请求(调用方法)以执行操作时,就会完成此操作

我可以建议您,如果您想观察ejbbean实例是何时创建的,您可以阅读关于
@PostConstruct
注释方法的内容