J2EE中使用Spring AOP框架和EJB组件 - 编程入门网
非功能性需求,比如许多AOP相关的文章和教程中经常用作“hello world”例子的跟踪、登录或监控。
另一个传统的AOP应用程序是缓存。例如,一个基于CMP实体bean的TradeDao组件将从WebLogic Server提供的缓存功能中受益。然而对于YahooFeed组件来说却并非如此,因为它必须通过Internet连接到雅虎门户。这明显是一个应该应用缓存的位置,而且它还允许减少外部连接的次数,并最终降低整个系统的负载。注意,基于截至时间的缓存也会在刷新信息时带来一些延迟,但是在很多情况下,它仍然是可以接受的。要应用缓存功能,可以定义一个yahooFeedCachingAdvisor,它将把CachingAdvice附加到yahooFeed bean上的getPrice()方法。在“下载”部分中,您可以找到一个CachingAdvice实现的例子。
因为getPrice()方法已经成为几种通知的公共联结点,所以声明一个抽象的getPriceAdvisor bean,然后在yahooFeedCachingAdvisor中对其进行扩展,指定具体的通知CachingAdvice。注意,也可以修改前面的foreignTradeAdvisor,使其使用同一个getPriceAdvisor父bean。 现在可以更新yahooFeed bean的定义,并将它包装在一个ProxyFactoryBean中,然后使用yahooFeedCachingAdvisor通知它。例如:
当请求命中已经保存在缓存中的数据时,上面的修改将极大地提高性能,但是如果传入多个针对同一个符号的请求,而该符号尚未进入缓存或者已经到期,我们将看到多个并发的请求到达服务提供者,请求同一个符号。对此,存在一种显而易见的优化,就是中断对同一个符号的所有请求,直到第一个请求完成为止,然后使用第一个请求获得的结果。EJB规范(参见“Programming Restrictions”,2.1版本的25.1.2部分)一般不推荐使用这种方法,因为它对运行在多个JVM上的集群环境不奏效。然而,至少在单个的节点中这种优化可以改进性能。图2所示的图表对比说明了优化之前和优化之后的情况: 图2:优化之前和优化之后 J2EE中使用Spring AOP框架和EJB组件(10)时间:2011-01-13 BEA Eugene Kuleshov该优化也可以实现为通知,并添加在yahooFeed bean中的拦截器链的末端:
实际的拦截器实现应该像 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |