JBoss 4.0 简化了中间件的开发(二)

日期: 2007-12-05 来源:TechTarget中国

  (三)前瞻EJB 3.0

  基于POJO中间件的理念植根于开源项目。现在它正朝着J2EE的标准化迈进。即将来临的由JSR(Java 规范要求)220专家组开发的EJB 3.0 规范将使用POJO作为EJB的构件,并将在诸多场合摒弃部署文件的需要。作为一个开源的主角,简单化POJO模型的倡议者,JBoss是EJB 3.0背后驱动力的一员。

  EJB 3.0 编程模型和API类似于JBoss AS 4.0 的POJO模型。因而,移植JBoss AS 4.0 POJO应用和相关的开发技术到未来的EJB服务器将被证明是简单的。

  如果今日你想与明日的EJB 3.0 技术共舞,你可以从JBoss 上下载和安装JBoss AS 4.0 的EJB 3.0 预览版模块。JBoss EJB 3.0预览实现是基于JBoss AOP和Hibernate的。预览版软件基于EJB 3.0的一份草案,并将受将来变化的影响。

  核对你的JBoss版本

  请确保你有安装正确JBoss版本支持EJB 3.0模块。例如JBoss EJB 3.0 预览2模块仅仅与JBoss AS 4.0.0 RC1一起工作。当新的EJB预览版本发行的时候,这将受其影响。你可以在EJB 3.0模块的安装文档里找到最新的信息。

  为了展示EJB 3.0的如何工作的,我将使用EJB 3.0 的API重新实现抵押金计算器应用。你可以在EJB3源码目录建造。一旦部署,访问EJB 3.0 应用的URL将是

  http://localhost:8080/MortgageCalculatorEJB3/servlet/Calculator,建造该EJB 3.0 应用,J2SE 5.0是必须的。

  如下代码所示,Calculator接口声明了基于POJO的会话Bean.@local注解标签指定了EJB 3.0 会话Bean与其客户(即Servlet 模块)部署在同一个JVM上。因此Servlet将通过它的Java引用访问该会话Bean,也就避免了缓慢对象序列化操作。如果会话Bean在不同的服务器上运行,你可以在该接口上加注@remote标签。
@Local
public interface Calculator {

  public double getPayment (int principal, double rate, int term);

  // Get previous queries that has payment lower than
  // the current one
  public List getHistory (double payment);

}

  CalculatorBean类是会话Bean的实现,我们用@stateless标签将其声明为一个无状态的会话Bean
@Stateless
@SecurityDomain("other")

public class CalculatorBean implements Calculator {

  @Inject
  private EntityManager manager;

  public CalculatorBean () {  }

  @MethodPermissions({"AuthorizedUser"})
  @Tx(TxType.REQUIRESNEW)
  public double getPayment (int principal, double rate, int term) {
    rate = rate / 100.;
    rate = rate / 12.;
    double tmp = Math.pow(1.+rate, term);
    tmp = (principal * tmp * rate) / (tmp – 1.);

    HistoryBean history =
        new HistoryBean (principal, rate * 1200., term, tmp);
    manager.create (history);

    return tmp;
  }

  @MethodPermissions({"AuthorizedUser"})
  @Tx(TxType.REQUIRESNEW)
  public List getHistory (double payment) {

    return manager.createQuery(
        "from HistoryBean h where h.payment < :payment")
        .setParameter("payment", new Double(payment))
        .listResults();
  }
}

  HistoryBean类是对数据库进行持久化的数据模型。查看一下我们如何用注解来避免对对象数据库表映射文件的需要的。另外,EntityManager替代了POJO样例里的HibernateContext对象。运行时,注解将EntityManger对象注入HistoryBean对象,因此我们无须与JNDI设置和命名纠缠。
@Entity
@Table(name = "history")
public class HistoryBean {

  private int id;
  private int principal;
  private double rate;
  private int term;
  private double payment;

  public HistoryBean () {
  }

  public HistoryBean (int principal, double rate,
                      int term, double payment) {
    this.principal = principal;
    this.rate = rate;
    this.term = term;
    this.payment = payment;
  }

  @Id(generate = GeneratorType.AUTO)
  public int getId () {
    return id;
  }

  public void setId (int id) {
    this.id = id;
  }

  public int getPrincipal () {
    return principal;
  }

  public void setPrincipal (int principal) {
    this.principal = principal;
  }

  public double getRate () {
    return rate;
  }

  public void setRate (double rate) {
    this.rate = rate;
  }

  public int getTerm () {
    return term;
  }

  public void setTerm (int term) {
    this.term = term;
  }

  public double getPayment () {
    return payment;
  }

  public void setPayment (double payment) {
    this.payment = payment;
  }
}

  总的来说,除了EJB 3.0 实体Bean模型相对基于Hibernate的POJO模型简单,用EJB 3.0写就的应用与JBoss AS 4.0的POJO应用是相似的。图4 显示了基于 EJB 3.0的抵押金计算器应用的结构。

  图 4 EJB 3.0 模块中的关键构件。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐