·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|汽车|学院|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|游戏|考试|报价
您现在的位置:天新网 > 软件开发 > Java开发 > EJB
前进:从EJB 2.1到EJB 3.0
http://dev.21tx.com 2006年06月22日 天极网

上一页 1 2 3 4

迁移EJB实体Bean客户端

  你可在实体bean主接口或本地主接口中使用create()方法,来创建一个EJB 2.1实体bean主对象或本地主对象。通常,一个EJB 2.1实体bean的客户端可通过JNDI查找来获取一个实体bean的本地或远程对象。下面有一段示例代码,其创建了一个EJB 2.1实体bean的本地主对象。

InitialContext ctx=new InitialContext();
Object objref=ctx.lookup("BookCatalogLocalHome");
BookCatalogLocalHome catalogLocalHome = (BookCatalogLocalHome)objref;

  在上面的代码段中,BookCatalogLocalHome是BookCatalogBean实体bean的JNDI名。

  在得到一个引用之后,EJB 2.1的客户端通过create()方法创建了一个本地对象。

BookCatalogLocal catalogLocal = (BookCatalogLocal)
catalogLocalHome.create(title);

  在EJB 2.1中,可通过查找方法,从一个本地主对象中取得一个本地或远程对象。例如,你可像如下所示通过findByPrimaryKey方法取得一个本地对象。

BookCatalogLocal catalogLocal = (BookCatalogLocal)
catalogLocalHome.findByPrimaryKey(title);

  另外在EJB 2.1中,可使用remove()方法移除一个实体bean的实例:

catalogLocal.remove();

  EJB 3.0通过Javax.persistence.EntityManager类实现了持久性、查找和移除。表2列出了EntityManager类中用于取代EJB 2.1方法的一些常用方法。

  表2:EntityManager类方法

EntityManager方法 描述
persist(Object entity) 使一个实体bean实例持久化。
createNamedQuery(String name) 创建一个Query对象的实例,以执行命名查询。
find(Class entityClass, Object primaryKey) 查找一个实体bean实例。
createQuery(String ejbQl) 创建一个Query对象,以运行EJBQL查询。
remove(Object entity) 移除实体bean的一个实例。

  在EJB 3.0实体bean的客户类中,可使用@Resource注释来注入EntityManager对象。

@Resource
private EntityManager em;

  可调用EntityManager.persist()方法来使一个实体bean的实例持久化,例如:

BookCatalogBean catalogBean = new BookCatalogBean (title);
em.persist(catalogBean);

  类似地,可调用EntityManager.find()方法来取得一个实体bean的实例。
 
BookCatalogBean catalogBean = (BookCatalogBean)
em.find("BookCatalogBean", title);

  在此还可以定义一个相当于命名查询findByTitle的EJB 3.0客户类查找方法(与EJB 2.1中的查找方法可不一样),用createNamedQuery(String)方法取得一个Query对象。

Query query=em.createNamedQuery("findByTitle");

  通过setParameter(int paramPosition, String paramValue)或setParameter(String parameterName, String value)方法设置Query对象的参数,注意此处的参数位置是从0开始的。

query.setParameter(0, title);

  使用Query.getResultList()方法取得BookCatalogBean对象的一个集合,如果确定查询只返回一个单一的结果,还可以使用getSingleResult()方法代替。

java.util.Collection catalogBeanCollection = (BookCatalogBean)query.getResultList();

  最后,用EntityManager.remove(Object entity)方法移除实体bean的实例。

BookCatalogBean catalogBean;
em.remove(catalogBean);

  例4演示了一个完整的EJB 3.0实体bean的无状态会话bean客户类。

  例4:BookCatalogClient类

import javax.ejb.Stateless;
import javax.ejb.Resource;
import javax.persistence.EntityManager;
import javax.persistence.Query;

@Stateless
@Local
public class BookCatalogClient implements BookCatalogLocal
{
 @Resource
 private EntityManager em;

 public void create(String title)
 {
  BookCatalogBean catalogBean=new BookCatalogBean(title);
  em.persist(catalogBean);
 }
 public BookCatalogBean findByPrimaryKey(String title)
 {
  return (BookCatalogBean)em.find("BookCatalogBean", title);
 }

 public java.util.Collection findByTitle(String title)
 {
  Query query=em.createNamedQuery("findByTitle");
  query.setParameter(0, title);
  return (BookCatalogBean)query.getResultList();
 }

 public void remove(BookCatalogBean catalogBean)
 {
  em.remove(catalogBean);
 }
}

  以上的示例演示了如何把一个会话bean和实体bean从EJB 2.1迁移到EJB 3.0,从EJB 2.0迁移的情况也与此类似。

  在本文完稿时,已有一些应用服务器支持EJB 3.0规范,如JBoss应用服务器Oracle应用服务器及Caucho应用服务器。不幸的是,这些应用服务器对EJB 3.0的实现会有所不同----它们可能没有实现全部的EJB 3.0特性,所以,在开始编写程序之前,一定要仔细阅读相关应用服务器提供的文档说明。

上一篇: 利用EJB 3.0的JPA设计企业应用程序
下一篇: 在Java EE环境下使用Kodo EJB

上一页 1 2 3 4

Google
 
热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net