我想从我的网络应用中访问Server
和Connector
。此外,我需要从嵌入式Tomcat启动此Web应用程序。以下是我启动tomcat的方法:
Tomcat tomcat = new Tomcat();
tomcat.setPort(port);
StandardServer server = (StandardServer) tomcat.getServer();
server.addLifecycleListener(new AprLifecycleListener());
tomcat.addWebapp("/", webapp.getAbsolutePath());
tomcat.start();
tomcat.getServer().await();
当我使用typical example通过JMX 1访问服务器时:
import javax.management.*;
import org.apache.catalina.Server;
MBeanServer mBeanServer = MBeanServerFactory.findMBeanServer(null).get(0);
ObjectName name = new ObjectName("Catalina", "type", "Server");
Server server = (Server) mBeanServer.getAttribute(name, "managedResource");
我明白了:
Caused by: javax.management.InstanceNotFoundException: Catalina:type=Server
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:662)
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
我认为这是因为我无法以某种方式引导JMX。
答案 0 :(得分:0)
看起来JMX运行正常,这是我用于查找的名称问题。应该是:
ObjectName name = new ObjectName("Tomcat", "type", "Server");
代替。
答案 1 :(得分:0)
可以使用PR_JVMOPTIONS
。通过在嵌入式tomcat安装服务文件中使用以下配置参数,可以解决此问题。
set PR_JVMOPTIONS=-Dcom.sun.management.jmxremote.authenticate=false;-Dcom.sun.management.jmxremote.ssl=false;-Dcom.sun.management.jmxremote.port=9111