Java service wrapper可以将java程序像业务一样部署到Linux/Windows平台,Wrapper进程类似一个daemon,负责监听java程序的状态,

当java程序出现异常崩溃(如JVM崩溃)时,对java程序的业务进行重启,并记录日志等。

【配置方法】:
1、下载指定的程序包,注意OS平台,32bit/64bit,并区分standard与community版本,其中后者是免费的,但没有deadlock detection功能

2、JSW解压后有6个文件夹,分别是
    bin:可执行程序,包括一个demo,一个test,以及wrapper的核心程序
         demo用来模拟app在wrapper上遇到异常时的场景;test用来展示wrapper的功能集
    conf:配置文件,其中wrapper.conf异常重要,使用wrapper主要修改该文件
    doc:文档,忽略
    lib:libwrapper.so以及wrapper.jar是必须的两个文件,在windows下可能是wrapper.dll
    logs:日志文件的路径

    src: src/bin/ 路径下的 sh.script.in 是关键的脚本,上述bin中的wrapper可执行文件,需要通过该脚本调用才能运行
3、可以直接在JSW现成的目录结构下部署,但一般来说,每个项目都有自己的目录结构,因此需要根据实际情况,调整 wrapper.conf 以及
   sh.script.in 中跟路径相关的配置。
   一种比较简单的方式,是在项目工程中分别创建bin,conf,lib,logs 4个文件夹:
   bin:拷贝/bin/wrapper到此目录下
   conf:拷贝/conf/wrapper.conf到此目录下
   lib:拷贝libwrapper.so以及wrapper.jar到此目录下,并将用户程序的jar包也放在这里,例如customTest.jar
   logs:不需要做处理

4、如果上述各文件夹的相对路径没有改变,可不改变 sh.script.in 脚本
        # Application
        APP_NAME="@app.name@"
        APP_LONG_NAME="@app.long.name@"

        # Wrapper
        WRAPPER_CMD="./wrapper"
        WRAPPER_CONF="../conf/wrapper.conf"

5、重点在 wrapper.conf 配置文件
    5.1     wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main
        改为:wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
        使用 WrapperSimpleApp来集成用户程序,是JSW官网最推荐的方式,也比较简单,不需要额外的编码,只需要把用户程序的入口作为
        参数传给SimpleApp即可,wrapper通过SimpleApp调用用户进程。
        链接如下:
        http://wrapper.tanukisoftware.com/doc/english/integrate.html#method1

    5.2     添加所依赖的jar包,包括用户程序的jar包
            # Java Classpath (include wrapper.jar)  Add class path elements as
            #  needed starting from 1
            wrapper.java.classpath.1=../lib/wrappertest.jar
            wrapper.java.classpath.2=../lib/wrapper.jar

    5.3     添加库文件的搜索路径
            # Java Library Path (location of Wrapper.DLL or libwrapper.so)
            wrapper.java.library.path.1=../lib

    5.4     设置JVM的堆大小
            # Initial Java Heap Size (in MB)
            #wrapper.java.initmemory=3

            # Maximum Java Heap Size (in MB)
            #wrapper.java.maxmemory=64

    5.5     指定用户的程序入口
            # Application parameters.  Add parameters as needed starting from 1
            wrapper.app.parameter.1=com.test.ServerMain   【程序入口的类】
            wrapper.app.parameter.1=xxx

    5.6     指定是否打开wrapper的debug信息,默认是关闭的
            # Enables Debug output from the Wrapper.
            # wrapper.debug=TRUE

    5.6     指定logfile,一般保持默认即可
            # Log file to use for wrapper output logging.
            wrapper.logfile=../logs/wrapper.log

    5.7     设置日志文件的单个大小限制,以及个数限制
            # Maximum size that the log file will be allowed to grow to before
            #  the log is rolled. Size is specified in bytes.  The default value
            #  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
            #  'm' (mb) suffix.  For example: 10m = 10 megabytes.
            wrapper.logfile.maxsize=0

            # Maximum number of rolled log files which will be allowed before old
            #  files are deleted.  The default value of 0 implies no limit.
            wrapper.logfile.maxfiles=0

    对于community版本来说,其它都可以保持不变。

【使用】
1、启动
执行 ./sh.script.in start 启动程序
执行 ./sh.script.in stop 终止程序
其它的参数可以参考manual,如果打开了wrapper的debug信息,则wrapper的启动信息也会打到 ./conf/wrapper.conf中,可以用来定位
wrapper的启动错误,当用户程序可正常启动后,建议关闭wrapper的debug信息,避免干扰。

2、wrapper启动后会在command line界面显示用户进程的进程pid,kill -3 pid,向进程发一个SIGQUIT,可以触发JVM打出全部调用栈,在定位
    deadlock的时候比较好用。