我們已經瞭解Wrapper的目錄結構,下面可是正式利用Wrapper來包裝我們自己的應用,這裏假設Wrapper的安裝目錄爲:/usr/local/wrapper。
首先,創建項目應用
1.創建一個Java項目,並創建Java 類HelloWorld,並實現WrapperListener 接口,代碼如下:
- package com.helloworld.hello;
- import org.apache.log4j.Logger;
- public class HelloWorld {
- static Logger logger=Logger.getLogger(HelloWorld.class);
- public static void main(String[] args) {
- logger.info("Hello World!");
- }
- }
代碼很簡單只是作爲實例作用,這裏引用了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千行,其實不必擔心,我們只需要改文件頭部的配置信息即可,內容如下:
- # 應用名稱
- APP_NAME="hello"
- # 應用全名
- APP_LONG_NAME="helloWorld"
- # Wrapper主程序所在目錄及名稱
- WRAPPER_CMD="./wrapper"
- # 配置文件所在目錄及名稱
- 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"爲起始,添加完成之後如下:
- wrapper.java.classpath.1=../lib/hello.jar
- wrapper.java.classpath.2=../lib/wrapper.jar
- wrapper.java.classpath.3=../lib/log4j-1.2.17.jar
- wrapper.java.classpath.4=../lib/slf4j-api-1.7.5.jar
- 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所在目錄可以根據情況修改。
至此所有配置文件的基本修改已經完成,輸入以下命令來啓動我們的程序:
- root@TFS:/usr/local/wrapper/bin# ./hello console
- Running helloWorld...
- wrapper | --> Wrapper Started as Console
- wrapper | Java Service Wrapper Community Edition 64-bit 3.5.20
- wrapper | Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.
- wrapper | http://wrapper.tanukisoftware.com
- wrapper |
- wrapper | Launching a JVM...
- wrapper | JVM exited while loading the application.
- jvm 1 | <helloWorld>:<INFO>:2013-07-30 16:45:43 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
- wrapper | Launching a JVM...
- wrapper | JVM exited while loading the application.
- jvm 2 | <helloWorld>:<INFO>:2013-07-30 16:45:47 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
- wrapper | Launching a JVM...
- wrapper | JVM exited while loading the application.
- jvm 3 | <helloWorld>:<INFO>:2013-07-30 16:45:52 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
- wrapper | Launching a JVM...
- wrapper | JVM exited while loading the application.
- jvm 4 | <helloWorld>:<INFO>:2013-07-30 16:45:57 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
- wrapper | Launching a JVM...
- wrapper | JVM exited while loading the application.
- jvm 5 | <helloWorld>:<INFO>:2013-07-30 16:46:01 com.helloworld.hello.HelloWorld.main(HelloWorld.java:13): Hello World!
- wrapper | There were 5 failed launches in a row, each lasting less than 300 seconds. Giving up.
- wrapper | There may be a configuration problem: please check the logs.
- wrapper | <-- Wrapper Stopped
得到以上提示說明程序已經運行成功了,但是我們發現最終Wrapper 還是由於報錯而退出了,並且提示我們可能是配置問題,而且我們看到居然啓動了5個jvm 線程。
接下來修改上面的代碼,讓HelloWorld 類實現WrapperListener 接口,修改後的代碼如下:
- package com.helloworld.hello;
- import org.tanukisoftware.wrapper.WrapperListener;
- import org.tanukisoftware.wrapper.WrapperManager;
- public class HelloWorld implements WrapperListener {
- public static void main(String[] args) {
- // 打印參數
- for (String arg : args)
- System.out.println(arg);
- WrapperManager.start(new HelloWorld(), args);
- }
- @Override
- public void controlEvent(int event) {
- System.out.println("controlEvent(" + event + ")");
- if ((event == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT) && (WrapperManager.isLaunchedAsService() || WrapperManager.isIgnoreUserLogoffs())) {
- } else {
- WrapperManager.stop(0);
- }
- }
- @Override
- public Integer start(String[] args) {
- // 打印參數
- for (String arg : args)
- System.out.println(arg);
- System.out.println("hello world!");
- return null;
- }
- @Override
- public int stop(int exitCode) {
- System.out.println("stop(" + exitCode + ")");
- return exitCode;
- }
- }
然後再運行服務,顯示如下結果:
- root@TFS:/usr/local/wrapper/bin# ./hello console
- Running helloWorld...
- wrapper | --> Wrapper Started as Console
- wrapper | Java Service Wrapper Community Edition 64-bit 3.5.20
- wrapper | Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.
- wrapper | http://wrapper.tanukisoftware.com
- wrapper |
- wrapper | Launching a JVM...
- jvm 1 | g21121
- jvm 1 | http://286.iteye.com/
- jvm 1 | WrapperManager: Initializing...
- jvm 1 | g21121
- jvm 1 | http://286.iteye.com/
- jvm 1 | hello world!
- jvm 1 | stop(0)
- wrapper |
原文:http://286.iteye.com/blog/1916125