Spring对EJB的支持

       EJB 一个最大的缺点就是要想脱离 EJB 容器而单独测试 EJB 组件非常困难。通过 Spring 可以解决这个问题,将业务逻辑写在 POJO 中,然后,通过 EJB 委托给 POJO 来执行操作。在 Spring 中,由于不必将如何定位和创建 POJO 的实现的任何逻辑嵌入到 EJB 中,这种实现就是非常简单,和灵活的。下面是一个继承于 AbstractStatelessSessionBean 的无状态会话 Bean 的基类,系统中的每个 SLSB 都继承于此类。所有的请求都通过这个 SLSB 来转发给 POJO 。因为每次初始化的内容都不一样,所以将初始化放到了 SLSB 的每个继承类中。 <o:p></o:p>
<o:p> </o:p>
public abstract class SessionFacade extends AbstractStatelessSessionBean {<o:p></o:p>
    /** <o:p></o:p>
      * 如果子类需要进行全局的初始化工作,那么应该 Override 这个方法。 <o:p></o:p>
      */ <o:p></o:p>
public abstract void init();<o:p></o:p>
    protected void onEjbCreate() throws CreateException { <o:p></o:p>
       synchronized ( initLock ) { <o:p></o:p>
           if ( globalInit ) <o:p></o:p>
              return ; <o:p></o:p>
           else { <o:p></o:p>
              init(); <o:p></o:p>
              globalInit = true ;<o:p></o:p>
                 …… <o:p></o:p>
                      SLSB 的基类 <o:p></o:p>
<o:p> </o:p>
public class JCFServerFacadeBean  extends SessionFacade <o:p></o:p>
{ <o:p></o:p>
    public void init() <o:p></o:p>
    { <o:p></o:p>
    ContextServiceLocator.getInstance().setContext(getBeanFactory()); <o:p></o:p>
       boolean bret = ServiceLocator.getInstance().init( "etc/jcf/framework/config/ServiceConfig.xml" ); <o:p></o:p>
    } <o:p></o:p>
} <o:p></o:p>
                              SLSB 的继承类 <o:p></o:p>
<o:p> </o:p>
如上面的代码所示,由于在 SLSB 的初始化方法 setSessionContext 中实例化 SpringApplicationContextSpring 的配置文件在类路径中的 beanRefContext.xml 文件标识,所以在 SLSB 的继承类中,调用 getBeanFactory 方法可以得到 SpringApplicationContext ,并赋予给 ContextServiceLocator ,方便以后的调用。 <o:p></o:p>
无状态会话 bean 是用 Spring 最容易构建的 EJB ;这是因为无论在何种情况下,它都不需要特殊的处理,并且类 AbstractStatelessSessionBean 实现了所有 ejbXXX() 方法。 <o:p></o:p>
因为真正的业务逻辑是写在 POJO 中的, SLSB 的作用相当于 SessionFacade 模式中的 Façade ,在 Delegate 模式中的 Delegate 的请求都是通过 Façade 传到了后面的 Processor ,所以在系统中只需要一个或者是少量的几个 SLSB 就可以满足需求。甚至可以绕过 SLSB 通过 POJODelegate 访问后面的 Processor ,这给平时的开发带来的极大的灵活性。 <o:p></o:p>
对于异步的消息驱动 BeanMDB ), Spring 同样作出了支持。类似 SLSBMDB 只要继承 AbstractMessageDrivenBean ,并实现 MessageListener 接口即可。同样在 setMessageDrivenContext 方法中初始化 SpringApplicationContext ,所有从 Delegate 的请求都通过 execute 方法传给 Processor 。在 MDB 继承类中的 OnMessage 方法就可以访问到 SpringApplicationContext 了。在此就不再罗嗦了。 <o:p></o:p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值