# Stateless Session Beans:
A stateless session bean does not maintain a conversational state with the client.
When a client invokes the methods of a stateless bean, the instance of bean variables may
contain a state specific to that client only for the duration of a method invocation.
Once the method is finished, the client-specific state should not be retained i.e. the EJB container
destroys a stateless session bean.
These types of session beans do not use the class variables (instance variables).
So they do not persist data across method invocation and therefore there is no need to passivates the bean's instance.
Because stateless session beans can support multiple clients, they provide the better scalability for
applications that require large numbers of clients.
# Stateful Session Beans:
These types of beans use the instance variables that allows the data persistent
across method invocation because the instance variables allow persistence of data across method invocation.
The client sets the data to these variables which he wants to persist. A stateful session bean retains its state
across multiple method invocations made by the same client. If the stateful session bean's state is changed during a method invocation,
then that state will be available to the same client on the following invocation. The state of a client bean is retained
for the duration of the client-bean session. Once the client removes the bean or terminates, the session ends and the state disappears.
Because the client interacts with its bean, this state is often called the conversational state.
When to use session beans:
Generally session beans are used in the following circumstances:
* When there is only one client is accessing the beans instance at a given time.
* When the bean is not persistent that means the bean is going to exist no longer.
* The bean is implementing the web services.
Stateful session beans are useful in the following circumstances:
* What the bean wants to holds information about the client across method invocation.
* When the bean works as the mediator between the client and the other component of the application.
* When the bean have to manage the work flow of several other enterprise beans.
Stateless session beans are appropriate in the circumstances illustrated below:
* If the bean does not contain the data for a specific client.
* If there is only one method invocation among all the clients to perform the generic task.
Some points to be remmber for the difference between Stateful session bean and Stateless session bean
a) Stateful beans are also Persistent session beans. They are designed to service business processes
that span multiple method requests or transactions.
Stateless beans are designed to service business process that last only for a single method call or request.
b) Stateful session beans remembers the previous requests and reponses.
Stateless session beans do not remember the previous request and responses.
c)Stateful session beans does not have pooling concept.
Stattless session bean instances are pooled.
d) Stateful S.Beans can retain their state on behave of an individual client.
Stateless S.Beans donot maintain states.
e) Stateful S.Beans can be passivated and reuses them for many clients.
Stateless S.Beans, client specific data has to be pushed to the bean for each method invocation which
result in increase of network traffic.
f)Stateful session beans have the passivated and Active state which the Stateless bean does not have.
g)Stateless Session beans are scaleable and can therefore be
replaced by an enhanced model whereas Stateful Session beans are not scaleable.
h)ejbActivate() and ejbPassivate() methods are not called in Stateless session beans
For more information on EJB visit to :http://www.roseindia.net/ejb/http://www.roseindia.net/ejb/SessionBean.shtml