04 diciembre 2008

explicacion sencilla beans stateless/stateful

un Session Bean es un objeto que se instancia durante una sesión que mantiene un cliente J2EE con un contenedor J2EE (contenedor de beans). Esto quiere decir, que esa instancia es sólo visible para ese cliente y para ninguno más.

Mediante un session bean es posible acceder a todos los recursos permitidos a esa sesion, como puede ser una conexion a base de datos. Es por esto, que el session bean es el patrón preferido para implementar los objetos DAO (Data Access Object), es decir, los objetos que interactuan con la base de datos realizando las consultas y devuelven objetos persistentes hacia el cliente. Cada session bean tiene un nombre unico que lo identifica dentro de la sesion.

Los session beans pueden ser Remotos o Locales. Cuando el session bean es remoto significa, que si el contenedor de beans se encuentra en un contexto diferente que el cliente, es decir, en otro servidor, seguramente en una maquina remota. Por otro lado, el Session Bean Local, hace referencia a un session bean que está alojado en el mismo contenedor que el cliente.

Un session bean, puede ser remoto y local simultaneamente.
Generalmente, en las aplicaciones a las que estamos acostumbrados, es decir, aplicaciones web, el tipo de session bean más utilizado es el local Sonrisa.

Existe además, otra diferenciacion entre session beans, en el sentido de que pueden ser Stateless o Stateful. El session bean stateless es un bean que no garantiza mantener un estado, es decir, podria crearse con cada invocacion a alguno de sus metodos o servicios. Esto significa que no podrias pretender mantener una variable de instancia en ese session bean entre invocacion e invocacion de servicios, porque esa variable podria ser destruida cada vez.

Este tipo de session bean es ideal para transacciones no persistentes, es decir, si modificas un objeto persistente durante la invocacion de un session bean stateless, el objeto se guarda apenas termina la transaccion. Por último, el session bean stateful, al contrario del stateless, mantiene su estado durante todo el transcurso de la sesion, suponiendo esto un mayor derroche de memoria, pero garantizando la mantencion de las variables de instancia.

Un session bean NO puede ser stateless y stateful simultaneamente
.
En un momento X, en una sesion puede existir solo UNA instancia de un session bean. Es asi que un stateless session bean puede haber sido instanciado muchas veces durante el transcurso de una session, pero NUNCA podrian haber coexistido simultaneamente dos instancias del mismo session bean.
Entonces, podemos categorizar a los session beans, segun su modo de acceso, como Remote y/o Local, y segun su ciclo de vida como Stateless o Stateful. Tanto el modo de acceso como el ciclo de vida SIEMPRE se especifican.
Para declarar session beans en JEE5, deberias declarar primero una interfaz, que es la que declara los servicios. En esta interfaz es obligatorio definir el modo de acceso.

Código
GeSHi (java):
/* especificamos que el session bean es local
por convencion, si no especificamos lo contrario, el session bean recibira
el nombre de la interface como nombre unico */

@Local
interface Sumador{

// especificamos que el session bean ofrecera el servicio "suma"
int suma(int a, int b);

}

// ahora implementamos el session bean
// sera un sesion bean "sin estado"
@Stateless
class SumadorBean implements Sumador{

public int suma(int a, int b){
return a + b;
}

}

No hay comentarios: