stated class, stateless class, 兩種類別,代表了一種思路
在server端,不維護每個client的狀態,將會減少麻煩,是否需要引入無狀態思路呢?那么每個交互都是request<-->response模式
有狀態模式,就是session維護模式,這還是非常常見的。
參考
Stateless or Stateful?
Service objects will usually be stateless. Stateless service layers are highly scalable: They pose no replication
issues and there is no need to allocate additional resources for every client. (Remember that one of
the key motivations of a middle tier is to share resources between multiple clients.) It is also much easier
for stateless service layers to support remote clients, if necessary.
The traditional stateless service objects in J2EE applications are stateless session beans (SLSBs). I’ll use
SLSBs as a starting point for discussion because they illustrate many of the basic concepts of stateless
service objects, which predate EJB.
A stateless service layer is one concession of object orientation that I find not too painful. Stateless service
objects are semi-objects. Although they cannot expose state to callers, they can hold internal state
and they can fully participate in inheritance relationships. If they are local, rather than remote, they can
use true objects as parameters and return values.
There are two main potential models for stateful service layers in J2EE: stateful session beans (SFSBs) and
web tier session objects. If we don’t use stateful session beans, session data is usually held in Servlet API
HttpSession objects. Holding session data in the web tier is usually more scalable than holding it in the
EJB tier. (See Chapter 10 of Expert One-on-One J2EE Design and Development for detailed discussion of
state replication issues.) “Thick” clients such as Swing applications will normally hold their own state.
Because stateless service layers have proven their value in numerous technologies, including both J2EE
and Microsoft platforms, we’ll focus on them in this book.
If possible, design applications to use a stateless service layer. Hold state in the web
tier, rather than in the business logic tier, if possible.
對于EJB來講,Bean實例并非使用時創建,而是實現創建一個對象池,當client需要該bean中方法時,如果時無狀態的,容器會隨便指定一個空閑的給client使用,但是如果是有狀態的,容器必須記住上次是那個bean實例為這個client服務的,下次同一個client請求也必須由這個同一個實例來服務,不能換由其他的bean實例來服務