在 IBM i (AS400) 服务器上配置类路径

Configuring Classpath on IBM i (AS400) server

我正在尝试设置我们的 IBM i 服务器以连接到 SQL 服务器。必要的 .JAR 驱动程序文件已下载并上传到服务器。我们一直在关注这些 instructions .

现在我们正在尝试设置 classpath 环境变量。目前看起来如下:

'/QIBM/ProdData/OS400/jt400/lib/jt400Native.jar:/QIBM/ProdData/OS400/jt400/lib/jt400Native11x.jar:/QIBM/ProdData/OS400/jt400/MRI2924/jt400Mri.jar:.'

jar 文件位于 /java/jdbc/jtds-1.3.1.jar 位置。看来我需要做的就是将其附加到 classpath 字符串。但是,我感到困惑的是 'jar:'

之后的字符串末尾有一个额外的句点('.')

是真的需要还是误插?请告诉我如何将这个 jar 文件添加到 class 路径。

服务器上还有其他java东西运行,我绝对不能搞砸任何东西。我知道即使对 class 路径进行最细微的更改也会造成破坏。

WRKENVVAR 命令有一个选项可以仅使用作业级变量。我能否在我的工作级别修改它而不影响其他人所做的事情?

编辑 01:根据下面的第一条评论,我了解到在这种情况下,'.'是在最后而不是字符串的开头指定的,正如我在大多数示例中看到的那样。

那么我可以修改class路径如下吗?

'/QIBM/ProdData/OS400/jt400/lib/jt400Native.jar:/QIBM/ProdData/OS400/jt400/lib/jt400Native11x.jar:/QIBM/ProdData/OS400/jt400/MRI2924/jt400Mri.jar:/java/jdbc/jtds-1.3.1.jar:.'

正如鲍里斯在评论中所说:

The . stands for the current directory where from the command is issued which means every *.jar file in it will be added to the classpath.

但我看不出这有什么用,因为每个用户都有不同的当前目录,而在 IBM i 上,当前目录可能是用户在 IFS 中的主目录。由于 RPG 程序不 运行 来自 IFS,因此这根本不可能改变。因此,您可以安全地从类路径中删除 .

要记住的另一件事是,一旦启动 JVM,就无法更改类路径。由于每个作业最多可以有一个 JVM,我的做法是设置类路径并在每个需要它的作业开始时启动 JVM。我使用专门为此目的创建的 CL 程序来做到这一点。

这是一个示例 SETUPJVM 程序,您可以使用它来设置和启动 JVM:

         PGM
         DCLPRCOPT  DFTACTGRP(*NO) ACTGRP(*NEW) BNDDIR(MYBNDDIR) +
                    USRPRF(*OWNER)
         DCL        VAR(&POINTER) TYPE(*PTR)

         ADDENVVAR  ENVVAR(CLASSPATH) +
                      VALUE('+
                        /java/poi-3.14/poi-3.14-mx.jar:+
                        /java/poi-3.14/poi-ooxml-3.14-mx.jar:+
                        /java/poi-3.14/ooxml-schemas-1.3.jar:+
                        /java/poi-3.14/lib/commons-codec-1.10.jar:+
                        /java/poi-3.14/lib/commons-logging-1.2.jar:+
                        /java/poi-3.14/lib/log4j-1.2.17.jar:+
                        /java/poi-3.14/ooxml-lib/xmlbeans-2.6.0.jar:+
                        /java/poix/poi-extend.jar:+
                        /java/javamail/javax.mail.jar:+
                        /java/rpgmail/rpgmail.jar:+
                        /java/prod/lib/mxSqlSvrJdbc.jar:+
                        /java/prod/lib/sqljdbc.jar:+
                        /java/prod/classes/cribMaster+
                      ') REPLACE(*YES)
         ADDENVVAR  ENVVAR(QIBM_RPG_JAVA_PROPERTIES) +
                      VALUE('+
                        -Djava.awt.headless=true;+
                        -Djava.net.preferIPv4Stack=true;+
                      ') REPLACE(*YES)

         ADDENVVAR  ENVVAR(QIBM_USE_DESCRIPTOR_STDIO) VALUE('Y') REPLACE(*YES)
         ADDENVVAR  ENVVAR(JAVA_HOME) +
                      VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk80/32bit'+
                      ) REPLACE(*YES)
         ADDENVVAR  ENVVAR(QIBM_RPG_JAVA_EXCP_TRACE) VALUE('Y') REPLACE(*YES)

         CALLPRC    PRC(START_JVM) RTNVAL(&POINTER)
OUT:     ENDPGM

这是一个 CLLE,调用了 Scott Kelment 的 HSSFR4 服务程序 here 中的过程 (START_JVM)。请注意,Scotts服务程序中的程序并没有导出,您只需修改源码即可导出程序。

自定义 SETUPJVM 供您个人使用:

  1. 您需要设置 BNDDIR() 以引用您自己的绑定目录。
  2. 您需要调整类路径以包含您正在使用的 jar。这个假设POI和RPGMAIL。
  3. 您可能想要 select 一个不同的 JVM。