我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。
首先,创建项目应用
1.创建一个Java项目,并创建Java 类HelloWorld,并实现WrapperListener 接口,代码如下:
1. package
2.
3. import
4.
5. public class
6.
7. static Logger logger=Logger.getLogger(HelloWorld.class);
8.
9. public static void
10. "Hello World!");
11. }
12.
13. }
代码很简单只是作为实例作用,这里引用了log4j 是为了展示在项目有依赖类库的情况下如何使用Wrapper 进行包装。
2.导入相应log4j 的jar 包到classpath 或工程build path 下。
3.将工程导出为Jar 包形式:
(1)在工程名上右键 -->Export -->JAR file 导出为hello.jar。
注:选择可运行Jar 导出时会将程序所依赖的相关类包含在Jar 中一并导出,这样做的好出就是不再需要添加额外的依赖类库,直接将此Jar包发布即可,缺点也很明显依赖关系严重不利于升级维护。
(2)更多的情况是直接按普通jar 包导出,然后在classpath 中添加相关依赖类库,这样更加便于维护,我们将按此种方式举例,导出名为hello.jar。
其次,上传Wrapper相关文件
1.上传程序及依赖:
(1)上传hello.jar 与依赖类库至服务器wrapper 所在lib 目录.
(2)上传Wrapper lib 目录下的wrapper.jar和libwrapper.so 至服务器/usr/local/wrapper/lib 目录。
2.上传wrapper 主程序:
(1)上传Wrapper bin 目录下的wrapper 文件至服务器/usr/local/wrapper/bin目录。
(2)上传Wrapper src/bin 目录下的sh.script.in 文件至服务器/usr/local/wrapper/bin 目录,并修改文件名称为:hello,去掉".script.in"后缀。
3.上传Wrapper conf 目录下的wrapper.conf 文件至服务器/usr/local/wrapper/conf目录。
最后,修改相关配置文件内容
1.修改bin 目录下的hello 文件内容,利用vi 打开发现内容有将近2千行,其实不必担心,我们只需要改文件头部的配置信息即可,内容如下:
1. # 应用名称
2. APP_NAME="hello"
3. # 应用全名
4. APP_LONG_NAME="helloWorld"
5.
6. # Wrapper主程序所在目录及名称
7. WRAPPER_CMD="./wrapper"
8. # 配置文件所在目录及名称
9. WRAPPER_CONF="../conf/wrapper.conf"
2.修改conf 目录下的wrapper.conf 文件内容。
(1)找到"wrapper.java.command=java" 这行(43行),可以根据服务器配置修改为"wrapper.java.command=%JAVA_HOME%/bin/java"
(2)找到"wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main" 这行(56行),这是程序的入口即main函数所在类,修改成"com.helloworld.hello.HelloWorld"
(3)找到"wrapper.java.classpath.1=../lib/wrappertest.jar"这行(60,61行),这行表示依赖jar包的位置,作用类似于build path或classpath,我们可以按照顺序依次添加我们所依赖的jar包,需要注意的是序号必须以"1"为起始,添加完成之后如下:
1. wrapper.java.classpath.1=../lib/hello.jar
2. wrapper.java.classpath.2=../lib/wrapper.jar
3. wrapper.java.classpath.3=../lib/log4j-1.2.17.jar
4. wrapper.java.classpath.4=../lib/slf4j-api-1.7.5.jar
5. wrapper.java.classpath.5=../lib/slf4j-log4j12-1.7.5.jar
甚至你可以直接修改为:
- wrapper.java.classpath.1=../lib/*.jar
来加载lib目录下的所有jar包。
(4)找到"wrapper.java.library.path.1=../lib"这行(64行),这是lib所在目录可以根据情况修改。
至此所有配置文件的基本修改已经完成,输入以下命令来启动我们的程序:
- r
1. oot@TFS:/usr/local/wrapper/bin# ./hello console
2. Running helloWorld...
3. wrapper | --> Wrapper Started as Console
4. wrapper | Java Service Wrapper Community Edition 64-bit 3.5.20
5. wrapper | Copyright (C) 1999-2013
6. wrapper | http://wrapper.tanukisoftware.com
7. wrapper |
8. wrapper | Launching a JVM...
9. wrapper | JVM exited while loading the application.
10. jvm 1 | <helloWorld>:<INFO>:2013-07-30 16:45:43 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
11. wrapper | Launching a JVM...
12. wrapper | JVM exited while loading the application.
13. jvm 2 | <helloWorld>:<INFO>:2013-07-30 16:45:47 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
14. wrapper | Launching a JVM...
15. wrapper | JVM exited while loading the application.
16. jvm 3 | <helloWorld>:<INFO>:2013-07-30 16:45:52 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
17. wrapper | Launching a JVM...
18. wrapper | JVM exited while loading the application.
19. jvm 4 | <helloWorld>:<INFO>:2013-07-30 16:45:57 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
20. wrapper | Launching a JVM...
21. wrapper | JVM exited while loading the application.
22. jvm 5 | <helloWorld>:<INFO>:2013-07-30 16:46:01 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
23. wrapper | There were 5 failed launches in a row, each lasting less than 300
24. wrapper | There may be a configuration problem: please check the logs.
25. wrapper | <-- Wrapper Stopped
得到以上提示说明程序已经运行成功了,但是我们发现最终Wrapper 还是由于报错而退出了,并且提示我们可能是配置问题,而且我们看到居然启动了5个jvm 线程。
接下来修改上面的代码,让HelloWorld 类实现WrapperListener 接口,修改后的代码如下:
1. package
2.
3. import
4. import
5.
6. public class HelloWorld implements
7.
8. public static void
9. // 打印参数
10. for
11. System.out.println(arg);
12. new
13. }
14.
15. @Override
16. public void controlEvent(int
17. "controlEvent(" + event + ")");
18. if
19. else
20. 0);
21. }
22. }
23.
24. @Override
25. public
26. // 打印参数
27. for
28. System.out.println(arg);
29. "hello world!");
30. return null;
31. }
32.
33. @Override
34. public int stop(int
35. "stop(" + exitCode + ")");
36. return
37. }
38.
39. }
然后再运行服务,显示如下结果:
1. root@TFS:/usr/local/wrapper/bin# ./hello console
2. Running helloWorld...
3. wrapper | --> Wrapper Started as Console
4. wrapper | Java Service Wrapper Community Edition 64-bit 3.5.20
5. wrapper | Copyright (C) 1999-2013
6. wrapper | http://wrapper.tanukisoftware.com
7. wrapper |
8. wrapper | Launching a JVM...
9. jvm 1
10. jvm 1 | http://286.iteye.com/
11. jvm 1
12. jvm 1
13. jvm 1 | http://286.iteye.com/
14. jvm 1
15. jvm 1 | stop(0)
16. wrapper |