手机站
网通分站
电信主站
密 码:
用户名:
热门关键字:  虚拟主机  cn域名  域名注册  非法  seo
当前位置 : 主页>程序设计>Java技术>列表

前进:从EJB 2.1到EJB 3.0

来源:互联网 作者:west263.com 时间:2008-02-23 点击:
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


public class BookCatalogBean
{
 public BookCatalogBean(){}
 public BookCatalogBean(String title)
 {
  this.title=title;
 }

 private String title;
 private String author;
 private String publisher;

 @Id
 @Column(name="title", primaryKey="true")

 public String getTitle(){return title;}
 public void setTitle(){this.title=title;}
 public void setAuthor(String author){this.author=author;}
 public String getAuthor(){return author;}
 public void setPublisher(String publisher)
 {
  this.publisher=publisher;
 }
 public String getPublisher(){return publisher;}
 private java.util.Collection<Edition>editions;

 @OneToMany
 public void setEditions(java.util.Collection editions)
 {
  this.editions=editions;
 }

 public java.util.Collection getEditions(){return editions;}
}
  表1:EJB 3.0常用元数据注释

注释 说明 注释元素
@Entity 注明一个实体bean类。
@Table 注明实体bean表。如果未指定@Table,表名与EJB名相同。 name, schema
@Id 注明一个主要关键属性或字段。
@Transient 注明一个非持久性属性或字段。
@Column 为一个持久性实体bean属性注明一个映射栏。 Name、primaryKey、nullable、length。默认栏名为属性或字段名。
@NamedQueries 注明一组命名查询。
@NamedQuery 注明一个命名查询或与查找方法相关的查询。 name, queryString
@OneToMany 注明一个一对多联系。 Cascade
@OneToOne 注明一个一对一联系。 Cascade
@ManyToMany 注明一个多对多联系。 Cascade
@ManyToOne 注明一个多对一联系。 Cascade

  EJB 2.1 bean类中的查找方法findByTitle(),在EJB 3.0中则使用相应的@namedQuery注释;EJB 2.1实体bean中的CMR关系,在EJB 3.0实体bean中则使用@OnetoMany注释。注释@Id注明了标识符属性标题,注释@Column指定了与标识符属性标题对应的数据库栏。如果一个持久性实体bean属性未用@Column注明,那EJB服务器会假定栏名与实体bean属性名相同。而瞬态实体bean属性通常用@Transient来注明。

  迁移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);

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名
注册