27

デスクトップ Java プログラムをほとんどのプラットフォーム (Windows、Mac OS、Linux [特に Ubuntu]) でバックグラウンド (デーモン/サービス?) で実行するための最良の方法を探しています。

「最善の方法」によって、次のような方法を見つけたいと思っています。

  1. 最小限のプラットフォーム固有のコードが必要です。
  2. 一般のコンピュータ ユーザーができない/できないことをユーザーに要求しない
  3. リソースを独り占めしないでください。

私の要件が非現実的である可能性があることは理解していますが、この種の状況にはある種の「ベスト プラクティス」があることを願っています。

前進する方法は?

4

7 に答える 7

16

Apache Commonsデーモンコードを使用して、Javaアプリケーションをサービス(Windows)またはデーモン(Linux)として実行できます。

構造

デーモンは2つの部分で構成されています。1つはオペレーティングシステムへのインターフェイスを作成するCで記述され、もう1つはデーモンAPIを提供するJavaで記述されています。

プラットフォーム

Win32とUNIXライクなプラットフォームの両方がサポートされています。Win32プラットフォームの場合は、procrunを使用します。UNIXライクなプラットフォームの場合は、jsvcを使用します。

Javaコード

次のメソッドを実装するクラス(MyClass)を作成する必要があります。

* void load(String[] arguments): Here open the configuration files, create the trace file, create the ServerSockets, the Threads
* void start(): Start the Thread, accept incoming connections
* void stop(): Inform the Thread to live the run(), close the ServerSockets
* void destroy(): Destroy any object created in init()
于 2008-12-29T22:45:56.750 に答える
9

Java Service Wrapperを使用して、任意のJavaプログラムをサービス/デーモンに変換できます。複数のOSSプロジェクトで使用され、Nexus Mavenリポジトリマネージャーの一部として出荷されるため、すぐにサービスとしてインストールできます。これを使用するには、作成者は、構成ファイルを作成してから、単純なバッチファイルを実行して、Windowsでサービスを作成するか、Linuxでinitスクリプトを正しいランレベルにコピーする必要があります。

于 2008-11-28T20:28:01.887 に答える
7

SystemTrayクラスを使用 して、既定のプラットフォームで他のアプリと同じようにアプリをインストールできます。

Windows の場合、起動時に実行されるスケジュールされたタスクである可能性があります。Linux と OSX の場合はわかりませんが (crontab はやや技術的すぎることを除けば)、どちらも同じことを簡単に行う方法があると確信しています。

残念ながら (今日の時点で) Apple は 1.6 への移植を完了していません。

本物の悪魔ではなく、Google デスクトップのようなアプリです。

クォーツが良い選択肢だと聞いたことがあります。しかし、私はそれを使用したことがありません。

于 2008-11-28T19:54:19.007 に答える
1

無料のソリューションが必要ない場合は、Advanced Installer(www.advancedinstaller.com)を使用できます。これにより、JARからWin-ServiceやMacOSインストーラーを作成できます。

于 2011-08-13T11:37:45.220 に答える
0

Java デスクトップ統合コンポーネント プロジェクトである JDIC を調べてください。クロスプラットフォーム API を使用して、システム トレイ (または同等のもの) のようなデスクトップ統合をサポートします。

他の人は、エンタープライズ ジョブ スケジューラである Quartz に言及しています。スケジュールされているジョブによっては軽量になることもありますが、本質的にデスクトップ指向の機能はありません。それどころか、その機能の多くは、リレーショナル データベースのようなエンタープライズ サポートに依存しています。アプリケーションが主にタスクのスケジュールを設定している場合、サービスと対話するデスクトップ クライアントを使用してジョブを実行するヘッドレス Quartz サービスが妥当なアプローチです。

于 2008-11-28T20:04:54.647 に答える
0

prunsrv.exe および/または prunmgr.exe (procrun のコンポーネント) を見つけるのが難しい場合があります。これは apache サイトでは十分に文書化されていませんが、通常はアーカイブで見つけることができます (注意: procrun は tomcat5.exe であると言われています)。

Windows の場合、ここで見つけることができます: http://archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip (32 ビット バージョンと 64 ビット バージョンの両方が含まれています)

デーモン インターフェイスを実装したり、ダウンロードしたりする必要はまったくありません。prunsrv を使用して、任意のアプリを Windows サービスに変換できます。

そのアーカイブを参照して他のプラットフォームを探す

于 2011-08-15T10:04:12.570 に答える
0

Apache Directory Daemonプロジェクトは、クロス プラットフォームでこれを行うための最良の方法のように思えます (POSIX では JSVC 用の Java ラッパーを使用し、Windows では procrun を使用します)。

于 2010-12-31T13:28:12.903 に答える