首页 > 学院 > 开发设计 > 正文

EJB 3.0+Aspect实现声明性编程初步

2019-11-18 15:38:22
字体:
来源:转载
供稿:网友

  提要 本文将与你一同探讨怎样把注解和方面的威力联合起来,以与EJB 3.0兼容的方式为企业实现提供声明性服务,而在同时仍然提供容器的独立性。

  一、 引言

  在我们共同寻求进一步提高软件开发生产性能的方法的过程中,我们-作为java社团成员-一般都转向J2EE来提供针对企业开发中更具挑战性的技术问题如分布式事务治理、并发性和对象分布等的解决方案。其背后的指导思想-这些复杂的企业服务能被应用程序服务器供给商所实现并能为商业开发者所平衡-的确是一种很好的思想。J2EE,具体地说是EJB,已成功地提供了一个平台-在其上构建企业Java应用程序。

  这其中部分的成功是由于能够进行声明性编程-一种程序开发方式-用这种方式,你可以声明基础结构服务而不是用商业逻辑明确地编码从而使代码散布于各处。EJB已经证实了这种编程方式的价值-通过答应企业问题例如事务和安全被用一种发布描述符所声明并为容器所处理。

  然而,在过去的岁月中,越来越多的开发者熟悉到EJB在团队的生产效率方面给它自己带来新的大量的挑战-每个EJB必须伴随多个接口,以一种发布描述符描述,经由JNDI被存取,等等。而在容器外EJB上进行单元测试也带来另外的困难,如今EJB已不再把重点放在单纯的面向对象开发上。

  请注重,为阅读本文您需具备如下工具:

  ·Java 2 SDK 1.5

  ·Maven 2.0 Beta 2

  EJB 3.0的目标在于从以下几个方面使企业开发更为轻易:

  ·通过引入元数据注解来实现声明性请求企业服务

  ·经由注解实现依靠性/资源注入

  ·实现企业beans与EJB特定接口的解耦

  ·经由轻量级的对象关系映射实现持续性存储的简化

  这对于EJB开发者来说尤如一股春风-一直以来,他们竭力地从事开发、测试和维护EJB。利用EJB 3.0写一个企业bean现在变得很轻易,就如用特定的注解创建一个POJO(传统的Java对象)以把它标明为一个EJB并请求企业服务。下面是一个来自于EJB 3.0 Public Draft中EJB的例子:

@Stateful
public class CartBean implements ShoppingCart
{
PRivate float total;
private Vector prodUCtCodes;
public int someShoppingMethod(){...};
...
}
  EJB 3.0声明中实质上指明开发者需要的不是一重量级的、"一次发布满足所有"的解决方案,而是一个轻量级的、轻易使用的解决方案-为开发者提供一定范围的企业服务。为此,EJB 3.0所提供的最重要的方法之一就是实现企业beans与EJB API的解耦。并且,此解决方案还带来令人感爱好的衍生-EJB现在不仅能够运行在不同的EJB容器上,而且还能运行于任何应用程序框架内部-这些框架必须能够识别EJB 3.0(JSR 220)和用于声明企业服务的普通注解(JSR 250)。

  本文没有提供关于声明性编程、EJBs、方面或注解的深度探索。相反,而只是分析一下这些技术之间的相互关系并讨论如何把它们用一种新的方式结合起来以简化应用程序开发。

  在本文中,你将会学习到如何编写一个EJB 3.0兼容的bean并且通过创建几个简单的方面使其具有声明性事务治理、安全和资源注入等功能。我希望您能从这个练习中得到以下的受益:

  ·学习方面的三个实际应用(依靠性注入、安全和事务)。

  ·熟悉EJB 3.0及其背后的思想。

  ·熟悉到怎样实现EJB与特定API的解耦以答应EJB 3.0兼容的服务能够以轻量级实现而不是仅由EJB来提供。

  二、 实例应用程序-航班订购

  在整个后面的讨论中,你将学习到一个航班订购系统的实现-它使用方面和注解来实现依靠性注入、安全和事务治理。该应用程序仅执行两项功能:它答应用户搜索航班(图1),然后订购一次旅行(图2)。这两个操作都将被进行安全处理以仅答应能被识别的用户来执行它们。另外,既然"订购旅行"操作包含订购两个航班(外出和返回航班),那么需要把该操作创建为事务性的-如,两个订购将作为一个工作单元要么都成功要么都失败。



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表