Upload
gary-cameron
View
220
Download
0
Embed Size (px)
DESCRIPTION
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
Citation preview
Enterprise Java BeansYe Zhou
CS6704 PresentationVirginia 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
Entity Bean usage
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
BMP & CMP
Entity bean example
Entity bean exampleimport 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 exampleimport 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 examplepublic class AccountBean implements EntityBean{
protected EntityBeanContext ctx;
private String accountID; //primary keyprivate String ownerName;private double balance;
//getter & setter on fieldspublic setXXX(String value)public String getXXX()…
Entity bean example//Business Logic methodspublic 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 exampleimport 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 examplepublic 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