技术开发 频道

关于EJB的持久化对象技术分析


编写并部署一个实体EJB
 
以下四个步骤是开发一个实体EJB的典型流程:
 
1. 为你的实体EJB编写相应的类及接口
2. 编写相应的部署描述文件
3. 将实体EJB及相应的部署描述文件打包成为一个jar文件
4. 部署此实体EJB
 
一个实体EJB至少由以下三个类(接口)组成:
 
组件接口:在本例中我们只考虑从同一JVM虚拟机中访问实体EJB,因此我们需要继承javax.ejb.EJBLocalObject接口。
 
package com.jeffhanson.datatier.ejb;
import javax.ejb.EJBLocalObject;
public interface LocalUser extends EJBLocalObject
{
public String getUserID(); //主键
public String getFullName();
public String setAddress(String address);
public String getAddress();
public String setCity(String city);
public String getCity();
public String setState(String state);
public String getState();
public String setZip(String zip);
public String getZip();
}
 
Home接口:同样,由于我们处于同一JVM虚拟机中,因此我们需要继承javax.ejb.EJBLocalHome接口。
 
package com.jeffhanson.datatier.ejb;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.EJBLocalHome;
import java.util.Collection;
public interface LocalUserHome extends EJBLocalHome
{
public LocalUser create(String userID,
String fullName,
String address,
String city,
String state,
String zip)
throws CreateException;
public Collection findByFullName(String fullName)
throws FinderException;
public LocalUser findByPrimaryKey(String userID)
throws FinderException;
}
 
Bean类:如果你要开发会话EJB,那么需要实现javax.ejb.SessionBean接口,如果是实体EJB,那么需要实现javax.ejb.EntityBean接口。
 
package com.jeffhanson.datatier.ejb;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import java.util.Locale;
public class UserEJB
implements EntityBean
{
 // 地区缺省设为美国英语
 private Locale locale = Locale.US;
 transient private EntityContext ctx;
 public String USERID;
 public String FULLNAME;
 public String ADDRESS;
 public String CITY;
 public String STATE;
 public String ZIP;
 public UserEJB()
 {}
 public void setLocale(Locale locale)
 {
  this.locale = locale;
 }
 //访问CMP域相关的方法
 public void setUserID(String userID)
 {
  USERID = userID;
 }
 public String getUserID() //主键
 {
  return USERID;
 }
 public void setFullName(String fullName)
 {
  FULLNAME = fullName;
 }
 public String getFullName()
 {
  return FULLNAME;
 }
 public void setAddress(String address)
 {
  ADDRESS = address;
 }
 public String getAddress()
 {
  return ADDRESS;
 }
 public void setCity(String city)
 {
  CITY = city;
 }
 public String getCity()
 {
  return CITY;
 }
 public void setState(String state)
 {
  STATE = state;
 }
 public String getState()
 {
  return STATE;
 }
 public void setZip(String zip)
 {
  ZIP = zip;
 }
 public String getZip()
 {
  return ZIP;
 }
 
public String ejbCreate(String userID,
 
String fullName,
String address,
String city,
String state,
String zip)
 {
  System.out.println("ejbCreate called with userID: " + userID);
  setUserID(userID);
  setFullName(fullName);
  setAddress(address);
  setCity(city);
  setState(state);
  setZip(zip);
  return userID;
 }
 
public void ejbPostCreate(String userID,
 
String fullName,
String address,
String city,
String state,
String zip)
 throws CreateException
 {
  // 容器在调用ejbCreate()方法后会自动调用它
  System.out.println("ejbPostCreate called with userID: " + userID);
 }
 public void setEntityContext(EntityContext ctx)
 {
  this.ctx = ctx;
  System.out.println("setEntityContext called");
 }
 public void unsetEntityContext()
 {
  ctx = null;
 }
 public void ejbActivate()
 {
  // 当此EJB被载入内存之前容器会自动调用它
 }
 public void ejbPassivate()
 {
  // 当此EJB被交换入固定存储器之前
  // 容器会自动调用它
 }
 public void ejbLoad()
 {
  // 容器调用,用来更新实
  // 体EJB的状态
 }
 public void ejbStore()
 {
  // 容器调用,用来将实体
  // EJB的状态存储入数据库中
 }
 public void ejbRemove()
 {
  // 当实体EJB从数据中删除之前被
  // 容器调用
 }
}
0
相关文章