将嵌入式 SQLJ 与 DB2 for z/OS 旧驱动程序配合使用

Java™ 中的结构化查询语言 (SQLJ) 是一组编程扩展,使程序员能够使用 Java 编程语言来嵌入提供结构化查询语言 (SQL) 数据库请求的语句。 您可以将 DB2® for z/OS® Legacy 驱动程序与数据访问应用程序配合使用。

有关此任务

注:
  1. 要将 SQLJ 与 WebSphere® Application Server for z/OS 和 DB2 for z/OS 旧驱动程序配合使用,请安装 DB2 APAR PQ76442。
  2. DB2 for z/OS Legacy Driver 不支持使用 SQLJ 生成的容器管理的持久性 (CMP) Bean。 使用使用 SQLJ 生成的 DB2 Universal 驱动程序 for CMPs。

以下是使用 SQLJ 开发应用程序所需的步骤,这些应用程序使用 DB2 for z/OS Legacy 驱动程序在 WebSphere Application Server for z/OS v6.0 上运行。

过程

  1. 根据您的需求 在 Rational® Application Developer ,必要时使用 SQLJ。 例如,如果您开发一个使用 BMP 的名为“Test”的 bean,那么编码后的文件为 TestBean.sqlj(而不是 TestBean.java)。
    1. 从 DB2 for z/OS 安装中,复制db2sqljclasses.zip文件到工作站上的目录,然后修改 EJB Java 归档 (JAR) 项目的 Java 构建路径以包含db2sqljclasses.zip中。
    2. 请按照以下步骤来转换 SQLJ 代码:
      1. 找到 SQLJ 文件,然后使用 ASCII 方式传输将其通过 FTP 传输到 z/OS 环境中的 HFS。
      2. 使用 sqlj 命令将 SQLJ 代码转换为 Java 代码。 生成了两个文件,一个具有.java扩展和另一个具有.ser扩展名。
        sqlj -compile=false SQLJ_FILE_NAME
      3. 使用 ASCII 方式传输.java文件和 BINARY 方式传输.ser文件以将这些文件移回到 SQLJ 文件所在的工作站上的目录。
      4. 刷新项目。
    3. 为应用程序生成部署代码。
    4. 导出 EAR 文件。
  2. 安装应用程序
    1. 使用 DB2 for zOS 本地 JDBC 提供程序 (RRS) 创建数据源。
      定义 JDBC 提供程序和数据源时,缺省值足以提供 SQLJ 支持。
    2. 将应用程序安装到 WebSphere Application Server中。

      使用您在步骤 1 中创建的数据源来解析资源引用。

  3. 定制序列化概要文件
    生成部署代码,序列化概要文件或具有.ser将创建特定于应用程序的扩展。 必须先在 z/OS 环境中定制这些概要文件,然后才能使用这些概要文件。
    1. 使用二进制传输将序列化概要文件传输到安装了应用程序的 z/OS 环境。
      或者,使用 Java jar 命令从已安装的 EAR 目录中的 EJB JAR 文件抽取序列化概要文件。
    2. 使用 db2profc 命令定制序列化概要文件。
      您可以从 DB2 文档中获取有关与此命令关联的各种选项的信息; 但是,以下是定制概要文件的最低要求:
      db2profc -pgmname=PROGRAM_NAME PROFILE_NAME
      • 其中:
        • PROGRAM_NAME必须是有效的 MVS PDS 成员名称,最多可包含 7 个字符。
        • PROFILE_NAME 是您要定制的序列化概要文件的名称。 您必须为每个概要文件运行一次 db2profc。
      • 概要文件定制程序在 PDS USERNAME.DBRMLIB.DATA 中创建四个 DBRM 数据集。 DBRM 成员名以您指定为 PROGRAM_NAME 的内容开头。
      • 确保您的 CLASSPATH 环境变量包含:
        • 序列化概要文件的位置
        • 在已安装的 EAR 目录中的 EJB JAR 文件
      • 分配 PDS 以包含创建的 DBRM。 将此 PDS 命名为 USERNAME.DBRMLIB.DATA,其中 USERNAME 是将实现 db2profc 命令的用户。
        以下字段是一个示例:
        Space units=TRACK
        Primary quantity=15
        Secondary quantity=5
        Directory blocks=10
        Record format=FB
        Record length=80
        Block size=27920
        Data set name type=PDS
    3. 将现有序列化概要文件(现已定制)放入到属于应用程序类路径的一部分的位置中,而且在 EJB JAR 文件中的序列化概要文件之前。

      DB2 概要文件定制程序的输出与输入文件同名。 将输出文件移到类路径中原有的序列化概要文件之前。 或者,您可以将已定制的概要文件移到 EJB JAR 文件中来替换原有的文件。 建议您替换原始文件。

      要点:如果您从序列化概要文件存在的目录运行 db2profc 命令,那么概要文件定制程序将覆盖序列化概要文件。 因为在概要文件定制程序运行后,仅需要定制的版本,所以这不是问题。

    4. 将 DBRM 绑定到包中。
      注: 必须先创建数据库表,然后才能绑定 DBRM。 如果未执行此操作,那么绑定作业将失败。

      db2profc 定制命令创建一系列必须绑定到包中的 DBRM。 为每个已定制的概要文件创建四个 DBRM。

      这些 DBRM:
      • 位于 USERNAME.DBRMLIB.DATA 中
      • 都有以您指定为 PROGRAM_NAME 的内容开头的名称
      • 都是从 1 到 4 编号

        例如,如果以 IBMUSER 身份登录并指定 -pgmname=TESTBMP,然后运行 db2profc 命令,那么会创建四个数据集(TESTBMP1、TESTBMP2、TESTBMP3 和 TESTBMP4)并将它们放入 PDS IBMUSER.DBRMLIB.DATA 中。

        这些数据集必须绑定至隔离级别为 UR、CS、RS 和 RR 的包中。 您必须为定制的每个序列化概要文件运行绑定。

    5. 在将所有 DBRM 绑定到包中之后,将这些包绑定到计划中。 随意命名该计划。

      要点:还必须在新计划的包列表 (PKLIST) 中包括这些 JDBC 包。 要包含的 JDBC 包的缺省名称为 DSNJDBC.DSNJDBC1, ... , DSNJDBC.DSNJDBC4. 如果您的安装未使用 JDBC 包的缺省名称,请与 DB2 管理员联系以确定需要包含的 JDBC 包的名称。

      以下是用于绑定新计划的样本作业。
      • 在以 IBMUSER 登录时,创建一个序列化概要文件。
      • 指定了 -pgmname=TESTBMP 以运行 db2profc。
      • 新的计划被命名为 SQLJPLAN。
      //BBOOLS  JOB (516B,1025),'IBMUSER',MSGCLASS=H,CLASS=A,PRTY=14,
      //         NOTIFY=&SYSUID,TIME=1440,USER=IBMUSER,PASSWORD=IBMUSER,
      //         MSGLEVEL=(1,1)
      //********************************************************************
      //BINDOLS  EXEC PGM=IKJEFT01,DYNAMNBR=20
      //DBRMLIB  DD  DSN=IBMUSER.DBRMLIB.DATA,DISP=SHR
      //*        DD  DSN=MVSDSOM.DB2710.SDSNDBRM,DISP=SHR
      //SYSTSPRT DD  SYSOUT=*
      //SYSPRINT DD  SYSOUT=*
      //SYSUDUMP DD  SYSOUT=*
      //SYSTSIN  DD  *
      
       DSN SYSTEM(DB2)
      
       BIND -
           PACKAGE(TESTBMP) -
           QUALIFIER(IBMUSER) -
           MEMBER(TESTBMP1) -
           VALIDATE(BIND) -
           ISOLATION(UR) -
           SQLERROR(NOPACKAGE) -
      
       BIND -
           PACKAGE(TESTBMP) -
           QUALIFIER(IBMUSER) -
           MEMBER(TESTBMP2) -
           VALIDATE(BIND) -
           ISOLATION(CS) -
           SQLERROR(NOPACKAGE) -
      
       BIND -
           PACKAGE(TESTBMP) -
           QUALIFIER(IBMUSER) -
           MEMBER(TESTBMP3) -
           VALIDATE(BIND) -
           ISOLATION(RS) -
           SQLERROR(NOPACKAGE) -
      
       BIND -
           PACKAGE(TESTBMP) -
           QUALIFIER(IBMUSER) -
           MEMBER(TESTBMP4) -
           VALIDATE(BIND) -
           ISOLATION(RR) -
           SQLERROR(NOPACKAGE) -
      
      
       BIND PLAN(SQLJPLAN)                 -
        QUALIFIER(IBMUSER)                 -
        PKLIST(TESTBMP.*                   -
               DSNJDBC.*                 ) -
        ACTION(REPLACE) RETAIN             -
        VALIDATE(BIND)
      
      END
      /*
      
    6. 对新计划授予相应权限。 使用 DB2的接口 (例如 SPUFI) 来授予权限。 发出此命令:
      GRANT EXECUTE ON PLAN PLANNAME TO APPSERVERID 
      其中:
      • PLANNAME 是绑定的计划的名称。
      • APPSERVERID 是 WebSphere Application Server 运行所使用的标识; 例如, CBSYMSR1。
  4. 配置数据源以使用新的计划
    1. 从 WebSphere Application Server for z/OS 管理控制台中,浏览至数据源并选择 "定制属性"。
    2. 选择定制属性 planName
    3. 使用计划绑定时命名的内容更新 planName 的值。
    4. enableSQLJ 设置为 true
  5. 停止并重新启动服务器。
  6. 运行应用程序。