首页 文章

在IBM i(AS400)服务器上配置Classpath

提问于
浏览
1

我正在尝试设置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 . 似乎我需要做的就是将它附加到类路径字符串 . 但是,我很困惑,在'jar:'后面的字符串末尾有一个额外的句点(' . ')

是真的有必要还是错误插入?请告诉我如何将此jar文件添加到类路径中 .

在服务器上运行其他Java东西,我绝对不能搞砸任何东西 . 我知道即使是类路径的最轻微改变也可以炸掉东西 .

WRKENVVAR命令可以选择仅使用作业级变量 . 我可以在我的工作级别修改这个,而不会影响其他人的工作吗?

编辑01:根据下面的第一条评论,我理解在这种情况下,' . '在大多数示例中我都可以看到最后一个而不是字符串的开头 .

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

'/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:.'

1 回答

  • 0

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

    . 代表发出命令的当前目录,这意味着其中的每个* .jar文件都将添加到类路径中 .

    但是我在IFS中没有't see how that would be useful because each user will have a different current directory, and on IBM i that current directory will likely be the user'的主目录 . 由于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 .

    • 您可能想要选择其他JVM .

相关问题