ProgramCallDocument подключения к AS400 от Groovy Hangs

Этот вопрос конкретно относится к классу JT400 ProgramCallDocumentс его методом callProgram(String ProgramName)

Я попытался перехватить вызов в попытке / поймать - но это не вызывает исключения, отладчик переходит в callProgram метод, и просто сидит там до бесконечности.

Небольшое количество конкретной информации об API доступно здесь:

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.toolbox.doc/rzahhxpcmlusing.htm

Вот код, который я запускаю:

AS400 as400System = AS400Factory.getAS400System()
ProgramCallDocument programCallDocument = new ProgramCallDocument(as400System, "com.sample.xpcml.Sample.xpcml")
programCallDocument.setStringValue("sampleProgramName.value", sampleValue)

Boolean didProgramCallDocumentRunSuccessfullyOnTheAS400 = programCallDocument.callProgram("sampleProgramName")

Последняя строка этого фрагмента - та, которая просто сидит там. Я пропустил попытку / поймать для краткости.

Файл XPCML, который ProgramCallDocument Конструктор использует это просто проприетарный формат XML, который IBM использует для указания длин и типов параметров для вызова программы. Я могу вернуться и добавить его, если это будет полезно, но ProgramCallDocument Конструктор выполняет проверку на XML, и он не обнаружил никаких ошибок проверки. Я не знаком с JT400 или с тем, как он выполняет программные вызовы, поэтому любая помощь будет замечательной.

В качестве дальнейшего примечания, занимаясь еще одним делом по связанной теме сегодня, я также нашел этот пост SO:

Мониторинг и обработка сообщений MSGW в задании на IBM i-series (AS/400) из Java

Я думаю, что это актуально для этого вопроса, потому что речь идет о способах перехвата статуса MSGW на стороне Java/Groovy.

1 ответ

Решение

Весьма вероятно, что вызываемая программа перешла в состояние MSGW (ошибка).

Проверьте WRKACTJOB JOB(QZRCSRVS) чтобы найти задание вызова программы и увидеть статус, а также просмотреть журнал заданий.


Может быть проще вызвать нативную программу, используя класс CommandCall или как хранимую процедуру JDBC.

Вот пример использования CommandCall в Groovy:

sys = AS400Factory.AS400System
cmd = new CommandCall(sys)
if (!cmd.run "CALL MYLIB.MYPGM PARM('${sampleValue}')") {
    println cmd.messageList
}
Другие вопросы по тегам