利用EJB 3.0的JPA设计企业应用程序 - 编程入门网
messageSource;
@PostConstruct
public void init() {
messageSource = new MessageSourceImpl("exceptions");
}
选择bean实现类的测试策略的主要因素是类完全依赖协作者来提供服务。这意 味着类和协作者的交互作用需要被验证。正如您在 测试 一节看到的,模仿对象 方法完全满足该目标。 数据访问层 数据访问层被设计为一系列粗粒度的DAO。DAO被实现为无状态会话bean,一个 bean对应一个逻辑域:AccountDao、OrderDao和 ProductDao。 每个 bean 都要把实体管理器注入到其中:
这是应用程序中持久性调用类(persistence-aware) 最多的层。它广泛使用 全新的Enterprise JavaBeans Query Language(EJB QL)。所有持久性相关的行 动都在该层发生,例如:
下面是另一个例子:
事实上这些类是持久性调用类(persistence-aware),需要一种容器内测试 策略,这将在 测试 一节进行描述。 利用EJB 3.0的JPA设计企业应用程序(3)时间:2011-05-20 Borys Burnayev域模型 您可以把JPA看作是众所周知的透明持久性技术(如JDO和Hibernate)的继承 者。尽管透明持久性可看作一个附加(add-on)服务,可被应用到忽略持久性的 Plain Old Java Objects (POJO)中,但JPA还是对域对象施加了少量限制。 首先,您通常要具有一个映射到对应数据库表主键的(代理)对象标识符:
其次,在联机事务过程(OLTP)环境中,需要一个 version 字段或 JavaBean 属性以进行乐观并发控制:
最终,如果您选择使用注释方式的映射,映射注释将分布在代码周围。 另一种限制源自于这样一个事实:域对象可以通过由实体管理器所管理的域对 象所在的层访问,也可以通过分离它的所有其他层访问。此外,对象可能是新的 或已删除的。一般情况下,对象的行为取决于其持久性状态。例如,假设在实体 管理器中执行以下这行代码:
项集合使用给定产品的项填充,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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |