`

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

    博客分类:
  • Java
阅读更多
 
32 JCF执行流程<o:p></o:p>
BizDelegate中,首先会运行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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics