对我的环境: - Java 1.5 - Tomcat 5.5
我正在尝试从运行在不同计算机上的web-app实例访问远程mbeans,以实现某些集群目的。一般情况下,我试图使用包含在某种jmx服务器类中的rmi存根从mbean内部访问其他远程mbeans:
public class JMXConnect {
PrintStream out= null;
JMXServiceURL target= null;
JMXConnector connector= null;
MBeanServerConnection remote= null;
String serviceURL = "service:jmx:rmi:///jndi/rmi://"+this.host+":"+this.port+"/jmxrmi";
target = new JMXServiceURL(serviceURL);
connector = JMXConnectorFactory.connect(target);
remote = connector.getMBeanServerConnection();
ObjectName bean = null;
bean = new ObjectName("MbeanName");
Object returnval = remote.getAttribute(bean,"TotalSessionCount");
问题是,当我尝试在tomcat上下文之外使用这段代码时,它运行正常,但是从tomcat中的这个mbean开始,它会引起麻烦:
java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.naming.java.javaURLContextFactory [Root exception is java.lang.ClassNotFoundException: org.apache.naming.java.javaURLContextFactory]
[exec]在javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:317) [exec]在javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
我在tomcat / common / lib / naming-factory.jar中找到了缺少的类。但是我不知道在哪里包括这个权利(试过几个地方)也不知道这个课程的内容是什么,或者我可能在这里误解了什么。所有这一切的目的是我想让我的一些mbeans使用rmi存根在不同的机器上相互协作。
1)如何解决错误? 2)这种方法有用吗?