Java ApacheDerby作为Windows服务
我需要将ApacheDerby服务器作为服务运行,以便Derby与安装它的机器一起启动 现在,根据我的研究,我尝试了三种解决方案来创建这样的服务,但没有一种是可行的或会产生错误的Java ApacheDerby作为Windows服务,java,windows-services,derby,procrun,Java,Windows Services,Derby,Procrun,我需要将ApacheDerby服务器作为服务运行,以便Derby与安装它的机器一起启动 现在,根据我的研究,我尝试了三种解决方案来创建这样的服务,但没有一种是可行的或会产生错误的 使用Java服务包装器:这是不可行的,因为他们只提供30天的免费试用 使用Windows服务器管理器(SrvMgr.exe)创建服务,如下所述:。这似乎是可行的,因为我创建了一个显示在Windows注册表中的服务,可以通过“服务”面板启动/停止,并且有东西正在使用http://localhost:1527Derby服务
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
以下是服务的注册表项的图像:
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%
我假设这个错误是由于启动
-和关闭配置
没有正确配置,但我不知道它们应该是什么样子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服务器。因此,请遵循以下步骤:
- prunsrv.exe-将应用程序作为服务运行的服务应用程序
- prunmgr.exe-用于监视和配置已安装服务的GUI管理器应用程序
- 注意:我在不同的行上拆分了它,但它只能在一行中执行
--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_启动图了吗?谢谢,现在开始工作了。我接受了你的解决方案。我犯了愚蠢的错误。