Examinar un Bean Controlado por Contenedor

Esta sección pasea a través del código de RegistrationBean.java para ver lo fácil que es hacer que el contenedor maneje la persistencia del almacenamiento de datos en un medio oculto como una base de datos (por defecto).

Variables Miembro

Un entorno de contenedor controlador necesita saber qué variables son para almacenamiento persistente y cuales no. En el lenguaje JavaTM, la palabra clave transient indica variables que no son incluidas cuando los datos de un objeto se serializan y escriben en un almacenamiento permanente. En la clase RegistrationBean.java, la variable EntityContext está marcada como transient para indicar que su dato no será escrito en ningún medio de almacenamiento.

El dato de EntityContext no se escribe en el almacenamiento permanente porque su propósito es proporcionar información sobre el contexto en el momento de ejecución del contenedor. Por lo tanto, no contiene datos sobre el usuario registrado y no debería grabarse en un medio de almacenamiento. Las otras variables están declaradas como public, por lo que el contenedor de este ejemplo puede descubrirlas usando el API Reflection.

  protected transient EntityContext ctx;
  public String theuser, password, creditcard, 
           emailaddress;
  public double balance;

Método Create

El método ejbCreate del Bean es llamado por el contenedor después de que el programa cliente llame al método create sobre el interface remoto y pase los datos de registro. Este método asigna los valores de entrada a las variables miembro que representan los datos del usuario. El contenedor maneja el almacenamiento y carga de los datos, y crea nuevas entradas en el medio de almacenamiento oculto.
public RegistrationPK ejbCreate(String theuser,
                                String password,
                                String emailaddress,
                                String creditcard)
        throws CreateException, RemoteException {

  this.theuser=theuser;
  this.password=password;
  this.emailaddress=emailaddress;
  this.creditcard=creditcard;
  this.balance=0;

Métodos de Contexto de Entidad

Un Bean de entidad tiene un ejemplar de EntityContext asociado que ofrece al Bean acceso a la información del contenedor controlador en el momento de la ejecución, como el contexto de la transación.
  public void setEntityContext(
                javax.ejb.EntityContext ctx)
                throws RemoteException {
    this.ctx = ctx;
  }

  public void unsetEntityContext() 
                throws RemoteException{
    ctx = null;
  }

Método Load

El método ejbLoad del Bean es llamado por el contenedor para cargar los datos desde el medio de almacenamiento oculto. Esto sería necesario cuando BidderBean o SellerBean necesiten chequear la ID y password del usuario.

Nota: No todos los objetos Beans están vivos en un momento dato. El servidor de JavaBeansTM de Enterprise podría tener un número configurable de Beans que puede mantener en memoria.

Este método no está implementado porque el contenedor de los JavaBeans de Enterprise carga los datos por nosotros.

  public void ejbLoad() throws RemoteException {}

Método Store

El método ejbStore del Bean es llamado por el contenedor para grabar los datos del usuario. Este método no está implementado porque el contenedor de los JavaBeans de Enterprise graba los datos por nosotros.
  public void ejbStore() throws RemoteException {}

Connection Pooling

La carga y almacenamiento de datos en la base de datos puede tardar mucho tiempo y reducir el rendimiento general de la aplicación. Para reducir el tiempo de conexión, el servidor de Weblogic BEA usa una cola de conexiones JDBCTM para hacer un cache con las conexiones con la base de datos, por eso las conexiones están siempre disponibles cuando la aplicación las necesita.

Sin embargo, no estamos limitados a la cola de conexiones JDBC. Podemos sobreescribir el comportamiento de la cola de conexiones del Bean y sustituirla nosotros mismos.

Descriptor de Desarrollo

La configuración restante para un Brans persistente controlado por contenedor ocurre en el momento del desarrollo. Lo que ves abajo es un Descriptor de Desarrollo basado en texto usado en un servidor de BEA Weblogic Enterprise JavaBeans.

Texto del Descriptor de Desarrollo

  (environmentProperties

    (persistentStoreProperties
      persistentStoreType          jdbc

      (jdbc
        tableName                  registration
        dbIsShared                 false
        poolName                   ejbPool
        (attributeMap
          creditcard               creditcard
          emailaddress             emailaddress
          balance                  balance
          password                 password
          theuser                  theuser
        ); end attributeMap
      ); end jdbc
    ); end persistentStoreProperties
  ); end environmentProperties

El descriptor de desarrollo indica que el almacenamiento es una base de datos cuya conexión está contenida en una cola de conexiones JDBCTM llamada ejbPool. El attributeMap contiene la variable del Bean Enterprise a la izquierda y su campo asociado de la base de datos a la derecha.

Descriptor de Desarrollo XML

En Enterprise JavaBeans 1.1, el descriptor de desarrollo usa XML. Aquí está la configuración equivalente en XML:
<persistence-type>Container</persistence-type>
<cmp-field><field-name>creditcard
    </field-name></cmp-field>
<cmp-field><field-name>emailaddress
    </field-name></cmp-field>
<cmp-field><field-name>balance
    </field-name></cmp-field>
<cmp-field><field-name>password
    </field-name></cmp-field>
<cmp-field><field-name>theuser
    </field-name></cmp-field>
<resource-ref>
<res-ref-name>registration</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Los campos del contenedor controlador se mapean directamente a su nombre contraparte en la tabla de la base de datos. El recurso de autorización del contenedor (res-auth) significa que el contenedor maneja el login a la tabla REGISTRATION.

Ozito