95-702 Distributed Systems

29
95-702 Distributed Systems 1 Master of Information System Management 95-702 Distributed Systems Persistence

description

95-702 Distributed Systems. Persistence. Recall Four Styles of Integration. RPC/RMI Shared File Messaging Share database And, we want to interact with databases even when we are not intent on integration. Accessing Databases. The Java Persistence API is meant to replace EJB Entity Beans. - PowerPoint PPT Presentation

Transcript of 95-702 Distributed Systems

Page 1: 95-702 Distributed Systems

95-702 Distributed Systems1Master of Information System

Management

95-702 Distributed Systems

Persistence

Page 2: 95-702 Distributed Systems

95-702 Distributed Systems

Recall Four Styles of Integration

• RPC/RMI• Shared File• Messaging• Share database

And, we want to interact with databases even when we are not intent on integration.

2Master of Information System Management

Page 3: 95-702 Distributed Systems

95-702 Distributed Systems

Accessing Databases

• The Java Persistence API is meant to replace EJB Entity Beans.

• Entity beans are heavyweight and require an EJB container.

• Why not use JDBC?• Separation of concerns: separate

the integration logic from the business logic.

3Master of Information System Management

Page 4: 95-702 Distributed Systems

95-702 Distributed Systems4Master of Information System

Management

Java EE Tutorial (OLD)ServletsJSP’sAxis2HTML

Session beansEntity beansMessage Driven Beans

Page 5: 95-702 Distributed Systems

95-702 Distributed Systems5Master of Information System

Management

From The Java EE Tutorial

Page 6: 95-702 Distributed Systems

95-702 Distributed Systems6Master of Information System

Management

SOAP and Java EE

Slide from JAXM/JMS tutorial at Sun Microsystems

Replaced by JPA.

Page 7: 95-702 Distributed Systems

95-702 Distributed Systems7Master of Information System

Management

Slide from JAXM/JMS tutorial at Sun MicrosystemsReplaced by JPA.

Page 8: 95-702 Distributed Systems

95-702 Distributed Systems8Master of Information System

Management

EJB Types (Old)

• Entity Beans• Session Beans• Message-Driven Beans

Page 9: 95-702 Distributed Systems

95-702 Distributed Systems9Master of Information System

Management

EJB Types (Old)

• Entity Beans• Session Beans

• Message-Driven Beans}

} RMI-based server side componentsAccessed using distributed objectProtocols (RMI IIOP)

New since EJB 2.0Asynchronous server sidecomponent that responds toJMS asynchronous messages(Think provider like JAXM)

Page 10: 95-702 Distributed Systems

95-702 Distributed Systems10Master of Information System

Management

EJB 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.

Page 11: 95-702 Distributed Systems

95-702 Distributed Systems11Master of Information System

Management

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.

Page 12: 95-702 Distributed Systems

95-702 Distributed Systems12Master of Information System

Management

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

Page 13: 95-702 Distributed Systems

95-702 Distributed Systems13Master of Information System

Management

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

Page 14: 95-702 Distributed Systems

95-702 Distributed Systems14Master of Information System

Management

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.)

Page 15: 95-702 Distributed Systems

95-702 Distributed Systems15Master of Information System

Management

Entity Beans

• 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)

Page 16: 95-702 Distributed Systems

95-702 Distributed Systems16Master of Information System

Management

Entity Bean 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.

Page 17: 95-702 Distributed Systems

95-702 Distributed Systems17Master of Information System

Management

Entity Bean Life Cycle (From Sun)

Does not exist

Pool of available instances

-- Ready to havebusiness methods called

-- Has an identity

setEntityContext unsetEntityContext

ejbActivate ejbPassivateClient callscreate and container calls ejbCreateand ejbPostCreate

Client callsremove andcontainer callsejbRemove

Client initiates

Containerinitiates

Page 18: 95-702 Distributed Systems

95-702 Distributed Systems18Master of Information System

Management

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.

Page 19: 95-702 Distributed Systems

95-702 Distributed Systems19Master of Information System

Management

A Home Interface import javax.ejb.*; // From Eckelimport 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;}

Page 20: 95-702 Distributed Systems

95-702 Distributed Systems20Master of Information System

Management

A Component Interfaceimport javax.ejb.*; // From Eckelimport 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;}

Page 21: 95-702 Distributed Systems

95-702 Distributed Systems21Master of Information System

Management

The Container Implements the component interface

(From Eckel)

Page 22: 95-702 Distributed Systems

95-702 Distributed Systems22Master of Information System

Management

import javax.ejb.CreateException; // From Eckelimport 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;  } 

Page 23: 95-702 Distributed Systems

95-702 Distributed Systems23Master of Information System

Management

  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

Page 24: 95-702 Distributed Systems

95-702 Distributed Systems24Master of Information System

Management

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>

Page 25: 95-702 Distributed Systems

95-702 Distributed Systems25Master of Information System

Management

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);    

Page 26: 95-702 Distributed Systems

95-702 Distributed Systems26Master of Information System

Management

// 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();  }}

Page 27: 95-702 Distributed Systems

95-702 Distributed Systems

Entity Beans Are A Lot Of Work

• The JPA 2.0 specification was released in 2009.

• Implemented by: Hibernate EclipseLink Open JPA Object DB TopLink and many others

27Master of Information System Management

Page 28: 95-702 Distributed Systems

95-702 Distributed Systems

JPA Notes From Oracle JPA simplifies the programming model for entity persistence: - Requires fewer classes and interfaces - Virtually eliminates lengthy deployment descriptors through annotations - Eliminates the need for lookup code - Adds support for named (static) and dynamic queries. - Provides a Java Persistence query language -- an enhanced EJB QL Makes it easier to test entities outside of the EJB container. - Can be used outside of the container - Can be used with pluggable, third-party persistence providers

28Master of Information System Management

Page 29: 95-702 Distributed Systems

95-702 Distributed Systems

In Class Exercise• Using Netbeans 7.0• Using EclipseLink default JPA 2.0 Implementation• See course schedule for link.

29Master of Information System Management