在 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
供您个人使用:
- 您需要设置
BNDDIR()
以引用您自己的绑定目录。
- 您需要调整类路径以包含您正在使用的 jar。这个假设POI和RPGMAIL。
- 您可能想要 select 一个不同的 JVM。
我正在尝试设置我们的 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
供您个人使用:
- 您需要设置
BNDDIR()
以引用您自己的绑定目录。 - 您需要调整类路径以包含您正在使用的 jar。这个假设POI和RPGMAIL。
- 您可能想要 select 一个不同的 JVM。