Jmx-client werfen InstanceNotFoundException
Ich habe eine Jmx-Client, die ich zum testen verwenden Sie eine jmx-bean, die ich geschrieben habe. Hier ist der code für den client:
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("com.spmsoftware.processing.ping:type=ProcessingPing");
ProcessingPing mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, ProcessingPing.class, true);
System.out.println("\nResult = " + mbeanProxy.ping(346, 0).getResultCode());
jmxc.close();
ProcessingPing und alle Abhängigkeiten vorhanden sind in einer Bibliothek in IntelliJ.
Meine jmx beans sind:
public interface ProcessingPing {
public PingResult ping(Integer environmentId, Integer timeout);
}
und
@Service("ProcessingPing")
@ManagedResource(description = "")
public class ProcessingPingImpl implements ProcessingPing {
private static final Integer DEFAULT_TIMEOUT = 5000;
@Autowired
private PingProcessService pingProcessService;
@Override
@ManagedOperation(description = "")
public PingResult ping(Integer environmentId, Integer timeout) {
return pingProcessService.run(environmentId, timeout);
}
}
Beim laufen, der client, bekomme ich auch eine exception, wenn versucht wird, rufen die ping-Methode:
Caused by: javax.management.InstanceNotFoundException: com.spmsoftware.processing.ping:type=ProcessingPing
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getClassLoaderFor(DefaultMBeanServerInterceptor.java:1444)
at com.sun.jmx.mbeanserver.JmxMBeanServer.getClassLoaderFor(JmxMBeanServer.java:1308)
at com.sun.enterprise.v3.admin.DynamicInterceptor.getClassLoaderFor(DynamicInterceptor.java:907)
at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1346)
at java.security.AccessController.doPrivileged(Native Method)
at javax.management.remote.rmi.RMIConnectionImpl.getClassLoaderFor(RMIConnectionImpl.java:1342)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:795)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)
at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl_Stub.invoke(Unknown Source)
at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:1017)
Disconnected from the target VM, address: '127.0.0.1:56621', transport: 'socket'
at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:305)
... 2 more
Verstehe ich nicht, warum jmx zu sein scheint in der Lage zu bekommen die Bohne, nicht aber die aktuelle Instanz der Klasse. Ich vermute, es ist irgendwie ein classpath-Problem, aber konnte ihn nicht finden. Wie eine Seite nicht, beim testen mit JConsole, es funktioniert gut.
Dank
InformationsquelleAutor sebi | 2013-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht, wird der name des Objekts verwendet, um zu registrieren, der MBean unterscheidet sich von der Objekt-name, den Sie verwenden, wenn Sie versuchen zum abrufen der managed bean.
Prüfen der Objekt-name in der JConsole.
Ich meinte eigentlich die ganze Objekt-name "com.spmsoftware.Verarbeitung.ping:type=ProcessingPing". Können Sie bestätigen, dass dieses Objekt Namen ist eigentlich das gleiche wie die, die Sie sehen können, in JConsole - Objektname-Zeile in der MBeanInfo-Bereich?
Hey, danke für den Hinweis. Ich habe meine client-Liste, die Bohnen ausgesetzt, und sah, dass meine hatten "com.spmsoftware:name=ProcessingPing,product=optymyze" für name. Ich habe es im Konstruktor für Objektname und es funktionierte wie ein Charme.
InformationsquelleAutor JB-
Sieht aus wie der Objektname in mbean definiert, der von der unterscheidet, die Sie bereitstellen, in der JMX-client-code.
Der name des Objekts übereinstimmen sollten, genau wie das, was Sie definieren in der java-Klasse, die wie unter Klasse m bean ausgesetzt ist, durch die Verwendung von spring.
Beispiel - die folgende Zeile geschrieben, die auf top of class
@ManagedResource(objectName = "com.spmsoftware.Verarbeitung.ping:type=ProcessingPing"
Oder Sie können auch check-in jconsole.exe und gehen Sie zur Registerkarte mbeans und überprüfen Sie den Namen der mbean auf der linken Fensterbereich.
InformationsquelleAutor user3737423
In meinem Fall habe ich vergessen zu erstellen der Bean (in diesem Fall ProcessingPingImpl).
Anmerkung Lösung:
Sie können
@Component
auf der Bohne und der@ComponentScan("com.company")
auf die @Configuration-Objekt.(siehe http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch06s02.html)
Oder erstellen Sie die Bohnen direkt in die @Configuration-Objekt wie folgt erhalten:
XML-Lösung:
(siehe https://github.com/spring-by-example/spring-by-example/blob/master/enterprise/spring-jmx/src/test/resources/org/springbyexample/jmx/JmxTest-context.xml)
Oder ohne component-scan:
InformationsquelleAutor knobli