111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:2951回复:0

使用EJB3.O简化EJB研发(三)-JSP教程,J2EE/EJB/服务器

楼主#
更多 发布于:2011-01-08 21:04
简化持久化容器管理 cmp实体bean将成为ejb3.0使得研发人员强制使用的一个主要的检查方式。持久化框架象如oracleas toplink, 开源的hibernate已成为不像实体bean本质上的复杂和重量级的研发j2ee持久化框架应用的被大家喜爱的方式。 ejb3.0采纳了如toplink和hibernate轻量级的持久化模式来简化容器持久化管理,这些听起来更让研发人员们欣喜。让我们简单的浏览一下实体bean的计划,我们将在另外的文章中讨论持久化改进的细节。 实体bean作为pojos已改头换面,实体bean将不在需要组件接口。实体bean目前看起来是支持继承和多态的纯粹的对象。 下面的是关于实体bean原始码 @entity public class employee{  private long empno;  private string empname;  private address address;  private hashmap projects = new hashmap();  private double salary;  @id(generate=sequence) public long getempno() {  return empno;  }  protected void setempno(long empno) {  this.empno = empno;  }  public string getempname() {  return empname;  }  public void setempname(string empname){  this.empname = empname;  }  @dependent public address getaddress() {  return address;  }  public void setaddress(address address) {  this.address = address;  }  public set getprojects() {  return projects;  }  public void setprojects(set projects) {  this.projects = projects;  }  public double getsalary() {  return salary;  }  public void setsalary(double salary) {  this.salary = salary;  }  ....  } 如果你仔细看这些代码,你能发目前目前的实体bean中bean类是个具体的类而不再是个抽象类。 ejb ql和实体bean的sql查询做了多项改进。类似于hibernate的新的实体管理api和简化版的toplink的会话api被建议用来处理实体bean的操作,也就是实体bean的创建,释放,查找。 我们将在深入的文章中进一步对建议cmp实体bean的细节做更多的验证。 简化ejb客户端 即使应用中ejb是序列化的,使用ejb也就是寻找和调用也是非常复杂的。j2ee 1.4 和 ejb 3.0规范致力于简化ejb客户端。 如果目前你希望使用ejb你必须在部署描述中定义ejb引用或ejb本地引用,寻找到ejb然后调用。如果我们希望调用helloworld 的ejb,你能按照下面的简单方法调用ejb使用已存在的实现。 如下在部署描述中找到ejb指示的定义 <ejb-ref>  <ejb-ref-name>helloworldejb</ejb-ref-name>  <ejb-ref-type>session</ejb-ref-type>  <home>hello.helloworldhome</home>  <remote> hello.helloworld</remote>  </ejb-ref> 然后按照如下方法寻找ejb.你需要明确处理ejb查找和建立一个bean实例时的异常。 try  {    context context = new initialcontext();               helloworldhome hellohome =                 (helloworld)portableremoteobject.narrow(context.lookup     ("java:comp/env/ejb/helloworldejb"), helloworldhome.class);               helloworld hello = hellohome.create();                 ....   }    catch(remoteexception e)               {                 system.err.println("system/communication error: " + e.getmessage());               }               catch(namingexception e)               {                 system.err.println("communication error: " + e.getmessage());               }               catch(createexception e)               {                 system.err.println("error creating ejb instance: " + e.getmessage());               } 如一个环境变量的变化相同,ejb3.0建议使用安放injection的方法查找和调用ejb. 下面我们使用安放injection的方法在另一个ejb查找helloworldejb。 @inject private void setsessioncontext(sessioncontext ctx)  {  this.ctx = ctx  }  ...  myhello = (helloworld)ctx.lookup("java:comp/env/ejb/helloworldejb"); 如果你仔细查看上面的代码,他依赖的injection使用@injectset来的指定对sessioncontext方法的annotations。injection 方法将能在业务方法被ejb调用前被容器调用来设定ejbcontext。 另一个injected 的helloworld会话bean的直接的范例能简化为使用 @ejb public helloworld myhello,这将使得myhello被helloworld bean的实例injected 。 你能使用依赖的injection来查询所有类型的环境和资源参考如datasource, jms, mail, web service等等。 容器外部测试可行性 一个目前ejb研发者所关注的不仅仅是ejb研发的复杂,也包括了测试的可怕之处。研发和测试ejb必须需要一个ejb容器并且研发人员必须熟悉最终部署平台才能执行测试。这对于许多只在一个主要平台研发的企业研发人员来说不是主要问题,不过对于支持多个研发商平台并且要在维护的多个环境中测试ejb的isv们来说是个大问题。ejb3.0规范承诺将提供在容器外测试的功能,不过这点在这次的规范中遗漏掉了。 结论 虽然更有非常多关于打包,装配和重要的api细节没有在这个规范中提及,不过诸多的建议使得ejb3.0规范让企业级java研发人员看起来是恨有前途的。通过这些无疑是从研发人员到服务供给商都将帮助减少研发的复杂性。下面就要看服务提供商们怎么实现,并使得ejb3.0成为企业级应用一个引人瞩目的选择。 author bio 作者自述 debu panda是oracle应用服务研发小组的主要管理者,他的在ejb容器和事务管理上取得过非常多成就。他已有13年的it产业的经验并在多家杂志和技术出版社刊登过非常多著作。 翻译问题: 由于部分英文名词未敢枉自翻译,所以留英文原词在文中 cleaning up the dirty laundry       整理缺陷 low carb atkins diet metadata annotations                    元数据描述 simplifying client view for ejbs   简化ejb客户端 dependency injection                    依赖型injection setter injection                              安放injection
isv independent software vendor 独立软件供给商

更多黑客技术 黑客软件 计算机技术 编程技术 网站技术 qq技术 IT新闻 黑客基地 请访问 灯火安全联盟  灯火黑客 www.hack8888.com/bbs

喜欢0 评分0
游客

返回顶部