基于Spring和EJB的JCF通用调用框架的研究与实现(3)

 
32 JCF 执行流程 <o:p></o:p>
BizD elegate 中,首先会运行 DelegateTypeinit 方法,执行相关的初始化任务。在前台调用 BizDelegate 的相关方法的时候,首先检查一下相关参数的正确性,然后构造一个 Request 对象,在这个方法结束前所调用到的 Command 都共用这个 Request 请求对象。在 Request 中指明要调用的流程 Processor 和参数的名称和值,在 Processor 中包含了若干个 Command ,根据不同的 Processor 的实现, Command 有不同的执行流程。最后交由 Delegateexecute 方法去执行这个 Processor ,返回一个 Response 对象,包括将要返回的数据和结果,执行成功与否的状态包含在对象 state 中。如下面的代码所示,现在要执行 saveContactPerson 这个操作,传进来一个 ContactPerson 参数,将参数传至 Delegate 中,将要执行 SaveContactPersonProcessor 这个 Processor ,然后执行 Delegateexecute 方法得到相应的结果。这个 Processor 是在哪里定义的呢?它其实是 Command 的封装器,封装了 Command 的运行规则。 ProcessorCommand 都是 Spring 中的一个 Bean ,一个 Processor 包含什么 Command 是在 Spring 的配置文件中定义的。在下面关于如何用 Spring 构建简单的工作流系统中再做详细的介绍。 <o:p></o:p>
    public boolean saveContactPerson(ContactPerson contactPerson, IState state) { <o:p></o:p>
       logger .debug( "saveContactPerson delegate." ); <o:p></o:p>
       if (DelegateUtil.isNullParam(contactPerson, "contactPerson" , state)) { <o:p></o:p>
           return false ; <o:p></o:p>
       } <o:p></o:p>
       Request req = new Request(); <o:p></o:p>
       req.setServiceName(ServiceConsts. SaveContactPersonProcessor ); <o:p></o:p>
       req.setValue( "contactPerson" , contactPerson); <o:p></o:p>
       try { <o:p></o:p>
           Response resp = getDelegate().execute(req); <o:p></o:p>
           DelegateUtil.setIState(state, resp); <o:p></o:p>
           return ((Boolean) resp.getValue( "resultBoolean" )).booleanValue(); <o:p></o:p>
       } catch (Exception e) { <o:p></o:p>
           DelegateUtil.handleException(e, "saveContactPerson" , state); <o:p></o:p>
           return false ; <o:p></o:p>
       } <o:p></o:p>
    }
<o:p> </o:p>
EjbDelegate 中将请求转发给 SLSB ,它将执行 SLSBexecute 方法。在 SLSB 的远程接口中定义了一个商务方法 execute 。在 Home 接口中只定义一个 create 方法。在 init 方法中得到 SLSBHome 接口,只在初始化的时候运行一次。如下所示: <o:p></o:p>
public interface BizFacadeRemote  extends EJBObject <o:p></o:p>
{ <o:p></o:p>
   public Response execute(Request request)  throws Exception; <o:p></o:p>
} <o:p></o:p>
                   SLSB 的远程接口 <o:p></o:p>
<o:p> </o:p>
public interface BizFacadeHome  extends javax.ejb.EJBHome <o:p></o:p>
{ <o:p></o:p>
   public BizFacadeRemote create() <o:p></o:p>
            throws CreateException,RemoteException; <o:p></o:p>
} <o:p></o:p>
                 SLSBHome 接口 <o:p></o:p>
<o:p> </o:p>
    private static BizFacadeHome home ; <o:p></o:p>
    private static boolean state = false ;<o:p></o:p>
public Response execute(Request request) throws Exception{ <o:p></o:p>
       return getSessionFacade().execute(request); <o:p></o:p>
    }<o:p></o:p>
public BizFacadeRemote getSessionFacade() throws RemoteException, CreateException <o:p></o:p>
    { <o:p></o:p>
       return home .create(); <o:p></o:p>
    }<o:p></o:p>
    public   boolean init(String jndiName) <o:p></o:p>
    { <o:p></o:p>
       if ( state ) { <o:p></o:p>
           return state ; <o:p></o:p>
       } <o:p></o:p>
       home = (BizFacadeHome) ServiceLocator.getInstance().getOne(jndiName); <o:p></o:p>
       state = true ; <o:p></o:p>
       if ( home == null ) { <o:p></o:p>
           logger .error( "Delegate get Home Interface fail,jndi = " + jndiName); <o:p></o:p>
           state = false ; <o:p></o:p>
       } <o:p></o:p>
       return state ; <o:p></o:p>
    }
                   EjbDelegate 的关键代码 <o:p></o:p>
<o:p> </o:p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值