EJB的存取和实现

作为轻量级的容器,Spring常常被认为是EJB的替代品。我们也相信,对于很多 (不一定是绝大多数)应用和用例,相对于通过EJB容器来实现相同的功能而言, Sping作为容器,加上它在事务,ORM和JDBC存取这些领域中丰富的功能支持, Spring的确是更好的选择。

不过,需要特别注意的是,使用了Spring并不是说我们就不能用EJB了, 实际上,Spring大大简化了从中访问和实现EJB组件或只实现(EJB组件)其功能的复杂性。 另外,如果通过Spring来访问EJB组件服务,以后就可以在本地EJB组件,远程EJB组件, 或者是POJO(简单Java对象)这些变体之间透明地切换服务的实现,而不需要修改 客户端的代码。

本章,我们来看看Spring是如何帮助我们访问和实现EJB组件的。尤其是在访问 无状态Session Bean(SLSBs)的时候,Spring特别有用,现在我们就由此开始讨论。

访问EJB

概念

要调用本地或远程无状态Session Bean上的方法,通常客户端的代码必须 进行JNDI查找,得到(本地或远程的)EJB Home对象,然后调用该对象的"create" 方法,才能得到实际的(本地或远程的)EJB对象。前后调用了不止一个EJB组件 上的方法。

为了避免重复的底层调用,很多EJB应用使用了服务定位器(Service Locator) 和业务委托(Bussiness Delegate)模式,这样要比在客户端代码中到处进行JNDI 查找更好些,不过它们的常见的实现都有明显的缺陷。例如:

通常,若是依赖于服务定位器或业务代理单件来使用EJB,则很难对代码进 行测试。

在仅使用了服务定位器模式而不使用业务委托模式的情况下,应用程序 代码仍然需要调用EJB Home组件的create方法,还是要处理由此引入的异常。 导致代码仍然保留了与EJB API的耦合性以及EJB编程模型的复杂性。

实现业务委托模式通常会导致大量的冗余代码,因为我们不得不编写 很多方法,而它们所做的仅仅是调用EJB组件的同名方法。

Spring采用的方法是允许创建并使用代理对象,一般是在Spring的 ApplicationContext或BeanFactory里面进行配置,这样就和业务代理类似,只需要 少量的代码。我们不再需要另外编写额外的服务定位器或JNDI查找的代码,或者是手写 的业务委托对象里面冗余的方法,除非它们可以带来实质性的好处。

访问本地的无状态Session Bean(SLSB)

假设有一个web控制器需要使用本地EJB组件。我们遵循前人的实践经验, 于是使用了EJB的业务方法接口(Business Methods Interface)模式,这样, 这个EJB组件的本地接口就扩展了非EJB特定的业务方法接口。让我们假定这个 业务方法接口叫MyComponent。

public interface MyComponent {

...

}

时间: 2024-08-02 05:10:16

EJB的存取和实现的相关文章

用EJB 3.0开发企业级Bean组件初体验

阅读提要 EJB 3.0规范的最终稿已经提交到JCP,如果不出意外EJB3.0将在2006年正式发布.本文作为探讨EJB 3.0公共草案三系列中的第一篇,将解释EJB 3.0和企业Bean组件的基本概念:另外,你还学习到怎样使用JBoss和Maven来开发基于EJB 3.0的企业级bean组件. 尽管EJB 3.0规范还没有正式发行,但是它已经在Java开发社群中引起广泛兴趣--无论是对其拥护者还是其竞争对手.所有人都承认迫切需要找到更有生产效率的软件开发方法:如今,他们的争论集中于在EJB 3

漫谈Java数据库存取技术

数据|数据库 IT技术日新月异,新技术的出现令人目不暇接,似乎每一天都在产生着新名词.不过归根结底IT所要实现的价值不外乎数据收集,然后再以客户希望的形式展示给客户而已.因此数据存取技术也就成了一个永恒的话题.而在Java这个开放的世界里,数据库存取技术是五花八门,种类繁多.我们也来侃侃Java世界里主流的数据库存取技术. 首先列出英雄榜 1.    JDBC直接访问数据库2.    EJB  entity bean.3.    JDO技术.4.    第三方O/R工具,如目前大红大紫的Hibe

EJB 3.0+Aspect实现声明性编程初步

编程 提要 本文将与你一同探讨怎样把注解和方面的威力联合起来,以与EJB 3.0兼容的方式为企业实现提供声明性服务,而在同时仍然提供容器的独立性. 一. 引言 在我们共同寻求进一步提高软件开发生产性能的方法的过程中,我们-作为Java社团成员-一般都转向J2EE来提供针对企业开发中更具挑战性的技术问题如分布式事务管理.并发性和对象分布等的解决方案.其背后的指导思想-这些复杂的企业服务能被应用程序服务器供应商所实现并能为商业开发者所平衡-的确是一种很好的思想.J2EE,具体地说是EJB,已成功地提

EJB 3.0是Hibernate的克隆吗?

摘要 Sun的EJB 3.0规范正处于其最后的"冲刺"阶段,许多公司都在为遵循这一规范而忙碌着.这个EJB规范最新版本所提供的众多优点中比较突出的当属其数据库功能,但是一些开发人员感到,这个规范仅仅是Hibernate持久性存储引擎的一个"克隆"版.真的吗?本文正是想讨论这一问题. 实践证明,Hibernate是针对于Java语言所创建的最优秀的持久化存储引擎之一.至今,我还清晰地记得第一次使用Hibernate工作的情景.当时,我们已经有了一种现成的持久化存储引擎

jsp与ejb通信

js Blueski编译 以下是一个snippet代码,演示了JSP页面如何与 EJB session bean进行相互作用. <%@ page import="javax.naming.*, javax.rmi.PortableRemoteObject,foo.AccountHome, foo.Account" %><%! //declare a "global" reference to an instance of the home inte

EJB技术的数据库应用

一.J2EE 技术简介 J2EE是 SUN 公司提出的在分布式环境中的一种体系结构,它提供了一种基于组件的设计.开发.集成.部署企业应用系统的方法,J2EE平台提供了多层分布式的应用系统模型.重用组件的能力.统一的安全模型和灵活的事务控制.基于组件的J2EE企业应用系统具有平台独立性,所以不受任何软件产品和任何软件厂家API的约束. J2EE定义了下面的组件: ·application client 和 applets 是客户层组件: ·Java Servlet 和 JSP 组件是WEB 层组件

EJB注释-1(EJB学习笔记)

 EJB注释是EJB技术的一个特点.EJB的大部分功能都是通过注释@来实现的.EJB注释1.有状态@Stateful和无状态@Stateless会话@Stateless定义本会话为无状态会话.无状态会话Bean 是一个简单的POJO(纯粹的面向对象思想的java 对象),EJB3.0 容器自动地实例化及管理这个Bean.Stateless Session Bean不负责记录使用者状态,Stateless Session Bean一旦实例化就被加进会话池中,各个用户都可以共用.即使用户已经消亡,S

J2EE设计模式学习笔记之--用实体组件进行数据存取

1,实体组件只是EJB层中的实现选择之一.实体组件不应该被暴露给客户软件.WEB层和其他EJB客户软件绝不应该直接访问实体组件.它亿只应该与由实现应用业务逻辑的会话组件所构成的一个会话组件层打交道.这不仅保持了应用设计与实现中的灵活性,而且常常还改进了性能.2,会话组件最好只通过普通JAVA数据存取接口的一个持久性门面来访问实体组件.虽然实体组件衽了一种特殊的数据处理方法,但标准JAVA接口却没有.这种方法不公保持了灵活性,而且还预见性地检验了一个应用.笔者对实体组件的未来产生了极大的怀疑,因为

Java数据库存取技术

IT技术日新月异,新技术的出现令人目不暇接,似乎每一天都在产生着新名词.不过归根结底IT所要实现的价值不外乎数据收集,然后再以客户希望的形式展示给客户而已.因此数据存取技术也就成了一个永恒的话题.而在Java这个开放的世界里,数据库存取技术是五花八门,种类繁多.我们也来侃侃Java世界里主流的数据库存取技术. 首先列出英雄榜 1.JDBC直接访问数据库 2.EJB entity bean. 3.JDO技术. 4.第三方O/R工具,如目前大红大紫的Hibernate, 其它如Castor, Top