5

私の webapp は、websphere サーバーにデプロイされるより大きな EAR の一部です。サーバーは、同じ仮想サーバー上で多数の他のアプリをホストします。私の webapp には、servletContextListener->contextInitialized メソッドでいくつかの初期化/ヘルス チェックがあります。初期化/ヘルスチェックが失敗した場合、webapp を利用できないようにしたい。これを行うための現実的な方法は何ですか?contextInitialized 内から RuntimeException をスローするだけで十分ですか? EAR の残りの部分はまだ利用可能であると予想されますか? ありがとうございました。

4

2 に答える 2

7

RuntimeExceptionfromを投げることをお勧めしServletContextListener.contextInitializedます。

サーブレット 2.3 ではこれがあまり明確ではありませんでしたが、サーブレット 2.4 では次の詳細が追加されました。

一部の例外は、アプリケーション内の別のコンポーネントの呼び出しスタックでは発生しません。この例は、サーブレット コンテキストの初期化の通知中に未処理の例外をスローする ServletContextListener です。この場合、開発者は例外を処理する機会がありません。コンテナー は、アプリケーション エラーを示す HTTP ステータス コード 500 を使用して、Web アプリケーションへの後続のすべての要求に応答する場合があります。

サーブレットエンジンがアプリケーションへのアクセスを「無効にする可能性がある」と書かれているため、他のことをするサーバーを見つけるかもしれません。ただし、Tomcat と WebLogic はどちらもアプリケーションを無効にします。他に考えられる合理的な方法は、例外を無視することだけです。それを行うコンテナが非常に人気があるとは思えないので、WebSphere で自分でテストしたほうがよいでしょう。

于 2008-11-07T17:03:01.437 に答える
0

RuntimeException をスローすると、おそらくそのサーブレットのみが使用できなくなります。より安全な方法は、エラー ページに転送する Spring インターセプターのようなものを実装するか、チェックが失敗した場合に何かを実装することです。そうすれば、アプリの読み込みを妨げる必要はありませんが、実行時により適切に処理できます。

于 2008-11-07T15:34:24.270 に答える