Java Service Wrapper实践

当我们用JAVA来写后台服务器的时候,当服务器启动务必会出现一个黑框框。为了消除这个黑框框以及黑框框带来的一些不利条件,使用Java Service Wrapper将其制作成标准的WINDOWS NT服务是有必要的。

很久前就使用JAVA写了一个后台服务器,基于MINA框架的。并且一直部署运行于服务器中,当然有一个黑框框。

就正常运行而言,此种运行方式没有任何问题。

但是就这运行期间出现的一些问题:

1,服务器问题重启后,每次都要登录远程将服务器打开,即使我已经配置了开机自启动,但是由于黑框框是基于界面运用的,每次必须要完成系统启动画面之后该黑框框才能启动。所以即使设置成了开机自启动,每次服务器维护重启后,都需要登录一下远程出发系统加载。

2,有个黑框框总显低端些,并且容易不小心被关闭。

基于以上问题,加之以前就对Java Service Wrapper有所涉猎,但并未实践,所以利用一点时间来将服务器打包成WINDOWS NT服务。

关于Java Service Wrapper的介绍在此就不鳌诉了,http://wrapper.tanukisoftware.com/doc/english/download.jsp

本人最简单的了解,就是将JAVA应用打包成标准的WINDOS(当然也包含linux,在此仅以windows为例)服务。

Java Service Wrapper的Standard,Professional版本是需要license的,通俗的说是要收费,但是Community版本不需要,至于版本之间的区别我想对我影响不大,所以没有深究。就用Community版本吧。

下载下来后解压:

图一

我现有的项目很简单:

图二

server-server-1.0.0-release.jar是还行文件,libs/下是运行时所需要的依赖包,log是日志保存目录,conf是配置文件目录。

要使用Java Service Wrapper首先需要

(1)将图一中lib目录下的wrapper.dll、wrapper.jar拷贝到图二中的libs下。

(2)将图一中bin目录下的wrapper.exe文件拷贝到图二中当前目录下,该文件是将java应用打包成对应平台服务的可执行文件

(3) 将图一中src/conf目录下的wrapper.conf.in文件拷贝到图二中conf下并将.in后缀去掉,wrapper.conf.in文件是 一个标准的配置模板,用来配置Java Service Wrapper的,配置的内容就是项目目录结构、依赖关系、启动、jvm性能、日志、异常处理等等,稍微看一下应该就很容易理解。

(4)将图一中src/bin目 录下的AppCommand.bat.in文件拷贝到图二中的当前目录下并将.in后缀去掉。该文件是一个基于命令行的可执行文件,可以用于对相应的服务 执行start,install,uninstall,pause,resume,stop等命令。

完成以上操作后,我的项目目录如下:

具体目录结构:

+conf

-wrapper.conf

+libs

-wrapper.dll

-wrapper.jar

+log

AppCommand.bat

server-server-1.0.0-release.jar

wrapper.exe

接下来也是最重要的一步就是配置wrapper.conf文件

主要修改的有以下几点;

(1)类加载路径Java Classpath

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=server-server-1.0.0-release.jar
wrapper.java.classpath.2=libs/wrapper.jar

(2)动态库加载路径Java Library Path

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=libs

(3)需要运行的应用主类以及启动参数Application parameters

wrapper.app.parameter.1=cn.iever.wxh.yjserver.server.App     //我的应用主类
wrapper.app.parameter.2=-h120                                          //应用参数

(4)日志输出文件Log file to use for wrapper output logging.

# Log file to use for wrapper output logging.
wrapper.logfile=log/wrapper.log

(5)服务描述Wrapper Windows NT/2000/XP Service Properties

# Name of the service
wrapper.name=SmartHome

# Display name of the service
wrapper.displayname=Smart Home Service

# Description of the service
wrapper.description=Yong Jing Smart Home Service

wrapper的配置文件模板中给出的其他配置我基本采用默认,还没有深入去对各个配置信息进行研究,但是以上配置已经可以基本符合我的需求。

接下来需要修改一下AppCommand.bat文件

主要将文件内容中的set _WRAPPER_CONF="conf/%_WRAPPER_BASE%.conf"进行修改,即设定配置文件所以在路径。

 

到此一切准备工作以及配置也都完成了。

打开cmd执行AppCommand.bat install命令安装服务

同时相应的服务我们已经可以在系统服务中查询到

 

同理我们执行AppCommand.bat stop/remove/pause等命令也都可以对该服务进行操作,当然也可以执行在系统服务中对服务进行操作。

 

至此我就使用Java Service Wrapper将我的java应用打包成了后台服务。

当然实践是完成了,关于Java Service Wrapper还有其他一些东西需要继续深入研究 尤其是关于wrapper.conf文件的配置。

 

来源:http://my.oschina.net/yjwxh/blog/260835

发表评论