Menú Curso Java EJB's : Código Fuente "ejb-jar.xml" empleado en un "CMP Entity Bean"

(Anterior) CMP ("Container Managed Persistence")

Según define la estructura para EJB's el "Deployment Descriptor" debe estar colocado bajo un directorio llamado META-INF. Debido a la importancia del "Deployment Descriptor" en un "CMP EJB" la descripción se encuentra fraccionada en cuatro partes.

Deployment Descriptor ejb-jar.xml


<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC
	"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
	"http://java.sun.com/dtd/ejb-jar_2_0.dtd">


<ejb-jar>
  <enterprise-beans>
   <entity>
   <ejb-name>BancoDeMexicoCMP</ejb-name>
   <home>com.osmosislatina.ejb.cuentaCMP.CuentaBancariaHomeCMP
   </home>
   <remote>com.osmosislatina.ejb.cuentaCMP.CuentaBancariaCMP
   </remote>
<local-home>com.osmosislatina.ejb.cuentaCMP.CuentaBancariaHomeLocal
   </local-home>
   <local>com.osmosislatina.ejb.cuentaCMP.CuentaBancariaLocal
   </local>
   <ejb-class>com.osmosislatina.ejb.cuentaCMP.CuentaBancariaBeanCMP
   </ejb-class>


   <persistence-type>Container</persistence-type>
   <prim-key-class>java.lang.String</prim-key-class>
   <reentrant>False</reentrant>
   <cmp-version>2.x</cmp-version>

  • Esta primer sección del Deployment Descriptor asigna un nombre al "Entity EJB" (BancoDeMexicoCMP) y define las clases que lo componen.

Las declaraciones <local> y <local-home> se refieren a interfases locales del EJB. Si incluye éstas declaraciones, asegúrese de incluirlas en su EJB-JAR. Este tema es descrito en una sección especifica del curso : Interfases locales

  • Posteriormente se declara que el "Entity EJB" sea "CMP" (persistence-type) de acuerdo a EJB's 2.0; esto es necesario debido a que el diseño de CMP en la versión 1.1 dista del 2.0 .


         <abstract-schema-name>Cuenta</abstract-schema-name>
         <cmp-field><field-name>id</field-name></cmp-field>
         <cmp-field><field-name>nombre</field-name></cmp-field>
         <cmp-field><field-name>apellido</field-name></cmp-field>
         <cmp-field><field-name>saldo</field-name></cmp-field>
         <primkey-field>id</primkey-field>

Esta sección define lo que es conocido como "Abstract Schema" y contiene los parámetros que serán manipulados a través de la Base de Datos, para este "CMP EJB" el "Abstract Schema" es llamado Cuenta el cual contiene 4 parámetros además de la denominada llave primaria.

Un aspecto muy importante al definir estos "Abstract Schema" es que los parámetros deben coincidir con los métodos definidos en la SuperClase,esto es, si se define un parámetro nombre deben existir los métodos getNombre y setNombre, para saldo -- getSaldo y setSaldo-- así respectivamente; lo anterior es una convención utilizada para "CMP EJB's", nótese el uso de letra mayúscula al definir los métodos con el respectivo parámetro.


         <query>
            <description>
               Encontrar cuentas por Apellido
            </description>
            <query-method>
               <method-name>findPorApellido</method-name>
               <method-params>
                  <method-param>java.lang.String</method-param>
               </method-params>
            </query-method>

            <ejb-ql>
          SELECT object(cta) 
               FROM Cuenta as cta
               WHERE cta.apellido = ?1
            </ejb-ql>               

         </query>


         <query>
            <description>
	       Encontrar usuarios por Rango 
            </description>
            <query-method>
               <method-name>findEnRango</method-name>
               <method-params>
                  <method-param>double</method-param>
                  <method-param>double</method-param>
               </method-params>
            </query-method>

            <ejb-ql>
          SELECT object(cta) 
               FROM Cuenta As cta
               WHERE cta.saldo BETWEEN ?1 AND ?2
            </ejb-ql>               

         </query>

      </entity>
  </enterprise-beans>

En esta sección se definen los dos métodos de búsqueda utilizados por el "CMP EJB", ambas declaraciones hacen uso del lenguaje EJB-QL ("Enterprise Java Bean Query Language").

  • El primer método de búsqueda delimitado por los elementos <query> es llamado findPorApellido dicho método toma como parámetro un valor tipo String ( <method-param> ), la búsqueda que será realizada se encuentra entre los elementos <ejb-ql> y es descrita a continuación.

  • El renglón SELECT object(cta) indica que sean seleccionados objetos (Java EJB's), donde el vocablo (cta) es utilizado como una abreviatura.

  • FROM Cuenta as cta indica que los objetos sean seleccionados del "Abstract Schema" llamado Cuenta.

  • Y el delimitante WHERE cta.apellido = ?1 indica que la búsqueda sea restringida a los objetos (cta) cuyo parámetro apellido equivale la variable ?1, esta variable ?1 corresponde al parámetro que es pasado al método (<method-param>).

  • El método findEnRango define dos parámetros de entrada del tipo double que realiza la siguiente búsqueda:

    • El renglón SELECT object(cta) indica que sean seleccionados objetos (Java EJB's), donde el vocablo (cta) es utilizado como una abreviatura.

    • FROM Cuenta indica que los objetos sean seleccionados del "Abstract Schema" llamado Cuenta.

    • Y el delimitante WHERE cta.saldo BETWEEN ?1 AND ?2 indica que la búsqueda sea restringida a los objetos (cta) cuyo parámetro saldo se encuentra entre las variables ?1 y ?2 , estas variables corresponden a los parámetros que son pasados al método (<method-param>), limite superior y limite inferior.


   <assembly-descriptor>
      <container-transaction>
         <method>
            <ejb-name>BancoDeMexicoCMP</ejb-name>
            <method-name>*</method-name>
         </method>
         <trans-attribute>Required</trans-attribute>
      </container-transaction>
   </assembly-descriptor>

</ejb-jar>

Finalmente esta sección describe que todos los métodos (<method-name>*</method-name>) del "CMP EJB" utilicen transacción Required, otras alternativas para transacciones serán descritas en otra sección de este curso.

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com