3

質問: HK2 が Jersey 2 で確実にシャットダウンする適切な方法はありますか? そうでない場合、これはバグと見なされますか?

@PreDestroyjersey-server 2.3.1 を使用して、マネージド シングルトンの HK2 メソッドと実装のdispose()メソッドFactory<T>が呼び出されていないことに気付きました。ちょっと調べてみると、サービス ロケーターでConfigHelper呼び出すライフサイクル リスナーが定義されていることがわかりますが、それ以上のことはありません。これは と の両方でpreDestroy()Jersey から呼び出されますが、サービス ロケータではシャットダウンに関してそれ以上何も行われません。 ServletContainershutdown()reload()

を調べましたがServletContainer、公開または保護された API を介して HK2 サービス ロケーターにアクセスする方法はないようです。

4

3 に答える 3

0

この問題は、jersey 2.7 ( https://java.net/jira/browse/JERSEY-2299 ) および jersey 2.11 ( https://java.net/jira/browse/JERSEY-2549 ) で解決されました。ジャージの依存関係を更新すると、問題が解決するはずです。

于 2014-10-01T23:28:12.170 に答える
0

私も同じ問題を抱えていました。私にとっての解決策は、serviceLocator.shutdown() を呼び出すことです (サービスがシャットダウンされたときに、このメソッドが自動的に呼び出されない理由がわかりません)。このメソッドを呼び出した後、すべての dispose() メソッドが呼び出されます。質問 serviceLocator.shutdown() を呼び出すのに適した場所はどこですか? サービスがイベントDESTROY_FINISHED、RELOAD_FINISHEDをリッスンできるように、ApplicationEventListenerを実装しています。サービスがこのイベントをキャッチすると、serviceLocator.shutdown() が呼び出されます。より良い解決策を見つけたら、私に知らせてください。

于 2013-11-18T18:25:17.093 に答える
0

Application インスタンスに ServiceLocator を挿入し (これがアプリの最上位の ServiceLocator であると仮定)、呼び出しをlocator.shutdown()行いましたMyApplication.preDestroy()(@PreDestroy でマークされ、ジャージーの ContainerLifecycleListener から呼び出されます)。私にとってはうまくいきました。ただし、これが推奨される方法であるかどうかはわかりません。

于 2013-11-21T20:53:58.360 に答える