我正在寻找一种通过java以编程方式管理tomcat(在localhost上)的方法。 我想启动/停止tomcat并部署WAR。
感谢任何帮助。
答案 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
}
}