快速业务通道

利用EJB 3.0的JPA设计企业应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
messageSource; @PostConstruct public void init() { messageSource = new MessageSourceImpl("exceptions"); }

选择bean实现类的测试策略的主要因素是类完全依赖协作者来提供服务。这意 味着类和协作者的交互作用需要被验证。正如您在 测试 一节看到的,模仿对象 方法完全满足该目标。

数据访问层

数据访问层被设计为一系列粗粒度的DAO。DAO被实现为无状态会话bean,一个 bean对应一个逻辑域:AccountDao、OrderDao和 ProductDao。

每个 bean 都要把实体管理器注入到其中:

@PersistenceContext(unitName = "manager1") protected EntityManager em;

这是应用程序中持久性调用类(persistence-aware) 最多的层。它广泛使用 全新的Enterprise JavaBeans Query Language(EJB QL)。所有持久性相关的行 动都在该层发生,例如:

profile = (UserProfile) em.createQuery( "from UserProfile up where up.login = :login").setParameter( "login", login).getSingleResult(); 

下面是另一个例子:

em.persist(account);

事实上这些类是持久性调用类(persistence-aware),需要一种容器内测试 策略,这将在 测试 一节进行描述。

利用EJB 3.0的JPA设计企业应用程序(3)

时间:2011-05-20 Borys Burnayev

域模型

您可以把JPA看作是众所周知的透明持久性技术(如JDO和Hibernate)的继承 者。尽管透明持久性可看作一个附加(add-on)服务,可被应用到忽略持久性的 Plain Old Java Objects (POJO)中,但JPA还是对域对象施加了少量限制。

首先,您通常要具有一个映射到对应数据库表主键的(代理)对象标识符:

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AccountSeq") @Column(name = "account_sysid") public Integer getAccountId() { return this.accountId; }

其次,在联机事务过程(OLTP)环境中,需要一个 version 字段或 JavaBean 属性以进行乐观并发控制:

@Column(name = "row_version") @Version public int getVersion() { return version; }

最终,如果您选择使用注释方式的映射,映射注释将分布在代码周围。

另一种限制源自于这样一个事实:域对象可以通过由实体管理器所管理的域对 象所在的层访问,也可以通过分离它的所有其他层访问。此外,对象可能是新的 或已删除的。一般情况下,对象的行为取决于其持久性状态。例如,假设在实体 管理器中执行以下这行代码:

int size = attachedProduct.getItems().size();

项集合使用给定产品的项填充,size变量的值大于0。如果使用默认懒加载 (lazy)配置的一对多关联,并在表示层中执行同一行代码,size 变量的值为0 。换句话说,在实体管理器之外(在实体管理器内也没关系)无法把非活动 (lazy)对象与活动(eager)对象区分开。解决此问题的方法是强制执行项目规 范和约定。

在域对象中,您可以把相同的推理应用到业务方法。无论是否在实体管理器中 ,它们都应该准备好在任何层中调用。这就是把域对象中的业务方法数量限制为 必要的最少数量的理由。

虽然有上述各种情况,域对象依然保留许多POJO特性。这意味着您可以使用 plain old Java test (POJT)对业务方法进行测试,POJT这一术语引自Expert One-on-One J2EE Development without EJB一书。

OR映射

OR 映射是围绕JPA设计的应用程序的重要元素。它直接影响实体管理器填充域 对象的方式。因此,变更映射能够在表示层觉察到。变更获取类型或级联类型可 能将产生非常不利的影响。

正如前面所述,有两种定义映射的方法:元数据(注释)和映射文件。尽管我 们高度提倡采用元数据的方法,但您应该也注意到

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号