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 |
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 llamadofindPorApellido
dicho método toma como parámetro un valor tipoString
(<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" llamadoCuenta
.Y el delimitante
WHERE cta.apellido = ?1
indica que la búsqueda sea restringida a los objetos (cta
) cuyo parámetroapellido
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 tipodouble
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" llamadoCuenta
.Y el delimitante
WHERE cta.saldo BETWEEN ?1 AND ?2
indica que la búsqueda sea restringida a los objetos (cta
) cuyo parámetrosaldo
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.