如何通过Java管理Tomcat

时间:2012-04-06 16:42:38

标签: java tomcat

我正在寻找一种通过java以编程方式管理tomcat(在localhost上)的方法。 我想启动/停止tomcat并部署WAR。

感谢任何帮助。

6 个答案:

答案 0 :(得分:2)

您可以在应用中运行嵌入Tomcat。

答案 1 :(得分:1)

通过java启动/停止tomcat的方法是使用示例参数在bootstrap.jar(使用类Runtime)上调用execute:-Dcatalina.home = c:/ tomcat /

示例代码,以查看ant如何执行tomcat start stop:

http://ptrthomas.wordpress.com/2006/03/25/how-to-start-and-stop-tomcat-from-ant

示例代码,用于查看如何从java执行外部程序: http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/

答案 2 :(得分:1)

您可以使用java Runtime类来调用bat文件。确保运行java进程的用户有权启动和停止tomcat。

try{
Runtime.getRuntime().exec("c:/program files/tomcat/bin/startup.bat");
} catch(IOException e) {System.out.println("exception");}

答案 3 :(得分:1)

要以编程方式管理tomcat,您可能需要查看JMX和bulcat-in MBeans的Tomcat功能。

本质上,您可以编写自己的基于Java的JMX客户端通过RMI与MBean通信,或者您可以利用Manager App中的JMX Http Proxy并使用普通的旧http请求来编写和管理tomcat实例。

有关JMX和Tomcat 6的良好参考: http://www.datadisk.co.uk/html_docs/java_app/tomcat6/tomcat6_jmx.htm

Manager App和JMX Http Proxy的一个很好的参考: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#JMX_Set_command

您应该能够非常轻松地部署和取消部署WAR。

我认为现有的MBean不允许你关闭tomcat,但是自己实现一个并且调用System.exit()会很容易;

答案 4 :(得分:0)

您可以使用tomcat manager,或查看其来源,了解管理员如何处理部署操作。

答案 5 :(得分:0)

您可以重新启动单个Tomcat连接器,例如端口重启,例如运行应用程序的8843。需要这样做的一种情况是,您通过API获取签名证书,或者您正在修改信任库。

以下是我添加/删除证书后用于重启tomcat连接器的完整代码/方法。

    public void refreshTrustStore() throws Exception 
    {
        try 
        {   
            //following line need to be replaced based on where you get your port. It may be passed in as argument
            String httpsPort = configurationManager.getHttpsPort();
            String objectString = "*:type=Connector,port=" + httpsPort + ",*";

            final ObjectName objectNameQuery = new ObjectName(objectString); 

            for (final MBeanServer server : MBeanServerFactory.findMBeanServer(null))
            {
                if (server.queryNames(objectNameQuery, null).size() > 0)
                {
                    MBeanServer mbeanServer = server;
                    ObjectName objectName = (ObjectName) server.queryNames(objectNameQuery, null).toArray()[0];

                    mbeanServer.invoke(objectName, "stop", null, null);

                    // Polling sleep to reduce delay to safe minimum.
                    // Use currentTimeMillis() over nanoTime() to avoid issues
                    // with migrating threads across sleep() calls.
                    long start = System.currentTimeMillis();
                    // Maximum of 6 seconds, 3x time required on an idle system.
                    long max_duration = 6000L;
                    long duration = 0L;
                    do
                    {
                        try
                        {
                            Thread.sleep(100);
                        }
                        catch (InterruptedException e)
                        {
                            Thread.currentThread().interrupt();
                        } 

                        duration = (System.currentTimeMillis() - start);
                    } while (duration < max_duration &&
                    server.queryNames(objectNameQuery, null).size() > 0);

              // Use below to get more accurate metrics.
            String message = "TrustStoreManager TrustStore Stop: took " + duration + "milliseconds";
            logger.information(message);

            mbeanServer.invoke(objectName, "start", null, null);

            break;
        }
    }
} 
catch (Exception exception) 
{
    //Log and throw exception
    throw exception
}

}