`

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

    博客分类:
  • Java
阅读更多
 
由上面的代码看到,EjbDelegate 只是命令的传递者而已,真是执行这个操作的地方是SLSBexecute方法。现在看看在SLSBexecute方法中到底做了些什么,如下面的代码所示:
public Response execute(Request request) throws Exception {<o:p></o:p>
       logger.debug("SessionFacade execute");<o:p></o:p>
       Response resp = new Response();<o:p></o:p>
       if (request == null) {<o:p></o:p>
           resp.setReturnCode(Response.APPLICATION_LEVEL_ERROR);<o:p></o:p>
           resp.getState().setErrCode("request is Null");<o:p></o:p>
           return resp;<o:p></o:p>
       }<o:p></o:p>
       String serviceName = request.getServiceName();<o:p></o:p>
       if (serviceName == null) {<o:p></o:p>
           resp.setReturnCode(Response.APPLICATION_LEVEL_ERROR);<o:p></o:p>
           resp.getState().setErrCode("serviceName is Null");<o:p></o:p>
           return resp;<o:p></o:p>
       }<o:p></o:p>
       BaseProcessor processor = (BaseProcessor) getBeanFactory().getBean(serviceName);<o:p></o:p>
       try {<o:p></o:p>
           processor.doActivities(request, resp);<o:p></o:p>
       } catch (GoOnException e) {<o:p></o:p>
           e.printStackTrace();<o:p></o:p>
       } catch (Exception e) {<o:p></o:p>
          e.printStackTrace();<o:p></o:p>
          //抛出特定的异常。<o:p></o:p>
          try {<o:p></o:p>
              super.getSessionContext().setRollbackOnly();<o:p></o:p>
          } catch (Exception e1) {<o:p></o:p>
             e1.printStackTrace();<o:p></o:p>
           throw new EJBException("事务回滚错误,抛出EJBException.");<o:p></o:p>
           }<o:p></o:p>
        } <o:p></o:p>
       if (resp.getState().isOK()) {<o:p></o:p>
           resp.setReturnCode(Response.SUCCESS);<o:p></o:p>
       }<o:p></o:p>
       return resp;<o:p></o:p>
    }
        SLSBexecute方法
<o:p> </o:p>
可见SLSB也不是最终调用Command的地方,它只是获得了Spring的上下文,在Spring的上下文中查找名字叫serviceNameProcessor,在SLSB中如何获得Spring的上下文在SpringEJB的支持一节中再做介绍。BaseProcessorProcessor的基类,它实现了InitializingBean, BeanNameAware, BeanFactoryAware, Processor接口,在Processor接口中有个方法doActivities,在这里调用Commandexecute方法。如果在调用Processor的过程中发生了异常,则要调用SLSBsetRollbackOnly方法进行回滚。
Command实现了Component接口,Component代表了Spring管理的所有的组件。Init方法是在执行execute之前做一些相关的初始化工作,fini方法在execute方法执行后做相关的收尾工作。
public interface Component extends Serializable,BeanNameAware {<o:p></o:p>
    // 初始化接口<o:p></o:p>
    public abstract void init(String parameter) throws Exception;<o:p></o:p>
    public abstract void execute(Map params, Map response) throws Exception;<o:p></o:p>
    // 析构接口<o:p></o:p>
    public abstract void fini() throws Exception;<o:p></o:p>
    public ErrorHandler getErrorHandler();<o:p></o:p>
     public String getBeanName();<o:p></o:p>
    }
Component接口
<o:p> </o:p>
POJODelegate中,由BizDelegate传过来的请求就在POJODelegate内完成。
    public Response execute(Request request) throws Exception {<o:p></o:p>
       logger.debug("POJODelegate execute");<o:p></o:p>
       Response resp = new Response();<o:p></o:p>
       if (request == null) {<o:p></o:p>
           resp.setReturnCode(Response.APPLICATION_LEVEL_ERROR);<o:p></o:p>
           resp.getState().setErrCode("POJODelegate REQUEST IS NULL");<o:p></o:p>
           return resp;<o:p></o:p>
       }<o:p></o:p>
       String serviceName = request.getServiceName();<o:p></o:p>
       if (serviceName == null) {<o:p></o:p>
           resp.setReturnCode(Response.APPLICATION_LEVEL_ERROR);<o:p></o:p>
           resp.getState().setErrCode("POJODelegate SERVICENAME IS NULL");<o:p></o:p>
           return resp;<o:p></o:p>
       }<o:p></o:p>
           BaseProcessor processor = (BaseProcessor) ContextServiceLocator<o:p></o:p>
                  .getInstance().getBean(serviceName);<o:p></o:p>
           processor.doActivities(request, resp);<o:p></o:p>
       if (resp.getState().isOK()) {<o:p></o:p>
           resp.setReturnCode(Response.SUCCESS);<o:p></o:p>
       }<o:p></o:p>
       return resp;<o:p></o:p>
    }
POJODelegateexecute方法
  
   POJODelegateSpring的上下文中得到相应的Processor,然后交给Processor去执行。采用POJODelegate的方式,在系统启动的时候,要对Spring做初始化设置,如在得到Spring的配置文件的地址中,可以用ClassPathXmlApplicationContextFileSystemXmlApplicationContext等进行初始化。
分享到:
评论

相关推荐

    spring与ejb的区别

    ### Spring与EJB3.0的关键区别及其优劣分析 #### 一、Spring框架概述 **1.1 引言** Spring作为一个广受欢迎的开源框架,最初被设计用于减轻企业级应用开发中的复杂性问题。它的一个显著特点在于模块化的分层架构...

    基于动态代理的Java远程调用框架的研究1

    总结起来,基于动态代理的Java远程调用框架旨在克服RMI和EJB的一些缺点,提供更加简洁、灵活和高效的远程调用解决方案。它利用Java的动态代理特性,降低了分布式系统开发的复杂性,同时保持了高度的可扩展性和可定制...

    spring集成ejb

    Spring 集成 EJB(Enterprise JavaBeans)是将轻量级的 Spring 框架与企业级的 EJB 3.x 技术相结合的一种方式,以实现更灵活且高效的企业应用开发。Spring 提供了一个丰富的IoC(Inversion of Control,控制反转)和...

    spring和EJB3的一些包

    Spring 和 EJB3 是两种在企业级 Java 应用开发中广泛使用的框架。Spring 框架以其轻量级、模块化和灵活的设计而闻名,而 EJB3(Enterprise JavaBeans 3)则是 Java EE(现在称为Jakarta EE)平台的一部分,提供了...

    Struts2+Spring+EJB框架整合实例

    Struts2、Spring和EJB(Struts2+Spring+EJB,简称SSE)是Java企业级开发中常用的三大框架,它们各自承担着不同的职责,共同构建了一个强大的应用架构。Struts2作为MVC(Model-View-Controller)框架,负责处理用户...

    ejb spring

    3. **Spring与ejb的协作**:在某些场景下,会话bean可能只负责协调工作,而具体的业务逻辑由Spring的bean来执行。这种方式可以将 ejb 的强健性与 Spring 的易用性结合在一起。 **CommonEjbProj项目概述** ...

    ejb3+spring+struts实现简单银行系统

    在Java开发领域,EJB(Enterprise JavaBeans)3、Spring框架和Struts框架是常见的企业级应用开发技术,它们结合使用可以构建高效、可扩展的Web应用程序,特别是对于复杂的业务逻辑如银行系统。以下是这三个技术在...

    基于Facade的EJB远程调用技术

    基于Facade的EJB远程调用技术 基于Facade的EJB远程调用技术

    Hibernate+Spring+EJB+Ajax-关于这四种技术的详细讲解

    在IT行业中,Hibernate、Spring、EJB(Enterprise JavaBeans)和Ajax是四个非常重要的技术,它们各自在软件开发的不同方面发挥着关键作用。下面将分别详细介绍这些技术,并探讨它们之间的协同工作方式。 **...

    struts2+spring+ejb3源代码(完整版)

    Struts2、Spring和EJB3是Java Web开发中的三个重要框架,它们分别在MVC模式、依赖注入和企业级服务方面发挥着关键作用。这个压缩包提供的源代码是一个完整的项目示例,展示了如何将这三个框架集成到一个应用程序中。...

    各种EJB之间的调用示例

    4. EJB调用机制: - Remote Method Invocation(RMI):这是EJB之间最基础的调用方式,允许一个EJB实例调用另一个EJB的远程接口方法。 - Local Interface:如果调用方和被调用的EJB在同一应用服务器内,可以使用...

    EJB3.0和Spring比较

    EJB3.0和Spring是两种广泛使用的Java企业级应用程序开发框架,它们在很多方面有所不同,这些差异主要体现在以下几个关键点: 1. **厂商无关性(Vendor Independence)** - EJB3.0遵循开放标准,由Java社区内的开源...

    EJB分布式远程调用的小例子的简单实现

    EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于...通过接口定义、EJB实现、JNDI查找和客户端调用,我们可以构建起可靠的分布式系统。此示例提供了一个简单但实用的起点,帮助开发者理解并实践这一技术。

    JNDI调用分布式EJB3 通用接口

    标题“JNDI调用分布式EJB3 通用接口”意味着我们将探讨如何使用JNDI来查找和调用分布在不同节点上的EJB3组件。EJB3中的一个重要特性是它可以跨网络进行分布,这使得应用程序能够利用多台服务器的资源,提高可伸缩性...

    Struts + Spring + EJB3 demo

    Struts、Spring和EJB3是Java开发中的三个重要框架,它们在企业级应用程序开发中发挥着关键作用。Struts提供了MVC(Model-View-Controller)架构,Spring强化了依赖注入和面向切面编程,而EJB3则是Java EE平台上的...

    精通JSF基于EJB HibernateSpring整合天发与项目实践 书本源码

    4. Spring框架的IoC容器、AOP的实现、事务管理以及与JSF和EJB的集成。 5. 数据库连接池的配置和使用,例如C3P0或HikariCP。 6. MVC设计模式在JSF和Spring中的应用。 7. JPA(Java Persistence API)与Hibernate的...

    spring with ejb3

    标题 "spring with ejb3" 暗示了我们即将探讨的是如何在Spring框架中集成和使用EJB 3(Enterprise JavaBeans 3)技术。EJB 3是Java EE平台的一部分,它提供了用于构建企业级应用的服务和组件模型。Spring则是一个轻...

    ejb调用详解

    在ejb3.0时代,许多框架如Hibernate(持久层)、Spring(依赖注入和事务管理)和CDI(Contexts and Dependency Injection)被广泛使用,它们与EJB结合,提供了更强大的开发能力。 总之,EJB调用是一个涉及服务器...

Global site tag (gtag.js) - Google Analytics