将存储过程封装为EJB组件的方法

集成 Web 应用服务器和数据库管理 (DBMS) 技术是很多新型商业应用的常见需求。在本文中,我们将讨论该集成的一个方面:如何在会话 Enterprise JavaBeans (EJB) 组件中设计与开发封装或调用现有 DBMS 存储过程的方法。您应该熟悉 EJB 技术、结构化查询语言 (SQL) 和 Java 数据库连接 (JDBC) 的基本知识,以便充分理解本文。

如果您正致力于需要访问或修改在 DMBS 中数据的 Web 应用程序开发,那么可能已经在向基于 EJB 的设计转移。您可能会发现,通过使会话 EJB 组件利用 DBMS 存储过程,可以减少编码和维护工作,并可能提高数据访问性能。

一些公司多年来一直在使用存储过程(stored procedure),很大程度上是因为它们可以帮助减少网络通信量,并提高分布式计算环境中的性能。通常,这些过程包含涉及多数据库操作的重要业务逻辑。远程应用程序调用这些过程,在 DMBS 服务器上执行它们所包含的 SQL 语句。当然,过程结束时,所有结果都返回给应用程序。

这些旧有存储过程对 Web 应用通常是有用的。与其在 EJB 组件中复制这些逻辑,为什么不将这些过程作为方法封装在会话 bean 中呢?这样可以避免 DBMS 服务器和 EJB 组件中的冗余代码 -- 在考虑开发、调试和维护开销时,冗余代码将损耗开发效率。这还可能带来提高性能的好处。调用存储过程可以减少 EJB 组件原本不得不发出的 SQL 语句数量,从而减少与远程 DBMS 的通信开销。

入门

现在明白为什么要从会话 bean 调用存储过程了吧,下面我们看看如何开始。首先,需要使用适当的开发环境,该环境应该包括一个带有内置 EJB 支持的 Java 开发工具,一个 Web 应用服务器和一个关系 DBMS。我的参考配置包括 VisualAge for Java 企业版 3.0.2,WebSphere Application Server 高级版 3.0.2.1,以及 DB2 V7.1,所有这些都安装在一个 Windows NT 系统上。有关如何配置该环境以支持本文所述工作的详细信息,请参阅 "Leveraging DBMS Stored Procedures through Enterprise JavaBeans"(位于参考资料中)或参考产品手册。

有了正确的软件环境,就可以开始了。虽然我们要讨论的编码模式可能适合于无状态会话(stateless session) bean,但它也可使用有状态会话(stateful session) bean 组件。但是,因为无状态会话 bean 比有状态会话 bean 消耗的系统资源更少,而且涉及的代码也更少,所以通常建议使用无状态会话 bean。

首先要考虑的设计问题是如何在存储过程和 EJB 组件之间映射数据。存储过程可能需要多个输入、输出和输入/输出参数,并返回一个或多个结果集(代表数据行)。除非要对不同类型的过程使用不同的编码模式,您需要编写 EJB 组件以便处理所有这些可能性。

处理输入(或者输入/输出)参数很简单:将存储过程需要的每个参数映射成 EJB 组件的输入参数。但是,处理存储过程的输出比较棘手。可能有多个输出参数和多个结果集要传回调用程序,需要将这些作为一个可序列化的对象返回,以符合 EJB 规范。可以编写自己的类,使其可以将这些数据打包成一个对象,并在该对象中包括所有必须的元数据。(该元数据将描述对象的内部结构,以便客户机知道如何处理。)但这需要大量工作。

如果正在使用 VisualAge for Java 和 WebSphere,那么,有个更好的选项:使用它们的数据访问 Bean (DAB) 库。该库包含一些提供位于基本 JDBC 之上的函数层的类。可能会发现 com.ibm.db.CallableStatement 类特别方便,因为它允许创建一个可序列化的对象,该对象包含所有从存储过程返回的输出,包括多个结果集(如果有的话)和相关元数据。还有一个好处是,该库设计成可以支持任何支持 JDBC 的数据源,因此,它可以使 bean“与 DBMS 无关”。有了 DAB 库,就可以用一个编码模式在会话 EJB 组件中封装任何存储过程。甚至可以在 EJB 客户机中使用一个通用的编码模式,来处理任何从封装器方法返回的结果。

回顾开发任务

我们来讨论一下使用通用编码模式,来集成 EJB 组件和 DBMS 存储过程的步骤:

确定要将哪个存储过程封装成 EJB 方法。如果该过程不存在,则遵循 DBMS 标准过程来创建和调试。

确定要使用哪个无状态会话 EJB 组件。如果该 EJB 不存在,则遵循 Java 开发环境的标准过程来创建和调试。

扩展 EJB 组件的远程接口,以包括用于封装存储过程的新方法。

扩展 EJB 组件的实现,以包括封装存储过程的新方法的逻辑。连接到数据库、调用存储过程、处理所有结果集和处理所有异常是后面要解决的问题。

通过构建一个客户机应用或 Servlet,来调用 EJB 组件封装器方法,以测试所做的工作。

头两项是基本编程任务,您可能已经熟悉。根据所用产品的不同,个别步骤可能会略有不同,但是大多数产品都有工具来提供帮助。例如,如果正在使用 VisualAge for Java 和 DB2,则可以利用“存储过程构建器”来完成步骤 1,以及利用 EJB 开发特性来完成步骤 2。本文将不集中讲述头两步。但是,其余三步需要详细讲解。本文将在一个实际示例的环境下讨论这些步骤中的每一步。

时间: 2024-08-22 14:41:47

将存储过程封装为EJB组件的方法的相关文章

使用ejbframe轻松编写EJB组件

EJB(Enterprise Java Bean)是J2EE中最核心的技术,定义了企业级应用组件规范.通过将业务逻辑封装于EJB组件内,实现了3层结构的应用系统的开发. 然而,EJB规范相对比较复杂,编写EJB需要编写EJB的Home接口,Remote接口和EJB实现类.EJB规范对这些接口和类进行了许多约定,手工编写十分不方便且容易出错.这里,我向大家推荐一个工具,ejbframe.ejbframe是minij2ee提供的一个生成EJB组件框架源程序的工具,通过GUI界面操作就能自动生成正确的

J2EE中使用Spring AOP框架和EJB组件

j2ee 快速发展的开发人员社区.对各种后端技术(包括JMS.JTA.JDO.Hibernate.iBATIS等等)的支持,以及(更为重要的)非侵入性的轻量级IoC容器和内置的AOP运行时,这些因素使得Spring Framework对于J2EE应用程序开发十分具有吸引力.Spring托管的组件(POJO)可以与EJB共存,并允许使用AOP方法来处理企业应用程序中的横切方面--从监控和审计.缓存及应用程序级的安全性开始,直到处理特定于应用程序的业务需求. 本文将向您介绍Spring的AOP框架在

使用EJB组件的判断标准

在现今的技术条件下,何时以及是否使用 EJB 组件是方案小组面临的一个十分烦人的问题.为帮助你做出正确决定,我们准备了一些问题,以供你在考虑从其它技术转移到 EJB 组件,或者考虑一个可能使用 EJB 组件的新方案时作为判断依据.我们还将比较两个使用了 EJB 组件的方案,并将看到它们是如何被正确或错误地应用于实际的. 什么是 EJB 组件?EJB 组件是为企业级应用设计的 java 组件模型. EJB 组件是基于标准分布式对象技术.CORBA 和 RMI 的服务器端 java 组件.EJB 组

减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

  本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程".   业务逻辑,通俗说就是:比如要取数据的操作,取出会员编号为x的数据,原来我们一般是封装成函数,或者直接编写sql语句查询.现在是交给数据库的存储过程去完成. +------------------------------------------------------------            

ASP技巧:三种禁用FileSystemObject组件的方法

filesystemobject|技巧|禁用 众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页 提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来 被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的. 第一种:用RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll(win98路径)来注销该组 件.此方法过于狠毒,属于同归于尽的方法,大家都没得用,是下招 第二种:修改Progid的值,在A

使用存储过程封装应用逻辑的优缺点

存储过程|封装 Sql Server 2005 可以用.net语言写存储过程,这样在中小应用中,用存储过程封装应用逻辑变成一个不错的选择. 使用存储过程封装应用逻辑的优点如下: 1.DBA+Developer分工明确.之间代码模块化.减少数据库操作员和程序员的错误.2.数据库安全性:可以设置连接字符串中账号只可访问存储过程,不可操作表.这样数据完整性也有保证.3.存储过程是编译过的,执行快.4.事务的级别,存储过程级别的事务,ADO.net级别的事务比较.一致性.5.减少网络通信量.一个需要数行

用Delphi客户端访问EJB组件

摘 要:本文分析了COM客户使用COM桥访问EJB组件的原理,并结合实例给出了使用Delphi访问部署在Weblogic server上的EJB组件的实例.最后对比分析了其他几种集成方案和使用本方案的优化策略. 关键字:COM.EJB.分布式组件 1. 概述 CORBA..NET.Web Service.J2EE是分别是分布式软件体系架构的成就.J2EE在模型简洁方面优于CORBA,同时消除了.NET对一家公司的依赖,相对于Web Service技术它相对成熟因而在业界有着重要的地位.J2EE的

C++中COM组件初始化方法实例分析

  本文实例讲述了C++中COM组件初始化方法.分享给大家供大家参考.具体如下: 这里使用BCB 在使用TADOConnect等组件时需要进行初始化 调用接口 : ? 1 2 CoInitialize(NULL);//初始化COM套件 CoUninitialize();//释放COM套件 在DLL入口中调用: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 static bool isCoInitialize = false; //是否是自己进行的初始化 int WI

Java利用反射自动封装成实体对象的方法_java

本文实例讲述了Java利用反射自动封装成实体对象的方法.分享给大家供大家参考.具体分析如下: 利用此方法的时候需要传递的参数的名称,必须以行号结尾,去掉行号就是属性名称,比如页面传递name+rowNo,那么实体对象的属性名应该为name.代码如下 复制代码 代码如下: //获取页面数据,自动封装成bean对象 public List getObjectList(Class clazz,String[] rowNos) throws Exception{         List objList