分享

使用Java Service Wrapper将Java程序发布成Windows Servi...

 孙中熙——路 2010-12-06
 基础知识

使用Java Service Wrapper将Java程序发布成Windows Service

Java Service Wrapper是一个可以将Java程序发布成Windows服务的工具,功能类似于JDK自带的Java Service不过更强大,而且支持Windows Server 2008等更多的操作系统。

主要参考资料:

http://www./woxingwosu/archive/2007/11/28/163308.html

http://topic.csdn.net/t/20060717/22/4886513.html

 

1.   准备工具

首先下载Java Service WrapperWindows版本,地址:http:///projects/wrapper/files/

目前sourceforge发布的最新版本是3.3.0,而官网http://wrapper.上社区版的最新版本是3.4.0

 

2.   准备代码

要使用Java Service Wrapper,自己原有的程序必须进行一次改造或者添加一个包装类。这里使用一个最简单的HelloWorld类作为示例。

package com.yjw;

 

import javax.swing.JFrame;

import javax.swing.JLabel;

 

import org.tanukisoftware.wrapper.WrapperListener;

import org.tanukisoftware.wrapper.WrapperManager;

 

// 实现WrapperListener接口

public class HelloWorld implements   WrapperListener{

    private static void createAndShowGUI() {

       JFrame.setDefaultLookAndFeelDecorated(true);

 

       JFrame frame = new JFrame("HelloWorldSwing");

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

       JLabel label = new JLabel("Hello World");

       frame.getContentPane().add(label);

 

       frame.setSize(150, 100);

       frame.setVisible(true);

    }

 

    public static void main(String[] args) {

       javax.swing.SwingUtilities.invokeLater(new Runnable() {

           public void run() {

              createAndShowGUI();

           }

       });

//这里,启动HelloWold

       WrapperManager.start(   new   HelloWorld(),   args   );  

    }

//需要一个start方法

    public Integer start(String[] args) {

       System.out.println("start()");

 

       try {

           System.out.println("HelloWorld!");

       } catch (Exception e) {

       }

       return null;

    }

//需要一个stop方法

    public int stop(int exitCode) {

       System.out.println("stop(" + exitCode + ")");

       return exitCode;

    }

//需要一个controlEvent方法

    public void controlEvent(int event) {

       System.out.println("controlEvent(" + event + ")");

    }

 

}

 

 

这里,直接把入口类进行了代码改造,用户也可以单独写一个包装类,把上面带注释的四个地方的代码提取出来,对自己原来的入口类进行包装。

 

注意:如果没有对入口类进行java wrapper service需要的代码改造,则在做成服务后,表现为JVM试图不停地启动服务,查看wrapper.log,会发现类似如下的报错:

  INFO       |   wrapper     |   2010/04/16   21:24:58   |   Waiting   to   start...   
  INFO       |   wrapper     |   2010/04/16   21:25:03   |   Waiting   to   start...   
  INFO       |   wrapper     |   2010/04/16   21:25:08   |   Waiting   to   start...   
  ERROR     |   wrapper     |   2010/04/16   21:25:29   |   Startup   failed:   Timed   out   waiting   for   a   signal   from   the   JVM.   
  ------------------------------------------------------------------------   
  ADVICE   |   wrapper     |   2010/04/16   21:25:29   |     
  ERROR     |   wrapper     |   2010/04/16   21:25:29   |   JVM   did   not   exit   on   request,   terminated   
  FATAL     |   wrapper     |   2010/04/16   21:25:29   |   There   were   5   failed   launches   in   a   row,   each   lasting   less   than   300   seconds.     Giving   up.   
  FATAL     |   wrapper     |   2010/04/16   21:25:29   |       There   may   be   a   configuration   problem:   please   check   the   logs.   
  STATUS   |   wrapper     |   2010/04/16   21:25:29   |   <--   Wrapper   Stopped

 

HelloWorld.java打成HelloWorld.jar

 

3.   实现服务

1)           准备工作区

准备一个工作文件夹,例如test,在test下新建confloglib三个文件夹

 

2)           将下载下来的java wrapper service解压缩

a) Java Service Wrapper包中bin下的wrapper.exe拷贝至test

b) Java Service Wrapper包中src/bin下的App.bat.in(测试运行),InstallApp-NT.bat.in(安装windows服务),UninstallApp-NT.bat.in(卸载windows服务)拷贝至test下,并且将后缀.in去掉

c) 修改App.batInstallApp-NT.batUninstallApp-NT.bat中的set _WRAPPER_CONF="%_REALPATH%conf\wrapper.conf"

d) conf文件夹下的wrapper.conf拷贝至test/conf

e) Java Service Wrapper包中lib下的Wrapper.DLLwrapper.jar拷贝至test/lib

 

3)           准备可用jar

HelloWorld.jar此时还不能直接使用,需要进行改造

a) HelloWorld.jar解压缩,提取META-INF/MANIFEST.MF文件

b) 打开MANIFEST.MF,在Class-Path中追加wrapper.jar wrapper.dll

c) HelloWorld.jar和改造过的MANIFEST.MF一起拷贝到%JAVA_HOME%/bin

d) 打开cmd窗口,将路径切换至%JAVA_HOME%/bin

e) 输入命令jar umf MANIFEST.MF HelloWorld.jar,此时HelloWorld.jar中的MANIFEST.MF已被更新为当前的MANIFEST.MF

f)   将更新后的HelloWorld.jar拷贝至test/lib

 

4)           配置wrapper.conf

打开test/conf/wrapper.conf

 

#程序的入口

wrapper.java.mainclass=com.yjw.HelloWorld

 

#程序jar,包括wrapper.jar

wrapper.java.classpath.1=lib/HelloWorld.jar

wrapper.java.classpath.2=lib/wrapper.jar

 

#程序的文件夹,这里为lib

wrapper.java.library.path.1=lib

 

#注意:有的教程注释为程序的入口,虽然能够正常运行,但是这是概念性错误!

#这个参数指传给主程序的参数入口,比如笔者有个程序,传值0表示为英文版,1为中文版,参数就在这里配置。如果有多个参数,请自行配置

#为wrapper.app.parameter.n=XXX

wrapper.app.parameter.1=1

 

#日志文件生成的位置

wrapper.logfile=log/wrapper.log

 

#windows服务所需的标题,名称,显示名和描述
wrapper.console.title=HelloWorld
wrapper.ntservice.name= HelloWorld
wrapper.ntservice.displayname= HelloWorld 
wrapper.ntservice.description= HelloWorld

 

5)           运行App.bat,如果没有错误出现,说明配置正常,就可以运行InstallApp-NT.bat将你的程序做成Windows服务了。所有信息都可以在log/wrapper.log日志文件里找到

 

6)           如果要打开调试信息,在test/conf/wrapper.conf中将wrapper.debug=TRUE前面的#号去掉即可打开调试功能

引用通告地址: http://tmsoft./trackback.php?tbID=929&extra=620ae8

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多