ejb组件模型:J2EE中使用Spring AOP框架和EJB组件

  快速发展开发人员社区、对各种后端技术(包括JMS、JTA、JDO、Hibernate、iBATIS等等)支持以及(更为重要)非侵入性轻量级IoC容器和内置AOP运行时这些原因使得Spring Framework对于J2EE应用开发十分具有吸引力Spring托管组件(POJO)可以和EJB共存并允许使用AOP思路方法来处理企业应用横切方面——从监控和审计、缓存Cache及应用安全性开始直到处理特定于应用业务需求

  本文将向您介绍SpringAOP框架在J2EE应用实际应用

  介绍

  J2EE技术为实现服务器端和中间件应用提供了坚实基础J2EE容器(比如BEA WebLogic Server)可以管理系统级元素包括应用生命周期、安全性、事务、远程控制和并发性而且它可以保证为JDBC、JMS和JTA的类常见服务提供支持然而J2EE庞大和复杂性使开发和测试变得异常困难传统J2EE应用通常严重依赖于通过容器JNDI才可用服务这意味着需要大量直接JNDI查找或者要使用Service Locator模式后者稍微有所改进这种架构提高了组件的间耦合度并使得单独测试某个组件成为几乎不可能实现事情您可以阅读Spring Framework创建者所撰写J2EE Development without EJB其中深入分析了这种架构缺陷

  借助于Spring Framework可以将使用无格式Java对象实现业务逻辑和传统J2EE基础架构连接起来同时极大地减少了访问J2EE组件和服务所需代码量基于这可以把传统OO设计和正交AOP组件化结合在本文稍后将会演示如何重构J2EE组件以利用Spring托管Java对象然后应用种AOP思路方法来实现新特性从而维护良好组件独立性和可测试性

  和其他AOP工具相比Spring提供了AOP功能中个有限子集目标是紧密地集成AOP实现和Spring IoC容器从而帮助解决常见应用问题该集成是以非侵入性方式完成它允许在同个应用中混合使用Spring AOP和表现力更强框架包括AspectJSpring AOP使用无格式Java类不要求特殊编译过程、控制类装载器层次结构或更改部署配置而是使用Proxy模式向应该由Spring IoC容器托管目标对象应用通知

  可以根据具体情况在两种类型代理的间进行选择:

  ◆第类代理基于Java动态代理只适用于接口它是种标准Java特性可提供卓越性能

  ◆第 2类代理可用于目标对象没有实现任何接口场景而且这类接口不能被引入(例如对于遗留代码情况)它基于使用CGLIB库运行时字节码生成

  对于所代理对象Spring允许使用静态(思路方法匹配基于确切名称或正则表达式或者是注释驱动)或动态(匹配是在运行时进行包括cflow切入点类型)切入点定义指派特定通知而每个切入点可以和条或多条通知关联在所支持通知类型有几种:环绕通知(around advice)前通知(before advice)返回后通知(after ing advice)抛出异常后通知(after throwing advice)以及引入通知(roduction advice)本文稍后将给出环绕通知个例子想要了解更详细信息可以参考Spring AOP框架文档

  正如先前提到那样只可以通知由Spring IoC容器托管目标对象然而在J2EE应用组件生命周期是由应用服务器托管而且根据集成类型可以使用种常见端点类型把J2EE应用组件公开给远程或本地客户端:

  ◆无状态、有状态或实体bean本地或远程(基于RMI-IIOP)

  ◆监听本地或外部JMS队列和主题或入站JCA端点消息驱动bean(MDB)

  ◆Servlet(包括Struts或其他终端用户UI框架、XML-RPC和基于SOAP接口)

;
   lock[0];
  } finally {
  requests.remove(symbol);
  synchronized(lock) {
  lock.notyAll;
  }
  }
  }
  synchronized(lock) {
  lock.wait(DEFAULT_TIMEOUT);
  }
   lock[0];
  }
  }

  可以看出通知代码相当简单而且不依赖于其他组件这使得JUnit测试变得十分简单在“参考资料”部分您可以找到SyncPoAdviceJUnit测试完整源代码对于复杂并发场景来说使用Java 5中java.util.concurrent包同步机制或者针对老JVM使用其backport是种不错做法

  结束语

  本文介绍了种把J2EE应用EJB转换为Spring托管组件思路方法以及转换的后可以采用强大技术它还给出了几个实际例子介绍说明如何借助于SpringAOP框架、应用面向方面思路方法来扩展J2EE应用并在不修改现有代码情况下实现新业务需求

  在EJB中使用Spring Framework将减少代码间耦合并使许多强大功能即时生效从而提高可扩展性和灵活性这还使得应用单个组件变得更加易于测试包括新引入AOP通知和拦截器它们用于实现业务功能或者处理非功能性需求比如跟踪、缓存Cache、安全性和事务

Tags:  ejbspring springaop ejb组件 ejb组件模型

延伸阅读

最新评论

发表评论