Está en la página 1de 28

Especialista en Aplicaciones y Servicios

Web con Java Enterprise

Enterprise JavaBeans
Sesión 5:
Beans de entidad

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 1
Índice

 Introducción: características generales


 Cómo usar los beans de entidad
 Cómo construir los beans de entidad

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 2
Beans de entidad

 Proporcionan una visión de objetos de datos


persistentes
 Existen mientras que hay datos en la BD
 Proporcionan independencia de la BD
 Acceso compartido entre múltiples clientes
 Asegura la transaccionalidad de las operaciones

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 3
Beans de entidad y SGBDs

 Los datos persistentes son típicamente relacionales,


pero no tiene por qué ser así.
 Podrían ser bases de datos OO
 Podrían ser bases de datos XML
 Podría ser el modelo de datos de una aplicación obsoleta
de la empresaa

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 4
Uso de los beans de entidad

 Cada instancia del bean de entidad tiene una clave


privada única
 Los clientes primero buscan (método find) un bean
de entidad existente
 Después puede acceder a los campos de persistencia
del bean para consultar (método get) o actualizar
(método set) los datos
 Los clientes pueden crear y eliminar las instancias

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 5
... y ¿qué pasa en la BD?

 Un EJB de entidad está representado por un


conjunto de columnas de una o varias tablas de la
base de datos
 Cada columna se corresponde con un campo de
persistencia
 Cada fila se corresponde con una instancia del bean
 Las operaciones sobre los beans son "traducidas"
por el contenedor EJB en operaciones sobre la BD

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 6
Operaciones sobre los beans y BD

 Búsqueda de una instancia por clave primaria:


buscar una fila en la tabla (SQL: SELECT)
 Creación de una instancia: añadir una fila en la
tabla (SQL: INSERT)
 Modificación de una instancia: modificar una
columna de una tabla (SQL: UPDATE)
 Eliminación de una instancia: eliminar una fila de
una tabla (SQL: DELETE)

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 7
Un ejemplo de bean de entidad

 Estudiante
 Los datos de los estudiantes deben persisitir en la BD
 Los datos de los estudiantes deben sobrevivir a una caída
del servidor
 Los datos de los estudiantes son compartidos por muchas
aplicaciones cliente
 Cada estudiante tiene un número de identificación único

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 8
CMP y BMP

 CMP: persistencia manejada por el contenedor


 BMP: persistencia manejada por el bean
 Antes de la especificación CMP 2.0 el
funcionamiento de la CMP era muy lento
 Ahora es recomendable usar siempre CMP:
 Independencia de la BD
 Mayor rendimiento
 Mayor facilidad de desarrollo y despliegue

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 9
¿Cómo usar beans de entidad?

Context jndiContext = getInitialContext();


Object obj=jndiContext.lookup("CustomerHomeRemote");
CustomerHomeRemote home = (CustomerHomeRemote)
javax.rmi.PortableRemoteObject.narrow(
obj,CustomerHomeRemote.class);
CustomerRemote customer = home.findByPrimaryKey(primaryKey);
String lastName = customer.getLastName();
String firstName = customer.getFirstName();

if (firstName.equals("Domingo"))
customer.remove();

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 10
¿Cómo crear beans de entidad?

Context jndiContext = getInitialContext();


Object obj=jndiContext.lookup("CustomerHomeRemote");
CustomerHomeRemote home = (CustomerHomeRemote)
javax.rmi.PortableRemoteObject.narrow(
obj,CustomerHomeRemote.class);
CustomerRemote customer =
home.create(2134,"Domingo","Gallardo");
// puede haber más de un método de creación
CustomerRemote customer =
home.createWithDNI(2134,"24568123N");

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 11
Proceso de creación (1)

create()
client home intf.
)
ejbCreate(
ejbPostCreate()
bean
inst.

EJB Container

SQL insert

DB

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 12
Proceso de creación (2)

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 13
¿Cómo eliminar beans de entidad?

Context jndiContext = getInitialContext();


Object obj=jndiContext.lookup("CustomerHomeRemote");
CustomerHomeRemote home = (CustomerHomeRemote)
javax.rmi.PortableRemoteObject.narrow(
obj,CustomerHomeRemote.class);
CustomerRemote customer = home.findByPrimaryKey(primaryKey);
String dni = customer.getDNI();
if (dni.equals("00000000"))
customer.remove();

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 14
¿Cómo modificar beans de entidad?

Context jndiContext = getInitialContext();


Object obj=jndiContext.lookup("CustomerHomeRemote");
CustomerHomeRemote home = (CustomerHomeRemote)
javax.rmi.PortableRemoteObject.narrow(
obj,CustomerHomeRemote.class);
CustomerRemote customer = home.findByPrimaryKey(primaryKey);
String dni = customer.setDNI("34234512N");

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 15
¿Puedo obtener más de un bean?

 Sí, con los métodos find que devuelve una


Collection de beans que cumplen una condición

Collection books = bookHome.findByTitle(title);


Iterator it = books.iterator();
double bestPrice = 10000;
while (it.hasNext()) {
Book bookIterator = (Book) it.next();
if (bookIterator.getPrice() < bestPrice)
bestBook = bookIterator;
}

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 16
EJB-QL

 Para obtener los beans que devuelven los métodos


find se usa el lenguaje de consulta a la base de
datos EJB-QL (en el fichero ejb-jar.xml)
<query>
<query-method>
<method-name>findByTitle</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
SELECT OBJECT(c) FROM Book c WHERE c.title = ?1
</ejb-ql>
</query>

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 17
¿Cómo construir beans de entidad?

 1. Construir la tabla que va a guardar la


información del bean
 2. Definir las clases Java del bean:
 CustomerBean: clase de implementación con los métodos
ejbCreate y los métodos set y get de los campos
 CustomerHome: interfaz home con los métodos de
creación
 Customer: interfaz componente con los métodos set y get
 3. Definir los descriptores de despliegue

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 18
Tabla BD

CREATE TABLE CUSTOMERS (


ID_CUSTOMER INT NOT NULL,
FIRST_NAME VARCHAR(30) NOT NULL DEFAULT '',
LAST_NAME VARCHAR(30) NOT NULL DEFAULT '',
INSCRIPTION_DATE DATE,
PRIMARY KEY(ID_CUSTOMER))
ENGINE=INNODB
CHARACTER SET UTF8;

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 19
Clases Java

 Constituyen lo que se denomina modelo abstracto de


programación
 La clase bean (CustomerBean):
 Se debe definir como abstracta
 Los campos de persistencia son "virtuales": sólo se
definen los métodos de acceso
 El método ejbCreate inicializa los campos de persistencia
 La clase home define los métodos de creación y de
búsqueda
 La clase componente define los métodos de acceso

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 20
CustomerBean.java

public abstract class CustomerBean implements javax.ejb.EntityBean {

public Integer ejbCreate(


Integer id, String fname, String lname){
this.setId(id);
this.setFirstName(fname);
this.setLastName(lname);
return null;
}
public void ejbPostCreate(Integer id){}

public abstract Integer getId();


public abstract void setId(Integer id);
public abstract String getLastName( );
public abstract void setLastName(String lname);

public abstract String getFirstName( );


public abstract void setFirstName(String fname);
public abstract boolean getHasGoodCredit();
public abstract void setHasGoodCredit(boolean flag);

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 21
CustomerHome.java

public interface CustomerHome extends javax.ejb.EJBHome {


public Customer create(Integer id, String fname, String lname)
throws CreateException, RemoteException;
public Customer findByPrimaryKey(Integer id)
throws FinderException, RemoteException;
public Collection findByLastName(boolean flag)
throws FinderException, RemoteException;
}

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 22
Customer.java

public interface Customer extends javax.ejb.EJBObject {


public String getLastName() throws RemoteException;
public void setLastName(String lname)
throws RemoteException;
public String getFirstName() throws RemoteException;
public void setFirstName(String fname)
throws RemoteException;
}

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 23
Ficheros de despliegue

 Fichero ejb-jar.xml define el llamado esquema


abstracto de persistencia:
 Campos de persistencia
 Procedimientos de búsqueda usando EJB QL
 Fichero weblogic-cmp-jar.xml define la
correspondencia entre campos de persistencia y
columnas de la BD

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 24
ejb-jar.xml

<entity>
<ejb-name>CustomerBean</ejb-name>

<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Customer</abstract-schema-name>
<cmp-field><field-name>id</field-name></cmp-field>
<cmp-field><field-name>lastName</field-name></cmp-field>
<cmp-field><field-name>firstName</field-name></cmp-field>
<cmp-field><field-name>inscriptionDate</field-name></cmp-field>
<primkey-field>id</primkey-field>

<query>

</query>

</entity>

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 25
weblogic-cmp-jar.xml

<weblogic-rdbms-bean>
<ejb-name>CustomerBean</ejb-name>
<data-source-jndi-name>MiDataSource</data-source-jndi-name>
<table-map>
<table-name>CUSTOMERS</table-name>
<field-map>
<cmp-field>id</cmp-field>
<dbms-column>ID_CUSTOMER</dbms-column>
</field-map>
<field-map>
<cmp-field>firstName</cmp-field>
<dbms-column>FIRST_NAME</dbms-column>
</field-map>
<field-map>
<cmp-field>lastName</cmp-field>
<dbms-column>LAST_NAME</dbms-column>
</field-map>
<field-map>
<cmp-field>inscriptionDate</cmp-field>
<dbms-column>INSCRIPTION_DATE</dbms-column>
</field-map>
</table-map>

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 26
Claves primarias auto-generadas

 Necesitamos la siguiente tabla en la base de datos


con un valor inicial

CREATE TABLE CUSTOMER_IDS (


SEQUENCE INT NOT NULL);

INSERT into CUSTOMER_IDS VALUES (0)

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 27
En el fichero weblogic-cmp-jar.xml

<weblogic-rdbms-bean>
<ejb-name>CustomerBean</ejb-name>
<data-source-jndi-name>MiDataSource</data-source-jndi-name>

<automatic-key-generation>
<generator-type>SequenceTable</generator-type>
<generator-name>CUSTOMER_IDS</generator-name>
<key-cache-size>1</key-cache-size>
</automatic-key-generation>
</weblogic-rdbms-bean>

Enterprise Jav aBeans Copyright © 2005-2006 Univ ersidad de Alicante Beans de entidad 28

También podría gustarte