# MBean aus Eclipse Plugin aufrufen



## kosmo3001 (4. Juli 2005)

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:

```
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


----------



## Thomas Darimont (4. Juli 2005)

Hallo!

 Im Classpath brauchst du noch das jbossall-client.jar ... und ein passendes jndi.properties-File

```
/*
  * 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


----------



## kosmo3001 (4. Juli 2005)

hab ich beides. es geht trotzdem nicht.


----------



## Thomas Darimont (4. Juli 2005)

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


----------



## Thomas Darimont (4. Juli 2005)

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


----------



## kosmo3001 (4. Juli 2005)

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. 

```
ObjectName name
```
 geht noch. Aber wenn ich den konkret instanziiere wie zB

```
ObjectName name = new ObjectName ("jboss.system:type=Server");
```
bekomme ich auch eine "unhandled event loop exception".

keine Ahnung wie das kommt.


----------



## Thomas Darimont (4. Juli 2005)

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


----------

