ProgramCallDocument подключения к AS400 от Groovy Hangs
Этот вопрос конкретно относится к классу JT400 ProgramCallDocument
с его методом callProgram(String ProgramName)
Я попытался перехватить вызов в попытке / поймать - но это не вызывает исключения, отладчик переходит в callProgram
метод, и просто сидит там до бесконечности.
Небольшое количество конкретной информации об API доступно здесь:
Вот код, который я запускаю:
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
}