[转载]IBM eServer zSeries 上的 Java 存储过程、WebSphere 和 DB2

IBM eServer zSeries 上的 Java 存储过程、WebSphere 和 DB2


成功的电子商务的基础是一种好的基础结构,这种基础结构可能使用 Java 编程语言和 Java 2 企业版 (J2EE) 服务器环境,包括对 Enterprise Java Beans(EJBs)的支持。本文包括一个使用 WebSphere Application Server 和 DB2 for the eServer,zSeries 创建和运行 Java 存储过程的循序渐进的指南。同时还包括存储过程和 EJBs 考虑事项。

简介

电子商务使企业能够利用技术在市场上取得优势。有了这项技术,企业就可以扩大它们的客户基础,为客户提供更快捷、更有效的服务,提高可访问性、灵活性和方便性,并且开发更个性化的服务。此外,通过利用电子商务技术来简化同客户、供应商和业务伙伴间的交互,企业可以最小化或降低与实现业务过程关联的开销。

IBM 电子商务基础结构 [ 1] 方便了成功的电子商务应用程序的构建、运行和管理。它由一种开放的、基于标准的模型构成,这种模型使多平台、多供应商解决方案以及经过验证的技术能够用于开发、部署及管理电子商务应用程序和不同的产品组合。当客户转向电子商务时,该基础结构有助于构建客户所需的最佳端对端解决方案以满足他们的业务和技术需求。 WebSphere® Application Server连同数据库管理系统(DBMS) DB2®一起形成了这一基础结构的基础,它们使得企业能够利用现有资源来获得竞争优势。

图 1显示了一种多层的、支持 Web 的环境,通过使用 WebSphere 和 DB2,目标是用来开发电子商务。第一层由 Web 浏览器或一些其它类型的客户机应用程序构成,包括 PC 或无线设备。浏览器通过 HTTP 同中间层服务器通信,而其它客户机应用程序可能使用其它通信协议同中间层通信。中间层调用由 WebSphere 管理的 Java™ Server Pages(JSP) 或 servlet。JSP 和 servlet 可能需要使用 Java 数据库连接(Java Database Connectivity (JDBC))或 SQL for Java (SQLJ)调用访问该环境中的 DB2 数据源 [ 2]。在该环境下开发的支持 Web 的应用程序可以使用 Java 2 企业版(J2EE)服务器环境中的几个组件 [ 3]。这包括对 Enterprise Java Beans (EJB) [ 4]、servlet、JSP 和 Java Naming and Directory Interface(JNDI)的支持。JSP 提供服务器端的脚本编制能力,而 servlet 使代码可以在中间层服务器上执行。另外,通过中间层上 EJB 服务器执行的 EJB 提供中间层上的组件执行(如在存储过程和 EJB 考虑事项中所详述的那样)。J2EE 也对连接和访问 DBMS 提供支持,包括对 JDBC 和 Java 事务 API(Java Transaction API (JTA))的支持。而且,SQLJ 和可扩展标记语言(Extensible Markup Language (XML))也是重要的开放标准技术,对它们的支持也是开发电子商务应用程序所希望的。


图 1. WebSphere-DB2 集成
WebSphere-DB2 集成

应用程序服务器使用 servlet 引擎或 EJB 服务器处理请求,servlet 引擎或 EJB 服务器可以直接或通过编译过的 JSP 执行被调用的 servlet,从而构成返回给客户机浏览器的 HTML 页面。该页面是通过将其静态表示同任何动态运行时执行的结果集成起来创建的,动态运行时执行可能包括访问最后一层上的 DBMS。JSP 和 servlet 也可以使用 EJB 间接访问远程数据源,EJB 是通过远程方法调用来调用的。除 Web 浏览器以外,其它类型的客户机应用程序也可以通过远程方法调用直接调用 EJB。这些应用程序也可以选择使用 JDBC 或 SQLJ 直接访问 DB2 数据服务器。

本文包括在 eServer、 zSeries™ 机器上的 WebSphere-DB2 环境中创建和执行 Java 存储过程的循序渐进指南。(该循序渐进指南仅适用于解释型 Java 存储过程)。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


编写 Java 存储过程

以下是在 z/OS™ 环境中成功编写和执行解释型 Java 存储过程的步骤小结。同时还提供了每一步的详细指导。

除此以外,这一节还描述了如何从 z/OS 上的 WebSphere Application Server 里运行的 servlet 调用 Java 存储过程。必须应用 DB2 PTF PQ46673 以运行 Java 存储过程。如果您打算运行 Java 用户定义函数(UDF),请应用 DB2 PTF PQ50443。

步骤 1:验证 OS/390 系统上是否具有运行 Java 存储过程所需的 MVS PTF

Java 存储过程必须与 IBM Developer Kit for OS/390,带有可永久重用 Java 虚拟机的(Persistent Reusable Java Virtual Machines)Java 2 technology Edition 一起运行。使用该 JDK 的先决条件是必须应用各种 MVS PTF。 表 1列出了截止编写本文时的 PTF。


表 1. 先决条件 MVS PTF
APAR OW45508
PTF:发行版:
UW90703OS/390 版本 2 发行版 8
UW90704OS/390 版本 2 发行版 9
UW90705OS/390 版本 2 发行版 10
APAR OW45580:
PTF:发行版:
UW75890OS/390 版本 2 发行版 8
UW75891OS/390 版本 2 发行版 10
APAR PQ40047:
PTF:RELEASE:
UQ49272OS/390 版本 2 发行版 8
UQ49273OS/390 版本 2 发行版 9
UQ49274OS/390 版本 2 发行版 10
APAR PQ40048:
PTF:发行版:
UQ49260OS/390 版本 2 发行版 8
UQ49263OS/390 版本 2 发行版 8
UQ49261OS/390 版本 2 发行版 9
UQ49264OS/390 版本 2 发行版 9
UQ49262OS/390 版本 2 发行版 10
UQ49265OS/390 版本 2 发行版 10

要找到所需的 MVS PTF 的最新更新,请访问 http://www-1.ibm.com/servers/eserver/zseries/software/java/wizard13s/

步骤 2:验证 OS/390 系统是否具有所需的 JDK 级别

编写本文时,运行 Java 存储过程所需的 Java 虚拟机(JVM)是 J2RE 1.3.1 IBM OS/390 Persistent Reusable VM build hm131s。要下载最新的 JDK,请访问 http://www.s390.ibm.com/java/

步骤 3:设置工作负载管理器(Workload Manager (WLM))地址空间以运行 Java 存储过程

  1. 在 OS/390 中定义一个 WLM 启动的新任务

    z/OS 和 OS/390 上的 Java 存储过程必须在 WLM 应用程序环境中运行。MVS 系统可能已经定义了各种 WLM 任务。和用其它语言编写的存储过程不同,Java 存储过程有独特的需求:在特殊应用程序环境中只有 Java 存储过程才可以运行。(例如,C 存储过程不能在与 Java 存储过程相同的 WLM 应用程序环境中运行。)在可以执行存储过程之前,必须首先定义应用程序环境。有关为 OS/390 定义新 WLM 地址空间的完整步骤可以在 [ 5] 中找到。

  2. 设置运行 Java 存储过程的 WLM proc

    在 z/OS 上定义了新的 WLM 地址空间后,则是设置 proc 以运行 Java 存储过程的时候了。这需要一些额外的设置作为 WLM 地址空间的一部分,用其它语言编写的存储过程不需要这一额外设置。

    设置 WLM 时,请记住下面两点:

    • 请使用单独的 WLM 应用程序环境分别来运行解释型和编译型 Java 存储过程。
    • 如果有非 Java 存储过程正运行于同一个 MVS 系统上,请为它们定义单独的 WLM 存储过程地址空间。

清单 1是一个用来启动地址空间的作业控制语言(JCL)示例。本文中显示的示例就是使用该样本 JCL 运行的。


清单 1. 为 Java 存储过程启动 WLM 地址空间的 JCL
   //DT12WLJI PROC RGN=0K,
        SUBSYS=DT12,NUMTCB=1,APPLENV=DT12WLJI  
   //IEFPROC  EXEC PGM=DSNX9WLM,REGION=&RGN,TIME=NOLIMIT,        
   //         PARM='&SUBSYS,&NUMTCB,&APPLENV'                    
   //STEPLIB  DD  DISP=SHR,DSN=DSNT1.DT12.SDSNEXIT               
   //         DD  DISP=SHR,DSN=DSNT1.DT12.SDSNLOAD               
   //         DD  DISP=SHR,DSN=DSNT1.RUNLIB.LOAD                 
   //         DD  DISP=SHR,DSN=CEE.SCEERUN                       
   
        //JAVAENV  DD  DISP=SHR,DSN=WLMCJAV.JSPENV                    
   //JSPDEBUG DD  SYSOUT=A                                       
   //SYSPRINT DD  SYSOUT=A                                       
   //MSGFILE  DD  SYSOUT=A                                       
   //SYSABOUT DD  SYSOUT=A                                       
   //CEEDUMP  DD  SYSOUT=A                                       
   //DSNRRSAF DD  DUMMY   

      

清单 1注释:

  • SUBSYS 参数应该是用来运行 Java 存储过程的 DB2 子系统的名称。
  • 建议将 NUMTCB 设置成不超过 5 个 TCB。
  • JAVAENV 是存在于 MVS 系统上的有序数据集。该数据集的名称是变量,由 WLM proc 的创建者设置。在试图运行 WLM 地址空间中的任何存储过程之前,请确保对数据集进行了编目。 步骤 4深入讨论了 JAVAENV 数据集中必须包含的信息。

步骤 4:设置 JAVENV 数据集中的环境变量

清单 1里的 JAVAENV DD 卡中指定的名为 WLMCJAV.JSPENV 的数据集包含各种环境特性,例如类路径、JVM 目录、OUTPUT 目录等。下面是该数据集内容的一个示例。

		ENVAR(	"CLASSPATH=/usr/nst/JavaSP/CLASSES:/usr/nst/SQLJ20",
			 	"JAVA_HOME=/java13s/IBM/J1.3",
			 	"WORK_DIR=/usr/nst/JavaSP/OUTPUT",
			 	"DB2_HOME=/usr/lpp/db2/dev710",
				"DB2SQLJPROPERTIES=/usr/nst/JDBC20")
 

CLASSPATH— 包含 Java 类文件的目录。除此以外,请将含有 JDBC DBRM 的 .ser 文件的目录位置指定为 CLASSPATH 的一部分。运行 db2genJDBC 实用程序时创建了缺省名称为 DSNJDBC1-4 的四个 JDBC DBRM。除了这些 DBRM 之外,还创建了 DSNJDBC_JDBCProfile.ser 文件。更多关于 db2genJDBC 实用程序的信息,请参阅 [ 6]。
JAVA_HOME - JVM主目录。
WORK_DIR— 指定包含 Java 存储过程的输出文件的目录。当调用并运行 Java 存储过程时,会创建四个输出文件:

  • ResetEvents.txt
  • server_stderr.txt
  • server_stdin.txt
  • server_stdout.txt

执行存储过程时所遇到的任何错误都会记录在这些文件中。这里指定的目录必须存在,因此在运行任何 Java 存储过程之前必须首先创建该目录。然而,Java 存储过程的输出并不总是输出到这些文件。更多详细信息,请参阅附加技巧下的第二点。

DB2_HOME— JDBC 驱动程序代码目录。
DB2SQLJPROPERTIES— 包含 db2sqljjdbc.properties 文件的目录。设置该环境变量并不总是必须的。有关说明,请参阅附加技巧下的第三点。

有关这个数据集的所有各种设置的详尽列表,请参阅 [ 6]。

步骤 5:将 JAR 文件定义到 DB2(如果合适的话)

可以选择将作为 Java 存储过程执行的类文件存储为 DB2 目录中的 JAR 文件。如果您没有使用这种方法,请继续执行 步骤 6。否则,请执行下列步骤:

  1. 编译 Java 存储过程源代码。
  2. 运行 JAR 命令以将存储过程类文件封装成 JAR 文件。例如,如果存储过程源文件的名称为 MySP.java,那么为了将 MySP.class 文件封装成名为 MyJAR 的 JAR 文件,请执行下列命令:
    jar -cvf MyJAR.jar MySP.class
  3. 既然已经创建了该 JAR 文件,那么请调用 INSTALL_JAR 存储过程来将该 JAR 文件定义到 DB2。可以通过创建一个调用 INSTALL_JAR 存储过程的调用程序来实现这一点。可以在 下载里找到一个用 Java 编写的样本调用程序。

    或者,您也可以通过使用 IBM Stored Procedure Builder 来调用 INSTALL_JAR 存储过程。INSTALL_JAR 存储过程接收三个输入参数:url、jar-name 和 deploy。

    • url— JAR 文件的路径。例如,如果 MyJAR.jar 位于 directory /usr/jarfiles 中,那么应该将本参数初始化为:file:/usr/jarfiles/MyJar.jar
    • jar-name— JAR 文件的名称。它是为 JAR DB2 对象所取的名称。在这个示例中,该名称为 MyJAR(没有 .jar 扩展名)。
    • deploy— 该参数告诉 DB2 安装了 JAR 文件之后是否会发生额外的操作。目前,该参数唯一可接受的值是 0。

  4. 最后,既然已经将 JAR 文件定义到了 DB2,就请执行 GRANT USAGE ON JAR 语句以将使用 JAR 的权限授予将存储过程定义到 DB2 的用户。

在执行完所有这些步骤之后,JAR 文件现在被定义到 DB2 了。

步骤 6:将 Java 存储过程定义到 DB2

在 DB2 中定义 Java 存储过程与定义任何其它存储过程很相似,只有几点不同。例如,假定某个存储过程取名为 MyJSP 并且它接收一个 CHAR(12) 类型的输入/输出参数。该存储过程是一个带有未封装在 JAR 文件中的类的 Java 存储过程。该过程使用在 步骤 4中定义的 WLM proc(地址空间 DT12WLJI)。该 Java 存储过程并不返回任何结果集,并且它的包被绑定在称为 SAMPLE 的集合中。要执行的 Java 程序是类 MyJSP 中的样本 1。

以下是创建上述 Java 存储过程的 DDL。该 DDL 也包括在 下载中。

CREATE PROCEDURE MyJSP (INOUT CHAR(12))
	FENCED
	MODIFIES SQL DATA
	COLLID SAMPLE
	LANGUAGE JAVA
	EXTERNAL NAME 'MyJSP.sample1'
	WLM ENVIRONMENT DT12WLJI
	DYNAMIC RESULT SETS 0
	PROGRAM TYPE SUB
	PARAMETER STYLE JAVA;

请将下列规范用于 Java 存储过程:

LANGUAGE JAVA必须总是被指定为解释型 Java 存储过程。

EXTERNAL NAME 包含用单引号括起来的类和方法名称。如果存储过程被封装在 JAR 文件中,那么 EXTERNAL NAME 就是 jar 文件的名称。例如, EXTERNAL NAME 'MyJAR: MyJSP.sample1' 。如果在类名称中有多个方法,那么方法名称需要 Java 签名。

WLM ENVIRONMENT指定在 步骤 4中创建的 WLM 地址空间的名称。

PROGRAM TYPE SUB应该总是被指定为 Java 存储过程。

PARAMETER STYLE JAVA应该总是被指定为 Java 存储过程。

在执行了这一 DDL 之后,当前就在 DB2 的目录(具体说是 SYSIBM.SYSROUTINES 表)中定义该存储过程。要验证这一点,请执行下列语句:

 SELECT * FROM SYSIBM.SYSROUTINES WHERE NAME = 'MyJSP'

步骤 7:编写调用程序来调用存储过程

只要指定了正确的名称和参数,用来调用任何其它存储过程的任何调用程序都可以用来调用 Java 存储过程。其它调用存储过程的替代方法使用 IBM Stored Procedure Builder 来编写 Java 调用应用程序。 下载中包含了 Java 调用应用程序的一个示例。

步骤 8:运行存储过程

如果调用程序是用 Java 编写的,那么就可以通过发出 Java 命令从 z/OS 上的 Unix 系统服务(Unix Systems Services (USS))执行该调用程序。例如,如果调用程序为 callmysp.java,那么可以使用命令: java callmysp 来启动该程序。

也可以使用 IBM Stored Procedure Builder 来调用该过程。

步骤 9:分析结果

当存储过程完成执行时,输出就被置于 Java 环境数据集中指定的目录中。如同 步骤 4中所描述的那样,在该目录中创建了四个输出文件。这些文件含有 println 执行的结果,该结果可以用来验证存储过程的成功执行和期待的结果。

Java 存储过程示例

下载中的样本 Java 存储过程名为 JAVASPJ。JAVASPJ 有一个 CHAR(12) 类型的 INOUT 参数。该存储过程在类 javaspj 中,其方法称为 jsp1。该存储过程并不返回任何结果集。当调用存储过程时,存储过程对现有的表执行 SELECT 语句,并返回调用程序。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


从 servlet 调用 Java 存储过程

从运行于 z/OS 上的 WebSphere Application Server 中的 servlet 调用 Java 存储过程的步骤如下:

  1. 编写 servlet 的代码并编译它。

    servlet 中的 SQL CALL 语句同独立 Java 调用程序中的 SQL CALL 语句相同。然而,servlet 继承了 HttpServlet 类而且包含其它需要的方法。 下载中包括调用 Java 存储过程的简单 servlet 的示例。[ 7] 中包含更多关于 servlet 和 servlet 编程的信息。

  2. 将该 servlet 定义到 WebSphere Application Server。[ 8] 中含有更多有关将 servlet 定义到 WebSphere 的信息。
  3. 从 Web 浏览器运行该 servlet。

    从浏览器窗口用适当 URL 调用您的 servlet。注:该 URL 由您的服务器 IP 地址以及您将 servlet 定义到应用程序服务器的方式确定。对于每个运行的 servlet,该 URL 都不同。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


编写和执行 Java 存储过程的其它技巧

  • 在存储过程中建立到 JDBC 驱动程序的连接时,请记住 Java 存储过程并不建立到该驱动程序的新连接。相反,它使用调用应用程序为了连接到数据源而已建立的现有连接。因此,在建立连接时,不要指定数据源的 URL,而使用 url jdbc:default:connection。
  • 对于 JDK 1.3.1,Java 存储过程的输出文件被发送到 Unix 系统服务中的 /tmp 目录。输出将不再被发送到 JAVAENV 数据集中由 WORK_DIR 指定的目录。
  • 当(为 Java 存储过程或使用 JDBC 来访问数据源的常规 Java 程序)在 z/OS 上运行 JDBC 时,请首先运行实用程序 db2genJDBC -pgmname= yourprogramname 以创建四个 JDBC DBRM。当该实用程序运行时,就创建了一个 .ser 文件和四个 DBRM。如果将 DSNJDBC 指定为 yourprogramname,那么四个创建的 DBRM 分别被称为 DSNJDBC1、DSNJDBC2、DSNJDBC3 和 DSNJDBC4。如果 yourprogramname 是别的名称,例如 JDBC20,那么四个 DBRM 将创建为:JDBC201、JDBC202、JDBC203 和 JDBC204。如果您选择将您的姓名用于 DBRM,那么请确保将下列内容添加到 JAVAENV 数据集:
    "DB2SQLJPROPERTIES=/u/prod_SP/db2sqljjdbc.properties"
    

    其中,/u/prod_SP 将被系统中带有您设置的 db2sqljjdbc.properties 文件所在的目录名所替代。这将会使 Java 存储过程指向您正在使用的正确的 db2sqljjdbc.properties 文件,因此将使用该文件中指定的 DBRM 而不是缺省 DBRM。
  • 为了方便地说明 Java 和 DB2 z/OS 版之间类型的等同情况,请参考 表 2。DB2 for z/OS V 7 中支持用 粗体显示的类型,但需要 CREATE PROCEDURE 语句来显式地指定 Java 方法说明。 表 2. DB2 到 Java 参数类型映射
    DB2 类型 Java 类型
    SMALLINT short,java.lang.Integer
    INTEGER | INT int,java.lang.Integer
    { DECIMAL | DEC } (N [,N] ) java.math.BigDecimal
    NUMERIC (N [,N]) java.math.BigDecimal
    FLOAT(N) (see REAL or DOUBLE)
    REAL float, java.lang.Float
    DOUBLE [PRECISION] double, java.lang.Double
    { CHARACTER | CHAR } (N) java.lang.String
    { CHARACTER VARYING | VARCHAR } (N) java.lang.String
    { CHARACTER | CHAR } (N) FOR BIT DATA byte[]
    DATE java.sql.Date
    TIME java.sql.Time
    TIMESTAMP java.sql.Timestamp
  • 如果在调用原始存储过程后对存储过程源代码做了更改,那么不仅存储过程需要进行重新编译、重新绑定等,而且存储过程运行的 WLM 地址空间也必须刷新。除此以外,必须使用下列 MVS 命令刷新 WLM 环境 DT12WLJI:
      v wlm,applenv=dt12wlji,refresh. 

blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


存储过程和 EJB 考虑事项

EJB [ 4] 是可移植的服务器端应用程序组件,这些组件运行于容器内的 EJB 服务器环境中。容器为组件提供应用程序环境,并且通过 EJB 服务器,为组件提供多种服务,例如事务、安全性、命名和目录、通信、数据访问、负载分配和持久性。这使得应用程序开发人员能够将精力集中于业务逻辑,而不是集中于组件基础设施(它是由 EJB 服务器和工具来提供的)。

有两类 EJB: 会话 bean实体 bean。会话 bean 仅存在于会话的生命期,它代表单个客户机执行的工作。因此,会话包含的信息在用户关闭服务器连接之后将会消失。一个示例是在线购物小推车的内容。实体 bean 是持久存储的,它存在的时间较长(一直到被显式地消除),并且它可以被多个客户机使用。它们含有持久存储的数据,这些数据可以在各种数据存储中跨多个会话保存。示例包括信用卡和计费信息。实体 bean 持久性由 bean 本身管理(bean 管理的持久性)或者在容器内管理(容器管理的持久性)。[ 5] 中详细给出了在 eServer zSeries 上的 WebSphere 环境下创建和部署 EJB 的循序渐进的指南。

会话和实体 bean 在中间层执行业务逻辑。二者都可以通过使用 JDBC 连接定制对数据的访问。通过使用容器管理的持久性,实体 bean 可以映射到在部署期间定义的 DB2 表。对于生命周期操作,会自动为具有容器管理的持久性的实体 bean 生成数据访问用代码。

许多 DB2 服务器含有可以被服务器应用程序和组件通过 EJB [ 9] 利用的存储过程。实际上,对于存储过程,需要在调用 EJB(EJB 接下来调用存储过程)和直接在 EJB 中编码业务逻辑之间进行权衡。这样做的一些好处包括在何处放置 EJB 服务器以及在性能方面具有灵活性。例如,如果直接在 EJB 中编码业务逻辑,并且 EJB 服务器在中间层上执行,那么每次更新都需要访问网络。这些更新需要对 DB2 锁定的互斥性访问,且网络延迟可能会导致锁定争用的增加,还会导致死锁和锁定超时。在存储过程中封装多个更新,通过使用于更新的网络流量最小化从而解决了网络争用问题。

使用 EJB 中现有的存储过程的另一优势在于:它通过最小化冗余代码、充分利用现有业务逻辑,从而提高了生产率。这样做通过利用现有的常用业务逻辑提高了 EJB 生产率。这也使得能够将旧应用程序转换成 EJB 编程模型。一种方法是将存储过程封装为无状态会话 bean 中的方法,如 图 2所示。IBM 提供了一个工具来帮助开发人员创建这种封装现有存储过程以供 Web 应用程序使用的 EJB。


图 2. 在无状态的会话 bean 中封装存储过程
在无状态的会话 bean 中封装存储过程

用于 Enterprise JavaBeans 的存储过程集成工具(Stored Procedure Integration Tool for Enterprise JavaBeans)是作为 VisualAge for Java v4.0,企业版的技术预览出现的。在 WebSphere-DB2 配置中,EJB 在 EJB 服务器的帮助下在中间层上执行,而存储过程在后端数据服务器上执行。这种存储过程的执行减少了中间层和数据库服务器之间的通信,当存储过程中含有几条 SQL 语句时,更是如此。同使用容器管理的实体 bean 比起来,消耗的资源可能也更少。

利用现有存储过程的 EJB 可以利用现有的(为许多应用程序提供常用服务的)业务逻辑。这可能导致不能优化 EJB 实现的特定任务。尽管有这一局限,通过 EJB 使用现有存储过程却有下列优点:减少了 EJB 服务器和 DBMS 之间的网络流量、提高了 EJB 生产率并且降低了软件维护成本。


blue_rule.gif
c.gif
c.gif
u_bold.gif回页首


结束语

IBM 电子商务应用程序框架(IBM Application Framework for e-Business)设计成使企业能够使用开放标准、多平台和多供应商来迅速构建、运行并管理成功的电子商务。WebSphere Application Server 和 DB2 提供了一个富有吸引力的集成基础结构,来使客户能够在市场上取得竞争优势。J2EE(包括将 EJB 用于组件软件开发)为开发这种基础结构提供了基础。

我们展示了在 z/OS 环境中开发和执行 Java 存储过程的循序渐进的指南。我们还描述了 EJB 是如何能够在这种环境中利用 Java 存储过程,以使用旧的和新开发的应用程序中的业务逻辑。这带来了如下好处:提高了性能和开发生产率、潜在地降低了资源消耗并且降低了软件维护成本。可以在 [ 3][ 4][ 9] 中找到有关这些问题的更多信息。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130341/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130341/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值