从RPG在iSeries上调用远程Java程序

sco*_*yab 1 java rpg ibm-midrange

我正在寻找从Iseries V5r4上运行的RPG调用Java程序.远程程序是在Websphere中运行的Web服务客户端(执行邮政编码查找).

理想情况下,我想直接从RPG中调用它?那可能吗?或者我是否必须创建一个在iSeries上运行的java程序,并使用RMI或其他东西来调用远程java程序.

我们并不热衷于直接调用extenral webservice,因为它意味着从其他世界直接到iSeries的开放路径.

我不是一个RPG程序员,只是想找点东西指出我们的人正确的方向或我需要的任何东西,以使java程序更适合RPG人员.

谢谢,斯科特

Tra*_*bst 9

由于程序在远程服务器上运行,因此无法直接从RPG调用它.鉴于它是一个Web服务,我将创建一个在iSeries上运行的Java程序,并从RPG中调用该Java程序.现在,RPG可以直接与Java连接.你必须创建一些D-specs来声明类并将方法调用原型化.在下面的示例中,假设在"工具"包中存在一个名为ServiceCaller的Java类.它有一个名为getServiceReply的方法,它接受三个字符字段并返回一个整数.

 *Define the Java class locally.                                       
DServiceCaller    S               O   CLASS(*JAVA:'tools.ServiceCaller')

 *Class constructor.  No parameters.                                   
DnewServiceCaller PR              O   EXTPROC(*JAVA:                   
D                                       'tools.ServiceCaller':          
D                                       *CONSTRUCTOR)                  
D                                     CLASS(*JAVA:'tools.ServiceCaller')

 *GetServiceReply.
 *public int getServiceReply(byte[] parm1, byte[] parm2, byte[] parm3)
DgetServiceReply  PR            10I 0 EXTPROC(*JAVA:
D                                       'tools.ServiceCaller':
D                                       'getServiceReply')
D Parm1                        400A   CONST
D Parm2                        400A   CONST
D Parm3                        400A   CONST

您的RPG计算规范将类似于此自由格式示例:

/free
  ServiceCaller = newServiceCaller();
  iReply = getServiceReply(ServiceCaller:'Parm1':'Parm2':'Parm3');
/end-free

在java代码中,在getServiceReply方法中,将这些字节数组转换为如下字符串:

sParm1 = new String(parm1);
sParm2 = new String(parm2);
sParm3 = new String(parm3);

当然,这是一个过于简单的示例,您的应用程序需求会略有不同.如果Web服务没有回复,您将需要添加错误处理代码.您可能还想在课堂上使用getter和setter.这完全取决于您的应用程序需求和远程Web服务的要求.

关于Java类型的RPG类型的一些注释:

RPG Type      Java Type
10I 0         int
 3I 0         byte
 5I 0         short
20I 0         long
  N           boolean
  A           byte[]

如果您感觉特别雄心勃勃,可以从RPG中调用本机Java HTTP类.但是我发现一个自定义Java程序作为一个中间人,专门用来与RPG交谈是一种更容易的方法.尽管RPG可以与Java交谈,但它并不像Java与Java交谈那样漂亮.

有关从RPG调用Java的更多信息,请参阅ILE RPG程序员指南.可在此处找到V5R4版本:http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/books/sc092507.pdf