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

时间:2009-08-17 08:23:57

标签: java ibm-midrange rpg

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

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

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

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

谢谢, 斯科特

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

由于这是一个Web服务,另一个解决方案是使用Scott Klement的HTTP API。它可以在他的网站http://www.scottklement.com/httpapi/上找到。

对我来说最大的好处之一是它完全是RPG并且不使用任何有时候有点迟钝的Java。我并不熟悉Web服务如何在Java中工作,但似乎您不必构建所有XML并且已经为您完成了。使用HTTP API,您需要自己完成。

Scott Klement在他的网站上还有其他一些有用的东西。另一个带有一些简洁工具的网站是http://www.think400.dk/downloads.htm