Mostrando entradas con la etiqueta MBeans. Mostrar todas las entradas

Refresh de Pooling de Conexiones Remoto a través de MBeans.

6

Este es una aportación de Andrés Ramírez de Perú. El tuvo un issue de refresh de Pooling de Conexiones hacia BD, sobre todo al modificar el cuerpo de un paquete almacenado. El decidió realizarlo a través de Mbeans controlando el pool de conexiones. Aquí la descripción de cómo lo hizo (gracias Andrés):

1. UTILIZACION de Mbeans

1.1. Mediante la consola de administración: Oracle Enterprise Manager

a. Ingresar a la instancia deseada (oc4j_soa)

clip_image003

b. Ir a la pestaña de administración

clip_image006

c. Ir a la sección de “Búsqueda de MBeans"

clip_image009

d. Buscar el recurso deseado (OrdenesCP – Connection Pool)

clip_image012

e. Ir a la pestaña de Operaciones e ingresar al método (refreshConnectionPool)

clip_image016

f. Invocar Método

clip_image019


1.2. Aplicaciones Custom: Java JMX en JDeveloper

a. Ingresar al Jdeveloper y crear la siguiente estructura:

clip_image021

b. En las propiedades del Proyecto (MBeansTest) agregar las siguientes librerias:

clip_image023

Ubicaciones de los Jars:

C:\Jdeveloper\j2ee\home\lib\jmx_remote_api.jar

C:\Jdeveloper\j2ee\home\lib\jmxcluster.jar

C:\Jdeveloper\j2ee\home\lib\jmxri.jar

C:\Jdeveloper\j2ee\home\oc4jclient.jar

C:\Jdeveloper\opmn\lib\ons.jar

C:\Jdeveloper\opmn\lib\optic.jar

C:\Jdeveloper\j2ee\home\lib\adminclient.jar

Nota: Agregar la Libreria J2EE desde la opción: Add Library...

c. Definir la clase MBeansClient.java (Ver Anexo 1)

ANEXO 1

package mbeanstest;

import java.io.IOException;

import java.net.MalformedURLException;

import java.util.Hashtable;

import java.util.Iterator;

import java.util.Set;

import javax.management.AttributeNotFoundException;

import javax.management.InstanceNotFoundException;

import javax.management.InvalidAttributeValueException;

import javax.management.MBeanException;

import javax.management.MBeanServerConnection;

import javax.management.MalformedObjectNameException;

import javax.management.ObjectName;

import javax.management.ReflectionException;

import javax.management.remote.JMXConnector;

import javax.management.remote.JMXConnectorFactory;

import javax.management.remote.JMXServiceURL;

import oracle.oc4j.admin.jmx.remote.api.JMXConnectorConstant;

public class MBeansClient {

//URL del OC4J Single

private static final String OC4J_SOA_URL =

"service:jmx:rmi:///opmn://172.20.1.92:6005/oc4j_soa";

//URL del OC4J Cluster

private static final String CLUSTER_OC4J_SOA_URL =

"service:jmx:rmi:///opmn://172.20.1.92:6005/cluster";

//Nombre del recurso MBean

private static final String MBEAN_OBJECT_NAME =

"oc4j:j2eeType=JDBCResource,name=\"OrdenesCP\",J2EEApplication=default,J2EEServer=standalone";

//Nombre del grupo (cluster) MBean

private static final String CLUSTER_MBEAN_OBJECT_NAME =

"ias:j2eeType=J2EEServer,name=oc4j_soa,J2EEServerGroup=default_group,ASInstance=soa.test.com";

//Nombre del método del MBean

private static final String MBEAN_METHOD_NAME =

"refreshConnectionPool";

//Credenciales del Administrador

private static final String USERNAME = "oc4jadmin";

private static final String PASSWORD = "oracle10g";

public MBeansClient() {

}

//Crear conexion con el Servidor MBeans

public MBeanServerConnection getMBeanConnection(String URL) throws MalformedURLException,

IOException {

JMXConnector jmxConnector = null;

JMXServiceURL serviceUrl = new JMXServiceURL(URL);

Hashtable env = new Hashtable();

env.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "oracle.oc4j.admin.jmx.remote");

Hashtable credentials = new Hashtable();

credentials.put(JMXConnectorConstant.CREDENTIALS_LOGIN_KEY, USERNAME);

credentials.put(JMXConnectorConstant.CREDENTIALS_PASSWORD_KEY, PASSWORD);

env.put(JMXConnector.CREDENTIALS, credentials);

jmxConnector = JMXConnectorFactory.newJMXConnector(serviceUrl, env);

jmxConnector.connect();

MBeanServerConnection mBeanServerConnection = jmxConnector.getMBeanServerConnection();

return mBeanServerConnection;

}

//Método que muestra todos los MBeans disponibles

public void printAllMBeans(MBeanServerConnection mBeanServerConnection) throws IOException {

System.out.println(" \n\n Imprimiendo todos los MBean ");

Set mbeans = mBeanServerConnection.queryNames(null, null);

Iterator iter = mbeans.iterator();

while (iter.hasNext()) {

System.out.println(iter.next().toString());

ObjectName objectName = (ObjectName)iter.next();

System.out.println(" domain " + objectName.getDomain() + " " + objectName.getKeyPropertyListString());

}

System.out.println(" Fin de impresion \n\n ");

}

//Método que invoca a la operación "refreshConnectionPool" perteneciente al recurso "OrdenesCP" en una sola instancia OC4J

private void testSingle() throws MalformedURLException, IOException,

MalformedObjectNameException,

InstanceNotFoundException, MBeanException,

ReflectionException,

AttributeNotFoundException,

InvalidAttributeValueException {

MBeanServerConnection mBeanServerConnection = getMBeanConnection(OC4J_SOA_URL);

//printAllMBeans(mBeanServerConnection);

ObjectName objectName = new ObjectName(MBEAN_OBJECT_NAME);

System.out.println("\n\n Invoke Method over single oc4j ............");

Object invokeMethodReturnObject =

mBeanServerConnection.invoke(objectName, MBEAN_METHOD_NAME, null,

null);

//El retorno será = null pues la operacion es de tipo void

System.out.println(" Single invokeMethodReturnObject " +

invokeMethodReturnObject);

}

//Método que invoca a la operación "refreshConnectionPool" perteneciente al recurso "OrdenesCP" en un grupo (cluster) OC4J

public void testCluster() throws MalformedURLException, IOException,

MalformedObjectNameException,

InstanceNotFoundException, MBeanException,

ReflectionException,

AttributeNotFoundException,

InvalidAttributeValueException {

MBeanServerConnection mBeanServerConnection = getMBeanConnection(CLUSTER_OC4J_SOA_URL);

//printAllMBeans(mBeanServerConnection);

ObjectName clusterObjectName = new ObjectName(CLUSTER_MBEAN_OBJECT_NAME);

ObjectName customObjectName = new ObjectName(MBEAN_OBJECT_NAME);

Object[] invokeMethodParameters =

new Object[] { customObjectName, MBEAN_METHOD_NAME, null, null };

String[] invokeMethodSignature =

new String[] { "javax.management.ObjectName", "java.lang.String", "[Ljava.lang.Object;", "[Ljava.lang.String;" };

System.out.println("\n\n Invoke Method over cluster oc4j ............");

Object invokeMethodResult =

mBeanServerConnection.invoke(clusterObjectName, "invoke", invokeMethodParameters, invokeMethodSignature);

//El retorno será = null pues la operacion es de tipo void

System.out.println(" Cluster invokeMethodResult object is " + invokeMethodResult);

}

public static void main(String[] args) throws MalformedURLException,

IOException,

MalformedObjectNameException,

InstanceNotFoundException,

MBeanException,

ReflectionException,

AttributeNotFoundException,

InvalidAttributeValueException {

MBeansClient mBeanClient = new MBeansClient();

mBeanClient.testSingle();

mBeanClient.testCluster();

}

}

Especificaciones:

1.Modificar el IP del servidor y el puerto “Request” del opmn según corresponda. De igual modo, especificar el nombre correcto del OC4J correspondiente a la instalación del SOA Suite.

2. Modificar el IP del servidor y el puerto “Request” del opmn según corresponda.

3. El nombre correcto del MBean puede ser encontrado de la siguiente manera:

Ir al EM console –> oc4j_soa –>Administration –> System MBean Browser –> Cluster MBean Browser –> Operations –> getAttribute –> clip_image033 -> Buscar el recurso deseado

4. El nombre correcto del Cluster MBean puede ser encontrado de la siguiente manera:

Ir al em console –> oc4j_soa –> Administration –> System MBean Browser à Cluster MBean Browser -> Copiar el MBean Name

5. Especificar las credenciales apropiadas


Post navigation