マルチスレッドのScalaアプリケーションがあり、オブジェクトに対してshutdown()メソッドを呼び出すシャットダウンフックがあります。残念ながら、これは信頼できないようです。多くの場合、SIGINTの処理に失敗し、無名関数でNoClassDefFoundErrorをスローします。
このシャットダウンハンドラーをより堅牢にするにはどうすればよいですか?
マルチスレッドのScalaアプリケーションがあり、オブジェクトに対してshutdown()メソッドを呼び出すシャットダウンフックがあります。残念ながら、これは信頼できないようです。多くの場合、SIGINTの処理に失敗し、無名関数でNoClassDefFoundErrorをスローします。
このシャットダウンハンドラーをより堅牢にするにはどうすればよいですか?
1つの提案:shutdown()
フックを直接登録するのではなく、ShutdownManager
オブジェクトを作成してshutdown()
フックを登録させます。アプリケーションオブジェクトは自分自身をに追加しShutdownManager
、トレイトまたは関数オブジェクトを使用して、アプリケーションオブジェクトのシャットダウンメソッドを呼び出すことができます。
フックに必要なすべてのクラスを次のいずれかでプリロードします。
Class.forName( "YourObject")またはClass clasz = YourObject.class