Tomcat 5.5 startup shutdown jmx问题
我想从java启动tomcat5.5,代码如下:
Runtime.getRuntime().exec(new String[] { "D:/Program Files/Apache Software Foundation/Tomcat 5.5/bin/startup.bat" }, null, new File("D:/Program Files/Apache Software Foundation/Tomcat 5.5"));
老是启动不了,后来发现要这样:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pid.getInputStream()), 1024); String line = null; int i = 0; while (bufferedReader != null && (line = bufferedReader.readLine()) != null) { System.out.println(line); }
就是要把输出读出来才行。这样导致这个调用线程还不能马上关掉,关掉了那么Runtime.getRuntime().exec开启的子线程也会关掉导致调用取消。
我使用命令行启动tomcat,再在java里面调用Runtime.getRuntime().exec来执行shutdown.bat脚本,发现关闭不了。然后使用命令行关闭,仍然关闭不了,报错:
java.net.BindException: Address already in use: JVM_Bind
平时都是关闭控制台就关闭了,这次竟然出现这种问题。网上一搜,原来是启用了jmx,而tomcat5.5脚本里面又有bug:https://issues.apache.org/bugzilla/show_bug.cgi?id=36976 两方面的因素造成的。
通过远程访问Tomcat的正确配置是:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10019 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=192.168.xx.xx" CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.logCalls=true"
-Djava.rmi.server.hostname这个配置是一定要的,文档上可是没写。不然你本地可以连,远程就访问不了!
在linux下执行需要:
["/bin/sh","-c","sh xxx …"]