
前进:从EJB 2.1到EJB 3.0(2) |
迁移EJB会话bean客户端 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字段及版本。 |