| |
前进:从EJB 2.1到EJB 3.0 |
|
时间: 2006-06-22 来自:天极开发 |
 |
|
迁移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字段及版本。
例2:ejb-jar.xml部署描述符
<?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <enterprise-beans> <entity> <ejb-name>BookCatalog</ejb-name> <local-home>BookCatalogLocalHome</local-home> <local>BookCatalogLocal</local> <ejb-class>BookCatalogBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>String</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>BookCatalog</abstract-schema-name> <cmp-field> <field-name>title</field-name> </cmp-field> <cmp-field> <field-name>author</field-name> </cmp-field> <cmp-field> <field-name>publisher</field-name> </cmp-field> <query> <query-method> <method-name>findByTitle</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> <![CDATA[SELECT DISTINCT OBJECT(obj) FROM BookCatalog obj WHERE obj.title = ?1 ]]> </ejb-ql> </query> </entity> </enterprise-beans> <relationships> <ejb-relation> <ejb-relation-name>BookCatalog-Editions</ejb-relation-name> <ejb-relationship-role> <ejb-relationship-role-name> BookCatalog-Has-Editions </ejb-relationship-role-name> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>BookCatalog</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>editions</cmr-field-name> <cmr-field-type>java.util.Collection</cmr-field-type> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name> Editions-Belong-To-BookCatalog </ejb-relationship-role-name> <multiplicity>One</multiplicity> <cascade-delete /> <relationship-role-source> <ejb-name>Edition</ejb-name> </relationship-role-source> </ejb-relationship-role> </ejb-relation> </relationships> </ejb-jar> |
|
|
|
|
|
|
|
|