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
Version imprimable
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: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 pasCode: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:
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:
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:
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...Citation:
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.
J'ai essayé le
Mais cela me retourne un "null"... (Red Hat)Code:System.getProperty("pid")
Pourquoi? Une idée? Est-ce différent sous Linux?
Merci d'avance :lol:
A+
Ok, bon j'ai trouvé un autre moyen d'afficher le PID. Ce sont les deux les mêmes! Celui de tomcat en l'occurence!
Cela veut-il dire que mon architecture JMX est fausse?
Merci, A+
as-tu bien ajouté "-Dpid=$$" dans les lignes de commandes de tes JVM?
Enfait, ma question est de savoir si ces deux process devraient être différents... Peut-être que je n'ai pas exactement saisi le rôle de JMX...
Doivent-ils vraiment avoir chaqun leur JVM? Est-ce possible?
Avez-vous des précisions, car je nage un peu..
A+ et merci ;)