Java ApacheDerby作为Windows服务

Java ApacheDerby作为Windows服务,java,windows-services,derby,procrun,Java,Windows Services,Derby,Procrun,我需要将ApacheDerby服务器作为服务运行,以便Derby与安装它的机器一起启动 现在,根据我的研究,我尝试了三种解决方案来创建这样的服务,但没有一种是可行的或会产生错误的 使用Java服务包装器:这是不可行的,因为他们只提供30天的免费试用 使用Windows服务器管理器(SrvMgr.exe)创建服务,如下所述:。这似乎是可行的,因为我创建了一个显示在Windows注册表中的服务,可以通过“服务”面板启动/停止,并且有东西正在使用http://localhost:1527Derby服务

我需要将ApacheDerby服务器作为服务运行,以便Derby与安装它的机器一起启动

现在,根据我的研究,我尝试了三种解决方案来创建这样的服务,但没有一种是可行的或会产生错误的

  • 使用Java服务包装器:这是不可行的,因为他们只提供30天的免费试用

  • 使用Windows服务器管理器(SrvMgr.exe)创建服务,如下所述:。这似乎是可行的,因为我创建了一个显示在Windows注册表中的服务,可以通过“服务”面板启动/停止,并且有东西正在使用
    http://localhost:1527
    Derby服务器的默认地址。但是,如果我试图通过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 
    
    以下是服务的注册表项的图像:

  • 最后一种方法是使用apacheprocurn()。我完成了本教程()并成功地运行了示例服务。然而,当我试图修改tuorial中发布的脚本时,我(从日志文件)得到了以下错误:

    以下是我创建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%
    
    我假设这个错误是由于
    启动
    -和
    关闭配置
    没有正确配置,但我不知道它们应该是什么样子

  • 如果有人知道任何一种方法的解决方案2。或3。我将非常感激

    问候

    我按照布莱恩·彭德尔顿的建议编辑了我的Procrun脚本

    [edit2:]服务会给我一条新的错误消息:

    stderr.txt

        2014-07-23 16:41:14 Commons Daemon procrun stderr initialized
    
        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>]
    
    stdout.txt

        2014-07-23 16:41:14 Commons Daemon procrun stderr initialized
    
        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>]
    

    我认为PR_STARTMETHOD和PR_STOPMETHOD应该是“main”,因为您希望调用NetworkServerControl的main()方法

    我认为'start'和'shutdown'是需要传递给main()方法的参数


    因此,它们应该分别使用STARTPARAMS和StopperArms。

    我遇到了同样的问题,并尝试使用各种工具和包装器将Derby作为windows服务,其中包括Derby wiki()中描述的所有方法

    不管怎样,这些工具都不适用于AppHACKFAST提供的PROCENN工具,它在Tomcat中使用,以将此服务器作为Windows服务器。因此,请遵循以下步骤:

  • 获取procrun()的两个关键文件:
    • prunsrv.exe-将应用程序作为服务运行的服务应用程序
    • prunmgr.exe-用于监视和配置已安装服务的GUI管理器应用程序
  • 将这些文件复制到Derby/bin(假设您有一个名为Derby的文件夹,它是Derby_的主文件夹)
  • 要遵循procrun约定,请将这些文件重命名为derby.exe和derbyw.exe。如果你想使用不同的名字,你可以,但你应该调整附加的脚本
  • 要在windows上创建服务,必须执行下一个脚本。它被编写为在Derby文件夹的上层文件夹(..)上执行,并使用java 32位的可移植版本

    • 注意:我在不同的行上拆分了它,但它只能在一行中执行
    Derby\bin\Derby.exe//IS//DerbyService
    --DisplayName=“Derby服务”
    --Description=“这是一个Derby数据库服务器”
    --Install=“%cd%\Derby\bin\Derby.exe”--Startup=auto
    --JavaHome“%cd%\Java\u 32\u便携式”
    --Jvm=“%cd%\Java\u 32\u portable\bin\client\Jvm.dll
    --StartMode=Java--StopMode=Java
    --StartClass=org.apache.derby.drda.NetworkServerControl--startparms=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”
    ++JVMPoptions=“-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

  • 重要的。你应该修改粗体部分

    • 适当地设置JAVA_HOME变量和jvm.dll
    • 在用“;”分隔的++JVM选项中设置您自己的特定于Derby的参数。例如,将用户密码自动验证添加到:
      -Dderby.database.sqlAuthorization=true-Dderby.user.“用户名”=密码
  • 最后,您可以检查您的服务是否从

    净启动德比服务


  • 建议:您可以像我一样将所有内容放在一个bat文件中,在那里您可以定义以前的JAVA\u HOME或任何其他必要的变量。

    感谢您的回复。我试图将你的建议应用到我的解决方案中,但仍然收到一条错误消息(见上面更新的帖子)。您在这些文件中得到了什么: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.txtOk所以我查看了日志文件。错误代码4源于仍然安装了旧服务这一事实。在我卸载了以前的服务并安装了带有更新脚本的新服务之后,我收到了一条不同的错误消息。将更新POST procrun的文档似乎表明它是PR_StartRAM,而不是PR_StartRAM。你试过设置PR_启动图了吗?谢谢,现在开始工作了。我接受了你的解决方案。我犯了愚蠢的错误。