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

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

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

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

3 ответа

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

CHGJOB INQMSGRPY(*DFT)

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

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

С Уважением,

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

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

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

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

Другие вопросы по тегам