Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Enterprise Java Enterprise Java Beans Overview v10-17-2004 EJB Intro 1 Agenda • • • • Enterprise Java Background EJB Overview Bean Types EJB Interfaces and Classes v10-17-2004 EJB Intro 2 Applications Enterprise Java • Web Applications (Servlets/JSPs) – – – – Provided user interface access to database simple business logic no transactions except at the database level; no distributed transactions across business logic • Distributed Applications (RMI) – Distributed access to business logic – access to, but no direct support for database – limited transactions • We have to write a lot of ‘plumbing’ code v10-17-2004 EJB Intro 3 What didn’t we address ? • • • • • • • Enterprise Java Could someone else deploy your application? Component reusability Security Threading Resource Management Load-Balancing Fault Tolerance (a little with activation) v10-17-2004 EJB Intro 4 Paradigm Shift Enterprise Java • We need to start thinking of applications as a set of reusable components and some business logic that ties the components together • Deployed in a re-usable environment that handles middleware and deployment requirements v10-17-2004 EJB Intro 5 Components Vs. Objects Enterprise Java • Usually larger-grained • Provide a complete capability – Credit Card Verification • Can be customized for deployment v10-17-2004 EJB Intro 6 Component Architectures Enterprise Java • Client-Side – Applets – Java Beans – ActiveX • Server Side – – – – Servlets Enterprise Java Beans (EJB) CORBA Components Microsoft .NET v10-17-2004 EJB Intro 7 Distributed Objects Enterprise Java • Makes business objects more accessible – permits more of an 3-tier architecture • user interface at the first tier (Web Applications) • business logic at the second tier (Business Applications) • enterprise resources at the third tier (Databases) • Key technologies include RMI, CORBA, and DCOM • Provide for communication, but limited in serverside component support; results in “roll your own” component models v10-17-2004 EJB Intro 8 Server-Side Components Enterprise Java • Architecture for developing distributed business objects • Separates the development from the assembly into specific applications – allows for the sale of smaller/reusable components rather than end-to-end systems – assembler determines actual transactional, security, persistence behavior, etc. for the component. v10-17-2004 EJB Intro 9 Component Transaction Monitors (CTMs) Enterprise Java • Sophisticated distributed object Application Servers – usually made up of web servers, ORBs, Messaging, Databases, Naming, etc. • Hybrid of TP Monitors (e.g., CICS and Tuxedo)and ORBs (e.g., CORBA and RMI) • Provide infrastructure for managing transactions, object distribution, concurrency, security, persistence, and resource management – the developer isn’t left “rolling their own” – the developer complies with the model and basically implements a lot of callback event and declarative programming • Analogy: CD-player = CTM, CD = Server-side Component v10-17-2004 EJB Intro 10 Enterprise JavaBeans (EJBs) Enterprise Java • Standard server-side component model for Java Enterprise Applications • Enables large scale development • Helps build portable applications • Has nothing to do with “JavaBeans” – JavaBeans designed for intra-process purposes • GUIs • non-visual widgets – Enterprise Java Beans (EJB) designed for inter-process purposes v10-17-2004 EJB Intro 11 EJB Server-side Component Model Enterprise Java • Encapsulates application’s business logic – manage terms of an account – manage state of an order – provide tax calculations • Normally accesses database or other backend systems • EJB Clients – implement only the presentation logic – use EJBs for their business logic v10-17-2004 EJB Intro 12 Enterprise Java EJB Enables Large System Development • Distributed communication • Security – RMI, RMI-IIOP, CORBAIDL – class/method level, role based • Threading • Transaction management – scope, isolation, lifecycle – container initiated • Persistence • Resource pooling – container and bean managed – separation of bean state from object state v10-17-2004 EJB Intro 13 EJB Resource Pooling Enterprise Java Bean Instance Object State • name • address Bean Pool Bean Instance Bean Instance Bean Instance v10-17-2004 Bean State • connection Object Methods() • getCounty() • getVotingDistrict() Bean Methods() • ejbCreate() •ejbActivate() • ejbPassivate() • ejbRemove() • setEJBContext() • unsetEJBContext() EJB Intro Object State Object State Object State Database 14 EJB Portability Enterprise Java • Java – platform independence – “write once, run anywhere” • EJB components – platform/implementation independence – write once, run in any Application Server complying with the EJB spec • • • • • v10-17-2004 J2EE reference implementation IBM’s Websphere BEA’s Weblogic Server Borland’s Enterprise AppServer ... EJB Intro 15 EJB Architecture Enterprise Java • Interfaces and Classes – beans • entity bean • session session (no primary key) – Stateless session bean – Stateful session bean • message driven bean (no primary key, home or object interface) – primary key (entity beans only) – home interface (local and remote) – EJB object interface (local and remote) • Container • Application Server v10-17-2004 EJB Intro 16 Bean Types Enterprise Java • Entity beans • models persistent state - this state is maintained through all method and server invocations • nouns of the domain • real world objects (e.g. Owner, Account, Transaction) • Session beans • models non-persistent state - this state will be lost between method invocations (stateless session) or server invocations (Stateful session) • manage tasks performed on behalf of a single client (e.g. Teller, Monthly Statement) – contains the business processes in which to use entity beans • manages actions that may cross entity beans or go outside the concern of an entity bean – e.g. Teller may authenticate the user and transfer funds between accounts – e.g. Statement may include transactions from multiple accounts v10-17-2004 EJB Intro 17 Bean Types (cont.) Enterprise Java • Message Driven beans • models non-persistent state - this state will be lost between message processing • similar to Stateless Session Beans (which are invoked through synchronous RMI calls) • invoked through asynchronous JMS Messages v10-17-2004 EJB Intro 18 Bean Usage Enterprise Java • Entity beans – model state maintained across all client interactions – represent a row of data in a database • Session beans – model business process being performed by a single client involving one or more entity beans – it extends the actions of the client into the server • simplifies the actions programmed by the client • limits the number of distributed calls required between the client and the entity beans • limits the number of stubs that have to be loaded by the client – are not persisted to a database v10-17-2004 EJB Intro 19 Bean Usage (cont.) Enterprise Java • Message Driven Bean – model business process invoked through asynchronous messages – are not persisted to a database v10-17-2004 EJB Intro 20 Enterprise Java Stateful and Stateless Session Beans • Stateful session bean • maintain the conversational state between a client and the session bean • may be serialized out and passivated to conserve system resources – will be serialized in and activated when needed in the future • e.g. Teller session bean who is logged into an transfers funds between accounts • Stateless session bean • do not maintain conversational state • each method is independent of another and the only information needed is is supplied in the call parameters • e.g. Statement that is given a list of accounts or an owner to generate a textual report for • consumes the least amount of resources among all the bean types v10-17-2004 EJB Intro 21 Stateless Session Bean Lifecycle Enterprise Java Does Not Exist bean deployed/Class.newInstance(); setSessionContext(); ejbCreate() bean undeployed/ejbRemove() Method Ready Pool business method v10-17-2004 EJB Intro 22 Stateless Session Bean Conceptual Class Model JNDI interface HomeInterface 0..* ContainerHomeInterfaceImpl Enterprise Java one instance per type +create: ObjectInterface bean pool uses to lookup SessionEJB uses to create Client interface SessionContext Container -beanState:int 1 1 +_businessMethods:void +_beanCallbacks_:void uses business methods interface ObjectInterface ContainerObjectInterfaceImpl once instance per client invocation +_businessMethods_:void v10-17-2004 EJB Intro 23 Stateful Session Bean Lifecycle remove/ejbRemove() Does Not Exist Enterprise Java timeout create/Class.newInstance(); setSessionContext(); ejbCreate() throws SystemException resources low/ejbPassivate() Method Ready business method v10-17-2004 EJB Intro Passive object needed/ejbActivate() 24 Stateful Session Bean Conceptual Class Model interface HomeInterface JNDI Enterprise Java ContainerHomeInterfaceImpl one instance per type 0..* +create: ObjectInterface uses to lookup interface SessionContext Client uses to create SessionEJB 1 1 Container -beanState:int -_businessState_:int +_businessMethods:void +_beanCallbacks_:void 1 1 interface ObjectInterface ContainerObjectInterfaceImpl uses business methods one instance per client +_businessMethods_:void v10-17-2004 EJB Intro 25 Entity Bean Lifecycle Enterprise Java Does Not Exist unload bean instance()/unsetEntityContext(); finalize() bean instance required/Class.newInstance(); setEntityContext() Pooled passivate object()/ejbPassivate this.ejbSelect() Home.find()/ejbFind() Home.XXX()/ejbHomeXXX() Home.create()/ejbCreate(); ejbPostCreate() object.remove()/ejbRemove() activate object()/ejbActivateObject Ready object.method()/ejbLoad(); business method(); ejbStore() v10-17-2004 this.ejbSelect() EJB Intro 26 Entity Bean Conceptual Class Model JNDI 0..* interface HomeInterface Enterprise Java ContainerHomeInterfaceImpl one per bean type +create: ObjectInterface +find: ObjectInterface +remove:void +_homeMethods_:void Database uses to lookup EntityEJB interface EntityContext 1 Client uses to create/find interface ObjectInterface 1 Container -_objectState_:int -_beanState_:int +_businessMethods_:void +_beanMethods_:void ContainerObjectInterfaceImpl uses business methods 10s to 100s of instances conceptually millions +_businessMethods_:void v10-17-2004 EJB Intro 27 Message Driven Bean Lifecycle Enterprise Java Does Not Exist bean deployed/newInstance(); setMessageDrivenContext(); ejbCreate() bean undeployed/ejbRemove() Method Ready Pool onMessage(msg) v10-17-2004 EJB Intro 28 Message Driven Bean Conceptual Class Model interface Destination JNDI Enterprise Java 0..* 0..* uses to lookup publishes to interface MessageDrivenContext 1 beanEJB Container 1 Client +onMessage:void 10s instances per type v10-17-2004 EJB Intro 29 Enterprise Java EJB Classes and Interfaces Cabin Example from “Enterprise Java Beans, 3rd Edition”, Monson-Haefel v10-17-2004 EJB Intro 30 Remote Interface Enterprise Java • Called “the EJB Object” • Defines the “business” methods that will be available to clients in a distributed call – e.g. Account.debit(transactionRec) – e.g. Teller.transfer(sourceAccount, targetAccount) • Gets compiled by the ejb compiler to creates RMI stubs and skeletons – stubs are used by RMI to translate a method invocation to wire format – skeletons are used by RMI to translate wire format to a method invocation EJB Intro v10-17-2004 31 Remote Interface (cont.) Enterprise Java • Defined as a Java interface – extends javax.ejb.EJBObject • • • • extends java.rmi.Remote getEJBHome() - returns the Home object for the bean getPrimaryKey() - returns the primary key for the object getHandle() - returns a handle to object that may be used to reestablish communications at a later time; possibly in another server • remove() - removes this EJBObject object (prior to eviction) • isIdentical(EJBObject) - returns if both objects are same v10-17-2004 EJB Intro 32 Remote Interface Example: Cabin Enterprise Java package com.titan.cabin; import java.rmi.RemoteException; public interface Cabin extends javax.ejb.EJBObject { public String getName() throws RemoteException; public void setName(String str) throws RemoteException; public int getDeckLevel() throws RemoteException; public void setDeckLevel(int level) throws RemoteException; public int getShip() throws RemoteException; public void setShip(int sp) throws RemoteException; public int getBedCount() throws RemoteException; public void setBedCount(int bc) throws RemoteException; } v10-17-2004 EJB Intro 33 Local Interface (EJB 2.0) Enterprise Java • Like the Remote Interface, defines the “business” methods that will be available to clients, but only for local calls – e.g. Account.debit(transactionRec) – e.g. Teller.transfer(sourceAccount, targetAccount) – Can only be used within the same JVM as the EJB • Gets compiled by the ejb compiler to creates local stubs for container to interpose transactions, access control, etc. on invocations. v10-17-2004 EJB Intro 34 Local Interface (EJB 2.0) (cont.) Enterprise Java • Defined as a Java interface – extends javax.ejb.LocalObject • getEJBLocalHome() - returns the LocalHome object for the bean • getPrimaryKey() - returns the primary key for the object • remove() - removes this EJBObject object (prior to eviction) • isIdentical(EJBObject) - returns if both objects are same – not applicable • extends java.rmi.Remote - it is a local object • getHandle() - unnecessary since client/EJB in same JVM – methods do not throw RemoteException; only EJBException v10-17-2004 EJB Intro 35 Local Interface Example (EJB 2.0): Cabin Enterprise Java package com.titan.cabin; import javax.ejb.EJBException; public interface LocalCabin extends javax.ejb.EJBLocalObject { public String getName() throws EJBException; public void setName(String str) throws EJBException; public int getDeckLevel() throws EJBException; public void setDeckLevel(int level) throws EJBException; public int getShip() throws EJBException; public void setShip(int sp) throws EJBException; public int getBedCount() throws EJBException; public void setBedCount(int bc) throws EJBException; } v10-17-2004 EJB Intro 36 Remote Home Interface Enterprise Java • Defines the “lifecycle” methods that will be available to clients in a distributed call – create new bean objects, locate or remove existing bean objects – e.g. AccountHome.create(owner, initialBalance) – e.g. AccountHome.findByPrimaryKey(accountId) – e.g. TellerHome.create(login, pin) – e.g. MonthlyStatementHome.create() • Gets compiled by the ejb compiler to creates RMI stubs and skeletons v10-17-2004 EJB Intro 37 Remote Home Interface (cont.) Enterprise Java • Defined as a Java interface – extends javax.ejb.EJBHome • extends java.rmi.Remote • getEJBMetaData() - returns metadata about the bean • remove(primaryKey) - removes object identified by primary key • remove(handle) - removes object identified by its EJBHandle – defines • create methods (create(<XXXX>)) • finder methods (findBy<XXXX>(<YYYY>)) • home methods (<XXXX>) //EJB 2.0 v10-17-2004 EJB Intro 38 Remote Home Interface Example: CabinHome Enterprise Java package com.titan.cabin; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.FinderException; public interface CabinHome extends javax.ejb.EJBHome { public Cabin create(int id) throws CreateException, RemoteException; public Cabin findByPrimaryKey(CabinPK pk) throws FinderException, RemoteException; public int getDeckCount(int deck) throws RemoteException;//EJB2.0 } v10-17-2004 EJB Intro 39 Local Home Interface (EJB 2.0) Enterprise Java • Like the Remote Home Interface, defines the “lifecycle” methods that will be available to clients in a distributed call – – – – – – create new bean objects, locate or remove existing bean objects e.g. AccountHome.create(owner, initialBalance) e.g. AccountHome.findByPrimaryKey(accountId) e.g. TellerHome.create(login, pin) e.g. MonthlyStatementHome.create() Can only be used within the same JVM as the EJB • Gets compiled by the ejb compiler to creates stubs for container interpose on invocations v10-17-2004 EJB Intro 40 Local Home Interface (cont.) Enterprise Java • Defined as a Java interface – extends javax.ejb.EJBLocalHome • remove(primaryKey) - removes object identified by primary key – not applicable • extends java.rmi.Remote • getEJBMetaData() - inserted in Remote Home for visual tools only • remove(handle) - no need for handles in local JVM – defines • create methods (create(<XXXX>)) • finder methods (findBy<XXXX>(<YYYY>)) • home methods (<XXXX>) v10-17-2004 EJB Intro 41 Local Home Interface Example (EJB 2.0): CabinHome Enterprise Java package com.titan.cabin; import javax.ejb.EJBException; import javax.ejb.CreateException; import javax.ejb.FinderException; public interface LocalCabinHome extends javax.ejb.EJBLocalHome { public LocalCabin create(int id) throws CreateException, EJBException; public LocalCabin findByPrimaryKey(CabinPK pk) throws FinderException, EJBException; public int getDeckCount(int deck) throws EJBException; } v10-17-2004 EJB Intro 42 Bean Class Enterprise Java • Implements the business methods defined in the Object interface – does not inherit from the Object or Home interfaces – must have methods that match signatures supplied in all of the Object interface and portions of the Home interface • Account.deposit(transactionRec) AccountBean.deposit(transarctionRec) • AccountHome.create(owner) - AccountBean.ejbCreate(owner) – the connection between the Object/Home interface calls and the Bean implementation is done by the EJB compiler that creates the containerspecific skeletal code • uses the Deployment Descriptor to help generate glue code • similar in functionality to a C++ template or a CORBA TIE class v10-17-2004 EJB Intro 43 Bean Class (cont.) Enterprise Java • Clients never interact with bean classes themselves – always interact with the bean through home (create, find, remove) and remote/local interfaces (business methods) • beans that interact with other beans are simply clients of the other bean – stubs and skeletons are created from the interfaces that glue the client, the database, and the bean code together v10-17-2004 EJB Intro 44 Bean Class (cont.) Enterprise Java • implements javax.ejb.[Entity|Session|MessageDriven]Bean – extends empty javax.ejb.EnterpriseBean; extends java.io.Serializable • set/unset[Entity|Session|MessageDriven]Context() – provides callback into container to find caller id, transaction information, etc. • ejbCreate() – container calls this when the bean gets associated with an object • ejbPostCreate() [ Entity Beans Only ] – container calls this after persisting the object’s state v10-17-2004 EJB Intro 45 Bean Class (cont.) Enterprise Java • ejbPassivate() [ Session and Entity Beans Only] – container calls this method when the instance of the bean class is either being returned to the pool (Entity) or serialized/unloaded (Stateful) • ejbActivate() [ Session and Entity Beans Only] – container calls this method when the instance of the bean class is taken from a pool of available instances and associated with a particular EJB Object (Entity) or loaded/de-serialized (Stateful) • ejbRemove() – container calls this method of an instance before removing an EJB Object from the system v10-17-2004 EJB Intro 46 Bean Class (cont.) Enterprise Java • ejbLoad() [ Entity Beans Only ] – container calls this method to instruct the instance to synchronize its state with the state stored in the database – command (bean managed), completion event (container managed) • ejbStore() [ Entity Beans Only ] – container calls this method to instruct the instance to synchronize the state store in the database with its state – command (bean managed), preparation event (container managed) v10-17-2004 EJB Intro 47 Bean Class (cont.) Enterprise Java • onMessage(Message msg) [ Message Driven Beans Only ] – container calls bean method to handle message from Destination (Topic or Queue) v10-17-2004 EJB Intro 48 Bean Class Example (EJB 2.0): CabinBean Enterprise Java package com.titan.cabin; import javax.ejb.EntityContext; public abstract class CabinBean implements javax.ejb.EntityBean { public public public public public public public public public public v10-17-2004 abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract void setId(Integer id); Integer getId(); void setName(String name); String getName(); void setDeckLevel(int level); int getDeckLevel(); void setShipId(int ship); int getShipId(); void setBedCount(int count); int getBedCount(); EJB Intro 49 Bean Class Example (EJB 2.0): CabinBean (cont.) Enterprise Java public Integer ejbCreate(int id){ this.setId(new Integer(id)); return null; } public void ejbPostCreate(int id){ // Do nothing. Required. } //EJB 2.0 Home Method public int ejbGetDeckCount(int deck) { int count=0; //implementation not shown return count; } v10-17-2004 EJB Intro 50 Bean Class Example (EJB 2.0): CabinBean (cont.) public } public } public } public } public } public } public } void setEntityContext( Enterprise Java // Not implemented. void unsetEntityContext(){ // Not implemented. void ejbActivate(){ // Not implemented. void ejbPassivate(){ // Not implemented. void ejbLoad(){ // Not implemented. void ejbStore(){ // Not implemented. void ejbRemove(){ // Not implemented. } v10-17-2004 EJB Intro 51 Bean Class Example (EJB 1.1): CabinBean Enterprise Java package com.titan.cabin; import javax.ejb.EntityContext; public class CabinBean implements javax.ejb.EntityBean { public public public public public v10-17-2004 Integer id; String name; int deckLevel; int shipId; int bedCount; EJB Intro 52 Bean Class Example (EJB 1.1): CabinBean (cont.) public public public public public public public public v10-17-2004 String getName(){ void setName(String str){ int getShipId(){ void setShipId(int sp) { int getBedCount(){ void setBedCount(int bc){ int getDeckLevel(){ void setDeckLevel(int level){ EJB Intro return name; name = str; return shipId; shipId = sp; return bedCount; bedCount = bc; return deckLevel; deckLevel = level Enterprise Java } } } } } } } } 53 Bean Class Example (EJB 1.1): CabinBean (cont.) Enterprise Java public Integer ejbCreate(int id){ this.id = new Integer(id); return null; } public void ejbPostCreate(int id){ // Do nothing. Required. } v10-17-2004 EJB Intro 54 Bean Class Example (EJB 1.1): CabinBean (cont.) public } public } public } public } public } public } public } void setEntityContext( Enterprise Java // Not implemented. void unsetEntityContext(){ // Not implemented. void ejbActivate(){ // Not implemented. void ejbPassivate(){ // Not implemented. void ejbLoad(){ // Not implemented. void ejbStore(){ // Not implemented. void ejbRemove(){ // Not implemented. } v10-17-2004 EJB Intro 55 Primary Key Class Enterprise Java • Value that uniquely identifies the object in the database – Implements java.io.Serializable – Implemenets • hashCode() • equals() • toString() helpful – Contains identical public attributes from the Bean Class for those that represent the bean’s primary key value(s). v10-17-2004 EJB Intro 56 Primary Key Class Example: CabinPK Enterprise Java package com.titan.cabin; public class CabinPK implements java.io.Serializable { public int id; public int hashCode( ){ return id; } public boolean equals(Object obj){ if(obj instanceof CabinPK){ return (id == ((CabinPK)obj).id); } return false; } public String toString(){ return String.valueOf(id); } } v10-17-2004 EJB Intro 57 Containers Enterprise Java • Manages interaction between the bean and its server • Provides a uniform interface to the bean and to the server v10-17-2004 EJB Intro 58 Containers (cont.) Enterprise Java • Creates new instances of beans and manages their persistence – provides mapping between bean and container’s underlying database – provides the skeletal class code for the home and remote interfaces • e.g. AccountHome.findByPrimaryKey(accountPK) – container supplies code to create row in database, instantiate an EJB Object to represent that instance of an account • e.g. AccountHome.remove(accountPK) – container supplies code to remove row in database and remove any existing EJB Objects • e.g. Account.debit(transactionRec) – container supplies code obtain the EJB Object from storage, locate a bean to take on its state, and invoke behavior on the bean v10-17-2004 EJB Intro 59 Deployment Descriptor • • • • • Enterprise Java Instructs the server on the type of bean (session or entity) Instructs the server how to apply services to the bean Described in XML Created from IDE or text source Supplied with other bean components in a “jar” (Java archive) file • • • • • • v10-17-2004 bean class remote interface home interface primary key (for entity beans) deployment descriptor RMI stub/skeleton EJB Intro 60 Deployment Descriptor Example: ejb-jar.xml (Cabin) Enterprise Java <?xml version="1.0" ?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <entity> <description> This Cabin enterprise bean entity represents a cabin on a cruise ship. </description> v10-17-2004 EJB Intro 61 Deployment Descriptor Example: ejb-jar.xml (Cabin) Enterprise Java <ejb-name>CabinBean</ejb-name> <home>com.titan.cabin.CabinHome</home> <remote>com.titan.cabin.Cabin</remote> <local-home>com.titan.cabin.LocalCabinHome</local-home> <local>com.titan.cabin.LocalCabin</local> <ejb-class>com.titan.cabin.CabinBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>java.lang.Integer</prim-key-class> <reentrant>False</reentrant> v10-17-2004 EJB Intro 62 Deployment Descriptor Example: (cont.) Enterprise Java <cmp-version>2.x</cmp-version> <abstract-schema-name>Cabin</abstract-schema-name> <cmp-field> <field-name>id</field-name> </cmp-field> - <cmp-field> <field-name>name</field-name> </cmp-field> - - <cmp-field> <field-name>deckLevel</field-name> </cmp-field> <cmp-field> <field-name>shipId</field-name> </cmp-field> - <cmp-field> <field-name>bedCount</field-name> </cmp-field> <primary-field>id</primary-field> </entity> </enterprise-beans> ... </ejb-jar> v10-17-2004 EJB Intro 63 Enterprise Java EJB Object class • Written by the container-specific compiler after processing the deployment descriptor • Implements methods defined in remote interface by delegating them to an instance of the bean class v10-17-2004 <<Interface>> EJBObject getEJBHome( ) getPrimaryKey( getHandke() remove( ) isIdentical( ) EntityBean ejbPassivate( ) ejbActivate( ) ejbLoad( ) ejbStore( ) ejbRemove( ) setEntityContext( ) unsetEntityContext( ) <<extends>> <<implements>> <<Interface>> Account debit( ) credit( ) getBalance( <<implements>> Account_EJBObject EJB Intro AccountBean id_ balance_ ejbCreate (balance) ejbPostCreate (balance) ejbPassivate () ejbActivate () ejbLoad () ejbStore () ejbRemove () setEntityContext () unsetEntityContext () 64 EJB home class Enterprise Java • Written by the container-specific compiler after processing the deployment descriptor • Implements methods defined in home interface – locate – create – remove • Handles interactions with resources pools, persistence mechanism, and resource managers v10-17-2004 EJB Intro 65 Example Client Enterprise Java Context jndiContext = getInitialContext(); Object obj = jndiContext.lookup("ejb/CabinHome"); System.out.println("found it! ="+ obj); CabinHome home = (CabinHome)javax.rmi.PortableRemoteObject.narrow(obj, CabinHome.class); System.out.println("narrowed it! ="+ home); Cabin cabin_1 = home.create(1); System.out.println("created it! ="+ cabin_1); cabin_1.setName("Master Suite"); cabin_1.setDeckLevel(1); cabin_1.setShip(1); cabin_1.setBedCount(3); v10-17-2004 EJB Intro 66 Example Client Enterprise Java CabinPK pk = new CabinPK(); pk.id = 1; System.out.println("keyed it! ="+ pk); Cabin cabin_2 = home.findByPrimaryKey(pk); System.out.println("found by key! ="+ cabin_2); System.out.println(cabin_2.getName()); System.out.println(cabin_2.getDeckLevel()); System.out.println(cabin_2.getShip()); System.out.println(cabin_2.getBedCount()); v10-17-2004 EJB Intro 67 Enterprise Java Usage Scenarios v10-17-2004 EJB Intro 68 Enterprise Java Creating an Account Object AccountBean database 3: select instance 8: return instance 5: insert AccountBean AccountBean bean pool 1: createAccount(10.00) AccountHome_EJBHome 4: ejbCreate(10.00) 6: ejbPostCreate(10.00) 7: ejbPassivate() remote interface 2: new Account_EJBObject Client v10-17-2004 Account_EJBObject EJB Intro AccountBean 69 Accessing an Account Object Enterprise Java AccountBean database 3: select instance 10: return instance 2: select 8: update AccountBean AccountBean bean pool 4: populate state 5: ejbLoad() 6: debit(10.00) 7: ejbStore() Client Account_EJBObject AccountBean 1: debit(10.00) v10-17-2004 EJB Intro 70 Enterprise Java Deleting an Account Object AccountBean database 2: select 7: delete 3: select instance 10: return instance AccountBean AccountBean bean pool 1: remove(pKey) AccountHome_EJBHome 4: populate state 5: ejbLoad() 6: ejbRemove() 8: remove() Client v10-17-2004 Account_EJBObject EJB Intro AccountBean 71 Questions to Ponder... Enterprise Java • Entity bean, stateful session bean, stateless session, message driven bean? – – – – – – – object which requires access by multiple clients over its lifetime object whose work accepts and returns all information in the call object whose work arrives through an asynchronous message object that sends asynchronous messages object that must exist after server crash object that must exist between method invocations object that encapsulates a set of client actions to multiple beans • Why is there not a ratio of 1:1 between instanced of beans (EJB Objects) and instances of the bean class? – What GoF Pattern does this depict? v10-17-2004 EJB Intro 72