设为首页 收藏本站
查看: 1369|回复: 0

[经验分享] 将TOMCAT设置成为NT服务

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-10 12:49:45 | 显示全部楼层 |阅读模式
  后台服务程序应用分析
  一、背景介绍:
后台服务程序加载,主要应用service.exe程序,将程序加载到WINNT的启动服务中。
启动服务加载形式,在TOMCAT和JRUN已经有应用,下面以TOMCAT为例子,简单介绍一下实现原理及过程:
  service.exe:原名是javaService.exe,现在为了说明需要,将其改名为:service.exe。
该想法模拟大多数JAVA应用程序在WINDOWS系统中创建开机启动服务。(当然其它语言编译的程序同样也可以加载,现以TOMCAT服务器为例来作说明,TOMCAT作为一个开源软件,方便借鉴其设计思想)
  1,copy service.exe到所要启动的JAVA应用程序目录中;
2,建立一个.bat文件,文件内容用格式如下:
service.exe -install "mediaService" C:\jdk1.3.0_02\jre\bin\classic\jvm.dll -Djava.class.path=C:\app\authsvr\media\auth.jar -Dcatalina.home=C:\app\authsvr\media\ -start C:\app\authsvr\media\auth.jar -params star -stop C:\app\authsvr\media\auth.jar -params stop -out C:\app\authsvr\media\stdout.log -err C:\app\authsvr\media\stderr.log
  C:\jdk1.3.0_02\bin\java.exe -jar -Duser.dir="C:\Program Files\Apache Tomcat 4.0" "C:\Program Files\Apache Tomcat 4.0\bin\bootstrap.jar" start
C:\jdk1.3.0_02\bin\java.exe -jar -Duser.dir="C:\Program Files\Apache Tomcat 4.0" "C:\Program Files\Apache Tomcat 4.0\bin\bootstrap.jar" stop
//后面的是TOMCAT的例子,tomcat.exe是类似于service.exe的程序,采用C编写一个共享小程序,在很多地方可以下载或者复制。
//改为tomcat.exe or service.exe只是为了使用的时候,更容易理解其功能。
//在命令提示符下,可以service.exe /? 可以查到其相应可用参数。
  @ tomcat.exe -install Tomcat
@ {JDK_HOME}\jre\bin\{hotspot|server|classic}\jvm.dll
@ -Djava.class.path={TOMCAT_HOME}\bin\bootstrap.jar;{TOMCAT_HOME}\bin\servlet.jar;{JDK_HOME}\lib\tools.jar
@ -Dcatalina.home={TOMCAT_HOME}
@ -start org.apache.catalina.startup.BootstrapService
@ -params start
@ -stop org.apache.catalina.startup.BootstrapService
@ -params stop
@ -out {TOMCAT_HOME}\logs\stdout.log
@ -err {TOMCAT_HOME}\logs\stderr.log
  3,参数说明:
To install a service:
        -install service_name jvm_library (jvm_option)*
        -start start_class [-method start_method] [-params (start_parameter)+]
        [-stop start_class [-method stop_method] [-params (stop_parameter)+]]
        [-out out_log_file] [-err err_log_file]
        [-current current_dir]
        [-path extra_path]
  
4,分析tomcat自动加载服务模式
  @ {JDK_HOME}\jre\bin\{hotspot|server|classic}\jvm.dll //jre,jvm
@ -Djava.class.path={TOMCAT_HOME}\bin\bootstrap.jar;{TOMCAT_HOME}\bin\servlet.jar;{JDK_HOME}\lib\tools.jar //*.jar
@ -Dcatalina.home={TOMCAT_HOME} //path
  start:
C:\jdk1.3.0_02\bin\java.exe -jar -Duser.dir="C:\Program Files\Apache Tomcat 4.0" "C:\Program Files\Apache Tomcat 4.0\bin\bootstrap.jar" start
相应加载语句为:
@ -start org.apache.catalina.startup.BootstrapService
@ -params start
  stop:
C:\jdk1.3.0_02\bin\java.exe -jar -Duser.dir="C:\Program Files\Apache Tomcat 4.0" "C:\Program Files\Apache Tomcat 4.0\bin\bootstrap.jar" stop
相应加载语句为:
  @ -stop org.apache.catalina.startup.BootstrapService
@ -params stop
下面是指定捕捉相应的标准事件和错误事件的输出到相应的记录文件当中:
@ -out {TOMCAT_HOME}\logs\stdout.log
@ -err {TOMCAT_HOME}\logs\stderr.log
  5,接下来的任务就是要将认证启动的线程,做成类似 org.apache.catalina.startup.BootstrapService.java 相应的能接受start or stop 相应参数的类,或者是提供等同功能的其它方法。
BootstrapService.java等相关文件于该文件一起附于压缩包内。
  
二、实现步骤:
1,tomcat启动实现,主要是应用Daemon接口,所以同样建立com.lulu.app.daemon.Daemon接口
  
package com.lulu.app.daemon;
  
// Referenced classes of package com.lulu.app.daemon:
//            DaemonContext
  public interface Daemon
{
  public abstract void init(DaemonContext daemoncontext)
        throws Exception;
  public abstract void start()
        throws Exception;
  public abstract void stop()
        throws Exception;
  public abstract void destroy();
}
  2,然后在启动程序BootstrapService.java中实现daemon接口(implements Daemon)
  以program应用为例,需要将pgmAutoUpdate.java进行改造,实现daemon接口,
  // -------------------------------------------------------- Service Methods
  
    /**
     * Load the App Service.
     */
    public void init(DaemonContext context) throws Exception
{
  String arguments[] = null;
  /* Read the arguments from the Daemon context */
        if (context!=null)
  {
            arguments = context.getArguments();
            if (arguments!=null)
   {
                for (int i = 0; i < arguments.length; i++)
    {
                    if (arguments.equals("-debug"))
     {
                        debug = 1;
                    }
                }
            }
        }
  if(!boolNoReadKey)
  {
   rk = new readKey();
   rk.start();
  }
  log("Create App APP server");
  }
  
    /**
     * Start the App Service.
     */
    public void start() throws Exception
{
  System.out.println("test start is ok:");
  //  for(int i=0;;i++)
  for(;;)
  {
   try
   {
    if (!stopFlag)
    {
//     System.out.println("test times:"+i);
     pgmUpdate = new PgmUpdate();
     pgmUpdate.start();
     pgmUpdate.join();
    }
    else
     System.exit(1);
   }
   catch(Exception ex)
   {
    System.out.println(ex.getMessage());
   }
  try
   {
    Thread.sleep(1000);
   }
   catch(InterruptedException ex)
   {
    System.out.println(ex.getMessage());
   }
  }
    }
  
    /**
     * Stop the App Service.
     */
    public void stop() throws Exception
{
  System.out.println("test stop is ok:");
  stopFlag = true;
    }
  
    /**
     * Destroy the App Service.
     */
    public void destroy()
{
        // FIXME
  }
  
3,将编译好的进行打包,
打包命令:
rem @echo off
  rem 产生jar文件
jar cvfm ../bin/service.jar MANIFEST.MF -C ../classes .
rem jar文件打包结束
  
其中MANIFEST.MF文件内容如下:
  Manifest-Version: 1.0
Created-By: sun jar
Main-Class: com.lulu.app.program.BootstrapService
Class-Path:
Specification-Title: APP Service
Specification-Version: 1.0
Created-By:
  4,运用service.exe,加载到NT的服务启动中。
  service.bat内容如下:
  service.exe -install appService C:\jdk1.3.1_03\jre\bin\hotspot\jvm.dll -Xmx512m -Xms128m -Djava.class.path=D:\app\Application\program\bin\program.jar;\lib\tools.jar  
-start com.lulu.app.program.BootstrapService -params start C:\jdk1.3.1_03
-stop com.lulu.app.program.BootstrapService -params stop
-out D:\biwm\app\Application\program\logs\stdout.log
-err D:\biwm\app\Application\program\logs\stderr.log
  参数格式及用法,参考前面背景介绍。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-96990-1-1.html 上篇帖子: eclipse tomcat lomboz的安装配置说明 下篇帖子: tomcat 默认站点的配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表