Hello,
Y a-t-il un moyen d'afficher l'instance de la JVM? Sous n'importe quelle forme, c'est juste pour vérifier que ce n'est pas la même partout...
Merci d'avance.
A+, Patrick
Hello,
Y a-t-il un moyen d'afficher l'instance de la JVM? Sous n'importe quelle forme, c'est juste pour vérifier que ce n'est pas la même partout...
Merci d'avance.
A+, Patrick
,non ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part java -version
tu veux savoir ça ou?Dans ton programme java? ou savoir comment connaître quelle JVM est déclaré par défaut sur le système ?
En fait, j'utilise JMX en dehors de tomcat
Je voudrais donc, dans mon code, faire un système.out.println(... pour savoir si cela fonctionne bien. J'en ferait un dans mon MBean et un dans mon programme... Si les valeurs sont différentes, c'est que c'est bon...
Enfin je sais pas si c'est l'instance de la JVM qu'il faut afficher pour cela, je veux juste vérifier le fonctionnement de mon implémentation JMX...
C'est compréhensible?
Merci d'avance de comprendre mes phrases incompréhensibles
A+
Je crois que j'avais rien compris, tu voudrais savoir si tu tourne dans le même process ou pas
devrait te dire si tu es dans le même process ou pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part System.out.println(Runtime.getRuntime().toString());
Ok, alors j'ai testé et ça me donne deux fois la même chose... Mon JMX est donc faux?
Mes deux deux fichier JMX (Hello.class et HelloMBean.class ) sont dans un jar séparé, dans tomcat/common/lib
Voici mon code: dans mon applic:
Mon MBean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 System.out.println("Start test..."); System.out.println("out:: " + Runtime.getRuntime().toString()); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); ObjectName name; try { name = new ObjectName("jmx:type=Hello"); Hello mbean = new Hello(); mbs.registerMBean(mbean, name); mbs.invoke(name, "sayHello", null, null); mbs.unregisterMBean(name); } catch (MalformedObjectNameException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NullPointerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstanceAlreadyExistsException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MBeanRegistrationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotCompliantMBeanException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstanceNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MBeanException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ReflectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("End test...");
et...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 package jmx; public interface HelloMBean { public void sayHello(); public int add(int x, int y); public String getName(); public int getCacheSize(); public void setCacheSize(int size); }
Résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package jmx; public class Hello implements HelloMBean { public void sayHello() { System.out.println("MBean 1"); System.out.println("in:: "+Runtime.getRuntime().toString()); System.out.println("MBean 2"); } public int add(int x, int y) { return x + y; } public String getName() { return this.name; } public int getCacheSize() { return this.cacheSize; } public synchronized void setCacheSize(int size) { this.cacheSize = size; System.out.println("Cache size now " + this.cacheSize); } private final String name = "Reginald"; private int cacheSize = DEFAULT_CACHE_SIZE; private static final int DEFAULT_CACHE_SIZE = 200; }
Les 2 process ne devraient-ils pas être différents? Mon but étant de sortir cette classe de tomcat...Start test...
out:: java.lang.Runtime@8a2006
MBean 1
in:: java.lang.Runtime@8a2006
MBean 2
End test...
Merci, A+
Bonsoir,
ça n'a pas l'air si simple, mais tu peux récupérer le processID de la jvm en modifiant le démarrage:
http://forum.java.sun.com/thread.jsp...sageID=2140023
Le Runtime.toString() ne sert à rien, il renvoie simplement le hashcode sytème i.e. à peu près l'adresse mémoire dans la jvm. Or si elles ont démarré dans les même conditions, c'est la même adresse.
Tu peux te créer ton propre id de JVM en te créant une classe ad-hoc (qui enregistre simplement le timeStamp au démarrage de la jvm)
j'ai bien essayé de chercher des ids qui puissent varier d'une JVM à l'autre, il y a bien des ids de Thread (la variable eetop d'un Thread système par exemple) mais c'est pas fiable comme méthode de tout façon.
Partager