martes, 29 de marzo de 2016

Weblogic Overload Error ...


Es importante saber que Weblogic internamente maneja un pool de conexiones por cada DataSource (XA / NOXA), que es creado en su entorno. Normalmente este DataSource al ser creado se le asigna un soporte automático de 15 hilos (paralelos) de conexión (capacidad máxima), los cuales se irán liberando conforme a su correcto uso.


Para la simulación de este error Overload en Weblogic se ha preparado un Dummy en Java que se conectará por medio de un JNDI de Weblogic a un Store Procedure y lo estresará de diferentes maneras para poder obtener dicho escenario de error.


Este error típico de Weblogic se puede dar si es que se incurre en alguna de las dos formas siguientes .........


Los interesados pueden descargar el artículo completo desde aquí: http://www.mediafire.com/download/6be8xbna38qa65x/Weblogic_Overload_Error.pdf

Para descargar las fuentes del Dummy (Eclipse): http://www.mediafire.com/download/d425dsgkgfmqm33/Dummy_JNDI_Overload.zip




domingo, 20 de marzo de 2016

APACHE JMETER (Enfoque WS)

Un tema muy importante durante los proyectos de tipo SOA, son las pruebas unitarias que se le hagan durante las construcción de los servicios. Aquí se podrá verificar que tal fluye la lógica de negocio  plasmada y como la arquitectura definida del servicio es tan robusta como para poder distribuir bien, rápida y correctamente la información. Así mismo, en muchas de estas pruebas es muy importante medir resultados lo que se conoce como tps (transacciones por segundo), entre otros resultados estadísticos, que son necesario ya que al tenerlos uno podrá validar que la velocidad y el rendimiento del servicio son los ideales. Aquí nace la necesidad de una herramienta que facilite dicha tarea de prueba.

Apache JMeter es un proyecto de Apache que puede ser utilizado como una herramienta de pruebas unitarias para analizar y medir el desempeño de servicios especialmente las de tipo aplicaciones web, así mismo soporta aserciones para asegurarse que los datos recibidos son correctos y brinda una variedad de reportes.


Con dicha herramienta se podrá obtener también automáticamente gráficas atractivas y significativas de nuestro resultado con las cuales se podrá analizar más rápidamente resultados de las pruebas e incluirlas el en un informe requerido. Además, se puede utilizar para realizar un análisis gráfico de rendimiento o para probar el comportamiento de respuesta del servidor bajo gran carga concurrente.

El siguiente tutorial mostrará justamente una parte de todo lo que esta herramienta brinda, que es el enfoque de como configurar y justamente cómo estresar un Servicio Web utilizando esta herramienta. Así mismo, se están cubriendo detalladarmente los siguientes puntos:

- Requerimientos.
- Instalación.
- Configuración y Prueba.


Para descargar este tutorial paso a paso ingresar aquí:
http://www.mediafire.com/download/03m0w2k8kefhiii/Tutorial+Apache_JMeter_v2.0.pdf

domingo, 21 de febrero de 2016

BENEFICIOS DE MANEJAR VARIOS DOMINIOS


Un dominio de Weblogic Servidor (WLS), es una unidad administrativa perteneciente a un Servidore de Aplicaciones. Asi mismo, sólo un administrador debería de tener conocimiento de dominios existentes.


Actualmente una empresa puede tener diferentes tipos de aplicaciones dispersas geográficamente y organizadas en diferentes áreas. Debido a ello, puede existir muchos dominios separados. Pensando en ello si analizamos cada dominio es una unidad que se administra por separado y se puede organizar dicha administraciónde manera departamental dentro de una empresa (contabilidad, manufactura, transporte, etc).

Por otro lado, una empresa puede querer tener todas sus aplicaciones en diferentes dominios que puedan ir incorporando. Debido a que a menudo es imposible ampliar uno solo dominio para abarcar el total de aplicaciones de toda la empresa. Así mismo, se debe considerar que teniendo un solo dominio a nivel empresa, acarrearía el ser administrado en su conjunto y la configuración se convertiría casi imposible de manejar y requeriría un esfuerzo mayor en la administración que en el desarrollo e implementación de las aplicaciones propiamente.

Finalmente, para mantener un correcto dominio (segmentado / distribuido) para la administración, se debe de separar las aplicaciones en 'multiples dominios' permitiendo que las aplicaciones en un dominio, puedan acceder a los servicios en otros dominios

domingo, 14 de febrero de 2016

CENTRALIZAR INICIO DE SERVERs


Muchos de nosotros que trabajamos en nuestros ambientes con muchos servidores de aplicaciones, contenedores de servlets, etc, de diferentes vendors y con diferentes dominios creados por cada uno, tenemos la necesidad de que por cada escenario que queramos probar, tengamos que conocer la ruta donde Iniciar y/o Detener cada uno de estos Servidores. Así mismo, mientras más de estos tengamos más difícil será que nos acordemos las ubicaciones de ellos.

Una solución común a este problema es tener un .txt con todas las rutas como informativo por medio de un acceso directo en nuestro escritorio. Otra es ir a inicio/windows/NOMBRE_SERVER/... , pero si nos ponemos a pensar son muchos pasos los que se deben realizar constantemente. Analizando estos casos como informático debemos innovar con una mejor solución para este problema común.

Para ello la solución pensada y planteada es: Centralizar todas estas ubicaciones de rutas de servidores en un archivo .bat que como se menciona centralice y en base a una orden Inicie y/o Detenga los Servidores requeridos. Para ello haremos lo siguiente:

1. Se debe crear un archivo .bat de la siguiente manera:


2. En el 1er cuadro en Rojo se definen el menú que se visualizará para seleccionar.

3. En el 2do cuadro en Rojo se matricula las letras definidas en el 1er paso, según el orden, para el Choise correspondiente.

4. En el 3er cuadro en Rojo se ingresar los IF's correspondientes a las Letras anteriores y que invocarán a LABELs por cada configuración a crear más a abajo:


5.
Se crearán  la configuración por cada LABEL un bloque con la DOMAIN_HOME y en base a esta, las variables: COMANDO_START y COMANDO_STOP para los controles respetivos. Esto se deberá realizar por cada configuración nueva que se requiera hacer:


El resultado de esto es un herramienta que centralizará todos los acceso al inicio de los servidores de manera facil e intuitiva y que hará que uno ya no se preocupe de este problema común. En este caso se puede apreciar una variada gama de servidores entre los que resaltan: SOAUITE. OSB, Tomcat, ETOM, etc ...


Para los interesados pueden descargar el .bat desde aquí:
http://www.mediafire.com/download/p76ttp6ppry6or2/Iniciador_Servidores.zip



sábado, 13 de febrero de 2016

TRANSFORMACIONES DE FORMATOS CON 'MFL' EN OSB

Usualmente en BPEL se acostumbra utilizar el 'File Adapter' para leer archivos NO XML y transformarlos a formato XML, pero en OSB junto con el adaptador de archivos también existe otra forma NO muy conocida de realizar dicha tarea. Esta se conoce como MFL y la podemos utilizar para transformar datos NO XML a datos XML y viceversa.

En este post se procederá a mostrar cómo transformar los datos NO XML a datos XML utilizando MFL. Para mostrar este funcionamiento, se ha preparado un dummy de un Servicio Virtual que consistirá en lo siguiente:

"Se ingresará una trama (Formato: NO XML) en una ubicación específica, que será procesada por el OSB. Esta trama procederá a ser transformada en formato XML para ser enviada de Request contra el WS. El Response del WS será transformado a formato NO XML (Trama), para ser finalmente depositado en una ubicación de salida como archivo generado".

DUMMY:

1. Considerando que la Trama INPUT tendrá este formato y será ubicado en una ruta local (especificada en el Proxy Service más adelante):



2. Definir y crear una RUTA BASE, que contendrá 4 directorios:

- TEMP: Directorio encargado de procesar los archivos de manera temporal.
- ERROR: Directorio encargado de almacenar los archivos con error en el proceso.
- INPUT: Directorio donde se ubicarán las tramas a procesar.
- OUTPUT: Directorio donde se generarán las tramas de respuesta del proceso.


3. Definir la estructura de directorios de muestro proyecto OSB:


4. Creamos un BusinessService que referencie y controle por medio del WSDL incrustado en el proyecto al WebService: 'http://localhost:8090/mockDatosClienteService?wsdl',(Un MockServices que he iniciado por medio de SOAPUI):


5.  Crear los archivos MFL (sobre el proyecto: new/MFL), tal como se explicó por medio de estos archivos se configurarán las transformaciones NO XML a XML y XML a NO XML. Con esta lógica ya podremos definir el MFL INPUT: encargado de transformar TRAMA a REQUEST y el MFL OUTPUT: encargado de transformar RESPONSE a TRAMA:

Para esto se debe de conocer antes de definir las tramas, los datos REQUEST/RESPONSE del WS a consumir:

5.1. Crear el archivo: DatosCliente_IN.mfl, para la transformacion INICIAL,considerando la configuración mostrada considerando los valores de los DELIMITADORES, sobre todo el del salto de linea del campo final (\n):




5.2. Crear el archivo: DatosCliente_OUT.mfl, para la transformacion FINAL, considerando la configuración mostrada considerando los valores de los DELIMITADORES, sobre todo el del salto de linea del campo final (\n):





6. Crear los XQuery consideranto las transformaciones que se manejaran:

6.1.  DatosCliente_IN.xq: Encargado de transformar la Trama (NO XML) hacia el REQUEST del WS


6.2.  DatosCliente_OUT.xq: Encargado de transformar la el RESPONSE del WS hacia la Trama (NO XQML) a generar:  

7. Crear un BusinessService de tipo Messaging Service que referencie y controle un MFL (Trama):




Definir el directorio donde se generarán las tramas de respuesta (OUTPUT) al finalizar procesamiento:
 

Definir parte del nombre de los archivos que se generarán para cada procesamiento, así mismo la extensión de los archivos de salida propiamente:


8.  Crear un ProxyService que controle los mensaje INPUT (Trama), que se dejarán en la ruta configurada:



Definir la ruta INPUT donde se depositará la trama:


Configurar tiempo, intervalo, formato y directorios (rutas) de control con relación a las tramas INPUT:

Creamos desde Message Flow los nodos que soportarán el funcionamiento del Servicio Virtual:



Con esto tenemos el Servicio Virtual completado, para las pruebas simplemente bastaría con depositar la trama INPUT en el directorio definir y automáticamente el flujo del Servicio Virtual se activará y a nivel de consola se visualizará el resultado:

PRUEBA:

1. Ubicar la trama en la ruta INPUT definida (C:\Ficheros\MFL\INPUT):  


2. El Servicio Virtual en un tiempo determinado procesará el mensaje (Trama):


3. Finalmente, por cada registro en la trama se generarpa y consumirá un REQUEST del WS y así mismo generará un archivo OUTPUT por cada RESPONSE:



Para los interesados se pueden descargar las fuentes del Dummy (OSB 11g - '11.1.1.7') desde aquí:  http://www.mediafire.com/download/fdz82c149nt8yfq/DummyNoXml_To_Xml.jar




viernes, 15 de enero de 2016

SEGMENTACIÓN EN DISEÑO DE .WSDL


Todos sabemos que la importancia que tiene en el ciclo de vida SOA la interface .WSDL, esto debido a que es el 'Description Language' de los Web Service y porque es el punto de acceso expuesto para la comunicación entre todos los servicio de tipo Web Service.

Debido a ello, es importante que durante la etapa de diseño uno se dé el tiempo debido en diseñar un correcto archivo .WSDL, de preferencia ya sea por medio de una herramienta o si se tiene práctica a mano, pero definir un buen diseño, considerando el posterior Topdown que se realizará.

En esta oportunidad mostraré como crear un .WSDL basado en un diseño segmentado "no común", pero altamente recomendado en los escenarios en que se requiere definir un .WSDL con gran cantidad de capacidades (operaciones) dentro de este.

Los modelos clásicos para diseñar un .WSDL (v1.1) son los siguientes:

 _ Un solo archivo .WSDL que contenga todo en su interior: (types (complexType, simplexTypes), message, portType, binding, service).  

_ Un archivo .WSDL que contenga en su interior: (message, portType, binding, service) y un archivo .XSD que contenga en su interior: (types (complexType, simplexTypes) ). El .WSDL import ó include el .XSD.  

_ Un archivo .WSDL que contenga en su interior:  (message, portType, binding, service), un archivo .XSD que contenga en su interior el modelo de datos propio de todas las operaciones: (types (complexType) ), un archivo .XSD que contenga datos 'genéricos' entre todas las operaciones. (types (complexType, simplexTypes) ). El .WSDL import ó include el .XSD propio y este import el .XSD genérico. 

Estos modelos de diseño de .WSDL son los conocidos y según el orden van mejorando el diseño propiamente. Así mismo, existe un modelo aún mejor pero que no es tan aplicado, este modelo de diseño se basa en segmentar la interface .WSDL de las operaciones en sí, haciendo que cada operación maneje su propio .WSDL y que exista un .WSDL principal. En otras palabras el diseño sería de esta manera:

_ Un archivo .WSDL (principal) que contenga en su interior:  (portType, binding, service), varios archivos .WSDL (según el número de operaciones existente) que contenga en su interior:  (message y types (complexType) propios de la operación), un archivo .XSD que contenga datos 'genéricos' entre todas las operaciones. (types (complexType, simplexTypes) ).  El .WSDL principal import todos los .WSDLs según el número de operaciones existentes y cada uno de estos .WSDL secundarios import  el .XSD genérico.

La ventaja de este modelo de diseño de .WSDL, es que está enfocado en las operaciones y hará al momento del Topdown respectivo que las clases .java (por ejemplo), se autogeneren en directorios independientes por cada operación respectivamente. Esto hará que no exista riesgo en el problema clásico de la duplicidad de clases usadas por cada operación al momento del Topdown:


La relación entre archivos es a nivel de NameSpace, debido a ello es bueno que se defina un correcto estándar en lo relacionado a los nombres, ya que en base a esta definición, se creará el orden de los directorios luego del Topdown respectivamente. Así mismo, todo lo demás es un juego de imports entre los archivos definidos:

- Archivo .WSDL (principal):


- Archivo .WSDL secundario por operación (Operación#1):


- Archivo .WSDL secundario por operación (Operación#2):


- Archivo .XSD genérica


Para los interesados en utilizar este tipo de modelo de diseño de .WSDL, pueden descargarlo desde aquí: http://www.mediafire.com/download/8nl9nuv6tmnpqr9/DisenioSegmentado_Wsdl.zip





miércoles, 6 de enero de 2016

ANÁLISIS SOA: [TOP-DOWN / BOTTOM-UP]


En muchas empresas NO se les da la importancia debida al trabajo del Rol: 'Analista SOA', es más en muchas empresas este Rol ni exíste. Este es un error grave, ya que la tarea que realiza dicho Rol es en si la base de toda Arquitectura SOA, debido a que el resultado de dicho análisis ('modelado y arquitectura orientada a servicios') que estos profesionales hagan, definirá los 'Servicios Candidatos' que posteriormente se verán reflejados como base en el Inventario de Servicios (con relación a los ‘servicios compuestos’).

Cuales son las consecuencias de un incorrecto Análisis SOA: que los servicios base en el inventarios de servicios NO sean altamente reutilizables (en muchos casos NI existen), que exista rebundancia constante a nivel de codificación en los procesos, que se creen servicios compuestos por crear, problemas con la gobernanza y el posterior mantenimiento de cada servicios, etc. Y lo peor es que el impacto es incremental a media que el inventario de servicios va creaciendo.

Actualmente, existen algunos enfoques SOA (ejemplo: SOMA y MSOEM) que definen un conjunto de técnicas para identificación de 'Servicios Candidatos'. Dichas metodologías SOA, tienen muchas cosas en común, ya que existen entre los resaltantes dos caminos posibles: TOP-DOWN y BOTTOM-UP.

- Técnica BOTTOM-UP:  
La cual se enfoca en realizar un análisis, para la obtención de los servicios candidatos, partiendo de  las aplicaciones y/o sistemas legacy (antíguas) ya existentes en los cuales los procesos de negocio no están definidos.

- Técnica TOP-DOWN:
La cual se enfoca en realizar un análisis, para la obtención de los servicios candidatos, partiendo de los procesos de negocio (si no se tienen estos, deben ser obtenidas del Feedback de los 'Analistas Funcionales' y modelando los BPMN respectivos). Descomponiendo dichos áreas funcionales, en proceso de negocio en  hasta llegar a procesos, subprocesos y tareas. Es importante recalcar que esta técnica descompone los elementos del nivel más bajo de la granularidad.

Así mismo, se debe tener en claro que todo el proceso de negocio tarde o temprano tenderá a ser un TOP-DOWN (es recomendable), de lo contrario no se llegara a una Arquitectura SOA ideal, donde IT esté alineado al negocio.

Por otro lado, se debe tener claro que este enfoque de análisis debe ser iterativo, ya que no se debe de querer hacer desde el inicio TODA la descomposición del total de los procesos existentes en la empresa. Es recomendable hacerlo por partes, en base a los procesos principales a medida que los requerimientos vayan saliendo. Esto debido a que los servicios serán altamente modificables y apuntan a la reutilización, por lo que se debe analizar por partes los procesos de negocio de la empresa, para definir y formalizar los primeros Servicios Candidatos base del Inventario de Servicios. 

Finalmente, para su posterior investigación los enfoques más resaltantes actualmente son:

- SOMA (IBM).
- MSOAM (Thomas Erl).

Particularmente, prefiero la segunda, pero se pueden complementar.