根据定义,有状态EJB在调用之间保持状态,而无状态bean则不然。
我的应用程序组织如下:
app.ear
|-EJB
|-Local Stateful bean
|-Local Stateless bean
|-WAR
|-Servlet - injects the beans via @EJB and can trigger an EJB method
两个bean都使用一种方法实现了一个通用的业务接口。方法实现为一个简单的int count ++,输出到控制台。
无状态bean明确地保留了与调用者的对话范围 - Servlet。它随着Servlet的每个方法调用而准确递增。 Servlet在不同的浏览器中被多次调用,具有不同的 http 会话。
为什么要保留国家?
另一个不一致 - 当客户端第一次调用他们的一些方法时,据说状态/无状态EJB都会开始生命周期。虽然我发现这对于无状态bean来说是正确的,但是有状态的生命周期开始了(@PostConstruct方法被调用),只要它通过@EJB注入 - 没有任何方法的任何调用。