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

Кто-нибудь знает, как можно автоматически отвечать на сообщения со статусом MSGW, которые блокируют работу в IBM i-series (AS / 400)?

Я использую библиотеку jt400 / jtopen для доступа к программе на AS / 400 из Java. Я использую класс com.ibm.as400.access.ProgramCall, который работает нормально, если по какой-то причине программа не работает. Как и почти в любой программе, иногда случаются сбои, но, к сожалению, в этом случае это не приводит к сообщению о состоянии или исключению. Вместо этого вызывающий поток просто зависает. Что еще хуже, любой вызов AS / 400 для получения информации о задании (другой класс в jt400, который в основном выполняет то, что вы ожидаете), поддерживающем очередь, также будет зависать.

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

Ответы [ 3 ]

0 голосов
/ 21 февраля 2012

Я не верю, что Java может напрямую перехватывать ошибки, возникающие на другой стороне этого API.Что я сделал, так это «укрепил» программу RPG (на стороне IBM i), чтобы она отслеживала ошибки, а не позволяла обработчику ошибок по умолчанию их получать.При возникновении ошибки программа RPG корректно завершает работу и передает обратно код ошибки или даже все сообщение обратно в приложение Java.

0 голосов
/ 26 июня 2012

Я обнаружил, что вы можете использовать механизм тайм-аута ExecutorService для прерывания ProgramCall в MSGW.

После этого вы должны отказаться от объекта AS400, и задание сервера все еще находится в MSGW, но по крайней мере вы можете продолжить работу на Javaside.

(Вам нужно использовать отдельный объект AS400, если вы хотите исследовать висячую работу.)

0 голосов
/ 17 марта 2011

Вы можете попробовать выполнить эту команду перед тем, как вызовет ваш pcml с помощью com.ibm.as400.access.CommandCall.run () метод:

CHGJOB INQMSGRPY(*DFT)

Он устанавливает 'C' как ответ по умолчанию для всех сообщений.

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

С уважением,

...