日期:2014-05-19 浏览次数:20835 次
对于任何一种技术来说,好用和用好是两个不同的概念。《Real World Java EE Patterns: Rethinking Best Practices》(真实世界 Java EE 模式:重新思考最佳实践)就是教我们如何用好 Java EE 的一本书,也是目前市面上能找到的唯一一本,非常值得一读。前两章是一些概述性的文字,所以直接从第 3 章“Rethinking the Business Tier(重新思考业务层)”开始。这次是第 1 节“Service Fa?ade (Application Service)(服务门面(应用程序服务))”的阅读笔记。
本节的开头对 Java EE
中的服务门面进行了简介,下面是我的归纳。服务门面的作用是将独立且可重用服务的组合起来,其概念和门面模式差不多,只不过要加上一些 Java EE
所特有的东西。 它是一个带本地接口的会话 Bean(通常是无态的)。除非需要从 JVM
之外进行访问,否则不应当提供远程接口。它充当展示层和业务层之间的界限,其方法都由客户端调用,不应当出现门面之间相互调用的情况。任何客户端和门面间
的交互都属于业务会话,每次调用都启动一个新的事务,因此门面类需要带有 TransactionAttributeType.REQUIRES_NEW
注解。
然后作者讨论了各种服务门面的实现策略,它们是本节的重点:
一个 CRUD 门面只是一个暴露的、事务性的 DAO。在 J2EE 时代,通常将服务门面的所有方法调用委托给后台的 DAO。EJB 3.0 本来就是 POJO,所以这种委托已经显得多余了。在 EJB 3.1 里,甚至连 EJB 接口都是可选的,例如:
1
2
3
|
@Stateless
@TransactionAttribute
(TransactionAttributeType.REQUIRES_NEW)
public
class
BookService {
//...
|
服务门面通常都由部署在同一个 ear 中的 Web 组件直接访问,但有时候也需要提供远程接口供外部客户端使用(例如使用 Swing 开发的 EJB 客户端应用程序)。这种情况就可以使用双视图:
1
2
3
4
5
6
7
8
9
|
public
interface
BookServiceRemote {
//...
?
public
interface
BookServiceLocal
extends
BookServiceLocal {
//...
?
@Stateless
@Local
(BookServiceLocal.
class
)
@Remote
(BookServiceRemote.
class
)
@TransactionAttribute
(TransactionAttributeType.REQUIRES_NEW)
public
class
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|