MBean aus Eclipse Plugin aufrufen

kosmo3001

Grünschnabel
Hi,
ich möchte eine MBean die in JBoss läuft aus einem Eclipse Plugin heraus aufrufen.
Ich hab alles so wie in der JBoss Doku gemacht. Aus meiner Test Klasse, einem normalen Java Programm, geht das Aufrufen der MBean. Wenn ich genau den selben Code in dem Eclipse Plugin verwende bekomme ich aber eine Fehlermeldung.

Fehlermeldung:
Unhandled event loop exception
Reason:
org/jboss/jmx/adaptor/rmi/RMIAdaptor

Code:
Code:
   Hashtable hash = new Hashtable();
   hash.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
   hash.put("java.naming.provider.url","jnp://localhost:1099");
    hash.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
   InitialContext ctx = new InitialContext(hash);
   RMIAdaptor server = (RMIAdaptor) ctx.lookup("jmx/rmi/RMIAdaptor");
ctx.lookup("jmx/rmi/RMIAdaptor"); alleine verursacht keinen Fehler aber sobal ich das Ergebnis in ein RMIAdaptor caste bekomme ich die Fehlermeldung.

tschüss
 
Hallo!

Im Classpath brauchst du noch das jbossall-client.jar ... und ein passendes jndi.properties-File
Code:
 /*
  * Created on 04.07.2005@13:50:53
  *
  * TODO Add some Licence info
  */
 package de.tutorials;
 
 import javax.management.MBeanInfo;
 import javax.management.MBeanOperationInfo;
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectInstance;
 import javax.management.ObjectName;
 import javax.naming.InitialContext;
 
 /**
  * @author Tom
  * 
  * TODO Describe me
  */
 public class JBossMBeanInvocationExample {
 
 	public static void main(String[] args) throws Exception {
 
 		//jndi.properties liegt im Classpath
 		InitialContext ctx = new InitialContext();
 
 		MBeanServerConnection mBeanServerConnection = (MBeanServerConnection) ctx
 				.lookup("jmx/invoker/RMIAdaptor");
 		ObjectName objectName = new ObjectName("jboss.system:type=Server");
 		MBeanInfo mBeanInfo = mBeanServerConnection.getMBeanInfo(objectName);
 		//Alle Operationen dieses MBeans anzeigen
 		MBeanOperationInfo[] mBeanOperations = mBeanInfo.getOperations();
 		for (int i = 0; i < mBeanOperations.length; i++) {
 			MBeanOperationInfo info = mBeanOperations[i];
 			System.out.println(info.getName());
 		}
 		
 		//JBoss herunterfahren...
 		mBeanServerConnection.invoke(objectName,"shutdown",new Object[0],new String[0]);
 		ctx.close();
 	}
 }

Gruß Tom
 
Hallo!

Warum musst du denn unbedning auf einen RMIAdaptor casten?
Hast du's schon so probiert wie in meinem Beispiel? (Auf MBeanServerConnection casten...) Bir mir gehts so wunderbar.

Gruß Tom
 
Hallo!

...falls es bei dir immer noch nicht funktionieren sollte, kannst du auch das twiddle.jar aus dem %JBOSS_HOME%/bin Verzeichnis verwenden. Twiddle ist im Prinzip ein kleines JMX-Kommandozeilen-Tool mit dem du serverseitige MBean-Operationen ausführen kannst.

Gruß Tom
 
RMIAdaptor habe ich weil ich JBoss 3.2.1 habe. Das ganze ist in einem großen Projekt eingebunden und ich muss die alte Version nehmen. Bei dieser gibt es die MBeanServerConnection glaub ich noch nicht.
Ich dachte eigentlich das es etwas mit dem Eclipse Plugin zu tun hat. Ich kann ja von meiner Testklasse, die so ähnlich wie dein Code ist, ja auch eine Verbindung aufbauen. Nur im Eclipse Plugin kommen plötzlich Fehler.

Ich kann in dem Eclipse Plugin auch keinen ObjectName instanziieren.
Code:
ObjectName name
geht noch. Aber wenn ich den konkret instanziiere wie zB
Code:
ObjectName name = new ObjectName ("jboss.system:type=Server");
bekomme ich auch eine "unhandled event loop exception".

keine Ahnung wie das kommt.
 
Hallo!

Versuch doch mal ob's klappt, wenn du das jmx-client.jar aus dem %JBOSS3.2.x_HOME%/client Verzeichnis in den Classpath aufnimmst...

Gruß Tom
 
Zurück