2011-02-14 2 views
0

IBM i 시리즈 (AS/400)에서 작업을 차단하는 MSGW 상태의 메시지에 자동 응답하는 방법을 아는 사람이 있습니까? 400)?Java에서 IBM i-series (AS/400)의 작업에 대한 MSGW 메시지 모니터 및

Java에서 AS/400의 프로그램에 액세스하기 위해 jt400/jtopen 라이브러리를 사용하고 있습니다. 프로그램이 어떤 이유로 실패하지 않는 한, 잘 작동하는 com.ibm.as400.access.ProgramCall 클래스를 사용하고 있습니다. 거의 모든 프로그램 에서처럼 실패가 때때로 발생하지만, 불행하게도이 경우 상태 메시지 나 예외가 발생하지 않습니다. 대신 호출 스레드가 중단됩니다. 더 나쁜 것은 대기열을 백업하는 Job (jt400의 다른 클래스 대부분은 사용자가 기대하는 다른 클래스)에 대한 정보를 얻기 위해 AS/400에 대한 모든 호출이 중단된다는 것입니다.

물론 호출이 실행되는 스레드를 모니터링하고 잠시 기다렸다가 죽일 수는 있지만 최후의 수단입니다. 시스템에서 오류 메시지를 되 찾는 것은 좋을 것입니다.

+0

그리고 당신은 사용자에게 MSGW의 작업에서 메시지를 보여주기 위해 무엇을 좋아하면? 자바 애플리케이션에서 어떻게 반응해야합니까? –

+0

문제는 메시지가 전달 된 메시지 대기열을 알 수 없다는 것입니다. –

답변

0

당신은 com.ibm.as400.access.CommandCall.run() 방법으로 PCML를 호출하기 전에이 명령 을 실행 시도 할 수 있습니다 : 그것은 모든 메시지에 대한 기본 응답으로 'C'를 설정

CHGJOB INQMSGRPY(*DFT) 

.

하지만 당신은이 메시지를

안부를 생성 문제를 알기 위해 메시지의 로그를 확인해야합니다,

+2

다른 메시지는 기본 응답이 다르므로 기술적으로는 기본 메시지 처리기에서 응답하는 방법을 알기 위해서는 특정 메시지를 살펴 봐야합니다. 그러나 일반적으로이 설정은 처리되지 않은 오류가 발생하면 프로그램을 종료합니다. –

0

나는 다른 측면에서 발생하는 자바 할 수있는 직접 트랩 오류를 믿지 않는다 그 API의 내가 한 것은 RPG (IBM i 측) 프로그램을 '강화'하여 오류를 모니터하여 기본 오류 처리기에서 오류를 처리하도록하는 것입니다. 오류가 발생하면 RPG 프로그램은 정상적으로 종료하고 오류 코드 또는 전체 메시지를 Java 응용 프로그램에 다시 전달합니다.

0

ExecutorService의 시간 초과 메커니즘을 사용하여 MSGW에서 ProgramCall을 인터럽트 할 수 있음을 발견했습니다.

나중에 AS400 오브젝트를 버려야하고 서버 작업은 여전히 ​​MSGW이지만 적어도 Javaside에서는 계속 진행할 수 있습니다.

(당신은 당신이 매달려 작업에 조사 할 경우 별도의 AS400 오브젝트를 사용 할 수 있습니다. 필요)