Вопрос

Я хочу запустить программу Java из RPG, работающую на Iseries V5r4.Удаленная программа представляет собой клиент веб-службы (выполняющий поиск почтового индекса), работающий в Websphere.

В идеале я бы хотел назвать это прямо из РПГ?это возможно?или мне нужно создать Java-программу для запуска на iSeries и использовать RMI или что-то еще для вызова удаленной Java-программы.

Мы не заинтересованы в прямом вызове внешнего веб-сервиса, поскольку это означает открытие пути из другого мира напрямую в iSeries.

Я не программист ролевых игр, я просто ищу что-то, что могло бы указать нашим ребятам в правильном направлении, или что-то, что мне нужно, чтобы сделать Java-программы более удобными для людей, занимающихся ролевыми играми.

Спасибо, Скотт

Это было полезно?

Решение

Поскольку программа работает на удаленном сервере, вызвать ее напрямую из RPG нельзя.Учитывая, что это веб-сервис, я бы создал программу Java для запуска на iSeries и вызывал эту программу Java из RPG.Сегодня RPG может напрямую взаимодействовать с Java.Вам нужно создать некоторые D-спецификации, чтобы объявить класс и создать прототип вызовов методов.В следующем примере предположим, что в пакете «инструменты» существует класс Java с именем ServiceCaller.Он имеет единственный метод 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);

Конечно, это слишком упрощенный пример, и потребности вашего приложения будут немного другими.Вам понадобится добавить код обработки ошибок на случай, если веб-служба не ответит.Вы также можете использовать геттеры и сеттеры в своем классе.Все зависит от потребностей вашего приложения и требований удаленного веб-сервиса.

Некоторые примечания о типах RPG и типах Java:

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

Если вы чувствуете себя особенно амбициозным, вы можете вызвать собственные HTTP-классы Java из вашей RPG.Но я обнаружил, что более простой путь — это специальная Java-программа, выполняющая роль промежуточного звена, написанная специально для взаимодействия с RPG.Хотя RPG и может общаться с Java, это не так красиво, как общение Java с Java.

Дополнительную информацию о вызове Java из RPG можно найти в руководстве программиста ILE RPG.Версию V5R4 можно найти здесь: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/books/sc092507.pdf

Другие советы

Поскольку это веб-сервис, другим решением было бы использовать HTTP API Скотта Клемента.Он доступен на его сайте по адресу http://www.scottklement.com/httpapi/.

Одним из больших преимуществ для меня является то, что это полностью RPG и не используется Java, что иногда может быть немного медленным.Я не совсем знаком с тем, как веб-сервисы работают на Java, но, похоже, вам не нужно формировать весь XML, и это делается за вас.С HTTP API вам придется сделать это самостоятельно.

Также у Скотта Клемента на сайте есть еще несколько полезных вещей.Еще один сайт с некоторыми полезными инструментами: http://www.think400.dk/downloads.htm.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top