当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 级别: 中级 T
 

 

 ·db2 web 服务提供者的安全性    »显示摘要«
    摘要:如何利用 websphere 增强您的 db2 web 服务提供者应用程序的安全性 级别: 中级 dirk wollscheid 咨询软件工程师, ibm 2004 年 7 月 在本文中,我们将解释如何为 db2 web 服务提供者应用程序启用安全性,这包括启用认证、设置授权和确保消息是加密的。我们还将解释 web 服务用户是如何被映射到数......
 ·通过 web 访问企业数据    »显示摘要«
    摘要:在 websphere portal v5 上为 ibm db2 content manager v8.2 部署 portlet 级别: 初级 elliotte want 数据管理认证专家, ibm advanced technical support 2004 年 7 月 您需要将自己的企业数据存储到一个可以在 web 上使用的内容管理系......


在 CMP bean 中使用关系型存储过程

级别: 中级

【程序编程相关:C++Builder 对数据项进行输入验

teresa kan, ibm websphere 体系结构与开发 【推荐阅读:C++Builder 对数据项进行输入验

【扩展信息:使用连接的应用程序标识

jian tang, ibm websphere 开发

2004 年 11 月

在 ibm® websphere® business integration server foundation v5.1 中,容器管理持久性 (container managed persistence,cmp) 实体能利用新的或现有的过程向后端存储器中叠加任何 crud(创建.读取.修改.删除)方法或业务方法.过程可以是 sql 存储过程或非关系型的遗留过程.本文描述了在关系数据库中利用存储过程开发 cmp 实体 bean 方面的考虑与部署过程.

引言

存储过程是一种很受欢迎的功能,它广泛用于提高数据访问性能.存储过程包含存储在数据库中的一系列代码,扩展了运行在数据库服务器上的客户端.客户端应用程序通过调用存储过程只需要访问数据库一次就可以执行一系列本地操作,而不用多次访问数据库服务器.

图 1. sessionbean 调用存储过程

为了演示调用过程,在图 1 中,accountbean 是一个包含 updateallbalances() 方法的会话 bean.该方法调用一个 sql 存储过程——updatetransactions,这是一个在数据库中存储并代表 updateallbalances 在数据库服务器上运行的存储过程.为在该实例中应用业务逻辑,updatetransactions 存储过程包含了执行数据库服务器上的下列银行操作的代码:

选择 checking 表中 expense 列的值,只选取从 1990 年到现在的那些费用.如果总费用超过 100000,那么从 saving 表向 checking 表转移 20000. 从 loan 表中选择余额.如果余额超过 20000,那么从 saving 表向 loan 表中转移 20000. 返回 checking.saving 与 loan 表中的所有余额.

 

在应用服务器上执行该代码,并分别访问数据,与用通常的 sql 语句执行必需的操作相比,updatetransactions 存储过程至少节省了对数据库的三次访问.

存储过程可以是 java 过程.sql 存储过程或系统本地过程.在本文中,我们将看一下访问关系数据库的存储过程.在这里不讨论用于容器管理持久性 (container-managed persistence,cmp) 的非关系型过程.

容器管理的方法

cmp entity enterprise java bean (ejb) 组件利用存储过程功能向后端存储库中叠加 cmp ejb 方法扩展了现有的 j2ee cmp ejb 编程模型.这些叠加方法,也可以看作容器管理的方法,包括 ejb crud(创建.读取.修改.删除)方法,例如 ejbcreate.ejbremove.ejbload.ejbstore 以及执行 cmp bean 的持久存储数据相关逻辑的数据逻辑方法.

以前,调用存储过程最好的方法是使用会话 bean,会话 bean 是一种供 web 应用程序或客户端应用程序通过存储过程访问数据库的会话虚包(facade).现在可以将 cmp ejb 组件作为存储过程的前端来创建与使用,这使得用户能同时使用 cmp ejb 组件与存储过程,如果用户通过会话 bean 使用存储过程,那么可以直接通过会话 bean 访问实体,但同时会失去一些 cmp 相关的好处,例如 cmp 缓存.cmp 事务控制.ejb 本地或远程访问透明性以及容器管理的方法.主要的是如果存储过程操作不涉及 cmp ejb 组件的持久字段,那么可以通过会话 bean 使用存储过程.否则,就通过 cmp bean 使用存储过程以利用 cmp 的优势.

websphere 支持容器管理的方法

在 websphere business integration server foundation v5.1 发布之前,用户可以在会话 bean 或数据逻辑方法中使用存储过程.后来,需要在 cmp 方法中实现叠加过程.在 websphere business integration server foundation v5.1 中,容器管理的方法通过将叠加逻辑移到生成的模板中,从而简化了 cmp bean 中的逻辑,这与今天的将逻辑移到生成的 functionset 类中是类似的.但是仍需要用户的干预,将叠加逻辑插入到生成的模板中.

在 websphere studio application developer integration edition 5.1 版本(以下简称为 application developer)中,用户可以在 cmp bean 上定义容器管理方法的信息.cmp bean 包括映射到存储过程方法的 cmp 方法(crud 与数据逻辑)与 preflush 指示器,该指示器告诉容器在调用存储过程前要将 cmp 数据写入数据库中.图 2 从概念上说明了利用 cmp bean 中的容器管理方法的开发与部署步骤.

图 2. 容器管理的方法部署模型

必须将 cmp bean 中的容器管理方法创建为抽象方法.所有的 crud 方法都是抽象方法,这使得它们成为容器管理方法的候选方法.下面的步骤概括了如何在 cmp bean 中开发与部署容器管理方法:

从 application developer 中: 选择您想使用的 cmp bean,并指出哪个 cmp 方法使用存储过程.提供必需的存储过程信息,例如过程名称.preflush 指示器等等. 选择 generate 按钮,利用 cmpdeploy 工具生成 <bean>userdefinedpushdownmethodsimpl 模板类. 将逻辑插入到 <bean>userdefinedpushdownmethodsimpl 模板类的方法中,从而访问存储过程并处理返回的数据. 保存 <bean>userdefinedpushdownmethodsimpl 类.cmpdeploy 工具将自动编译这个文件并将其重新封装到 ejb jar 文件中. 运行 ejbdeploy 命令或用 application developer 的部署工具(选择 generate => deployment and rmic code)部署 cmp jar 文件. ejbdeploy 工具生成 functionset. functionset 类中生成的容器管理方法将路由到用户修改的 <bean>userdefinedpushdownmethodsimpl 类中的相应方法. 安装 ejb jar 文件.

 

我们将在图 3 中用应用程序模型演示可叠加的 cmp bean 的开发与部署流程,其步骤将在下面的部分中描述.

应用程序实例模型

图 3. bankaccount 应用程序模型

这里显示的企业应用程序—— bankaccountcmpsp.ear 有三个 ejb 组件:

accounttransaction sessionbean bankaccount cmp transactionhistory cmp.

 

关于这些组件:

accounttransaction 充当了一个供 web 应用程序或客户端访问实体 ejb 组件的会话虚包,因此它支持远程接口. bankaccount 与 transactionhistory cmp bean 只支持本地接口. 一个 bankaccount cmp bean 有零个或多个 transactionhistory cmp bean. bankaccount 访问 db2 数据库中的 bankaccount 表,transactionhistory 访问 db2 数据库中的 transactionhistory 表.图 3 中用红色标识的方法为容器管理方法.

 

为了简化该实例,我们将只为 bankaccount 的几个属性与 transactionhistory 实体建模.图 4 显示了 bankaccount 表与 transactionhistory 表的结构.

图 4. bankaccount 表与 transactionhistory 表的结构

bankaccount cmp bean bankaccount 有下列字段:

accountid:帐号,关键字段. balance:帐户余额.

 

下列 bankaccount 方法使用了存储过程:

ejbcreate(string id, float balance):用 accountid 创建帐户并设置帐户余额.不仅只在 bankaccount 表中创建元组(tuple),还在表示已经完成了“创建”事务的 transactionhistory 表中创建元组. ejbstore():存储帐户信息.用余额修改 bankaccount 表中的记录. ejbremove():移除帐户.它可以移除 account 表中的元组,还可以移除 transactionhistory 表中对应的事务历史元组. ejbfindbyprimaykey(string id):根据帐户 id 查找 bankaccount ejb 组件. ejbfindbybalance(float fromamount, float toamount):在一定的范围内用余额查找帐户.它将返回一个 bankaccount ejb 组件集. getnumberoftransaction(string transactiontype, timestamp fromtime, timestamp totime):返回在一定时间段中执行的特定事务类型的事务数量.
...   下一页
    摘要:开始在 isereis 上使用用于 linux 的 ejb 持久性 级别: 中级 venkata nagalla, 电子商务架构师, ibm harlon trowbridge, 软件工程师, ibm 2004 年 5 月 本文所面向的读者是在 iseries 利用 linux 开发企业应用程序的开发人员,他们希望在 db2/400 中......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE