1 / 63

Organizational Communications and Distributed Object Technologies

Organizational Communications and Distributed Object Technologies. Lecture 14:Enterprise Java Beans . Some Useful Resources. Advanced Java 2 Platform How to Program by Deitel, Deitel, & Santry Thinking in Enterprise Java Bruce Eckel et. Al. EJB 3.0 API Sun documentation

mallika
Download Presentation

Organizational Communications and Distributed Object Technologies

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Organizational Communications and Distributed Object Technologies Lecture 14:Enterprise Java Beans Master of Information System Management

  2. Some Useful Resources • Advanced Java 2 Platform How to • Program by Deitel, Deitel, & Santry • Thinking in Enterprise Java Bruce Eckel et. Al. • EJB 3.0 APISun documentation • http://java.sun.com/products/ejb/docs.html • Java Enterprise In A Nutshell • Farley, Crawford & Flanagan Master of Information System Management

  3. From The Java EE Tutorial Session beans Entity beans Message Driven Beans Servlets JSP’s Axis2 HTML Master of Information System Management

  4. From The Java EE Tutorial Master of Information System Management

  5. From The Java EE Tutorial Master of Information System Management

  6. SOAP and Java EE Slide from JAXM/JMS tutorial at Sun Microsystems Master of Information System Management

  7. Slide from JAXM/JMS tutorial at Sun Microsystems Master of Information System Management

  8. Benefits of Enterprise Beans(1) • Simplify development of large, distributed applications. • The developer can concentrate on business problems. • The EJB container handles transaction management, security, and authorization. • Portable – may be moved to other Java EE containers. Master of Information System Management

  9. Benefits of Enterprise Beans(2) • Scalable – the components may be distributed across many machines. • Support for Location Transparency – the client need not be concerned with the location of the bean. • Support for Transaction management - ensures data integrity (over concurrent access of shared resources). • Promotes thin clients and web services. Master of Information System Management

  10. Main Concept: Interposition EJB Container Application • examine security credentials • start or join transaction • call any necessary persistence • functions • trigger various callbacks • call business logic • more work with transactions, • persistence and callbacks • send back result or an • exception skeleton stub Master of Information System Management

  11. Enterprise Java Beans • Part of Java EE Enterprise Application Technologies • Currently at EJB3.0 (simplifies code with annotations) • Server-Side EJB objects may offer a remote view (via a remote procedure call protocol) a local view (direct procedure call) or both • Managed EJB container services are more involved than the plain old JVM • Components distributed in binary format and are configurable Master of Information System Management

  12. Server-Side Implications • In order to pull off the RPC trick we need: • A naming service -- e.g. RMI clients make requests on the rmiregistry • RPC proxies -- communications code along with the appropriate interface Master of Information System Management

  13. Managed: EJB Container Services • Object Persistence and Synchronization • Declarative Security Control • Declarative Transaction Control • Concurrency Management • Scalability Management The programmer need not worry about the details. Think “JVM on steroids”. Master of Information System Management

  14. EJB Types • Entity Beans • Session Beans • Message-Driven Beans Master of Information System Management

  15. EJB Types • Entity Beans • Session Beans • Message-Driven Beans} } RMI-based server side components Accessed using distributed object Protocols (RMI IIOP) New since EJB 2.0 Asynchronous server side component that responds to JMS asynchronous messages (Think provider like JAXM) Master of Information System Management

  16. Entity Beans • Represent real world entities (customers, orders, etc.) • Persistent Objects typically stored in a relational database using CMP (Container Managed Persistence) or BMP (Bean Managed Persistence) • The client sees no difference between CMP and BMP beans • CMP promotes component portability (more reliant on the container to handle detail) • CMP uses its own Query Language EJB QL • CMP relies on an Abstract Schema in the deployment descriptor Master of Information System Management

  17. Session Beans • Are an extension of the client application • Manage processes or tasks • Are not persistent • Often employ several different kinds of entity beans • Implement business logic • Come in two types (which can be more easily shared?) • Stateless session beans (no memory between calls) purchase(severalIems,creditCardNo); • Stateful session beans (remember earlier calls) addToCart(item); purchase(creditCardNo); Master of Information System Management

  18. Message-Driven Beans • Work in cooperation with Java Messaging System (JMS). • JMS is an abstraction API on top of Message-Oriented Middleware (MOM) – like JDBC is an abstraction API on top of SQL databases or like JAXR is an abstraction API on registries or like JNDI is an abstraction API on directories. • Each MOM vendor implements things differently. • MDB’s allow the developer to program using the publish-subscribe messaging model based on asynchronous, distributed message queues. • The MOM vendor need only provide a service provider for JMS (IBM’s MQSeries or Progress’ SonicMQ). Master of Information System Management

  19. Message-Driven Beans • Are like session beans • Have no persistent state • Coordinate tasks involving other session beans or entity beans • Listen for asynchronous messages • Unlike Session beans, provide no remote interface describing the methods that can be called Master of Information System Management

  20. Message-Driven Beans • Are receivers of MOM messages coming through the JMS API. • Usually take action when a message is received. • Unlike session and entity beans, Message-Driven Beans expose no remote or local view. They are not called directly by a client. Master of Information System Management

  21. Implementing Entity and Session Beans • Defining the component interfaces: • You may choose to define all or only some of these depending on how you want your bean used. • local interfaces do not require RMI overhead. • Define a bean class. • For entity beans define a primary key. Master of Information System Management

  22. Implementing Entity and Session Beans • Define the component interfaces • The remote interface specifies how the outside world can access the bean’s business methods • The remote home interface specifies how the outside world can access the bean’s life-cycle methods (for creating, removing and finding) • The local interface specifies how the inside world (same EJB container) can access the bean’s business methods • The local home interface specifies how the inside world can access the bean’s life-cycle methods Master of Information System Management

  23. Implementing Entity and Session Beans • Implement the bean • Fill in the code for the business and life-cycle methods. • It’s not normal to directly implement the interfaces as we do in standard Java (though you must provide many of the methods). The calls to methods are not normal Java calls. They first go through the container. • Session beans implement javax.ejb.SessionBean. • Entity beans implement javax.ejb.EntityBean. • Both beans extend javax.ejb.EnterpriseBean Master of Information System Management

  24. For Entity Beans • Define a primary key class: • Required for entity beans. • Provides a pointer into the database. • Must implement Java.io.Serializable. • The EJB instance represents a particular row in the corresponding database table. • The home interface for the entity EJB represents the table as a whole (has finder methods.) Master of Information System Management

  25. Implementing a Message-Driven Bean • Has no local, local home, remote, or remote home interfaces to define. • The container will call the onMessage() method when an asynchronous message arrives. (Like JAXM message provider.) • Extends the EnterpriseBean class and implements the javax.ejb.MessageDrivenBean and javax.jms.MessageListener interfaces Master of Information System Management

  26. Implementing a Message-Driven Bean • Two basic messaging-system models (1) point-to-point model allows messages to be sent to a message queue to be read by exactly one message consumer. (2) publish/subscribe model allows components to publish messages on a topic to a server to be read by zero or more subscribers. Subscribers register for a topic. Master of Information System Management

  27. In Both Messaging Models • The messages hold: -- a header containing the destination and the sending time. -- message properties to allow the receiver to select which messages they would like to receive. These may be set by the sender. -- the message body itself. Master of Information System Management

  28. Point-to-point on the Client Side import javax.jms.*; QueueConnection qCon; QueueSession qSes; QueueSender qSen; Through JNDI get access to a QueueSender. Build messages and send them to the queue. The queue is responsible for transporting the message to another queue on the server. Master of Information System Management

  29. Point-To-Point on the Server Side import javax.jms.*; QueueConnection qCon; QueueSession qSes; QueueReceiver qRec; Through JNDI get access to a QueueSender. Build a MessageListener with an onMessage method. Master of Information System Management

  30. Entity Beans Revisited • Each entity bean has a unique identifier called its primary key • The primary key can be used by the client to locate the bean • Each bean represents a row in its table • Rows may have columns that reference other entity beans (students take courses) • These relationships may be managed by the bean or by the container (container managed relationships) Master of Information System Management

  31. Relationships OrderEJB CusomerEJB 1 Many 1 Many LineItemEJB ProductEJB Many 1 A relationship field is like a foreign key in a database. If a b then a “knows about” or “holds a pointer to” b. Master of Information System Management

  32. Entity Bean Life Cycle (From Sun) Client initiates Container initiates Does not exist setEntityContext unsetEntityContext Pool of available instances Client calls remove and container calls ejbRemove Client calls create and container calls ejbCreate and ejbPostCreate ejbPassivate ejbActivate -- Ready to have business methods called -- Has an identity Master of Information System Management

  33. A Typical Entity Bean Needs: • A Home interface defining the create and finder methods. • A Component interface defining the business methods a client may call. • An implementation of the Component interface. • Deployment descriptors. Master of Information System Management

  34. A Home Interface import javax.ejb.*; // From Eckel import java.util.Collection; import java.rmi.RemoteException; public interface MovieHome extends EJBHome {   public Movie create(Integer id, String title)     throws RemoteException, CreateException;   public Movie findByPrimaryKey(Integer id)     throws RemoteException, FinderException; } Master of Information System Management

  35. A Component Interface import javax.ejb.*; // From Eckel import java.rmi.RemoteException; /**  * A movie, with id and title.  *  * Note that there is no setId() method in the  * interface, to prevent clients from arbitrarily  * changing a movie's primary key.  */ public interface Movie extends EJBObject {   public Integer getId() throws RemoteException;   public String getTitle() throws RemoteException;   public void setTitle(String title)     throws RemoteException; } Master of Information System Management

  36. The Container Implements the component interface (From Eckel) Master of Information System Management

  37. import javax.ejb.CreateException; // From Eckel import javax.ejb.EntityBean; import javax.ejb.EntityContext; public abstract class MovieBean implements EntityBean { // Container notifications methods   public Integer ejbCreate(Integer id, String title) throws CreateException {     if (id == null) throw new         CreateException("Primary key cannot be null");     if (id.intValue() == 0)       throw new CreateException("Primary key cannot be zero");     setId(id);     setTitle(title);     return null;   } Master of Information System Management

  38. public void ejbPostCreate(Integer id, String title) {} // Called by   public void ejbLoad() {} // container   public void ejbStore() {}   public void ejbRemove() {}   public void ejbActivate() {}   public void ejbPassivate() {}   public void setEntityContext(EntityContext ctx) {}   public void unsetEntityContext() {}   // Business methods provided by container   public abstract void setId(Integer id);   public abstract String getTitle();   public abstract void setTitle(String title);   public abstract Integer getId(); } // From Eckel Master of Information System Management

  39. Deployment Descriptor <ejb-jar> // From Eckel   <enterprise-beans>     <entity>       <ejb-name>Movie</ejb-name>       <home>javatheater.ejb.MovieHome</home>       <remote>javatheater.ejb.Movie</remote>       <ejb-class>         javatheater.ejb.implementation.MovieBean       </ejb-class>       <persistence-type>Container</persistence-type>       <prim-key-class>java.lang.Integer</prim-key-class>       <reentrant>False</reentrant>       <cmp-version>2.x</cmp-version>       <abstract-schema-name>Movie</abstract-schema-name>       <cmp-field><field-name>id</field-name>-</cmp-field>       <cmp-field><field-name>title</field-name>-</cmp-field>       <primkey-field>id</primkey-field>     </entity>   </enterprise-beans> </ejb-jar> Master of Information System Management

  40. Client (From Eckel) import javax.naming.*; import javatheater.ejb.*; public class MovieClient {   public static void main(String[] args) throws Exception {     javax.naming.Context initial =       new javax.naming.InitialContext();     Object objRef = initial.lookup("javatheater/Movie");     MovieHome movieHome =       (MovieHome) javax.rmi.PortableRemoteObject.narrow(         objRef,         MovieHome.class); Master of Information System Management

  41. // Generate a primary key value     int pkValue =      (int) System.currentTimeMillis() % Integer.MAX_VALUE;     // Create a new Movie entity     Movie movie =       movieHome.create(         new Integer(pkValue), "A Bug’s Life"       );     // As a test, locate the newly created entity     movie =       movieHome.findByPrimaryKey(new Integer(pkValue));     // Access the bean properties     System.out.println(movie.getId());     System.out.println(movie.getTitle());     // Remove the entity     movie.remove();   } } Master of Information System Management

  42. Session Beans Revisited • Represents a single client inside the J2EE server. • Is not persistent. • May be stateful (holding the conversational state of one client). • May be stateless (the container may assign any bean to any client). • Is the only bean that may implement a web service. Master of Information System Management

  43. Life Cycle of Stateful Session Bean From Sun Does not exist Client calls remove, container calls ejbRemove Client calls create. Container calls setSessionContext and then calls ejbCreate Container calls ejbPassivate before passivating Passive Ready for business methods to be called After activation the container calls ejbActivate Master of Information System Management

  44. Life Cycle of a Stateless Session Bean (from Sun) Does not exist ejbRemove setSessionContext ejbCreate Ready Master of Information System Management

  45. A Typical Session Bean Has • A Remote Interface defining the business methods a client will call • A Home Interface for lifecycle management • An enterprise bean class Master of Information System Management

  46. Session Bean Remote Interface(From Sun) import javax.ejb.EJBObject; import java.rmi.RemoteException; import java.math.*; public interface Converter extends EJBObject { public BigDecimal dollarToYen(BigDecimal dollars) throws RemoteException; public BigDecimal yenToEuro(BigDecimal yen) throws RemoteException; } Master of Information System Management

  47. The Home Interface import java.io.Serializable; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface ConverterHome extends EJBHome { Converter create() throws RemoteException, CreateException; } Master of Information System Management

  48. The Session Bean Class import java.rmi.RemoteException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import java.math.*; public class ConverterBean implements SessionBean { BigDecimal yenRate = new BigDecimal("121.6000"); BigDecimal euroRate = new BigDecimal("0.0077"); public BigDecimal dollarToYen(BigDecimal dollars) { BigDecimal result = dollars.multiply(yenRate); return result.setScale(2,BigDecimal.ROUND_UP); } Master of Information System Management

  49. public BigDecimal yenToEuro(BigDecimal yen) { BigDecimal result = yen.multiply(euroRate); return result.setScale(2,BigDecimal.ROUND_UP); } public ConverterBean() {} public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext sc) {} } Master of Information System Management

  50. The Session Bean Client import javax.naming.Context; import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; import java.math.BigDecimal; public class ConverterClient { public static void main(String[] args) { try { Context initial = new InitialContext(); Object objref = initial.lookup ("java:comp/env/ejb/SimpleConverter"); ConverterHome home = (ConverterHome)PortableRemoteObject.narrow(objref, ConverterHome.class); Master of Information System Management

More Related