科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件J2EE中几种业务代理模式的实现和比较

J2EE中几种业务代理模式的实现和比较

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在J2EE系统中,一般划分为表现层和业务逻辑层,为实现表现层和业务逻辑层之间的最大限度解耦,引入业务代理模式,这样,当表现层或业务逻辑层具体实现技术发生时,对彼此的影响很小

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 EJB直接调用实现
  我们知道,EJB是业务逻辑层实现的J2EE标准技术,EJB的session bean可以作为Service实现,例如上面在update中调用EJB的代码如下:
  
  public ActionForward update(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {
  EgForm egForm = (EgForm) form;
  Contact contact = new Contact();
  BeanUtils.copyProperties(contact, egForm);
  
  try{
  InitialContext ic = new InitialContext();
  UserServiceLocalHome ul = ic.lookup("UserService");
  
  UserServiceLocal userService = ul.create();
  userService.update(contact);
  
  }catch(){
  
  }
  return mapping.findForward(SUCCESS);
  }
  
  在客户端表现层是直接调用EJB服务的,这种直接调用的方式类似Command模式,但是有两个缺点:
  
  1. 客户端调用业务层实现代码较多,如上述红字行数有4行,客户端代码不简洁。
  
  2.无法非常自由地为所有Service动态增加新的Filter之类新功能,当然除了EJB提供的事务机制、分布集群、安全ACL等除外,如果你要增加这些新功能,可以通过ejb-jar.xml配置增加。
  
  业务代理模式实现目标
  总结上述两种实现的优缺点,衡量一个业务代理模式是否良好有下面几个指标:
  
  1. 业务层所有服务完全展示给客户端。客户端可以完全介入调用。
  
  2. 动态扩展性强,可为整个业务逻辑层动态扩展新的功能。
  
  3. 客户端调用业务层的实现代码必须简洁,至少是可配置的,最大限度降低代码的耦合性。
  
  Ioc模式/AOP实现
  目前,使用Ioc模式/AOP实现业务代理能够很好地达到上述3个目标,以JdonFramework为例:
  
  1. 业务层所有服务完全展示给客户端。客户端可以完全介入调用。而且调用代码简洁,如下:
  
  public ActionForward update(ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) throws Exception {
  EgForm egForm = (EgForm) form;
  Contact contact = new Contact();
  BeanUtils.copyProperties(contact, egForm);
  
  UserService userService = WebAppUtil.getService("UserService", rerquest);
  userService.update(contact);
  
  return mapping.findForward(SUCCESS);
  }
  
  上述红字两行代码不但适合调用普通POJO,而且适合调用EJB,具体是什么可以通过jdonframework.xml实现。
  
  1. 通过加入自己的AOP拦截器可以为整个业务逻辑层动态扩展新的功能,这部分功能实现不是通过配置实现的,而是使用代码实现:
  
  MethodInterceptor myI = new MyInterceptor();
  WebAppUtil.addInterceptor(myI, request);
  
  有关AOP中更复杂的pointcut实现,可以通过获得Ioc容器后自己实现:
  
  ContainerWrapper cw = WebAppUtil.getContainer(request);
  
  这样,可以为用户提供非常自由的面向微容器编程的基础,这比同样的Ioc/AOP实现Spring开源框架提供的自由度更广,更加透明。
  
  更加重要的是,JdonFramework只是真正绅士地完成业务代理模式,不过多地介入业务层:业务层相关配置是使用配置文件实现;需要插入的通用功能是使用代码实现;而Spring目前版本则是将两者混淆在一起。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章