首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache作为Windows服务

Apache作为Windows服务
EN

Stack Overflow用户
提问于 2014-07-21 14:20:09
回答 2查看 2.2K关注 0票数 2

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

现在,我在我的研究中尝试了三种解决方案-based --创建这样的服务,但它们都不是可行的,也不是生成错误的。

  1. 使用:这是不可行的,因为他们只提供30天的免费试用。
  2. 使用Windows (SrvMgr.exe)创建服务,如下所述:http://www.vogella.com/tutorials/ApacheDerby/article.html。这似乎有效,因为我创建了一个显示在Windows中的服务,可以通过服务面板启动/停止服务,并且使用的是http://localhost:1527 -- Derby服务器的默认地址。但是,如果我试图通过eclipse (露娜)或控制台连接到数据库,则会得到一个错误: 无法连接到DerbyPersistenceDeploy。创建到DerbyPersistenceDeploy的SQL连接时出错。(错误: DERBY : ERRORCODE: 40000,SQLSTATE: XJ041,SQLERRMC:未能创建数据库“持久性”,请参阅下一个异常以了解详细信息。::SQLSTATE: XBM0J) DERBY错误: ERRORCODE: 40000,SQLSTATE: XJ041,SQLERRMC:未能创建数据库‘持久性’,请参阅下一个异常以了解详细信息。::SQLSTATE: XBM0J ERRORCODE创建到DerbyPersistenceDeploy的连接连接。(错误: DERBY : ERRORCODE: 40000,SQLSTATE: XJ041,SQLERRMC:未能创建数据库“持久性”,请参阅下一个异常以了解详细信息。::SQLSTATE: XBM0J) DERBY错误: ERRORCODE: 40000,SQLSTATE: XJ041,SQLERRMC:未能创建数据库‘持久性’,详细信息请参见下一个异常::SQLSTATE: XBM0J。 以下是服务的注册表条目的图像:

  1. 最后一种方法是使用Apache (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 3708方法‘静态无效启动(String[])’在Class org/apache/derby/drda/NetworkServerControl 2014-07-21 16:52:206228未能启动Java2014-07-21 16:52:206228 ServiceStart返回4 2014-07-21 16:52:20 6228共享守护进程失败,退出值为3(未能作为控制台应用程序运行服务) 下面是创建webservice的修改脚本: 设置PR_INSTALL=D:\Program-Files\commons-daemon-1.0.15-bin-windows\prunsrv.exe REM服务日志配置集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路径到java安装集PR_JVM=C:\Program文件(x86)\Java\jdk1.7.0_65\jre\bin\client\jvm.dll集PR_CLASSPATH=%derby.jar%/lib/derby.jar;%DERBY_HOME%/lib/derbynet.jar;%DERBY_HOME%/lib/derbyclient.jar;%DERBY_HOME%/lib/derbytools.jar REM启动配置集、PR_STARTUP=auto集、PR_STARTMODE=jvm集、PR_STARTPARAM=start集、PR_STARTPARAM=start集、PR_STARTMETHOD=main REM关机配置集、PR_STOPMODE=jvm集、PR_STOPMODE=jvm集、PR_STOPPARAM=shutdown集、PR_STOPMETHOD=main REM JVM配置集、PR_JVMMS=256组、PR_JVMMX=1024集、PR_JVMSS=4000集、PR_JVMOPTIONS=-Duser.language=-Duser.language=;D:\Program-Files\commons-daemon-1.0.15-bin-windows\prunsrv.exe //IS//% -Duser.region=en _-Duser.region=en_-Duser.region=en安装服务 我认为这个错误是由于StartupShutdown-Configurations没有按照正确的方式配置,但是我不知道它们应该是什么样子。

如果有人知道方法2或3的解决方案,我将非常感激。

问候

edit1:我按照的建议编辑了我的Procrun脚本。

社论2:服务给了我一条新的错误消息:

stderr.txt

代码语言:javascript
复制
    2014-07-23 16:41:14 Commons Daemon procrun stderr initialized

stdout.txt

代码语言:javascript
复制
    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是空的。

我认为方法论证有些地方不对。

编辑3:修改了脚本,所以它是一个可行的解决方案。非常感谢布莱恩·彭德尔顿帮了我这个忙。

代码语言:javascript
复制
    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%  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-22 21:38:49

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

我认为“开始”和“关闭”是需要传递给main()方法的参数

因此,他们应该分别进入STARTPARAMS和STOPPARAMS。

票数 2
EN

Stack Overflow用户

发布于 2014-09-05 09:25:38

我也遇到了同样的问题,尝试使用各种各样的工具和包装器将Derby作为一个windows服务,其中包括Derby (http://wiki.apache.org/db-derby/DerbyWindowsService)中描述的所有方法。

无论如何,除了Appache基金会提供的procrun工具之外,所有这些工具都不适合我。Appache foundation是在tomcat中使用的,用于将此服务器作为windows服务器。因此,请遵循接下来的步骤:

  1. 获取procrun (http://commons.apache.org/proper/commons-daemon/binaries.html)的两个关键文件:
    • prunsrv.exe -用于将应用程序作为服务运行的服务应用程序。
    • prunmgr.exe -用于监视和配置已安装服务的GUI管理器应用程序。

  1. 在Derby/bin复制这些文件(假设您有一个名为Derby的文件夹,即DERBY_HOME)。
  2. 若要遵循procrun约定,请将这些文件重命名为derby.exe和derbyw.exe。如果您想使用不同的名称,您可以,但您应该调整附加的脚本。
  3. 要在windows上创建服务,必须执行下一个脚本。它是写在上层文件夹(.)上执行的通过使用可移植版本的java 32位。

代码语言:javascript
复制
- **NOTE:** I've split it on different lines, but it has to be executed in only one line

Derby\bin\derby.exe //IS//DerbyService

-DisplayName=“Derby Service”

-Description=“这是Derby数据库服务器”

-安装=“%cd%\Derby\bin\derby.exe”-启动=自动

-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=停工

--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

  1. 很重要。你应该用粗体的部分。

代码语言:javascript
复制
- Set your JAVA\_HOME variable and your jvm.dll appropriately
- Set your own Derby specific parameters within ++JvmOptions separated by ';'. For example, add user-pasword autentication with:

-Dderby.database.sqlAuthorization=true;-Dderby.user."user-name"=password

  1. 最后,您可以检查您的服务从 net start DerbyService

建议:,您可以像我一样将所有的toghether放在bat文件中,在这里您可以定义以前的JAVA_HOME或任何其他必要的变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24867468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档