分享
 
 
 

将DBMS存储过程封装为会话EJB组件中的方法(2)

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

将DBMS存储过程封装为会话EJB组件中的方法(2)

· EJB 组件远程接口

// Enterprise JavaBean Remote Interface for Analysis session bean

public interface Analysis extends javax.ejb.EJBObject {

// remote interface for our lookupClient method

com.ibm.db.CallableStatement lookupClient(java.lang.Integer clientId)

throws java.rmi.RemoteException;

. . .

}

请注重,假如使用 VisualAge EJB 组件向导,则无需对此进行手工编码。替代方法是,在 bean 的实现类中对此方法编码之后,通过菜单项来将该方法提升(promote)到 bean 的远程接口,然后,将自动添加必需的代码。

编码存储过程封装器方法

现在可以集中讲述 bean 实现类本身,将在该实现类中包括调用存储过程的代码,并将其所有输出作为 com.ibm.db.CallableStatement 对象返回。此代码样本包含调用 CLIENTREPORT 存储过程的 lookupClient(...) 方法的完整实现。将在后续章节中具体讲解每个代码块(参考代码中的注释)的逻辑,以便您更好地理解如何为自己的存储过程实现类似的方法。

· 连接到数据库

让我们更具体地查看此代码的各部分。

在调用存储过程之前,需要建立一个到 DBMS 的连接。有两种方法做得到:使用 1.0 样式的连接,或者使用 JDBC 2.0 样式的 DataSource。在 WebSphere 环境中,通常选用后者,因为它提供连接池(connection pooling),这可以更有效地使用系统资源。出于这种原因,我们的编码模式使用 DataSource。

除了确定要建立的连接类型之外,还应该考虑要将连接逻辑放在 bean 中的什么地方。有多个选择:

直接放在封装器方法(wrapper method)中

放在私有辅助方法(helper method)中

放在 ejbCreate() 方法中(并将相应的断开逻辑放在 ejbRemove() 方法中)

这些方法的利弊超出了本文的范围。为简单起见,样本代码将所有连接/断开逻辑直接放在方法中。

代码块 1 显示了在使用 VisualAge for Java 3.0.2 和 WebSphere 3.0.2.1 时,如何使用 DataSource 进行连接。我们创建了一个散列表,在其中填充适合于 WebSphere 环境的值,然后建立一个 InitialContext。代码的以下几行利用该初始上下文和 Java 命名和目录接口 (JNDI) 服务,来获得期望的 DataSource 的索引,我们以前在 WebSphere 中用“治理控制台”创建了该 DataSource。本例中的 DataSource 名为 LocalDB2Sample。下一步,使用该 DataSource 来获得一个连接,并向其传递合适的数据库用户标识和口令。从连接池获得连接之后,可以将该信息提供给 DAB DatabaseConnection 对象,来设置它所需的连接规范。最后,将 autoCommitMode 设置成 false,因为 EJB 组件负责处理事务治理服务。

测试时,在 VisualAge for Java WebSphere 测试环境中运行使用 DataSource 的 EJB 组件会很方便。有关如何在产品发行版 3.0.2 中这样做的指示,请参阅 David Zimmerman 所著的 "Creating DataSources in the VisualAge for Java WebSphere Test Environment"(在参考资料中)。

· 调用存储过程

建立了连接之后,可以集中讲述如何调用存储过程了。如封装器方法编码示例中的代码块 2 所示,首先创建一个 DAB StatementMetaData 对象,该对象中有存储过程的规范。下一步,定义要执行的 SQL 语句。在这里将要调用 CLIENTREPORT 过程,该过程需要一个输入参数(用于客户标识)和两个输出参数(用于客户名称和电子邮件地址)。下一步,将参数添加到规范中。对于每个过程参数,都指定了参数名,其数据类型及其参数模式。

代码块 3 创建即将执行的 DAB CallableStatement 对象。CallableStatement 代表可用来执行存储过程的 SQL。创建完对象之后,将其元数据设置成在代码块 2 中指定的形式。然后将 DatabaseConnection(在代码块 1 中创建)与该 CallableStatement 关联。

下一个任务很简单:需要执行 CallableStatement 对象,这将使 DBMS 运行存储过程。但是,在这样做之前,必须通过 EJB 客户机应用程序,将过程的输入参数设置成传入方法的值。代码块 4 中显示了这种逻辑。

检索存储过程的输出并返回到调用程序

在封装器方法编码示例的代码块 5 中,将检索存储过程返回的输出参数。想起来了吗?这些参数代表 Web 站点客户的名称和电子邮件地址。但是,不需要显式地检索存储过程返回的结果集。(这些结果集包含有关客户投资总额和公告板发表信息的数据)。您可能要问:为什么会这样呢?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有