2

Apache Derby サーバーをサービスとして実行する必要があるため、Derby はそれがインストールされているマシンと一緒に開始されます。

このようなサービスを作成するために、私の調査に基づいて 3 つのソリューションを試しましたが、どれも実行可能ではないか、エラーを生成しませんでした。

  1. Java Service Wrapper を使用してください。無料で 30 日間の試用版しか提供されていないため、これは実行できません。

  2. http://www.vogella.com/tutorials/ApacheDerby/article.htmlで説明されているように、Windows Server Manager (SrvMgr.exe) を使用してサービスを作成します。Windows レジストリに表示されるサービスを作成し、[サービス] パネルから開始/停止でき、何かがhttp://localhost:1527Derby サーバーのデフォルト アドレスを使用しているため、これは機能しているようです。ただし、Eclipse (luna) またはコンソール経由でデータベースに接続しようとすると、エラーが発生します。

    Could not connect to DerbyPersistenceDeploy.
    Error creating SQL Model Connection connection to DerbyPersistenceDeploy. 
    (Error: DERBY SQL error: ERRORCODE: 40000, SQLSTATE: XJ041, SQLERRMC: 
    Failed to create database 'persistence', see the next exception for
    details.::SQLSTATE: XBM0J)
    DERBY SQL error: ERRORCODE: 40000, SQLSTATE: XJ041, SQLERRMC: 
    Failed to create database 'persistence', see the next exception for
    details.::SQLSTATE: XBM0J
    Error creating JDBC Connection connection to DerbyPersistenceDeploy. 
    (Error: DERBY SQL error: ERRORCODE: 40000, SQLSTATE: XJ041, SQLERRMC: 
    Failed to create database 'persistence', see the next exception for 
    details.::SQLSTATE: XBM0J)
    DERBY SQL error: ERRORCODE: 40000, SQLSTATE: XJ041, SQLERRMC: 
    Failed to create database 'persistence', see the next exception for             
    details.::SQLSTATE: XBM0J 
    

    以下は、サービスのレジストリ エントリのイメージです。 レジストリ エントリ

  3. 私が関連付けた最後のアプローチは、Apache procrun ( http://commons.apache.org/proper/commons-daemon/procrun.html ) を使用することでした。私はこのチュートリアル ( http://joerglenhard.wordpress.com/2012/05/29/build-windows-service-from-Java-application-with-procrun/ ) に取り組み、サンプル サービスを実行することができました。 . ただし、チュートリアルに投稿されたスクリプトを適応させようとしたときに、(ログ ファイルから) 次のエラーが発生しました。

    [2014-07-21 16:52:20] [error] [ 3708] 
    Method 'static void start(String[])' not found in Class org/apache/derby/drda/NetworkServerControl
    [2014-07-21 16:52:20] [error] [ 6228] 
    Failed to start Java
    [2014-07-21 16:52:20] [error] [ 6228] 
    ServiceStart returned 4
    [2014-07-21 16:52:20] [error] [ 6228] 
    Commons Daemon procrun failed with exit value: 3 (Failed to run service as console application)
    

    以下は、Web サービスを作成するためのスクリプトです。

    set SERVICE_NAME=DerbyPersistenceService
    set PR_INSTALL=D:\Program-Files\commons-daemon-1.0.15-bin-windows\prunsrv.exe
    
    REM Service log configuration
    set PR_LOGPREFIX=%SERVICE_NAME%
    set PR_LOGPATH=D:\04_server\derby\DerbyServiceScript\logs
    set PR_STDOUTPUT=D:\04_server\derby\DerbyServiceScript\logs\stdout.txt
    set PR_STDERROR=D:\04_server\derby\DerbyServiceScript\logs\stderr.txt
    set PR_LOGLEVEL=Error
    
    REM Path to java installation
    set PR_JVM=C:\Program Files (x86)\Java\jdk1.7.0_65\jre\bin\client\jvm.dll
    set PR_CLASSPATH=%DERBY_HOME%/lib/derby.jar;
                     %DERBY_HOME%/lib/derbynet.jar;
                     %DERBY_HOME%/lib/derbyclient.jar;
                     %DERBY_HOME%/lib/derbytools.jar
    
    REM Startup configuration
    set PR_STARTUP=auto
    set PR_STARTMODE=jvm
    set PR_STARTCLASS=org.apache.derby.drda.NetworkServerControl
    set PR_STARTPARAM=start
    set PR_STARTMETHOD=main
    
    REM Shutdown configuration
    set PR_STOPMODE=jvm
    set PR_STOPCLASS=org.apache.derby.drda.NetworkServerControl
    set PR_STOPPARAM=shutdown
    set PR_STOPMETHOD=main
    
    REM JVM configuration
    set PR_JVMMS=256
    set PR_JVMMX=1024
    set PR_JVMSS=4000
    set PR_JVMOPTIONS=-Duser.language=US;-Duser.region=en
    REM Install service 
    D:\Program-Files\commons-daemon-1.0.15-bin-windows\prunsrv.exe //IS//%SERVICE_NAME%
    

    このエラーは、Startup-Shutdown-Configurationsが正しい方法で構成されていないという事実から生じていると思いますが、それらがどのように見えるべきかわかりません。

誰かがアプローチ2.または3の解決策を知っていれば、とても感謝しています。

ご挨拶

[edit1:] Bryan Pendleton が提案したように、Procrun スクリプトを編集しました。

[edit2:] サービスから新しいエラー メッセージが表示されます。 エラー メッセージ 2

stderr.txt:

    2014-07-23 16:41:14 Commons Daemon procrun stderr initialized

stdout.txt:

    2014-07-23 16:41:14 Commons Daemon procrun stdout initialized
    Wed Jul 23 16:41:14 CEST 2014 : No command given.
    Usage: NetworkServerControl <commands> 
    Commands:
    start [-h <host>] [-p <port number>] [-noSecurityManager] [-ssl <ssl mode>]
    shutdown [-h <host>][-p <port number>] [-ssl <ssl mode>] [-user <username>] [-password <password>]
    ping [-h <host>][-p <port number>] [-ssl <ssl mode>]
    sysinfo [-h <host>][-p <port number>] [-ssl <ssl mode>]
    runtimeinfo [-h <host>][-p <port number>] [-ssl <ssl mode>]
    logconnections { on|off } [-h <host>][-p <port number>] [-ssl <ssl mode>]
    maxthreads <max>[-h <host>][-p <port number>] [-ssl <ssl mode>]
    timeslice <milliseconds>[-h <host>][-p <port number>] [-ssl <ssl mode>]
    trace { on|off } [-s <session id>][-h <host>][-p <port number>] [-ssl <ssl mode>]
    tracedirectory <trace directory>[-h <host>][-p <port number>] [-ssl <ssl mode>]

DerbyPersistenceService.2014-07-23.log空です。

メソッドの引数に何か問題があると思います。

[edit3:]スクリプトを変更して、実用的なソリューションにしました。これを手伝ってくれた Bryan Pendleton に感謝します。

    set SERVICE_NAME=DerbyPersistenceService
    set PR_INSTALL=D:\Program-Files\commons-daemon-1.0.15-bin-windows\prunsrv.exe

    REM Service log configuration
    set PR_LOGPREFIX=%SERVICE_NAME%
    set PR_LOGPATH=D:\04_server\derby\DerbyServiceScript\logs
    set PR_STDOUTPUT=D:\04_server\derby\DerbyServiceScript\logs\stdout.txt
    set PR_STDERROR=D:\04_server\derby\DerbyServiceScript\logs\stderr.txt
    set PR_LOGLEVEL=Error

    REM Path to java installation
    set PR_JVM=C:\Program Files (x86)\Java\jdk1.7.0_65\jre\bin\client\jvm.dll
    set PR_CLASSPATH=%DERBY_HOME%/lib/derby.jar;
                     %DERBY_HOME%/lib/derbynet.jar;
                     %DERBY_HOME%/lib/derbyclient.jar;
                     %DERBY_HOME%/lib/derbytools.jar

    REM Startup configuration
    set PR_STARTUP=auto
    set PR_STARTMODE=jvm
    set PR_STARTCLASS=org.apache.derby.drda.NetworkServerControl
    set PR_STARTPARAMS=start
    set PR_STARTMETHOD=main

    REM Shutdown configuration
    set PR_STOPMODE=jvm
    set PR_STOPCLASS=org.apache.derby.drda.NetworkServerControl
    set PR_STOPPARAMS=shutdown
    set PR_STOPMETHOD=main

    REM JVM configuration
    set PR_JVMMS=256
    set PR_JVMMX=1024
    set PR_JVMSS=4000
    set PR_JVMOPTIONS=-Duser.language=US;-Duser.region=en
    REM Install service 
    D:\Program-Files\commons-daemon-1.0.15-bin-windows\prunsrv.exe //IS//%SERVICE_NAME%  
4

2 に答える 2

0

私は同じ問題を抱えていて、Derby wiki ( http://wiki.apache.org/db-derby/DerbyWindowsService )に示されているすべての方法の中で、Derby を Windows サービスとして取得するためにさまざまなツールとラッパーを試してみました。 .

とにかく、TomcatでこのサーバーをWindowsサーバーとして取得するために使用されるAppache Foundationが提供するprocrunツールを除いて、これらのツールはどれも機能しませんでした。したがって、次の手順に従ってください。

  1. procrun の 2 つの主要なファイルを取得します ( http://commons.apache.org/proper/commons-daemon/binaries.html )。
    • prunsrv.exe - アプリケーションをサービスとして実行するためのサービス アプリケーション。
    • prunmgr.exe - インストールされたサービスの監視と構成に使用される GUI マネージャー アプリケーション。
  2. これらのファイルを Derby/bin にコピーします (DERBY_HOME に Derby という名前のフォルダーがあると仮定します)。
  3. procrun 規則に従って、これらのファイルの名前を derby.exe および derbyw.exe に変更します。別の名前を使用したい場合は可能ですが、添付のスクリプトを変更する必要があります。
  4. Windows でサービスを作成するには、次のスクリプトを実行する必要があります。Derby フォルダーの上位フォルダー (..) で実行し、Java 32 ビットのポータブル バージョンを使用して実行するように記述されています。

    • 注:別の行に分割しましたが、1行で実行する必要があります

    Derby\bin\derby.exe //IS//DerbyService
    --DisplayName="Derby サービス"
    --Description="これは Derby データベース サーバーです"
    --Install="%cd%\Derby\bin\derby.exe" --Startup=auto
    --JavaHome " %cd%\Java_32_portable "
    --Jvm=" %cd%\Java_32_portable\bin\client\jvm.dll "
    --StartMode=Java --StopMode=Java
    --StartClass=org. apache.derby.drda.NetworkServerControl --StartParams=start
    --StopClass=org.apache.derby.drda.NetworkServerControl --StopParams=shutdown
    --Classpath="%cd%\Derby\lib\derby.jar;%cd% \Derby\lib\derbyrun.jar;%cd%\Derby\lib\derbynet.jar;%cd%\Derby\lib\derbytools.jar"
    ++JvmOptions="-Dderby.system.home=%cd%\Derby;-Dderby.install.url=%cd%\Derby\lib;-Dderby.authentication.provider=BUILTIN;-Dderby.storage.pageCacheSize=8000;-Dderby.storage .pageSize=20000;-Dderby.database.sqlAuthorization=false "

  5. 重要。太字の部分を適応させる必要があります。

    • JAVA_HOME 変数と jvm.dll を適切に設定します
    • 「;」で区切られた ++JvmOptions 内に独自の Derby 固有のパラメーターを設定します。たとえば、次のようにユーザーパスワード認証を追加します:
      -Dderby.database.sqlAuthorization=true;-Dderby.user."user-name"=password
  6. 最後に、サービスが正常に開始されることを確認できます

    net start DerbyService

アドバイス:私が持っているように、すべてをbatファイルにまとめて、JAVA_HOMEまたはその他の必要な変数を事前に定義できます。

于 2014-09-05T09:25:38.570 に答える