网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.在Applet中读取文件内容.
.表现层框架Struts/Tapestry/JSF架.
.Hibernate二级缓存攻略.
.Java标准单元测试库 JUnit 4 抢先.
.NEGATIVE_INFINITY 属性.
.关于EJB的持久化对象技术分析(1).
.Java运行时的子类识别.
.javascript+xml实现二级下拉菜单.
.JBuilderX中显示中文.
.rmi和corba.
.Java基础知识——JNI入门介绍(上.
.在Java软件中如何更好防止内存泄.
.什么叫JAVA虚拟机.
.JAVA中浅复制与深复制.
.Jdk编译Java程序 - applet.
.Servlet2.3 API小介.
.JBuilder7+Weblogic7+mysql 开发.
.Java中的Annotation解析之二(1).
.Merlin 的魔力:Java 联网增强技.
.Reference不为人知的一面.

前进:从EJB 2.1到EJB 3.0

发表日期:2008-1-5



  在开始讨论怎样从EJB 2.1迁移到EJB 3.0之前,有必要先了解一下迁移之后将会得到什么:主要来说,EJB 3.0减少了在创建EJB时所需的类、接口、部署描述符的数量。EJB 3.0通过用纯旧式Java对象(POJO)取代抽象bean类,用纯旧式Java接口(POJI)取代组件与主接口(Component & Home),简化了EJB的开发过程,在此,后者是可选项--你不必全部包含进它们。

  部署描述符--ejb-jar.XML--由其指定了EJB名、bean对象名、接口、查找者方法、容器治理关系(CMR),在此就不再需要其他与开发商相关的部署描述符了,因为已被组件类中的元数据注释所取代。这就是你为什么需要使用JDK 5.0来开发EJB 3.0应用的原因,因为它们使用了注释,而注释在JDK 5.0之前不可用。

  EJB 3.0用javax.persistence.EntityManager API取代了EJB 2.1中的查找者方法,通常EJB 2.1的客户端应用使用JNDI名来获得一个对实体(entity)及会话(session)bean对象的引用,而EJB 3.0客户端应用则是使用@Resource、@Inject和@EJB。

  在EJB 2.1中,可使用javax.ejb包装类与接口来开发实体与会话,在此,一个会话bean实现了SessionBean接口,而一个实体bean实现了EntityBean接口;相比之下,EJB 3.0的会话与实体bean类是POJO,并没有实现SessionBean和EntityBean接口。

  一个EJB 2.1的会话bean类指定了一个或多个ejbCreate方法、回调方法、setSessionContext方法和业务(business)方法;与此类似,一个EJB 2.1实体指定了ejbCreate()、ejbPostCreate()、回调、容量治理持久性(CMP)、CMR的getter/setter和业务方法。一个EJB 3.0会话bean类只指定了业务方法;同样地,一个EJB 3.0实体bean只指定了业务方法、对不同bean属性的getter/setter方法及对bean关系的getter/setter方法。

  EJB 2.1主接口扩展了javax.ejb.EJBHome接口、另有一个本地主接口扩展了javax.ejb.EJBLocalHome接口;EJB 2.1的远程接口扩展了javax.ejb.EJBObject接口,另有一个本地接口扩展了javax.ejb.EJBLocalObject接口。在EJB 3.0中,并没有指定组件与主接口--它们已被POJI取代,假如一个会话bean类没有指定一个业务接口,那么EJB服务器将从会话bean类中为它生成一个POJI业务接口。

  请在脑海中记住这些变化,本文的后续部分,将用两个示例来集中讲述把一个会话bean和一个实体bean,从EJB 2.1迁移到EJB 3.0时所需的具体信息。

  迁移会话bean

  示例中的EJB 2.1会话bean类--BookCatalogBean--指定了一个ejbCreate方法、一个称为getTitle()的业务方法和一个回调方法:

// BookCatalogBean.java
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class BookCatalogBean implements SessionBean
{
 private SessionContext ctx;
 public String getEdition(String title)
 {
  if(title.equals("Java & XML"))
   return new String("第二个版本");
  if(title.equals("Java and XSLT"))
   return new String("第一个版本");
 }
 public void ejbCreate(){}
 public void ejbRemove() {}
 public void ejbActivate() {}
 public void ejbPassivate() {}
 public void setSessionContext(SessionContext ctx)
 {this.ctx=ctx;}
}
  在EJB 3.0会话bean中,可使用元数据注释来指定bean类型,即使用@Stateful和@Stateless来分别指定Stateful(有状态)或Stateless(无状态)。也可在一个会话bean中用一个业务接口来取代组件与主接口,因为业务接口是一个POJI,所以可用@Local和@Remote来指定其为本地或远程类型,而一个会话bean可同时实现本地与远程接口。

  假如在bean类不指定接口类型(本地或远程),那EJB服务器在默认情况下会自动生成一个本地业务接口,在此也可使用@Local和@Remote注释来指定接口类。

  下面的EJB 3.0会话bean是一个POJO,其由前面的BookCatalogBean.java EJB 2.1无状态会话bean移植而来,注重它使用了@Stateless注释,实现了一个本地业务接口,并在@Local注释中指定了本地接口类名。

// BookCatalogBean.java EJB 3.0 Session Bean
@Stateless
@Local ({BookCatalogLocal.java})
public class BookCatalogBean implements
BookCatalogLocal
{
 public String getEdition(String title)
 {
  if(title.equals("Java & XML"))
   return new String("第二个版本");
  if(title.equals("Java and XSLT"))
   return new String("第一个版本");
 }
}
  另外,也要注重,通过@Local注释,上面的EJB 3.0bean类用一个本地业务接口(POJI)取代了EJB 2.1中的组件与主接口。
上一篇:下一代WEB开发模式Tapestry简介 人气:706
下一篇:浅析CMS内容管理系统的两种方案之二 人气:712
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐