0

私は Wicket を初めて使用し、クリーンアップ、DB の更新、回復などを実行するためのある種のメンテナンス管理ページを使用して、内部から Web アプリケーションを維持したいと考えています。データバインディングにHibernateなどを使用する予定なので、これらのアクションを実行できるすべての人にTomcatマネージャーのパスワードを付随させることなく、アプリケーション自体の内部から完全な再起動をトリガーしたいと思います。

私の知る限り、管理者パスワードなしで Java Web アプリケーションを実際に再起動する簡単な方法はないようです。ただし、管理パネルにそのような再起動機能を持つ多くの Java Web アプリケーションがあるため、特定のサーブレット コンテナーまたは一部の Web フレームワークで再起動をトリガーできるはずです。彼らはどういうわけかトリックをしなければなりませんか?(または、実際には最初から再起動するのではなく、クリーンな再起動なしで再初期化するだけでしょうか?)

Wicket または Tomcat がアプリケーションからのシャットダウンと再起動でトリガーできることについては何も見つかりませんでしたが、Wicket にはそれを実行できる内部メソッドがいくつかありますか? (パブリックにアクセスできますが、JavaDoc は内部使用のみであるため、アクセスしないことをお勧めします)

セキュリティの観点からは、アプリケーションが独自のコードからそのような再起動を要求できない理由がよくわかりません。

これを行うことができますか? はいの場合、アプリケーションを再起動するためにアプリケーションで何をする必要がありますか?

編集:私の質問をより正確にするために: ユーザーもアプリも、Tomcat マネージャー インターフェイスへのアクセスに使用できるパスワードを持ってはなりません。私は、サーブレットコンテナをトリガーしてその特定のアプリケーションを再起動するために、認証を必要とせずに呼び出すメソッドまたは設定するフラグを考えていました。私の考えでは、アプリケーションはサーブレット コンテナーで実行されているため、何らかの方法でシャットダウンして再起動する必要があります。一般的に Java アプリ サーバーでそれが不可能な場合は、基盤となるフレームワーク (この場合は Wicket) を呼び出して実行中のすべてのスレッドを終了し、可能な限りクリーンアップして再起動することにより、アプリケーション レベルでそれを行う方法があるかもしれません。フレームワークを使用するアプリケーション。アプリスタックの「ソフトリブート」のようなもの。

4

3 に答える 3

2

あなたのアプリが Wicket を使用していることは、あなたの質問とはほとんど関係ありません。これは、Wicket フレームワークを使用した Java Web アプリケーションです。このように表現すると、Tomcat コンテナーを使用して Web アプリを再起動する方法を探しています。別の Web アプリケーション コンテナー (jetty など) を選択した場合は、手順を変更する必要があります。

この URL をクリックして、アプリを開始したり、アプリhttp://localhost:8080/manager/start?path=/myapphttp://localhost:8080/manager/stop?path=/myapp停止したりできます。/myapp をアプリケーションのコンテキストに変更すると、開始/停止を制御できます。

その後、コード内でパスワードの問題を内部的に処理できます。

あなたの明確化に照らして、このTomcatのドキュメントを見て、 JMXを使用してください。ただし、JMX でさえパスワードで保護されています。Web アプリからコンテナー コントロールを取得するための標準はありません。

于 2009-12-04T23:18:43.657 に答える
1

私は、他の Web フレームワークがこれを本当にサポートしているかどうかを考えようとしています。ジムは解決策の適切なレベルを指し示していると思います。使用されているフレームワークに関係なく、Web コンテナーは、含まれている Web アプリの再起動を許可する必要があります。Tomcat では、マネージャー アプリケーションを使用できる必要があります。(私のグーグルによると) Jetty は JMX MBeans を介してこの機能を公開しているようです。そのため、再起動機能はコンテナー間で移植できない場合があります。

これを移植可能にするには、どのフレームワークでも、再起動に必要なものを分離する必要があると思います。休止状態の場合は、セッション ファクトリを再初期化します。スプリング構成の場合、これは確かにより邪魔になるかもしれませんが、Bean を交換または再構成することが最善の方法のようです。それが i18n またはマークアップ リソース ウィケットである場合、私はそれを既に支援できると信じています。

于 2009-12-21T04:29:01.250 に答える
0

また、JMX もご覧になることをお勧めします。JMX の認証をオフにすることができます。その場合、JMX ポートがインターネットから到達できないことを確認してください (ホストベースのファイアウォールでポートをフィルタリングするか、ローカル IP アドレスのみにバインドします)。JMX は、Java EE の世界でアプリケーションやコンテナーのリモート監視と制御を標準化することを目的としているため、多かれ少なかれ、探しているインフラストラクチャを提供します。

または、代わりに別の Web コンテナ (できれば組み込みのコンテナ) を使用して、Java コードからのコンテナの再起動も処理します。

于 2009-12-27T06:38:31.820 に答える