この問題を解決するために IBM に送信する SIMPLE テスト ケースを作成しようとしています。
JUnit テスト ケースまたは呼び出しを行った小さなメイン アプリを作成し、MQ 呼び出しが返されないことを示すのは簡単だと思いました。Executor サービスを使用し、MQ 呼び出しを Callable でラップし、指定されたタイムアウト間隔で Future.get() を使用して Executor サービスに送信すると考えました。
確かに、呼び出しはタイムアウトしますが、アプリケーションは終了しません。Assert.fail() を使用した場合、またはタイムアウト例外がキャッチされた場合、タイムアウト例外のスタック トレースは出力されますが、発生しません。外部から、または System.exit() を呼び出すことによってのみ、プログラムを強制終了できます。どちらもしないほうがいいです。java.util.concurrent パッケージのフレームワーク内でスレッドを強制終了する方法はありますか?
この問題は解決策を提供しますが、注意事項があります
タスクで中断できないブロッキング呼び出しを行わない限り
しかし、それはまさに私がやっていることです。内部から割り込み不可能な I/O を呼び出すプログラムを強制終了する方法はありますか?