Java ProgramCall.run挂起

时间:2013-05-23 07:34:19

标签: java rpg jtopen

忙于尝试Call RPG function from Java并从this获得JamesA示例。但现在我遇到了麻烦,这是我的代码:

AS400 system = new AS400("MachineName");
ProgramCall program = new ProgramCall(system);    
    try
    {
        // Initialise the name of the program to run.
        String programName = "/QSYS.LIB/LIBNAME.LIB/FUNNAME.PGM";
        // Set up the 3 parameters.
        ProgramParameter[] parameterList = new ProgramParameter[2];
        // First parameter is to input a name.
        AS400Text OperationsItemId = new AS400Text(20);
        parameterList[0] = new ProgramParameter(OperationsItemId.toBytes("TestID"));
        AS400Text CaseMarkingValue = new AS400Text(20);
        parameterList[1] = new ProgramParameter(CaseMarkingValue.toBytes("TestData"));

        // Set the program name and parameter list.         
        program.setProgram(programName, parameterList);
        // Run the program.
        if (program.run() != true)
        {
            // Report failure.
            System.out.println("Program failed!");
            // Show the messages.
            AS400Message[] messagelist = program.getMessageList();
            for (int i = 0; i < messagelist.length; ++i)
            {
                // Show each message.
                System.out.println(messagelist[i]);
            }
        }
        // Else no error, get output data.
        else
        {
            AS400Text text = new AS400Text(50);
            System.out.println(text.toObject(parameterList[1].getOutputData()));
            System.out.println(text.toObject(parameterList[2].getOutputData()));
        }
    }
    catch (Exception e)
    {
        //System.out.println("Program " + program.getProgram() + " issued an exception!");
        e.printStackTrace();
    }
    // Done with the system.
    system.disconnectAllServices();

应用程序在此行if (program.run() != true)处挂起,我等待大约10分钟,然后我终止该应用程序。

知道我做错了吗?

修改
以下是作业日志中的消息:

  

客户要求 - 运行程序QSYS / QWCRTVCA。
  客户请求 - 运行程序LIBNAME / FUNNAME   库中的文件P6CASEL2 *未找到LIBL或缺少内联数据文件。   在OPEN期间出现错误消息CPF4101   无法解析对象YOBPSSR。类型和子类型X'0201'权限

FUNNAME通过名为P6CASEL2的视图在表P6CASEPF中插入一行。 P6CASEL2在一个不同的库中让我们说LIBNAME2。是否可以设置JobDescription?

3 个答案:

答案 0 :(得分:2)

你确定FUNNAME.PGM正在终止而不是挂着MSGW吗?检查QSYSOPR是否有任何消息。

<小时/> Class ProgramCall

  

注意:当程序在主机服务器作业中运行时,库列表将是用户配置文件中作业说明中指定的初始库列表。

答案 1 :(得分:1)

所以我看到我的问题是我的库列表没有设置,并且出于某种原因,我们正在使用的用户没有作业描述。所以为了解决这个问题,我在调用program.run()

之前添加了以下代码
CommandCall command = new CommandCall(system);
command.run("ADDLIBLE LIB(LIBNAME)");
command.run("ADDLIBLE LIB(LIBNAME2)");

这只是将此LIBNAME和LIBNAME2添加到用户的库列表中。

答案 2 :(得分:1)

哦,是的,问题是库列表未设置...看看Midrange.com上的这个讨论,有不同的解决方法... http://archive.midrange.com/java400-l/200909/msg00032.html

... DEPE