26

問題:社内サーバーでサービスとして実行されるスタンドアロンのJavaアプリ(以降、「エージェント」と呼びます)があります。一部の中央サーバーのリモートエージェントとして機能します。エージェントがより多くの場所に展開されるにつれて、それらの管理はより複雑になります。具体的には、更新のプッシュはかなり手動のプロセスであるため面倒であり、エージェントが実行されている環境に関するログやその他の情報へのアクセスは問題があり、デバッグが困難になります。議論中のサーバーはヘッドレスで無人です。つまり、これは手動の介入なしに完全に自動化されたプロセスである必要があるため、JavaWebStartは実行可能なソリューションではありません

提案された解決策:エージェントの電話を定期的に(中央サーバーに)ホームにして、エージェントのステータスを提供し、更新を確認します。

私はこの問題に対する他の提案された解決策を受け入れていますが、この質問が焦点を当てている「ステータスと自己更新」のアイデアの実用的なプロトタイプをすでに持っています。

私が思いついたのは、実際にはエージェントのラッパーとして機能する別のプロジェクトです。ラッパーは、HTTPを介して中央サーバーを定期的に呼び出し、エージェントの更新バージョンを確認します。アップデートが見つかると、新しいバージョンをダウンロードし、実行中のエージェントをシャットダウンして、新しいエージェントを起動します。それが奇妙な解決策または回りくどい解決策のように思われる場合は、注目に値する他のいくつかの考慮事項/制約があります。

  1. ラッパーが新しいバージョンのエージェントを取得すると、新しいJAR依存関係が存在する可能性があります。これは、クラスパスが変更されることを意味します。つまり、ClassLoaderをいじって永続的な生成メモリリークのリスクを冒すのではなく、別のJavaプロセスを生成したいということです。手作業による介入が必要になります-まさに私が逃げようとしていることです。これが、プロトタイプのエージェントの更新を管理するための別個の「ラッパー」プロセスになってしまった理由です。
  2. エージェントが展開されている一部のサーバーはリソースが制限されているため、どのソリューションでもCPUとメモリの使用量を少なくする必要があります。そのため、新しいJVMを起動する必要がなく、別個のラッパープロセスを使用することに対するストロークであるソリューションが必要になります。
  3. エージェントはすでにWindowsサーバーとRHELサーバーの両方にデプロイされているため、ソリューションはクロスプラットフォームである必要がありますが、バッチスクリプトとbashスクリプトで適度な量のプロセスを複製して問題を解決することは問題ありません。

質問:前述のように、自己更新型のJavaアプリを作成する方法を知りたいです。より具体的には、これを支援するフレームワーク/ライブラリはありますか?この分野での経験を持つ誰かが私にいくつかの指針を与えることができますか?

4

5 に答える 5

4

アプリケーションが OSGi ベースの場合、OSGi にバンドルの更新を処理させることができます。OSGiコンテナー自体が「ラッパー」であり、その一部は更新されないという点で、提案するラッパーアプローチに似ています。ここにこれに関する議論があります

于 2012-04-20T23:09:31.370 に答える
4

別の解決策: install4j を使用 (および料金を支払う) します。自動更新機能についてはこちら

于 2012-04-20T23:12:25.990 に答える
3

ラッパー (メモリを節約) や Java Web Start (アプリケーションにさらに制限を追加) は必要ありません。アプリケーション内のスレッドで更新を定期的にチェックし (クラウドなどから)、利用可能な場合は更新をダウンロードし、これら 2 つの呼び出しをコード化します。応用:

  1. シェル スクリプト (.shまたは.cmd) を起動してアーティファクトを更新し、スクリプトで数秒一時停止した後にアプリケーションを起動します (アプリケーションの 2 つのインスタンスが同時に存在することを避けるため)。
  2. アプリケーションを終了します (最初のインスタンス)

スクリプトは、必要な成果物を上書きし、アプリケーションを再起動できます。

楽しい !

于 2015-06-18T02:18:12.877 に答える
2

Java Web Start を見てください。

1.5 から Java の一部になっているテクノロジです。たぶん1.4?また、Web ブラウザーを介してスタンドアロンの Java ベースのアプリを展開およびインストールできます。また、常に最新のアプリを実行できます。

http://www.oracle.com/technetwork/java/javase/overview-137531.html

http://en.wikipedia.org/wiki/JNLP#Java_Network_Launching_Protocol_.28JNLP.29

次の質問も参照してください: Java Swing アプリケーションに自己更新機能を追加する最良の方法は何ですか?

于 2012-04-20T03:52:24.387 に答える
0

現時点では、これを行うための組み込みの方法は Webstartだけのようです。

于 2012-04-20T03:51:34.037 に答える