迁移EJB会话bean客户端
一个EJB 2.1会话bean的客户端通过使用JNDI名可取得一个会话bean对象,如下所示的客户端使用了BookCatalogLocalHome的JNDI名取得一个本地主对象,接着调用了create()方法,随后,客户端用getEdition(String)业务方法输出特定标题的版本值。
import
javax.naming.InitialContext;
public class BookCatalogClient
{
public static void main(String[] argv)
{
try{
InitialContext ctx=new InitialContext();
Object objref=ctx.lookup("BookCatalogLocalHome");
BookCatalogLocalHome catalogLocalHome = (BookCatalogLocalHome)objref;
BookCatalogLocal catalogLocal = (BookCatalogLocal) catalogLocalHome.
create();
String title="Java and XML";
String edition = catalogLocal.getEdition(title);
System.out.println("标题的版本:" + title + " " + edition);
}
catch(Exception e){}
}
}
在EJB 3.0中,可通过依赖性注入,来获取一个对会话bean对象的引用,这通常由@Inject、@Resource、@EJB注释来实现。如下所示的EJB 3.0会话bean客户端使用了@Inject注释注入到BookCatalogBean类中,仍可由getEdition(String)业务方法来获取标题的版本值。
public class BookCatalogClient
{
@Inject BookCatalogBean;
BookCatalogBean catalogBean;
String title="Java and XML";
String edition=catalogBean.getEdition(edition);
System.out.println("标题版本:" + title + " " + edition);
}
迁移实体bean 本节讲述如何迁移EJB 2.1的实体bean到EJB 3.0。一个EJB 2.1实体bean实现了EntityBean接口,其由getter和setter CMP字段方法、getter和setter CMR字段方法、回调方法及ejbCreate/ejbPostCreate方法组成。示例实体bean(见例1)--BookCatalogBean.
java,由CMP字段标题、作者、发行者和CMR字段版本组成。
例1:BookCatalogBean.
java
import
javax.ejb.EntityBean;
import
javax.ejb.EntityContext;
public class BookCatalogBean implements EntityBean
{
private EntityContext ctx;
public abstract void setTitle();
public abstract String getTitle();
public abstract void setAuthor();
public abstract String getAuthor();
public abstract void setPublisher();
public abstract String getPublisher();
public abstract void setEditions(
java.util.Collection editions);
public abstract
java.util.Collection getEditions();
public String ejbCreate(String title)
{
setTitle(title);
return null;
}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void ejbLoad() {}
public void ejbStore() {}
public void setEntityContext(EntityContext ctx)
{
this.ctx=ctx;
}
public void unsetEntityContext()
{
ctx = null;
}
}
而这个EJB 2.1实体bean的ejb-jar.xml部署描述符(见例2)文件,指定了EJB类、接口、CMP字段、EJB QL查询和CMR关系。BookCatalogBean实体Bean定义了一个查找方法findByTitle()、一个CMR字段及版本。