4

JSW Community Editionをダウンロードして、ディレクトリに
c:\servicetest
ラップ解除しました。ここに、bin、conf、lib、logのサブディレクトリなどがあります。これからは(root)になります。
(root)/lib/wrapper.jarを自分のide(netbeans)に参照し、非常に単純なサービスを作成しました(クラス名がMainであることを思い出してください)。

public class Main extends WrapperSimpleApp {

public Main(String[] args) {
    super(args);
}

@Override
public void run() {

    while(true) {
        Logger.getLogger(Main.class.getName()).log(Level.INFO, "I'm alive");

        try 
           { Thread.sleep(2000); } 
        catch (InterruptedException ex) 
           { return; }
    }
}

}

ご覧のとおり、基本的にはメッセージをログに記録するだけです。しかし、実際にはどちらも開始しません。

プロジェクト(MyProject.jar)をコンパイルし、jarを(root)ディレクトリにコピーして、(root)/config/wrapper.confを変更しました。

wrapper.java.classpath.3=../MyProject.jar

wrapper.java.mainclass=textappender.Main

次に、コマンドラインでサービスをインストールしました。

C:\servicetest\bin>wrapper -i ../conf/wrapper.conf

次に、services.mscコントロールパネルまたは経由でサービスを開始しました

C:\servicetest\bin>wrapper -t ../conf/wrapper.conf

logs/wrapper.logで次のようになります。

ERROR  | wrapper  | 2012/05/21 21:35:11 | JVM exited while loading the application.

更新1

Tanuki Softwareのアドバイスに従って、私は(root)/config/wrapper.confに設定しました(まあ、すでにコメントされていなかったのでコメントはありません):

wrapper.debug=TRUE

そして今、私はこれを手に入れます:

INFO   | jvm 1    | 2012/05/22 10:46:37 | WrapperManager Debug: WrapperManager.stop(1) called by thread: main
INFO   | jvm 1    | 2012/05/22 10:46:37 | WrapperManager Debug: Backend not connected, not sending packet STOP : 1
INFO   | jvm 1    | 2012/05/22 10:46:37 | WrapperManager Debug: Stopped checking for  control events.
DEBUG  | wrapper  | 2012/05/22 10:46:37 | Pause reading child process output to share cycles.
INFO   | jvm 1    | 2012/05/22 10:46:37 | WrapperManager Debug: Thread, main, handling the shutdown process.
INFO   | jvm 1    | 2012/05/22 10:46:37 | WrapperManager Debug: shutdownJVM(1) Thread: main
INFO   | jvm 1    | 2012/05/22 10:46:38 | WrapperManager Debug: wait for 0 shutdown locks to be released.
INFO   | jvm 1    | 2012/05/22 10:46:38 | WrapperManager Debug: Backend not connected, not sending packet STOPPED : 1
INFO   | jvm 1    | 2012/05/22 10:46:38 | WrapperManager Debug: calling System.exit(1)
DEBUG  | wrapper  | 2012/05/22 10:46:38 | JVM process exited with a code of 1, setting the wrapper exit code to 1.

しかし、私の非常に単純な実装を考えると、何がうまくいかないのか推測できません。

4

1 に答える 1

2

WrapperSimpleAppを拡張するのではなく、メインクラスはorg.tanukisoftware.wrapper.WrapperListenerインターフェースを実装する必要があります。

インターフェイスの実装に関する非常に詳細な説明は、次のWebサイトにあります 。http ://wrapper.tanukisoftware.com/doc/english/integrate-listener.html

confファイルの実装や構成のプロパティについて他にご不明な点がありましたらお知らせください。

時々役立つもう1つのアドバイスは、アプリケーションをサービスとしてすぐに実行するのではなく、コンソールで直接出力を確認できるため、最初にコンソールアプリケーションとして実行する方が、統合を行う方が簡単だと思います。すべてが機能しているように見えたら、先に進んでサービスとしてインストール/実行します。コンソールアプリケーションとして実行するには、次のように実行します。

C:\servicetest\bin>wrapper -c ../conf/wrapper.conf

設定することにより、ラッパーのデバッグ出力をオンにすることもできます

wrapper.debug=true

confファイルで。

コメントによる編集:

アプリケーションが実際に説明するほど単純な場合は、WrapperAPIパーツを使用せずに通常のJavaアプリケーションとしてアプリケーションを作成します。

WrapperSimpleAppを使用して、Wrapperへのコードレス統合でアプリケーションをすぐに実行できます。

confファイルに次のプロパティを設定するだけです。

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.app.parameter.1=textappender.Main
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../MyProject.jar

この構成により、ラッパーはアプリケーションをWindowsサービスとして実行できるようになります。

UPDATE2

コードが正確にどのように見えるかはわかりませんが、メインクラスでWrapperManager.stop()を呼び出しているようです...

最初のサンプルクラスに続いて、クラスを変更したので、Wrapper-APIを使用していません(単純なアプリケーションの場合は必要ありません)。

public class Main {    
public static void main(String[] args) {
    while(true) {
        Logger.getLogger(Main.class.getName()).log(Level.INFO, "I'm alive");
        try 
        { Thread.sleep(2000); } 
        catch (java.lang.InterruptedException ex) 
        { return; }
    }
}
}

jarをコンパイルして作成した後、confファイルに必要なプロパティは次のとおりです。

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.app.parameter.1=textappender.Main
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../MyProject.jar

乾杯、

于 2012-05-22T01:50:41.860 に答える