Beruflich Dokumente
Kultur Dokumente
Enterprise Beans
"Home Interface"
"Remote Interface"
"Deployment Descriptor"
Tipos de Beans
Beans Entidad
Un bean entidad representa un objeto de negocios en un mecanismo de
almacenamiento persistente.
esta
Beans Sesin
Los beans sesin representan un conjunto de procesos o tareas, los cuales
son desempeadas para la aplicacin cliente. No representan datos como los
bean entidad. Los beans sesin, pueden usar otros beans para completar las
tareas o acceder directamente a la base de datos.
Como su nombre sugiere, un bean sesin es similar a una sesin
interactive. Un bean sesin, no es compartido solo tiene un solo cliente, de la
misma forma que una sesin interactiva solo tiene un solo usuario. Una bean
sesin no es persistente. Cuando un cliente termina, el bean sesin finaliza y no
esta mas asociado con el cliente.
Message-Driven
Una vez que el cliente tiene el home interface de la clase del EJB que
quiere generar, se llama a uno de los mtodos create() en el home interface para
crear el objeto en el servidor. El objeto del home interface del lado del cliente hace
una llamada remota al conteiner del EJB, quien luego genera el componente EJB
y devuelve el objeto EJB al cliente. Luego el cliente puede llamar los mtodos del
objeto EJB, estas llamadas son enviadas al conteiner. El conteiner difiere la
implementacin de los mtodos de las llamadas invocadas a los componentes del
EJB.
Ms de los EJB Container
Como se menciono anteriormente, los conteiner aslan a los Enterprise
beans de acceso directo por parte de las aplicaciones de los clientes. Cuando una
aplicacin invoca un mtodo remoto en un Enterprise bean, l
intercepta la
conteiner lo pondr en un lista para que pueda ser reutilizado por otro cliente, o
posiblemente lo expulse de la memoria y solo lo trae de vuelta cuando sea
necesario. Debido a que las aplicaciones de los clientes no tienen acceso directo a
los bean, las aplicaciones de los clientes estn completamente desprevenidas de
las actividades de direccin que realiza los conteiner. Por ejemplo si un bean no
esta siendo utilizado este puede ser expulsado de la memoria del servidor,
mientras que su referencia remota en el cliente quedan intactas. Cuado el cliente
sistema
de
nombramiento
especial
llamado
Environment
Naming
todo el trabajo, los stubs y los esqueletos solo pasan la identidad del mtodo y sus
argumentos a travs de la red.
En EJB los esqueletos son para las interfaces remotas y home estn
implementados por el container y no por las clase bean. Esto es para asegurara
que todo mtodo invocado por las aplicaciones clientes son primeramente
manejados por el container y luego son delegados a la respectiva instancia del
bean.
Los protocolos de objetos distribuidos definen el formato de los mensajes
de red enviados entre los espacios de direcciones. Los protocolos de objetos
distribuidos se pueden poner bastante complicados, pero afortunadamente uno no
ve nada de esto por que es manejado automticamente. La mayora de los
servidores de EJB soportan o el Java Remote Meted Protocol (JRMP) o el
protocolo de CORBA Internet Inter.-ORB Protocol (IIOP). Los programadores de
los bean y de las aplicaciones solo ven las clases bean y su interfaz remota, los
detalles de la comunicacin por la red es escondida.
Con respeto al API del EJB, los programadores no les importa si el servidor
EJB utiliza JRMP o IIAP (el API es el mismo). Las especificaciones del EJB
requieren que se utilicen una versin especializada del API del RMI Java, cuando
se esta trabajando con un bean remotamente. RMI de Java es un API para
acceder objetos distribuidos.
EJEMPLO
A continuacin un ejemplo de como una customer bean puede ser accedido desde
una aplicacin de cliente. En este ejemplo la interfaz home es del tipo
CustomerHome la interfaz remota es del tipo Customer.
CustomerHomehome=//...obtainareferencethat
//implementsthehomeinterface.
//Usethehomeinterfacetocreatea
//newinstanceoftheCustomerbean.
Customercustomer=home.create(customerID);
//usingabusinessmethodontheCustomer.
customer.setName(someName);
La interfaz remota define los mtodos de negocios del bean, los mtodos que son
especficos de los conceptos de negocios al cual representa.
A continuacin esta una definicin de una interfaz remota para el bean Customer.
importjavax.ejb.EJBObject;
importjava.rmi.RemoteException;
publicinterfaceCustomerextendsEJBObject{
publicNamegetName()
throwsRemoteException;
publicvoidsetName(Namename)
throwsRemoteException;
publicAddressgetAddress()
throwsRemoteException;
publicvoidsetAddress(Addressaddress)
throwsRemoteException;
}
publicinterfaceHotelClerk
extendsEJBObject{
publicvoidreserveRoom(Customercust,
RoomInfori,Datefrom,Dateto)
throwsRemoteException;
publicRoomInfoavailableRooms(
Locationloc,Datefrom,Dateto)
throwsRemoteException;
}
AddressmyAddress;
NamemyName;
CreditCardmyCreditCard;
publicNamegetName(){
returnmyName;
}
publicvoidsetName(Namename){
myName=name;
}
publicAddressgetAddress(){
returnmyAddress;
}
publicvoidsetAddress(Addressaddress){
myAddress=address;
}
...}
publicvoidreserveRoom(
Customercust,RoomInfori,
Datefrom,Dateto){
CreditCardcard=cust.getCreditCard();
RoomHomeroomHome=
//...gethomereference
Roomroom=
roomHome.findByPrimaryKey(ri.getID());
doubleamount=room.getPrice(from,to);
CreditServiceHomecreditHome=
//...gethomereference
CreditServicecreditAgent=
creditHome.create();
creditAgent.verify(card,amount);
ReservationHomeresHome=
//...gethomereference
Reservationreservation=
resHome.create(cust,room,from,to);
}
publicRoomInfo[]availableRooms(
Locationloc,Datefrom,
Dateto){
//MakeanSQLcalltofind
//availablerooms
Connectioncon=//...getdatabase
//connection
Statementstmt=con.createStatement();
ResultSetresults=
stmt.executeQuery("SELECT...");
...
returnroomInfoArray;
}
}
importjavax.ejb.CreateException;
importjavax.ejb.FinderException;
importjava.rmi.RemoteException;
publicinterfaceCustomerHome
extendsEJBHome{
publicCustomercreate(Integer
customerNumber)
throwsRemoteException,
CreateException;
publicCustomerfindByPrimaryKey(Integer
customerNumber)
throwsRemoteException,
FinderException;
publicEnumerationfindByZipCode(intzipCode)
throwsRemoteException,
FinderException;
}
El mtodo create() es utilizado para crear una nueva entidad. Esto resultara en un
nuevo registro en la basa de datos. Pueden haber varios mtodos create() en
home. Se diferencia en el tipo y nmero de argumentos, pero lo que devuelven
debe ser del tipo remote interface. En este caso el mtodo create devuelve una
instancia de Customer. mtodos utilizados para ubicar determinadas instancia de
Customer bean.
Devuelta a remote y home interface:
Estas dos interfaces es utilizada por las aplicaciones para acceder a los EB. El
home interface permite que la aplicacin cree y localice el bean, mientras que el
remote interface permite a la aplicacin invocar los mtodos de negocios de los
beans
CustomerHomehome=
//Getareferencetothe
//CustomerHomeobject
Customercustomer=
home.create(newInteger(33));
Namename=newName("Richard",
"Wayne","MonsonHaefel");
customer.setName(name);
EnumerationenumOfCustomers=
home.findByZip(55410);
Customercustomer2=
home.findByPrimaryKey(
newInteger(33));
Namename2=customer2.getName();
//outputis"RichardWayne
//MonsonHaefel"
System.out.println(name);
Referencias:
Enterprise JavaBeansTM(EJB) Technology Fundamentals
http://developer.java.sun.com/developer/onlineTraining/EJBIntro/