0

IBM i シリーズ (AS/400) でジョブをブロックするステータス MSGW のメッセージに自動的に返信する方法を知っている人はいますか?

jt400/jtopen ライブラリを使用して、Java から AS/400 上のプログラムにアクセスしています。プログラムが何らかの理由で失敗しない限り、正常に動作する com.ibm.as400.access.ProgramCall クラスを使用しています。ほとんどすべてのプログラムと同様に、エラーが発生することもありますが、残念ながら、この場合、ステータス メッセージや例外は発生しません。代わりに、呼び出し元のスレッドがハングします。さらに悪いことに、ジョブに関する情報を取得するために AS/400 を呼び出すと (ほとんどの場合、期待どおりのことを行う jt400 の別のクラス)、キューが停止します。

もちろん、呼び出しが実行されているスレッドを監視し、しばらく待ってから単純に強制終了することもできますが、それは最後の手段です。システムからエラー メッセージが返されると便利です。

4

3 に答える 3

0

その API の反対側で発生したエラーを Java が直接トラップできるとは思えません。私が行ったことは、RPG (IBM i 側) プログラムを「ハード化」して、デフォルトのエラー ハンドラーにエラーを取得させるのではなく、エラーを監視するようにすることです。エラーが発生すると、RPG プログラムは正常に終了し、エラー コードまたはメッセージ全体を Java アプリケーションに返します。

于 2012-02-21T18:40:15.203 に答える
0

com.ibm.as400.access.CommandCall.run()メソッドで pcml を呼び出す前に、このコマンドを実行してみてください。

CHGJOB INQMSGRPY(*DFT)

すべてのメッセージのデフォルトの回答として「C」を設定します。

ただし、このメッセージを生成する問題を知るために、メッセージのログがあることを確認する必要があります

よろしく、

于 2011-03-16T23:04:54.643 に答える
0

ExecutorService のタイムアウト メカニズムを使用して、MSGW で ProgramCall を中断できることがわかりました。

後で AS400 オブジェクトを破棄する必要があり、サーバー ジョブはまだ MSGW にありますが、少なくとも Java 側で続行できます。

(ハングしているジョブを調査する場合は、別の AS400 オブジェクトを使用する必要があります。)

于 2012-06-26T10:56:27.953 に答える