Archive for junio 2008

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


Pasamos los 500 Artículos en Ingles

0

El día de hoy pasamos la barrera de los 500 artículos y ejemplos prácticos de ADF y JDeveloper coleccionados en un único repositorio. Estos artículos son en ingles y han sido escritos por bloggers de todo el mundo que quieren compartir sus experiencias y conocimiento sobre el ADF y JDeveloper.

Cualquier persona puede hacer búsquedas sobre este repositorio a través de la página principal de JDeveloper así como también pueden acceder al RSS feed del mismo o a través de la extensión que expliqué en un post anterior. Por nuestro lado (blogs en español) llevamos un total de 28 artículos + los que se encuentran en este blog asociados con ADF/JDeveloper y SOA.


xsi:type en Oracle BPEL PM 10.1.3.x ???

0

En semanas pasadas en un proyecto de implementación de BPEL PM en un cliente en México me encontré que uno de los servicios que se tenían que consumir desde Oracle BPEL PM, requerían forzosamente el uso del atributo xsi:type que algunos Web Services viejos requieren para ser ejecutados.

Este atributo sirve para explícitamente determinar el tipo del elemento que se está enviando, y hace un override al determinado en el namespace de dicho elemento.
En mi caso, si no específicaba el uso del atributo simplemente no obtenía respuesta correcta del servicio. Evidentemente la gente que lo había desarrollado no tenía forma de quitarle eso.
Afortunadamente hay un parámetro que se coloca en el bpel.xml del proceso BPEL que esté invocando al servicio, en donde puedes indicar si requieres de enviar o no el xsi:type. Esta información la encontró el consultor del partner que está implementando el proyecto (gracias Toño).

El parámetro es el siguiente:

Con ésto a nivel de partnerlink puede determinar el uso y envío del xsi:type en el body del mensaje soap.


¿Cómo comenzar con ADF/JSF/SOA/WebCenter?

0

Los Cue Cards, son una serie de 26 tutoriales, los cuales están divididos por tecnologías y a diferencia de las guías del desarrollador y los Oracle-By-Example, estos tutoriales son cortos y muy enfocado en proporcionar aspectos básicos de la tecnología.  En JDeveloper se pueden acceder los tutoriales a través del  menú Help->Cue Cards

A partir del TP4 de JDeveloper estos tutoriales se publicaron también en OTN y están ubicados en el siguiente link: http://www.oracle.com/technology/products/jdev/11/cuecards/index.html

 

Esta es una excelente herramienta para todos aquellos que quieran comenzar a familiarizarse con las distintas herramientas de desarrollo en Oracle Fusion Middleware de manera rápida.


Post navigation