关于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
相关文章