Мониторинг и обработка сообщений 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.