210 likes | 237 Views
Explore the world of Enterprise Java Beans (EJB) with insights on Entity Beans, BMP, CMP, Message-Driven Beans, Transactions, and more. Learn the lifecycle, features, and usage scenarios of EJB for robust Java application development.
E N D
Enterprise Java Beans Ye Zhou CS6704 Presentation Virginia Tech
Entity Beans • An in-memory Java representation of persistent data -- a view into a database • Long-lived – as long as data lives • Shared access from multiple users • Transactional • Can survive from the server crash
Entity Bean Model • Entity Bean class • ejbLoad() – load state from underlying DB • ejbStore() – synchronize the state regularly • ejbRemove() – remove object when client calls • ejbActivate() – bean instance out of pool • ejbPassivate() – bean instance disassociated • setEntityContext() – called by container on creation • unsetEntityContext() – called by container before being removed • Primary Key class • Unique Identifier
BMP & CMP • BMP – Bean Managed Persistence • an entity bean that synchronizes its state with the database manually • CMP – Container Managed Persistence • EJB container will do it instead
Entity bean example import javax.ejb.*; import java.rmi.remoteException; public interface AccountHome extends EJBHome{ Account create(String accountID, String ownerName) throws CreateException, AccountException; public Account findByPrimaryKey(AccountPK key) throws FinderException, RemoteException; public Collection findByOwnerName(String name) throws FinderException, RemoteException; public double getTotalBankValue() throws RemoteException, AccountException; }
Entity bean example import java.io.Serializable; public class AccountPK implements java.io.Serializable{ public String accountID; public AccountPK(String id){ this.accountID = id; } public String toString() { return accountID: } public boolean equals(Object account){ return ((AccountPK)account).accountID.equals(accountID); } }
Entity bean example public class AccountBean implements EntityBean{ protected EntityBeanContext ctx; private String accountID; //primary key private String ownerName; private double balance; //getter & setter on fields public setXXX(String value) public String getXXX() …
Entity bean example //Business Logic methods public void Deposit(double amt) throws AccountException { balance+=amt; } public void WithDraw(double amt) throws AccountException { if(amt > balance) { throw new AccountException(accountID+“Limit reached”); } else balance-=amt; }
Entity bean example //EJB required methods public void ejbLoad() { AccountPK account = (AccountPK) ctx.getPrimaryKey(); String id = account.toString(); PreparedStatement ps =null; Connection con=null; try{ con=getConnection(); ps = con.preparedStatement(“select owner, balance from accounts where id = ?”); ps.setString(1,id); ResultSet rs = ps.executeQuery(); rs.next(); ownerName = rs.getString(1); balance = rs.getDouble(2); }catch(Exception e){throw new EJBException(“Fail to load from DB”);} }
Message-Driven Bean • Motivation • Performance: • RMI-IIOP is a blocking protocol • Reliability: • RMI-IIOP can’t survive from the server failure • Multiple senders and receivers: • RMI-IIOP is connection-oriented, which is not possible for clients to broadcast the events to servers.
Message-Driven Bean • Definition • A special EJB component that can receive JMS messages.
Message-Driven Bean • Life cycle
Message-Driven Bean • Characteristics • No home interface, local home interface and remote interface • It has a single, weakly-couple typed business method “OnMessage” • No return values • Stateless • Do not send Exception back to clients • Subscription can be durable or non-durable
Message-Driven Bean example import javax.ejb.*; import javax.jms.*; public sampleBean implements MessageDrivenBean, MessageListener { protected MessageDrivenContext ctx; public void setMessageDrivenContext(MessageDrivenContext ctx) {this.ctx=ctx;} public void ejbCreate() {System.err.println(“bean initialized”);}
Message-Driven Bean example public void onMessage(Message msg) { if(msg instanceOf TextMessage) { TextMessage tm=(TextMessage)msg; try{ String text = tm.getText(); System.err.println(“Text is”+text); }catch(JMSException e) { e.printStackTrace(); } } } public void ejbRemove() { System.err.println(“bean removed”);} }
Transaction • Features • ACID • Types • Programmatic • Declarative • Client-initiated • Package • Javax.transaction.*
Reference • Ed Roman, “Mastering Enterprise Javabeans ”, John Wiley & Sons Inc., 2002 • Linda DeMichiel, “Enterprise Javabeans Spec V2.0”, Sun Microsystem, 2001 • Gopalan Raj,http://www.execpc.com/~gopalan/java/ejb.html