Client Jmx jeter InstanceNotFoundException
J'ai un Client Jmx que j'utilise pour tester un jmx bean j'ai écrit. Voici le code pour le 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 et toutes ses dépendances sont présents dans une bibliothèque à l'Ide.
Mon jmx les haricots sont:
public interface ProcessingPing {
public PingResult ping(Integer environmentId, Integer timeout);
}
et
@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);
}
}
Lors de l'exécution, le client, j'obtiens une exception quand j'invoque le ping méthode:
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
Je ne comprends pas pourquoi jmx semble être en mesure d'obtenir le haricot, mais pas de l'instance de la classe. Je devine que c'est une sorte de problème de classpath, mais ne pouvais pas le trouver. Comme un côté pas, lors de l'essai avec JConsole, il fonctionne très bien.
Grâce
OriginalL'auteur sebi | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
On dirait le nom de l'objet utilisé pour enregistrer le MBean diffère du nom de l'objet que vous utilisez lorsque vous essayez de récupérer le managed bean.
Essayez de vérifier le nom de l'objet dans la JConsole.
J'ai fait tout le nom de l'objet - com".spmsoftware.la transformation.ping:type=ProcessingPing". Pouvez-vous confirmer que ce nom de l'objet est en fait le même que celui que vous pouvez voir dans la JConsole - l'ObjectName ligne dans la MBeanInfo section?
Hey, merci pour l'astuce. J'ai utilisé mon client à la liste de tous les grains exposés, et vu que le mien a "com.spmsoftware:nom=ProcessingPing,produit=optymyze" pour le nom. Je l'ai utilisé dans le constructeur de ObjectName et cela a fonctionné comme un charme.
OriginalL'auteur JB-
Ressemble à l'objectname dans mbean défini est différent de celui que vous êtes en fournissant au client JMX code.
Le nom de l'objet doit correspondre exactement comme ce que vous définissez dans la classe java comme en-dessous de la classe de m bean est exposée à l'aide de printemps.
Exemple - le en dessous de la ligne écrite sur le dessus de la classe
@ManagedResource(objectName = "com.spmsoftware.la transformation.ping:type=ProcessingPing"
Ou vous pouvez également vérifier dans jconsole.exe et aller à l'onglet mbeans et vérifiez le nom de mbean sur le volet de gauche.
OriginalL'auteur user3737423
Dans mon cas, j'ai oublié de créer le Haricot (dans ces cas ProcessingPingImpl).
Annotation solution:
Vous pouvez utiliser
@Component
sur le haricot et@ComponentScan("com.company")
sur le @de la Configuration de l'Objet.(voir http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch06s02.html)
Ou vous créer le haricot directement dans le @de la Configuration de l'Objet comme ceci:
XML solution:
(voir dans https://github.com/spring-by-example/spring-by-example/blob/master/enterprise/spring-jmx/src/test/resources/org/springbyexample/jmx/JmxTest-context.xml)
Ou sans component-scan:
OriginalL'auteur knobli