JBoss + Spring + MBeans 3/4

JBossImage

Bueno, ahora ya tenemos cómo acceder a los MBeans desde código, pero ¿cómo crearlos desde código?

Lo primero que tenemos que tener en cuenta es que las clases que queremos crear como MBeans, obligatoriamente tienen que estar en el servidor. O sea, tenemos que exportarlo como un .jar y ponerlo en la carpeta lib del servidor (así me funcionó a mi, si tenemos una aplicación web será un .war y en deploy, aunque no lo probé)

Ya tenemos eso, ahora creamos un MBean cualquiera:

Interfaz TesterMBean

package org.acriter.testJBoss;public interface TesterMBean {public String getNombre();public void setNombre(String nombre);public void init();

}

Clase Tester

package org.acriter.testJBoss;public class Tester implements TesterMBean{public void init() {// TODO Auto-generated method stub}
private String nombre;
public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre=nombre;
}
}

JMXProBrowser


package org.acriter.testJBoss;import javax.management.MBeanInfo;import javax.management.MBeanOperationInfo;import javax.management.MBeanParameterInfo;import javax.management.ObjectName;

import javax.naming.InitialContext;

import org.jboss.jmx.adaptor.rmi.RMIAdaptor;

/**

* Esta clase puede conectarse con JBOSS!!

* Y llamar a sus MBeans...

* Queda para la historia.

* @author hmassaroli

*

*/

public class JMXProBrowser

{

/**

* @param args the command line arguments

*/

public static void main(String[] args) throws Exception

{

//ponemos las propiedades (?)
System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
System.setProperty("java.naming.provider.url", "localhost:1099");
InitialContext ic = new InitialContext();
RMIAdaptor server = (RMIAdaptor) ic.lookup("jmx/invoker/RMIAdaptor");
//Intentaremos crear un MBean
ObjectName name2 = new ObjectName("jboss:service=BeanLoco");
//server.createMBean("java.lang.String", name2); //Esta clase si la toma
server.createMBean("org.acriter.testJBoss.Tester", name2);
//Esta no
// Get the MBeanInfo for the JNDIView MBean
ObjectName name = new ObjectName("jboss:service=JNDIView");
MBeanInfo info = server.getMBeanInfo(name);
System.out.println("JNDIView Class: " + info.getClassName());

MBeanOperationInfo[] opInfo = info.getOperations();
System.out.println("JNDIView Operations: ");
for(int o = 0; o < opInfo.length; o ++) {
MBeanOperationInfo op = opInfo[o];

String returnType = op.getReturnType();
String opName = op.getName();
System.out.print(" + " + returnType + " " + opName + "(");

MBeanParameterInfo[] params = op.getSignature();
for(int p = 0; p < params.length; p++) {
MBeanParameterInfo paramInfo = params[p];

String pname = paramInfo.getName();
String type = paramInfo.getType();

if (pname.equals(type)) {
System.out.print(type);
} else {
System.out.print(type + " " + name);
}

if (p < params.length-1) {
System.out.print(',');
}
}
System.out.println(")");
}
// Invoke the list(boolean) op
String[] sig = {"boolean"};
Object[] opArgs = {Boolean.TRUE};
Object result = server.invoke(name, "list", opArgs, sig);

System.out.println("JNDIView.list(true) output:n"+result);
}
}

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s