tag:blogger.com,1999:blog-54585989265460729552024-03-13T12:11:40.371-07:00FrameWorks JAVAJAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.comBlogger108125tag:blogger.com,1999:blog-5458598926546072955.post-35023333190320348292018-06-10T18:39:00.003-07:002018-06-10T18:47:26.043-07:00PREPARACIÓN EN "SOA & MICROSERVICIOS".<br />
<div class="MsoNormal" style="text-align: justify;">
<span lang="ES">El presente post es brindado para dar detalles
por el servicio de capacitación completa en arquitectura: <b>SOA & MICROSERVICIOS</b> con el
enfoque de <b>SOA-SCHOOL</b>. Este entrenamiento está enfocado de manera agnóstica al
rol especifico ya que equipos de: (programadores, arquitectos, funcionales,
etc) de las diferentes empresas deseosas en iniciar y/o tener el conocimiento
correcto de la anatomía de estas arquitecturas (el correcto know-how a nivel de
teoría), pueden contactarme.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="ES">La capacitación se deberá brindar en las
instalaciones del cliente y/o propias, quien deberá proveer el ambiente
propicio para la capacitación.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="ES">Los interesados en el contenido del sílabus y la cotización respectiva, escribir a:<o:p></o:p></span></div>
<br />
<br />
<b>- Email:</b> <span style="color: #fff2cc;">cesarricardo_guerra19@hotmail.com</span><br />
<b>- </b><b>WhatsApp</b><b>:</b> <span style="color: #fff2cc;">997541831</span><br />
<br />
<div style="text-align: center;">
<b><i><span style="color: #d0e0e3; font-size: large;">Cesar Ricardo Guerra .A.</span></i></b><br /></div>
<a href="https://2.bp.blogspot.com/-XGQFdsPlyyo/Wx3UBbC4u6I/AAAAAAAAB-Y/1Ta2MamKJUga2oC4LneO2J5g2u2fBc07ACLcBGAs/s1600/Titulo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="95" data-original-width="1040" height="57" src="https://2.bp.blogspot.com/-XGQFdsPlyyo/Wx3UBbC4u6I/AAAAAAAAB-Y/1Ta2MamKJUga2oC4LneO2J5g2u2fBc07ACLcBGAs/s640/Titulo.png" width="640" /></a><br />
<div style="text-align: center;">
<br /></div>
<a href="http://www.linkedin.com/pub/cesar-ricardo-guerra-arnaiz/28/8b2/225" style="background-color: black; color: #aa77aa; font-family: "Trebuchet MS", Trebuchet, Verdana, sans-serif; font-size: 13px; text-align: center; text-decoration-line: none;" target="_blank"><i><span style="color: #fff2cc;">http://www.linkedin.com/pub/cesar-ricardo-guerra-arnaiz/28/8b2/225</span></i></a>JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-17989499661720274302017-04-14T07:24:00.006-07:002017-04-14T07:45:17.917-07:00SOLUCIÓN AL MAL ENTENDIMIENTO DE CONCEPTOS SOA<div style="text-align: justify;">
<br />
Buen día luego de un tiempo regreso a escribir un poco sobre un tema que considero importante y que hace unos días, conversando con algunos compañeros, he notado que persiste la problemática y/o desconocimiento de muchos conceptos que derivan de <span style="color: #d0e0e3;"><i>SOA</i></span>.<br />
<br />
Uno de ellos y el cual me enfocaré en esta oportunidad es sobre el problema que se tiene con los conceptos de: <i><span style="color: #cfe2f3;">SERVICIO, WEBSERVICE, REST, APLICACIÓN</span></i>. Mucho colegas ingenieros ya sean <i><span style="color: #d0e0e3;">Consultores, Arquitectos</span></i>, etc, utilizan estas definiciones muy por usar, aparentemente sin conocer la realidad de cada uno y a que está enfocado, y lo que hacen es por ejemplo para hablar de un <i><span style="color: #d0e0e3;">SERVICIO</span></i>, mencionan <i><span style="color: #d0e0e3;">WEBSERVICE</span></i>, o para hacer referencia a un <span style="color: #d0e0e3;"><i>WEBSERVICE </i></span>de un tipo específico lo llaman como <i><span style="color: #d0e0e3;">APLICACIÓN </span></i>y eso está realmente mal. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El objetivo de este artículo es justamente dar a conocer las diferencias entre estas definiciones, para que los que aún tienen problemas con dichos conceptos, sepan aplicarlos correctamente al explicar y/o graficar sus arquitecturas a futuro.</div>
<div style="text-align: justify;">
<br />
A continuación detallaré con mis propias palabras, el concepto utilizado a nivel de <span style="color: #d0e0e3;"><i>TELCOS </i></span>y en realidad el estándar que debería ser utilizado en cualquier rubro respectivamente:<br />
<br />
<span style="color: yellow;"><u>APLICACIÓN</u>:</span><br />
Una <i><span style="color: #d0e0e3;">Aplicación </span></i>se hace referencia al software que interactúa con el usuario por medio una interface gráfica (el <i><span style="color: #d0e0e3;">Front-end</span></i>), está puede estar construida en cualquier lenguaje de programación como <i><span style="color: #d0e0e3;">JAVA </span></i>o <span style="color: #d0e0e3;"><i>.NET</i></span> (<i><span style="color: #d0e0e3;">últimamente: Angular JS + Bootstrap</span></i>). En una <i><span style="color: #d0e0e3;">Arquitectura </span><span style="color: #d0e0e3;">SOA </span></i>las <i><span style="color: #d0e0e3;">Aplicaciones </span></i>son las encargadas de interactuar por medio de la ejecución de sus componentes <i><span style="color: #d0e0e3;">HTML </span></i>(<i>Links, Botones, etc</i>), con un 'inventario de servicios' expuestos por detrás.<br />
<br />
<span style="color: yellow;"><u>SERVICIO</u>:</span><br />
Un <i><span style="color: #d0e0e3;">Servicio </span></i>debe ser considerado como un 'activo de la empresa' y puede ser considerado como <i><span style="color: #d0e0e3;">Servicio </span></i> a nivel de tecnología por ejemplo: un <i><span style="color: #d0e0e3;">WebService</span></i>, un <i><span style="color: #d0e0e3;">EJB</span></i>, un <i><span style="color: #d0e0e3;">MDB</span></i>, etc. El objetivo es que cumplan el objetivo para los que fueron construidos y así mismo sigan sobre todo los principios <span style="color: #d0e0e3;"><i>SOA</i></span>. Finalmente, es importante saber que un Servicio en base a su tipo (muy independientemente del lenguaje en que se desarrolle: <i><span style="color: #d0e0e3;">JAVA, BPEL</span></i>) pueden ser de tipo: </div>
<ul>
<li style="text-align: justify;"><i><span style="color: #6aa84f;"><b><u>Presentación</u>: </b>Servicios que dan la cara a la aplicación (No tienen lógica de negocio), redireccionan.</span></i></li>
<li style="text-align: justify;"><i><span style="color: #6aa84f;"><u>N</u><b><u>egocio</u>: </b> Servicios que orquestan a nivel de sus flujos, la lógica de negocio definida para el proceso.</span></i></li>
<li style="text-align: justify;"><i><span style="color: #6aa84f;"><b><u>Utilitario</u>:</b> Servicios que su objetivo es la reutilización, para el acceso a BackEnd y/o funcionalidades por ejemplo: BD, Plataformas Legacy, Envío de correos, Generación de logs, etc (No tienen lógica de negocio), aquí entran a tallar como parte de este tipo los conceptos de servicios de: ''Conectividad' y 'Datos'. </span></i></li>
</ul>
<b style="text-align: justify;"><b><span style="color: yellow;"><u style="text-align: justify;">WEBSERVICE</u><span style="text-align: justify;">:</span></span></b></b><br />
<div style="text-align: justify;">
Un <i><span style="color: #d0e0e3;">Webservice </span></i>es un tipo de <i><span style="color: #d0e0e3;">Servicio</span></i>, pero que cumple los protocolos como: <i><span style="color: #d0e0e3;">SOAP</span></i> &<i><span style="color: #d0e0e3;"> REST</span></i>. Si hablamos del primer protocolo estos pueden manejar: <i><span style="color: #d0e0e3;">SOAP 1.1</span></i> o <i><span style="color: #d0e0e3;">SOAP 1.2</span></i> y manejar su comunicación tipo: <i><span style="color: #d0e0e3;">Síncrono, Asíncrono y Oneway</span></i> (XML en realidad). Así mismo, el segundo protocolo puede manejar una comunicación basada en <i><span style="color: #d0e0e3;">XML</span></i> & <i><span style="color: #d0e0e3;">JSON </span></i>(<i><u>Formatos distintos</u></i>) y si cumple en su manejo con las operaciones estándar: <i><span style="color: #d0e0e3;">GET, POST, DELETE</span></i>, etc, se le conoce como <i><span style="color: #d0e0e3;">RESTfull</span></i>.<br />
<br /></div>
<div style="text-align: justify;">
<div style="text-align: justify;">
<a href="https://3.bp.blogspot.com/-qujY2kt3qiE/WPDbQwqB7dI/AAAAAAAABxo/I1OGbf7kTU4feheP1Gcv3bXcYXQRGYVIgCLcB/s1600/Capas%2Bx%2BTipo%2Bde%2BServicio.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="175" src="https://3.bp.blogspot.com/-qujY2kt3qiE/WPDbQwqB7dI/AAAAAAAABxo/I1OGbf7kTU4feheP1Gcv3bXcYXQRGYVIgCLcB/s400/Capas%2Bx%2BTipo%2Bde%2BServicio.png" width="400" /></a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
De esta manera se ha tratado de explicar de la manera más amigable los diferentes conceptos <i><span style="color: #d0e0e3;">SOA </span></i>que usualmente generan controversia en su entendimiento.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div>
<div style="text-align: justify;">
<br /></div>
</div>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com1tag:blogger.com,1999:blog-5458598926546072955.post-61349822613416919742016-11-13T21:40:00.008-08:002018-06-10T18:46:21.327-07:00TALLER DE CAPACIÓN ORACLE SOA SUITE 12c<div style="text-align: justify;">
<br />
El presente post es brindado para dar detalles por el servicio de capacitación enfocado al equipo de (<i><u>programadores, arquitectos, funcionales, et</u></i>c) de las diferentes empresas deseosas en iniciar y/o tener conocimiento con relación al manejo de la plataforma <b><i>Oracle SOA Suite 12</i></b>c, (<i><b>OSB, BPEL</b></i>) tanto en teoría como práctica.<br />
<br />
La capacitación se deberá brindar en las instalaciones del cliente, quien deberá proveer el ambiente propicio para la capacitación.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El servicio de capacitación seguirá al <b>100%</b> el sílabus propuesto y compartido por el expositor. Así mismo, los interesados en el contenido del sílabus con la cotización respectiva, escribir a:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<b>- Email: </b><span style="color: #fff2cc;">cesarricardo_guerra19@hotmail.com</span><br />
<b>- WhatsApp:</b> <span style="color: #fff2cc;">997541831</span><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<br />
<div style="text-align: justify;">
<div style="text-align: center;">
<i style="color: #a2c4c9; font-size: x-large;">Cesar Ricardo Guerra .A.</i></div>
</div>
<br />
<span style="color: #a2c4c9; font-size: medium;"></span>
<span style="color: #a2c4c9; font-size: medium;">
</span></div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-XGQFdsPlyyo/Wx3UBbC4u6I/AAAAAAAAB-Y/1Ta2MamKJUga2oC4LneO2J5g2u2fBc07ACLcBGAs/s1600/Titulo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="95" data-original-width="1040" height="57" src="https://2.bp.blogspot.com/-XGQFdsPlyyo/Wx3UBbC4u6I/AAAAAAAAB-Y/1Ta2MamKJUga2oC4LneO2J5g2u2fBc07ACLcBGAs/s640/Titulo.png" width="640" /></a></div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<div style="text-align: justify;">
<div style="text-align: center;">
<a href="http://www.linkedin.com/pub/cesar-ricardo-guerra-arnaiz/28/8b2/225" target="_blank"><i><span style="color: #fff2cc;">http://www.linkedin.com/pub/cesar-ricardo-guerra-arnaiz/28/8b2/225</span></i></a></div>
</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com1tag:blogger.com,1999:blog-5458598926546072955.post-47718698253874476842016-10-15T19:13:00.003-07:002016-10-15T19:37:36.741-07:00CONSIDERACIONES EN LA APLICACIÓN DE 'TIMEOUT'.<div style="text-align: justify;">
En esta oportunidad tocaré un punto importante que es el<b><i><span style="color: #d0e0e3;"> 'Control de TimeOut'</span></i></b> aplicado en el desarrollo <b>SOA</b>, este tema rinde un papel muy importante ya que hace referencia al delimitante de tiempo aplicado a los <b><i><span style="color: #fff2cc;">BE (BackEnds).</span></i></b></div>
<br />
<div style="text-align: justify;">
<i><span style="color: yellow;">(<b><u>BE</u></b>: "Hace referencia a toda Interface de comunicación reutilizada como: BD, WS, EJB, PLATAFORMA, etc, que no forma parte del desarrollo principal").</span></i></div>
<br />
<div style="text-align: justify;">
Explicándolo de una manera más detallada, cuando se desarrolla un servicio independientemente del tipo que sea: <b>SOAP/REST </b>o <b>EJB</b>, es importante que exista un <i><span style="color: #d0e0e3;">'Control de TimeOut'</span></i> obligatoriamente con relación a todos los <b>BE </b>(<b>Síncronos</b>) que son parte del flujo del<b><i> 'Servicio Principal'</i></b>. </div>
<br />
<div style="text-align: justify;">
Resalto esto ya que en mi experiencia me he encontrado con todo tipo de servicios: <b><i>Bien, Mal</i></b> y <b><i>Pésimamente </i></b>construidos. Así mismo, en muchos de estos servicios mal construidos estaban usualmente enfocados en sus flujos a exponer una <b><i><span style="color: #d0e0e3;">'Lógica de Negocio'</span></i></b>, pero sin aplicar un control relacionado a los <b>BE</b>.</div>
<br />
<br />
<b><span style="color: yellow;">¿<u><i>QUE IMPLICA QUE LOS BE, NO TENGAN TIMEOUT</i></u>?.</span></b><br />
<br />
<div style="text-align: justify;">
El impacto es por ejemplo que ante un problema interno propio del <b>BE</b>, este demore más de lo normal incluso quedarse como se dice <b><u>pegado</u> </b>y si no hay un '<b><i>Control TimeOut'</i></b>, el hilo de la ejecución se quedará ahí esperando hasta que el término de procesamiento del y eso está <b>mal (</b><i><u>ya que no puede durar eternamente</u></i><b>)</b>. </div>
<br />
<div style="text-align: justify;">
El <b><u>impacto</u> </b>va contra el tiempo de respuesta del <b><i>'Servicio Principal</i></b>', el cual justamente como <b>RNF </b>(<i><u>Requisito No Funcional</u></i>), un servicio consumido debería cumplir con un tiempo de procesamiento máximo.</div>
<br />
<br />
<span style="color: yellow;">¿<u><i>COMO SABER CUANTO TIEMPO DEBERÍA ASIGNAR</i></u>?.</span><br />
<br />
<div style="text-align: justify;">
Así los servicios sean muy rápidos, el tiempo a aplicar se debe se estimar en segundos y es dependiendo el tamaño del flujo existente, así como de la cantidad de las iteraciones contra <b>BE </b>que se requiera. Pero analizando en si no es bueno que un servicio tenga internamente más de <span style="color: #d0e0e3;">10 </span><b>BE </b>dentro de su flujo, ya que si se tiene más lo mejor es segmentar en otro servicio. Sobre el tiempo se podría aplicar un tiempo máximo por <b>BE </b>entre <span style="color: #cfe2f3;">10 </span>y <span style="color: #cfe2f3;">15 seg</span>.</div>
<br />
<span style="color: yellow;"><b><br />¿<u><i>Y QUE HAY DE LOS REINTENTOS</i></u>?. </b></span><br />
<br />
<div style="text-align: justify;">
Los reintentos son tratamientos que deben de ser considerados también para los <b>BE</b>, pero para los que analizando de alguna manera son <b><u>inestables</u> </b>(<i><u>se caen cada cierto tiempo</u></i>), o también sus respuestas algunas veces demoran más de lo normal, etc. Los reintentos se debe activar ante alguna <b>Exception </b>de tipo <b><u>Técnica</u> </b>de tipo: <span style="color: #d0e0e3;"><i>'No Dispobilidad'</i>,<i> 'Error en BE'</i>,<i> 'TimeOut'</i>,</span> etc.</div>
<br />
<div style="text-align: justify;">
En estos casos se recomienda aplicar un <u><b><i>Máximo de Reintentos de 3 vece</i></b>s</u>, luego de estos retornar el response con la falla. Así mismo, es importante considerar que el <b>TimeOut </b>debe ser es incremental, que por ejemplo ante cada reintento del mismo <b>BE </b>el <b>TimeOut </b>se debe duplicar:</div>
<br />
<b><u> Ejemplo</u>:</b><br />
<ul>
<li><i><span style="color: #cfe2f3;">Reintento#1 => TimeOut => 5 seg.</span></i></li>
<li><i><span style="color: #cfe2f3;">Reintento#2 => TimeOut => 5 seg. </span></i></li>
<li><i><span style="color: #cfe2f3;">Reintento#3 => TimeOut => 5 seg. </span></i></li>
</ul>
<div style="text-align: justify;">
Esto quiere decir que sí tenemos un <i><span style="color: #cfe2f3;">'Servicio Principal' </span></i>que por ejemplo llama solo a <b>1 BE </b>con <b>3 reintentos</b> de <b>5 seg</b>. La <b><i><u>‘aplicación consumidora’</u></i></b> debería considerar asignarle al consumir el: <i><span style="color: #d0e0e3;">'Servicio Principal'</span></i>, un mínimo de tiempo de: <span style="color: #fff2cc;">16 seg</span>. </div>
<br />
<br />
<b><span style="color: yellow;"> ¿<u><i>Y QUE HAY DE LAS 'HUMAN INTERVENTIONS'</i></u>?.</span></b><br />
<br />
<div style="text-align: justify;">
Lo conocido como<i><span style="color: #cfe2f3;"> 'Human Interventions’</span></i> son <b><i>Políticas </i></b>enfocadas a un control diferente (<i><u>normalmente trabajadas de la mano con los '<b>Rententos</b>'</u></i>), por ejemplo para casos en que los servicios son de tipo <b><u>Asíncronos</u><i> </i></b>y los flujos llaman a <b>BE </b>reutilizables. Así mismo, el manejo de '<i><span style="color: #cfe2f3;">Human Interventions</span></i>’ normalmente son soportadas por servicios directamente relacionados a <b><u>plataformas SOA</u> </b>de vendors como <b>ORACLE / IBM</b>.</div>
<br />
<div style="text-align: justify;">
Su aplicación se realiza con apoyo del negocio identificando los casos especiales con relación a <b>BE </b>que se requieren controlar de manera diferente. La <b>política </b>está enfoca a que ante alguna <b>Exception </b>de tipo <b>Técnica </b>como: </div>
<br />
<div style="text-align: justify;">
<i><span style="color: #d0e0e3;">'No Dispobilidad', 'Error en BE', 'TimeOut',</span></i> etc. El hilo del flujo se queda en un estado <b><u>especial</u></b>, hasta que un <b><u>operario</u> </b>se <i>conecte a la plataforma, identifique dicho estado, revise la excepción, mande a corregirla y luego de estabilizarla</i>, procesa a desde donde se cayó manualmente relance el mensaje al <b>BE </b>y el hilo del flujo continúe. </div>
<br />
<div style="text-align: justify;">
Finalmente contra de la aplicación de <i><span style="color: #cfe2f3;">'Human Interventions',</span></i> es justamente la necesidad de un <b><u>operario</u></b>, que producirá una demora considerable en el proceso, debido a ello su aplicación debe estar de la mano con la <i><u>coordinación con el negocio</u></i>.</div>
<br />
<br />
<div style="text-align: justify;">
Espero que este artículo les sirva para más adelante cuando se escuche la palabra <b>Timeout </b>se le considere con más seriedad de la que normalmente se le tiene.</div>
<div class="MsoNormal">
<br />
<br />
<br />
<o:p></o:p></div>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-78755117429236491372016-04-16T12:12:00.005-07:002019-08-31T22:02:56.804-07:00MODELO DE DATOS: 'CANÓNICO'<div style="text-align: justify;">
<br />
Este modelo consiste en definir atributos estándares y sus respectivas características, diseñados a nivel de entidades. Esto con la finalidad de la reutilización de esta información a nivel de los contratos de servicio, evitando de esta manera cualquier tipo de duplicidad en los datos. </div>
<br />
<div style="text-align: justify;">
El objetivo es que el modelo canónico proporcione los formatos de
intercambio de datos del negocio, de manera que todos los componentes (<i><b>servicios,
aplicaciones, etc</b></i>), sólo necesiten saber (como máximo) su propio
formato de datos y el formato de datos predeterminado (el que comparte
dentro del bus de servicio), ya que el modelo canónico de mensajes
tambien representa el formato estándar utilizado para intercambiar
información de negocios en un bus de servicio.</div>
<br />
Dicho modelo está enfocado en la aplicación dos patrones: <br />
<br />
<span style="color: #b6d7a8;"><b><i>- SCHEMA CENTRALIZATION.<br />- CANONICAL SCHEMA.</i></b></span><br />
<br />
Dando solución a los <u><span style="color: #ffe599;"><i><b>PROBLEMAS</b></i></span></u><span style="color: #ffe599;"><i><b> </b></i></span>siguientes:<br />
<span style="color: #fff2cc;"><br /></span><span style="color: #fff2cc;"><span style="color: yellow;">¿Cómo pueden los contratos de servicio ser diseñados para evitar la definición de datos redundantes?</span>. </span><br />
<div style="text-align: justify;">
Esto se refiere específicamente al contenido de los esquemas redundantes (muy comúnmente) y/o mal diseñados que en si son difíciles de gobernar.</div>
<span style="color: #fff2cc;"><br /></span><span style="color: yellow;">¿Cómo pueden los servicios diseñarse para evitar la transformación del modelo de datos?. </span><br />
<div style="text-align: justify;">
Esto se refiere e impacta directamente a servicios con esquemas diferentes, con datos similares (<u><i>Redundantes</i></u>) y que requieren de transformación, con esto aumenta el esfuerzo de desarrollo, la complejidad del diseño y la sobrecarga de rendimiento en tiempo de ejecución, ya que el objetivo es llegar a la Interoperabilidad intrínseca (<u><i>de manera natural</i></u>). </div>
<br />
<br />
La <u><b><i><span style="color: #ffe599;">SOLUCIÓN </span></i></b></u>sería:<br />
<br />
<div style="text-align: justify;">
Crear y seleccionar esquemas existentes físicamente separados del contrato de servicio (.<i><b>WSDL</b></i>), ya que justamente la representación más común que se utiliza para el modelo canónico mensaje es un conjunto de esquemas <i><b>XML</b></i>. Esto tiene la ventaja de hacer el tipo y definiciones de mensajes (esquemas) con el fin de reutilizarlos y compartirlos entre varios contratos.<br />
<br /></div>
<div style="text-align: justify;">
Un modelo de datos canónico es conjunto definido de tipos, elementos, atributos y relaciones que representan las entidades de negocios, estas están justamente basadas en los requerimientos del negocio para el proyecto SOA. Los modelos de datos (esquemas) deben estar estandarizados (<i><b>Modelo Canónico</b></i>) a nivel de entidades, almacenado y versionado por medio de alguna herramienta que permita centralizar todo el <i><b>Modelo Canónico</b></i> (<b>MDL</b>) de entidades, para que ante algún requerimiento de información por parte de un servicio dentro del contrato se importe la referencia a la entidad y se reutilice el dato requerido. Esto evitará cualquier tipo de redundancia de información, problema de transformación a nivel de <b>Xsd</b>, etc.<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-uWOefA5GFKQ/Vx78hGY1F7I/AAAAAAAABqc/EdyrMOkLE1sjTv0O2QfxHGLEqLeQ7TVCgCLcB/s1600/CANONICAL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://4.bp.blogspot.com/-uWOefA5GFKQ/Vx78hGY1F7I/AAAAAAAABqc/EdyrMOkLE1sjTv0O2QfxHGLEqLeQ7TVCgCLcB/s320/CANONICAL.jpg" width="320" /></a></div>
<br />
<span style="color: yellow;"><i><b>¿Cómo diseñar un MDL?</b></i></span><br />
<div style="text-align: justify;">
Dependiendo de cuan grande sea la empresa puede que ya tenga algunos modelos de referencia (para las Telecomunicaciones existe <i><b>SID-TM Forum</b></i>, etc.). La idea es tener un modelo base inicial para poder trabajar y que se ajusta a las necesidades, al cual se puede complementando con más entidades en base al levantamiento de información que se realice. Aquí están algunas ideas sobre cómo lograr un buen modelo conceptual <i><b>MDL </b></i>(<u>muy similar a cualquier otro modelo de datos</u>):</div>
<br />
<span style="color: #b6d7a8;"><i>- Validar si se seguirá algun modelo base del modelo canónico (como <b>SID</b>).</i></span><br />
<span style="color: #b6d7a8;"><i>- Enumerar todas las entidades principales que requiere su empresa (cliente, pedido, etc.).<br />- Relacionar las entidades.<br />- Especificar los atributos de las entidades.</i></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-qcOkeCWIXtU/VxMd8nOSvWI/AAAAAAAABo4/fqUqRP7eScIBQTto-hFvj4Ru0tISPKf1gCLcB/s1600/SID.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="253" src="https://3.bp.blogspot.com/-qcOkeCWIXtU/VxMd8nOSvWI/AAAAAAAABo4/fqUqRP7eScIBQTto-hFvj4Ru0tISPKf1gCLcB/s320/SID.png" width="320" /></a></div>
<div style="text-align: justify;">
<span style="color: #fff2cc;"><br /></span></div>
<div style="text-align: justify;">
<i><b><span style="color: #fff2cc;">TeleManagement Forum</span></b></i> <span style="color: #fff2cc;">(<span style="color: #fff2cc;"><b>TMF</b></span>)</span> han definido un conjunto de cuatro marcos conocidos colectivamente como <i><span style="color: #fff2cc;"><b>Frameworx</b></span></i>. Los marcos clave proporcionan un valor empresarial que son el <span style="color: #fff2cc;"><i><b>'Marco de la Información</b></i>'</span> <span style="color: #fff2cc;">(<span style="color: #fff2cc;"><b>SID</b></span>)</span> y el <i><b><span style="color: #fff2cc;">'</span><span style="color: #fff2cc;">Marco de Procesos</span></b></i><span style="color: #fff2cc;">'</span> <span style="color: #fff2cc;">(<span style="color: #fff2cc;"><b>eTOM</b></span>)</span>. Ambos pueden ofrecer una mayor agilidad en los negocios. Dichos modelos <b>SID </b>representan el ejemplo más importante de los esfuerzos puestos en desarrollar formas eficientes de compartir información entre sistemas de telecomunicaciones. Incluso, el <b>SID </b>debe convertirse en el lenguaje que <b>SOA </b>proporcione como vocabulario, gramática y sintaxis base que utilicen los servicios para proporcionar o recibir información. Así mismo, se debe de asegurarse de que todo el tráfico de mensajes a través de la <span style="color: #fff2cc;"><b>ESB</b></span> esté alineado <b>SID</b>, así el esfuerzo necesario para integrar los servicios se reducirá drásticamente así como también se reducirá los costos de mantenimiento respetivamente.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-gtotR07WEVE/Vx70OCY36UI/AAAAAAAABqM/4THG6Txbf7IpP5VLco5CiiBIjPlbUy7-gCLcB/s1600/ESB_Integration_With_SID.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="131" src="https://1.bp.blogspot.com/-gtotR07WEVE/Vx70OCY36UI/AAAAAAAABqM/4THG6Txbf7IpP5VLco5CiiBIjPlbUy7-gCLcB/s320/ESB_Integration_With_SID.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Por otro lado, una contra que se debería tener en consideración es que ante algún cambio en el <span style="color: yellow;">'<span style="color: #fff2cc;"><i><b>tipo/tamaño</b></i></span>'</span> del dato perteneciente a la entidad, se debe de considerar que esto impactará en las ‘<b>N</b>’ aplicaciones que reutilizan dicha entidad (por medio de sus <b>Xsd</b>), y en las otras ‘<b>N</b>’ aplicaciones consumidoras que también reutilizan en sus comunicaciones.</div>
<br />
<span style="color: yellow;"><i><b>¿Cómo implementar un MDL?</b></i></span><br />
<div style="text-align: justify;">
Para implementar un <i><b>MDL </b></i>como ya se ha mencionado se debe de diseñar, modelar y relacionar las entidades de negocio, para esto uno se puede apoyar en herramientas empresariales como<i><b> Enterprise Architect</b></i> (<b>Sparx</b>)<i><b>, </b></i>que permitira diseñar desde un <i><b>Diagrama de Clases</b></i> <b>'UML'</b>, poder modelar las entidades y a si mismo y generar en base al diagrama de clases, esquemas <b>.XSD </b>y clases .<b>JAVA</b>.<i> <b><br /></b></i></div>
<i><b></b></i>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-e6IjIIo4i9Y/VxMj416FjFI/AAAAAAAABpY/lv4BdDKRAuIpgarHMpxJLUwb5t9KUeyuACLcB/s1600/EA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://4.bp.blogspot.com/-e6IjIIo4i9Y/VxMj416FjFI/AAAAAAAABpY/lv4BdDKRAuIpgarHMpxJLUwb5t9KUeyuACLcB/s320/EA.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
El <i><b>Modelo Canónico</b></i> de las entidades completo puede ser diseñado exportado y reutilizado en los para cada servicio dentro de sus <i><b>contratos </b></i>respectivamente:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-q5b2PaCZTDE/VxMj4oJsWiI/AAAAAAAABpU/ZXHN5uGU838WSQJxfBpz1zgalVqxeNwFwCLcB/s1600/modelo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="268" src="https://4.bp.blogspot.com/-q5b2PaCZTDE/VxMj4oJsWiI/AAAAAAAABpU/ZXHN5uGU838WSQJxfBpz1zgalVqxeNwFwCLcB/s320/modelo.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Tal como se mencionó durante el desarrollo de un<b> Servicio Web</b> la idea es reutilizar el <b>Modelo Canónico </b>estandar dentro del <b><i>Contrato </i></b>tal como se puede apreciar en la imagen: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-7GxbMzc7OXU/VxMqPHIWRPI/AAAAAAAABpw/c9WJggMrBCcHV5dOYFhBOjDH0qBAlQWpQCLcB/s1600/DummyCDM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://3.bp.blogspot.com/-7GxbMzc7OXU/VxMqPHIWRPI/AAAAAAAABpw/c9WJggMrBCcHV5dOYFhBOjDH0qBAlQWpQCLcB/s320/DummyCDM.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Finalmente, una de las cosas más importantes que se debe también hacer, es educar a la empresa en el uso del <i><b>MDL</b></i>, y las ventajas a largo plazo de la misma. La gente a menudo no se enfocan a largo plazo y prefieren optar un enfoque más pragmático para resolver los problemas que se enfrentan sin tener en cuenta el impacto de la misma en el futuro. </div>
<br />
<div style="text-align: justify;">
Para los intersados se pueden descargar los archivos utilizados desde aquí:</div>
<br />
<span style="color: #fff2cc;"><b><u>Modelado</u>:</b></span><br />
<a href="http://www.mediafire.com/download/zkfz3x3xazkrci6/XSD_Model_Generator.zip" target="_blank">http://www.mediafire.com/download/zkfz3x3xazkrci6/XSD_Model_Generator.zip</a><br />
<br />
<span style="color: #fff2cc;"><u><b>Wsdl/Xsd</b></u>:</span><br />
<a href="http://www.mediafire.com/download/n2lbxbnxnk40i24/ModeloCanonico_Dummy.zip" target="_blank">http://www.mediafire.com/download/n2lbxbnxnk40i24/ModeloCanonico_Dummy.zip</a><br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-88374962878392860972016-03-29T19:07:00.003-07:002016-03-29T19:53:56.295-07:00Weblogic Overload Error ...<br />
Es importante saber que <i><b>Weblogic </b></i>internamente maneja un pool de conexiones por cada <i><b>DataSource</b></i> (<i><b>XA / NOXA</b></i>), que es creado en su entorno. Normalmente este <i><b>DataSource </b></i>al ser creado se le asigna un soporte automático de <span style="color: #fff2cc;"><i><b>15 hilos</b></i> (<u><b>paralelos</b></u>)</span> de conexión (<u>capacidad máxima</u>), los cuales se irán liberando conforme a su correcto uso.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-UsAJ39pZQ-s/Vvs2PTZo1lI/AAAAAAAABoQ/imvTJcWKYOo93X2U50tsdRivaKqD7eSzg/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://1.bp.blogspot.com/-UsAJ39pZQ-s/Vvs2PTZo1lI/AAAAAAAABoQ/imvTJcWKYOo93X2U50tsdRivaKqD7eSzg/s320/1.png" width="320" /></a></div>
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
Para la simulación de este error <span style="color: #fff2cc;"><i>Overload </i></span>en <b><i>Weblogic </i></b>se ha preparado un <b>Dummy </b>en <b>Java </b>que se conectará por medio de un <b>JNDI </b>de <i><b>Weblogic </b></i>a un <b><i>Store Procedure</i></b> y lo estresará de diferentes maneras para poder obtener dicho escenario de error.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://3.bp.blogspot.com/-VKsVOVdVcFE/Vvs2jbTtOUI/AAAAAAAABoU/uLkbAmAx2bMj69XibQNEdUYOhqlLx028Q/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://3.bp.blogspot.com/-VKsVOVdVcFE/Vvs2jbTtOUI/AAAAAAAABoU/uLkbAmAx2bMj69XibQNEdUYOhqlLx028Q/s320/2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://1.bp.blogspot.com/-Utr9cGCkDMo/Vvs2236dmQI/AAAAAAAABoY/Hx9RM2VlsOIqlj0lX8HNZC6TMu3WwMDrQ/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="159" src="https://1.bp.blogspot.com/-Utr9cGCkDMo/Vvs2236dmQI/AAAAAAAABoY/Hx9RM2VlsOIqlj0lX8HNZC6TMu3WwMDrQ/s320/3.png" width="320" /></a></div>
<div style="text-align: center;">
<br />
<div style="text-align: left;">
Este error típico de <i><b>Weblogic </b></i>se puede dar si es que se incurre en alguna de las dos formas siguientes .........</div>
</div>
<br />
<br />
Los interesados pueden <u><b>descargar</b></u><b> </b>el artículo completo desde aquí: <a href="http://www.mediafire.com/download/6be8xbna38qa65x/Weblogic_Overload_Error.pdf">http://www.mediafire.com/download/6be8xbna38qa65x/Weblogic_Overload_Error.pdf</a><br /><br />Para <u><b>descargar </b></u>las fuentes del Dummy (<b>Eclipse</b>): <a href="http://www.mediafire.com/download/d425dsgkgfmqm33/Dummy_JNDI_Overload.zip" target="_blank">http://www.mediafire.com/download/d425dsgkgfmqm33/Dummy_JNDI_Overload.zip</a><br /><br /><br /><br />
<div style="text-align: left;">
<br /></div>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-2126790015746255832016-03-20T15:13:00.002-07:002016-03-20T19:52:48.111-07:00APACHE JMETER (Enfoque WS)<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
Un tema muy importante durante los proyectos de tipo <i><b>SOA</b></i>, 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 <b>tps </b>(<u><i>transacciones por segundo</i></u>), 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.</div>
<div style="text-align: justify;">
<br />
<b><i>Apache JMeter</i></b> es un proyecto de <b><i>Apache </i></b>que puede ser utilizado como una <u><i>herramienta de pruebas unitarias</i></u> 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.</div>
<br />
<div style="text-align: center;">
<a href="https://4.bp.blogspot.com/-ICf60zSZ930/Vu8e9n7aDmI/AAAAAAAABn0/3_2N8OgXlkE_uR4B3gYWusp82YGAbDk9w/s1600/logo.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-ICf60zSZ930/Vu8e9n7aDmI/AAAAAAAABn0/3_2N8OgXlkE_uR4B3gYWusp82YGAbDk9w/s1600/logo.jpg" /></a></div>
<br />
<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br />
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 <i><b>Servicio Web</b></i> utilizando esta herramienta. Así mismo, se están cubriendo detalladarmente los siguientes puntos:</div>
<br />
<span style="color: #ffe599;"><i>- Requerimientos.</i></span><br />
<span style="color: #ffe599;"><i>- Instalación.<br />- Configuración y Prueba.</i></span><br />
<br />
Para descargar este tutorial paso a paso ingresar aquí: <br /><a href="http://www.mediafire.com/download/03m0w2k8kefhiii/Tutorial+Apache_JMeter_v2.0.pdf" target="_blank">http://www.mediafire.com/download/03m0w2k8kefhiii/Tutorial+Apache_JMeter_v2.0.pdf</a><br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-5221978959735135312016-02-21T19:27:00.001-08:002016-02-21T19:31:19.713-08:00BENEFICIOS DE MANEJAR VARIOS DOMINIOS<div style="text-align: justify;">
<br />
Un <span style="color: #a2c4c9;"><b>dominio </b></span>de <b>Weblogic Servidor</b> (<b>WLS</b>), es una unidad administrativa perteneciente a un Servidore de Aplicaciones. Asi mismo, sólo un administrador debería de tener conocimiento de dominios existentes. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9VNUpJHxViY/VsqAuxdg1CI/AAAAAAAABnQ/CayPVw8BbSk/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="219" src="https://1.bp.blogspot.com/-9VNUpJHxViY/VsqAuxdg1CI/AAAAAAAABnQ/CayPVw8BbSk/s320/1.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
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 (<b><i>contabilidad, manufactura, transporte, et</i><i>c</i></b>).</div>
<br />
<div style="text-align: justify;">
Por otro lado, una empresa puede querer tener todas sus aplicaciones en diferentes dominios que puedan ir incorporando. Debido a que a menudo <i><u>es imposible ampliar uno solo dominio para abarcar el total de aplicaciones de toda la empresa</u></i>. 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.</div>
<br />
<div style="text-align: justify;">
Finalmente, para mantener un correcto dominio (<b>segmentado / distribuido</b>) para la administración, <u><i>se debe de separar las aplicaciones en '<b>multiples dominios</b>' permitiendo que las aplicaciones en un dominio, puedan acceder a los servicios en otros dominios</i></u>. </div>
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-52245961404688342042016-02-14T11:26:00.002-08:002016-02-14T11:29:39.564-08:00CENTRALIZAR INICIO DE SERVERs<div style="text-align: justify;">
<br />
Muchos de nosotros que trabajamos en nuestros ambientes con muchos <i><b>servidores de aplicaciones</b></i>, <b><i>contenedores de servlets</i></b>, 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 <span style="color: #fff2cc;"><i>Iniciar<b> </b></i></span>y/o <span style="color: #fff2cc;"><i>Detener </i></span>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. <br />
<br />
Una solución común a este problema es tener un<b> .txt</b> con todas las rutas como informativo por medio de un acceso directo en nuestro escritorio. Otra es ir a <span style="color: #fff2cc;"><b><i>inicio/windows/NOMBRE_SERVER/...</i></b></span> , 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. </div>
<br />
<div style="text-align: justify;">
Para ello la solución pensada y planteada es: <span style="color: #a2c4c9;"><u><i><b>Centralizar</b></i></u></span><i><b> </b></i>todas estas ubicaciones de rutas de servidores en un archivo <span style="color: #fff2cc;"><b>.bat</b></span> que como se menciona centralice y en base a una orden <span style="color: #fff2cc;"><i><b>Inicie y/o Detenga </b></i></span>los Servidores requeridos. Para ello haremos lo siguiente:<br />
<br />
<b>1. </b>Se debe crear un archivo<span style="color: yellow;"><b> .bat</b></span> de la siguiente manera:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-cLZE8Z_vTQM/VsDQTCrUn7I/AAAAAAAABmo/hoA_0Y6IKvQ/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="https://4.bp.blogspot.com/-cLZE8Z_vTQM/VsDQTCrUn7I/AAAAAAAABmo/hoA_0Y6IKvQ/s320/3.jpg" width="320" /></a></div>
<br />
<b>2.</b> En el <b><u><i>1er cuadro en Rojo</i></u> </b>se definen el menú que se visualizará para seleccionar.<br />
<br />
<b>3.</b> En el <b><u><i>2do cuadro en Rojo</i></u></b> se matricula las letras definidas en el 1er paso, según el orden, para el Choise correspondiente.<br />
<br />
<b>4. </b>En el <b><u><i>3er cuadro en Rojo</i></u></b> se ingresar los <i><b>IF's</b></i> correspondientes a las Letras anteriores y que invocarán a <b>LABELs </b>por cada configuración a crear más a abajo:<br />
<br />
<div style="text-align: center;">
<a href="https://2.bp.blogspot.com/-sVaGGHsKPPA/VsDKIR2sA1I/AAAAAAAABmU/wkPmQD6R8-A/s1600/1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="247" src="https://2.bp.blogspot.com/-sVaGGHsKPPA/VsDKIR2sA1I/AAAAAAAABmU/wkPmQD6R8-A/s320/1.jpg" width="320" /></a></div>
<b><br />5. </b>Se crearán la configuración por cada <i><b>LABEL </b></i>un bloque con la <span style="color: #fff2cc;"><b><i>DOMAIN_HOME</i></b></span> y en base a esta, las variables: <span style="color: #fff2cc;"><i><b>COMANDO_START</b></i></span> y <span style="color: #fff2cc;"><b><i>COMANDO_STOP</i></b></span> para los controles respetivos. Esto se deberá realizar por cada configuración nueva que se requiera hacer:<br />
<br />
<div style="text-align: center;">
<a href="https://4.bp.blogspot.com/-gla3uSC_G84/VsDKH4GqRAI/AAAAAAAABmQ/wUKtcMheoX0/s1600/2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://4.bp.blogspot.com/-gla3uSC_G84/VsDKH4GqRAI/AAAAAAAABmQ/wUKtcMheoX0/s320/2.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El resultado de esto es un herramienta que <u><i>centralizará todos los acceso al inicio de los servidores</i></u> 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: <u><i><b>SOAUITE. OSB, Tomcat, ETOM,</b></i></u> etc ...</div>
<div style="text-align: left;">
</div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-96ILpWlY9zs/VsDTNqOrLFI/AAAAAAAABm0/2sjUI_2HCOM/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://1.bp.blogspot.com/-96ILpWlY9zs/VsDTNqOrLFI/AAAAAAAABm0/2sjUI_2HCOM/s320/4.jpg" width="320" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
Para los interesados pueden descargar el <b>.bat</b> desde aquí: <a href="http://www.mediafire.com/download/p76ttp6ppry6or2/Iniciador_Servidores.zip" rel="nofollow" target="_blank"><br />http://www.mediafire.com/download/p76ttp6ppry6or2/Iniciador_Servidores.zip</a><br />
<br />
<br /></div>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-3024804774405666732016-02-13T22:31:00.002-08:002016-02-14T09:54:51.994-08:00TRANSFORMACIONES DE FORMATOS CON 'MFL' EN OSB<div style="text-align: justify;">
Usualmente en <i><b>BPEL </b></i>se acostumbra utilizar el '<i><b>File Adapter</b></i>' para leer archivos <i><b>NO XML</b></i> y transformarlos a formato <i><b>XML</b></i>, pero en <i><b>OSB </b></i>junto con el adaptador de archivos también existe otra forma NO muy conocida de realizar dicha tarea. Esta se conoce como <i><b>MFL </b></i>y la podemos utilizar para transformar datos <i><b>NO XML</b></i> a datos <i><b>XML </b></i>y viceversa.</div>
<br />
<div style="text-align: justify;">
En este post se procederá a mostrar cómo transformar los datos <i><b>NO XML</b></i> a datos <i><b>XML </b></i>utilizando <i><b>MFL</b></i>. Para mostrar este funcionamiento, se ha preparado un dummy de un <i><b>Servicio Virtual</b></i> que consistirá en lo siguiente:</div>
<div style="text-align: justify;">
<br />
<span style="color: #a2c4c9;"><i>"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".</i></span></div>
<br />
<b><span style="color: #fff2cc;"><u>DUMMY</u></span>:</b><br />
<br />
<div style="text-align: justify;">
<b>1.</b> Considerando que la Trama <i><b>INPUT </b></i>tendrá este formato y será ubicado en una ruta local (<u><i>especificada en el Proxy Service</i> <i>más adelante</i></u>):</div>
<br />
<br />
<div style="text-align: center;">
<a href="https://1.bp.blogspot.com/-GWBvjpp4Vr0/VsAZqgciLEI/AAAAAAAABiI/iyP3XBjIPRg/s1600/1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://1.bp.blogspot.com/-GWBvjpp4Vr0/VsAZqgciLEI/AAAAAAAABiI/iyP3XBjIPRg/s320/1.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>2.</b> Definir y crear una <u><i><b>RUTA BASE</b></i></u>, que contendrá <u><b>4 directorios</b></u>:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #fff2cc;"><i>- <u><b>TEMP</b></u>: Directorio encargado de procesar los archivos de manera temporal.</i></span></div>
<div style="text-align: justify;">
<span style="color: #fff2cc;"><i>- <u><b>ERROR</b></u>: Directorio encargado de almacenar los archivos con error en el proceso.</i></span></div>
<div style="text-align: justify;">
<span style="color: #fff2cc;"><i>- <u><b>INPUT</b></u>: Directorio donde se ubicarán las tramas a procesar.</i></span></div>
<div style="text-align: justify;">
<span style="color: #fff2cc;"><i>- <u><b>OUTPUT</b></u>: Directorio donde se generarán las tramas de respuesta del proceso.</i></span></div>
<br />
<div style="text-align: center;">
<a href="https://1.bp.blogspot.com/-Qr1u3kQsHOU/VsAZq3ER8RI/AAAAAAAABiM/nPQzosAvQV4/s1600/2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="139" src="https://1.bp.blogspot.com/-Qr1u3kQsHOU/VsAZq3ER8RI/AAAAAAAABiM/nPQzosAvQV4/s320/2.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>3.</b> Definir la estructura de directorios de muestro proyecto <i><b>OSB</b></i>:</div>
<br />
<div style="text-align: center;">
<a href="https://2.bp.blogspot.com/-H0NkZ-nVjlU/VsAbAgxJwjI/AAAAAAAABiY/31nX8_7k-ZI/s1600/3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-H0NkZ-nVjlU/VsAbAgxJwjI/AAAAAAAABiY/31nX8_7k-ZI/s1600/3.jpg" /></a></div>
<br />
<div style="text-align: justify;">
<b>4. </b>Creamos un <i><b>BusinessService </b></i>que referencie y controle por medio del <i><b>WSDL </b></i>incrustado en el proyecto al WebService: '<span style="color: #a2c4c9;"><i>http://localhost:8090/mockDatosClienteService?wsdl</i></span>',(<u><i>Un MockServices que he iniciado por medio de <b>SOAPUI</b>)</i></u>:</div>
<br />
<div style="text-align: center;">
<a href="https://3.bp.blogspot.com/-cFpsDq7ltMI/VsAcYdl5ezI/AAAAAAAABik/vYGUJnmCmdw/s1600/4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="https://3.bp.blogspot.com/-cFpsDq7ltMI/VsAcYdl5ezI/AAAAAAAABik/vYGUJnmCmdw/s320/4.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>5.</b> Crear los archivos <i><b>MFL </b></i>(<span style="color: #a2c4c9;"><i>sobre el proyecto: new/MFL</i></span>), tal como se explicó por medio de estos archivos se configurarán las transformaciones <i><b>NO XML</b></i> a <b><i>XML </i></b>y <i><b>XML </b></i>a <b><i>NO XML</i></b>. Con esta lógica ya podremos definir el <u><i><b>MFL INPUT</b></i></u>: encargado de transformar <i><b>TRAMA </b></i>a <i><b>REQUEST </b></i>y el <u><b><i>MFL OUTPUT</i></b></u>: encargado de transformar <i><b>RESPONSE </b></i>a <b><i>TRAMA</i></b>:</div>
<br />
<div style="text-align: justify;">
Para esto se debe de conocer antes de definir las tramas, los datos <i><b>REQUEST/RESPONSE</b></i> del <b>WS </b>a consumir:<br /></div>
<div style="text-align: center;">
<a href="https://4.bp.blogspot.com/-xO1xAOV0ADo/VsAewohYqvI/AAAAAAAABi4/35rvbL0mCbQ/s1600/5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="https://4.bp.blogspot.com/-xO1xAOV0ADo/VsAewohYqvI/AAAAAAAABi4/35rvbL0mCbQ/s320/5.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>5.1. </b>Crear el archivo: <i><span style="color: #a2c4c9;">DatosCliente_IN</span><b>.<span style="color: red;">mfl</span></b></i>, para la transformacion <i><b>INICIAL</b></i>,considerando la configuración mostrada considerando los valores de los <i><b>DELIMITADORES</b></i>, <u>sobre todo el del salto de linea del campo final </u>(<span style="color: yellow;"><b>\n</b></span>):</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-4ZlieB7ARXw/VsAg5cKlauI/AAAAAAAABjQ/qZy3uMfHVgk/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="https://3.bp.blogspot.com/-4ZlieB7ARXw/VsAg5cKlauI/AAAAAAAABjQ/qZy3uMfHVgk/s320/6.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-HgUhXdiRU0U/VsAg5UmrexI/AAAAAAAABjM/w75lmESZiDM/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://2.bp.blogspot.com/-HgUhXdiRU0U/VsAg5UmrexI/AAAAAAAABjM/w75lmESZiDM/s320/7.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-zekTqsiZx6U/VsAg4_N_RII/AAAAAAAABjI/hs__PzvWiiY/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://4.bp.blogspot.com/-zekTqsiZx6U/VsAg4_N_RII/AAAAAAAABjI/hs__PzvWiiY/s320/8.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>5.2. </b>Crear el archivo: <i><span style="color: #a2c4c9;">DatosCliente_OUT</span><b>.<span style="color: red;">mfl</span></b></i>, para la transformacion <i><b>FINAL</b></i>, considerando la configuración mostrada considerando los valores de los <i><b>DELIMITADORES</b></i>, <u>sobre todo el del salto de linea del campo final </u>(<span style="color: yellow;"><b>\n</b></span>):</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-2NUavdh-Ttw/VsAinE19ALI/AAAAAAAABjk/yb2JvxDlen0/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="267" src="https://3.bp.blogspot.com/-2NUavdh-Ttw/VsAinE19ALI/AAAAAAAABjk/yb2JvxDlen0/s320/1.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-JsSpJdFj0ZE/VsAim00iPsI/AAAAAAAABjg/nUHikaCy98g/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="268" src="https://2.bp.blogspot.com/-JsSpJdFj0ZE/VsAim00iPsI/AAAAAAAABjg/nUHikaCy98g/s320/2.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-cyodCCZMhwQ/VsAinDGA1nI/AAAAAAAABjo/5bms4CanLXk/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://2.bp.blogspot.com/-cyodCCZMhwQ/VsAinDGA1nI/AAAAAAAABjo/5bms4CanLXk/s320/3.jpg" width="320" /></a></div>
<br />
<br />
<div style="text-align: justify;">
<b>6.</b> Crear los <b>XQuery </b>consideranto las transformaciones que se manejaran:</div>
<br />
<div style="text-align: justify;">
<b>6.1.</b> <span style="color: #fff2cc;"><b>DatosCliente_IN.xq</b></span>: Encargado de transformar la <i><b>Trama</b></i> (<i><b>NO XML</b></i>) hacia el <i><b>REQUEST </b></i>del <i><b>WS</b></i>: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-HBr-8Io6Cnw/VsCXh90gW4I/AAAAAAAABkI/eCiJ4uZOx8U/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="138" src="https://2.bp.blogspot.com/-HBr-8Io6Cnw/VsCXh90gW4I/AAAAAAAABkI/eCiJ4uZOx8U/s320/4.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>6.2.</b> <span style="color: #fff2cc;"><b>DatosCliente_OUT.xq</b></span>: Encargado de transformar la el <i><b>RESPONSE </b></i>del <i><b>WS </b></i>hacia la Trama <b>(NO XQML)</b> a generar: </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-KSHNhb7Oz7I/VsCXhgyz2zI/AAAAAAAABkE/6cCmWEIYOLE/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="https://4.bp.blogspot.com/-KSHNhb7Oz7I/VsCXhgyz2zI/AAAAAAAABkE/6cCmWEIYOLE/s320/5.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>7. </b>Crear un <i><b>BusinessService</b></i> de tipo <i><b>Messaging Service</b></i> que referencie y controle un <i><b>MFL </b></i>(Trama): </div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-esjBcXpGSus/VsCckszNH_I/AAAAAAAABkc/lwau585toyw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="169" src="https://4.bp.blogspot.com/-esjBcXpGSus/VsCckszNH_I/AAAAAAAABkc/lwau585toyw/s320/1.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-fE1_CQXwgII/VsCck9pAqYI/AAAAAAAABkg/oslIJ_S25Ro/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://4.bp.blogspot.com/-fE1_CQXwgII/VsCck9pAqYI/AAAAAAAABkg/oslIJ_S25Ro/s320/2.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Definir el directorio donde se generarán las tramas de respuesta (<i><b>OUTPUT</b></i>) al finalizar procesamiento:<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-w9O-envwTlQ/VsCck5_uo6I/AAAAAAAABkk/9EhH8aXDqZs/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="229" src="https://3.bp.blogspot.com/-w9O-envwTlQ/VsCck5_uo6I/AAAAAAAABkk/9EhH8aXDqZs/s320/3.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
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:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-iW8gFKRMA1Q/VsCckzLJc7I/AAAAAAAABko/F_mgNyh41LQ/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://2.bp.blogspot.com/-iW8gFKRMA1Q/VsCckzLJc7I/AAAAAAAABko/F_mgNyh41LQ/s320/4.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
8. Crear un <i><b>ProxyService </b></i>que controle los mensaje <i><b>INPUT </b></i>(Trama), que se dejarán en la ruta configurada: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-23iG4YA0eEk/VsCmbLV972I/AAAAAAAABlE/v_A8RSbP3Wo/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://3.bp.blogspot.com/-23iG4YA0eEk/VsCmbLV972I/AAAAAAAABlE/v_A8RSbP3Wo/s320/1.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-iBcXs0uMHdM/VsCmbHEAguI/AAAAAAAABlA/ag8z6dtPOWc/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://3.bp.blogspot.com/-iBcXs0uMHdM/VsCmbHEAguI/AAAAAAAABlA/ag8z6dtPOWc/s320/2.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Definir la ruta <i><b>INPUT </b></i>donde se depositará la trama:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-dYqe3fDLlIU/VsCma1ewC_I/AAAAAAAABk8/FstywavTBgk/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="309" src="https://3.bp.blogspot.com/-dYqe3fDLlIU/VsCma1ewC_I/AAAAAAAABk8/FstywavTBgk/s320/3.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Configurar tiempo, intervalo, formato y directorios (<i><b>rutas</b></i>) de control con relación a las tramas <i><b>INPUT</b></i>:<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-acH1mR6TeEk/VsCmbexOgpI/AAAAAAAABlI/geowE3UYnU8/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="302" src="https://1.bp.blogspot.com/-acH1mR6TeEk/VsCmbexOgpI/AAAAAAAABlI/geowE3UYnU8/s320/4.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Creamos desde <i><b>Message Flow</b></i> los nodos que soportarán el funcionamiento del <i><b>Servicio Virtual</b></i>: </div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ji3QgzCFbRo/VsCr2hHQL9I/AAAAAAAABlc/tJwYnPrlftw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://1.bp.blogspot.com/-ji3QgzCFbRo/VsCr2hHQL9I/AAAAAAAABlc/tJwYnPrlftw/s320/1.jpg" width="178" /></a></div>
<br />
<div style="text-align: justify;">
Con esto tenemos el <i><b>Servicio Virtual</b></i> completado, para las pruebas simplemente bastaría con depositar la trama <i><b>INPUT </b></i>en el directorio definir y automáticamente el flujo del <i><b>Servicio Virtual</b></i> se activará y a nivel de consola se visualizará el resultado:</div>
<br />
<span style="color: #fff2cc;"><u><b>PRUEBA</b></u><b>:</b></span><br />
<br />
<div style="text-align: justify;">
<b>1. </b>Ubicar la trama en la ruta <i><b>INPUT </b></i>definida (<span style="color: #fff2cc;"><i>C:\Ficheros\MFL\INPUT</i></span>): </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-IX4gplGAcgI/VsCxooSLRII/AAAAAAAABlw/0F8iXaJRR9g/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://4.bp.blogspot.com/-IX4gplGAcgI/VsCxooSLRII/AAAAAAAABlw/0F8iXaJRR9g/s320/2.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<b>2. </b>El <i><b>Servicio Virtual</b></i> en un tiempo determinado procesará el mensaje (<b>Trama</b>): </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-AfLwNYzjHD8/VsCxpTGdc5I/AAAAAAAABl4/gr66Zk3-Vcs/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://3.bp.blogspot.com/-AfLwNYzjHD8/VsCxpTGdc5I/AAAAAAAABl4/gr66Zk3-Vcs/s320/3.jpg" width="275" /></a></div>
<br />
<div style="text-align: justify;">
<b>3. </b>Finalmente, por cada registro en la trama se generarpa y consumirá un <i><b>REQUEST </b></i>del <i><b>WS </b></i>y así mismo generará un archivo <i><b>OUTPUT </b></i>por cada <i><b>RESPONSE</b></i>: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-J7zLV_q0rhY/VsCxpEKEaTI/AAAAAAAABl0/Ho1m-q-h4cI/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="https://4.bp.blogspot.com/-J7zLV_q0rhY/VsCxpEKEaTI/AAAAAAAABl0/Ho1m-q-h4cI/s320/4.jpg" width="320" /></a></div>
<br />
<br />
Para los interesados se pueden descargar las fuentes del <i><b>Dummy </b></i>(<i><b>OSB 11g - '11.1.1.7'</b></i>) desde aquí: <a href="http://www.mediafire.com/download/fdz82c149nt8yfq/DummyNoXml_To_Xml.jar" rel="nofollow" target="_blank">http://www.mediafire.com/download/fdz82c149nt8yfq/DummyNoXml_To_Xml.jar</a><br />
<br />
<br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-53487816791604925682016-01-15T22:10:00.000-08:002016-01-15T22:43:35.178-08:00SEGMENTACIÓN EN DISEÑO DE .WSDL<div style="text-align: justify;">
<br />
Todos sabemos que la importancia que tiene en el ciclo de vida <b>SOA </b>la interface .<b>WSDL</b>, esto debido a que es el <i><b>'Description Language</b></i>' de los <b>Web Service</b> y porque es el punto de acceso expuesto para la comunicación entre todos los servicio de tipo <b><i>Web Servic</i><i>e</i></b>.</div>
<br />
<div style="text-align: justify;">
Debido a ello, es importante que durante la etapa de diseño uno se dé el tiempo debido en diseñar un correcto archivo .<b>WSDL</b>, 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 <i><b>Topdown </b></i>que se realizará. </div>
<br />
<div style="text-align: justify;">
En esta oportunidad mostraré como crear un .<i><b>WSDL </b></i>basado en un diseño segmentado "no común", pero altamente recomendado en los escenarios en que se requiere definir un .<i><b>WSDL </b></i>con gran cantidad de <u><b>capacidades </b></u>(<i><b>operaciones</b></i>) dentro de este. </div>
<br />
<div style="text-align: justify;">
Los modelos clásicos para diseñar un .<i><b>WSDL </b></i>(<b>v1.1</b>) son los siguientes:</div>
<br />
<div style="text-align: justify;">
<span style="color: #ffe599;"><i> _ Un solo archivo .<b>WSDL </b>que contenga todo en su interior: (types (complexType, simplexTypes), message, portType, binding, service). </i></span></div>
<br />
<div style="text-align: justify;">
<span style="color: #ffe599;"><i>_ Un archivo .<b>WSDL </b>que contenga en su interior: (message, portType, binding, service) y un archivo .<b>XSD </b>que contenga en su interior: (types (complexType, simplexTypes) ). El .<b>WSDL </b>import ó include el .<b>XSD</b>. </i></span></div>
<br />
<div style="text-align: justify;">
<span style="color: #ffe599;"><i>_ Un archivo .<b>WSDL </b>que contenga en su interior: (message, portType, binding, service), un archivo .<b>XSD </b>que contenga en su interior el modelo de datos propio de todas las operaciones: (types (complexType) ), un archivo .<b>XSD </b>que contenga datos 'genéricos' entre todas las operaciones. (types (complexType, simplexTypes) ). El .<b>WSDL </b>import ó include el .<b>XSD </b>propio y este import el .<b>XSD</b> genérico. </i></span></div>
<br />
<div style="text-align: justify;">
Estos modelos de diseño de .<i><b>WSDL </b></i>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 .<b><i>WSDL </i></b>de las operaciones en sí, haciendo que cada operación maneje su propio .<b>WSDL </b>y que exista un .<b><i>WSDL </i></b>principal. En otras palabras el diseño sería de esta manera: </div>
<br />
<div style="text-align: justify;">
<span style="color: #ffe599;"><i>_ Un archivo .<b>WSDL </b>(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 .<b>XSD </b>que contenga datos 'genéricos' entre todas las operaciones. (types (complexType, simplexTypes) ). El .<b>WSDL </b>principal import todos los .<b>WSDLs </b>según el número de operaciones existentes y cada uno de estos .<b>WSDL </b>secundarios import el .<b>XSD </b>genérico.</i></span></div>
<div style="text-align: justify;">
<br />
La ventaja de este modelo de diseño de .<b><i>WSDL</i></b>, es que está enfocado en las operaciones y hará al momento del <i><b>Topdown </b></i>respectivo que las clases .<i><b>java </b></i>(por ejemplo), se autogeneren en directorios independientes por cada <u><i>operación respectivamente</i></u>. <u>Esto hará que no exista riesgo en el problema clásico de la duplicidad de clases usadas por cada operación al momento del <i><b>Topdown</b></i></u>:<br />
<br /></div>
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-3xRPByE8FUs/Vpnc7GRkq0I/AAAAAAAABhE/kvMCsd0sSg8/s1600/1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-3xRPByE8FUs/Vpnc7GRkq0I/AAAAAAAABhE/kvMCsd0sSg8/s320/1.jpg" width="254" /></a></div>
<br />
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:<br />
<br />
- Archivo .<i><b>WSDL </b></i>(<i><span style="color: #9fc5e8;">principal</span></i>): <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-nou6LA8Od-A/VpnjJM3huSI/AAAAAAAABhw/KBWDf_bmE-U/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="http://4.bp.blogspot.com/-nou6LA8Od-A/VpnjJM3huSI/AAAAAAAABhw/KBWDf_bmE-U/s320/2.jpg" width="320" /></a></div>
<br />
- Archivo .<i><b>WSDL </b></i>secundario por operación (<span style="color: #9fc5e8;"><i><b>Operación#1</b></i></span>): <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-F3rfr9QxLgI/Vpni2UAz6FI/AAAAAAAABhk/rWGcuaayPlA/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="http://4.bp.blogspot.com/-F3rfr9QxLgI/Vpni2UAz6FI/AAAAAAAABhk/rWGcuaayPlA/s320/3.jpg" width="320" /></a></div>
<br />
- Archivo .<i><b>WSDL </b></i>secundario por operación (<span style="color: #9fc5e8;"><i><b>Operación#2</b></i></span>): <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-xbVWXIZUPX8/Vpni1ocMB4I/AAAAAAAABhc/vkyI9NvZBII/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="http://1.bp.blogspot.com/-xbVWXIZUPX8/Vpni1ocMB4I/AAAAAAAABhc/vkyI9NvZBII/s320/4.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
- Archivo .<b>XSD </b><u>genérica</u>: </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-kWZIXVW-_KA/Vpni3UWj1yI/AAAAAAAABhs/svLbROKGgn8/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="http://3.bp.blogspot.com/-kWZIXVW-_KA/Vpni3UWj1yI/AAAAAAAABhs/svLbROKGgn8/s320/5.jpg" width="320" /></a></div>
<br />
Para los interesados en utilizar este tipo de modelo de diseño de .<i><b>WSDL</b></i>, pueden descargarlo desde aquí: <a href="http://www.mediafire.com/download/8nl9nuv6tmnpqr9/DisenioSegmentado_Wsdl.zip" target="_blank">http://www.mediafire.com/download/8nl9nuv6tmnpqr9/DisenioSegmentado_Wsdl.zip</a><br />
<br />
<br />
<br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-41157671456611644342016-01-06T21:58:00.000-08:002016-01-06T22:11:03.191-08:00ANÁLISIS SOA: [TOP-DOWN / BOTTOM-UP]<div style="text-align: justify;">
<br />
En muchas empresas NO se les da la importancia debida al trabajo del Rol: '<span style="color: #6fa8dc;"><i><b>Analista SOA</b></i></span>', 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 <i><b>Arquitectura SOA</b></i>, debido a que el resultado de dicho análisis <span style="color: #fff2cc;"><i>('modelado y arquitectura orientada a servicios')</i></span> que estos profesionales hagan, definirá los <i>'<span style="color: #6fa8dc;"><b>Servicios Candidato</b>s</span>'</i> que posteriormente se verán reflejados como base en el <span style="color: #6fa8dc;"><i><b>Inventario de Servicios</b></i></span> <span style="color: #fff2cc;"><i>(con relación a los ‘servicios compuestos’). </i></span></div>
<br />
<div style="text-align: justify;">
Cuales son las consecuencias de un incorrecto <span style="color: #6fa8dc;"><b>Análisis SOA</b></span>: 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 <i><b>inventario de servicios </b></i>va creaciendo. </div>
<br />
<div style="text-align: justify;">
Actualmente, existen algunos enfoques <i><b>SOA </b></i>(ejemplo: <span style="color: #6fa8dc;"><i><b>SOMA</b></i> </span>y <span style="color: #6fa8dc;"><b><i>MSOEM</i></b></span>) que definen un conjunto de técnicas para identificación de '<b><i>Servicios Candidatos</i>'</b>. Dichas metodologías SOA, tienen muchas cosas en común, ya que existen entre los resaltantes dos caminos posibles: <b><i>TOP-DOWN</i></b> y <b><i>BOTTOM-UP</i></b>. </div>
<br />
<b><span style="color: yellow;">- <u>Técnica BOTTOM-UP</u>:</span> </b> <br />
<div style="text-align: justify;">
La cual se enfoca en realizar un análisis, para la obtención de los servicios candidatos, partiendo de las <span style="color: #6fa8dc;"><i><b>aplicaciones </b></i></span>y/o sistemas <span style="color: #6fa8dc;"><i><b>legacy (antíguas) </b></i></span>ya existentes en los cuales los procesos de negocio no están definidos.</div>
<br />
<span style="color: yellow;"><b>- <u>Técnica TOP-DOWN</u>:</b></span><br />
<div style="text-align: justify;">
La cual se enfoca en realizar un análisis, para la obtención de los servicios candidatos, partiendo de los procesos de negocio <span style="color: #fff2cc;"><i>(<u>si no se tienen estos, deben ser obtenidas del Feedback de los 'Analistas Funcionales' y modelando los BPMN respectivos</u>)</i></span>. 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.</div>
<br />
<div style="text-align: justify;">
Así mismo, se debe tener en claro que todo el proceso de negocio tarde o temprano tenderá a ser un <b>TOP-DOWN</b> (es recomendable), de lo contrario no se llegara a una Arquitectura SOA ideal, donde IT esté alineado al negocio.</div>
<br />
<div style="text-align: justify;">
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 <u><i><b>TODA </b></i></u>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 <span style="color: #6fa8dc;"><b><i>Servicios Candidatos</i></b></span> base del Inventario de Servicios. </div>
<br />
<div style="text-align: justify;">
Finalmente, para su posterior investigación los enfoques más resaltantes actualmente son:</div>
<br />
- <a href="http://www.ibm.com/developerworks/library/ws-soa-design1/ws-soa-design1-pdf.pdf" target="_blank"><b>SOMA </b></a>(<span style="color: #6fa8dc;">IBM</span>).<br />
- <a href="http://serviceorientation.com/soamethodology/index" target="_blank"><b>MSOAM </b></a>(<span style="color: #6fa8dc;">Thomas Erl</span>).<br />
<br />
<div style="text-align: justify;">
Particularmente, prefiero la segunda, pero se pueden complementar.</div>
<br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-29770055277148813722015-12-14T21:28:00.000-08:002015-12-14T21:40:31.749-08:00DINAMIC PROXY CLIENT WS<div style="text-align: justify;">
<br />
En esta oportunidad comentaré sobre cómo consumir <i><b>Servicios Web</b></i> de manera dinámica.</div>
<br />
<div style="text-align: justify;">
En proyecto donde el paradigma de la orientación a servicios es aplicado, es imprescindible para la comunicación entre servicios la generación de un <span style="color: #a2c4c9;"><i><b>Proxy Client </b></i></span>del servicio <span style="color: #a2c4c9;"><b><i>Provider </i></b></span>dentro de la aplicación consumidora (<i><b>Consumer</b></i>). Para cumplir esto existen actualmente muchas apis en <i><b>JAVA</b></i> que facilitan dicho manejo, tanto para generar el servicio (<i><b>TopDown</b></i>), como para consumirlo. Entre estas apis <i><b>JAVA </b></i>existan: <span style="color: #a2c4c9;"><i><b>Axis1, Axis2, JaxWs, JaxRpc</b></i></span>, etc. Estas apis permiten mediante el <span style="color: #a2c4c9;"><i><b>TopDown </b></i></span>aplicado generar las clases y objetos <b>JAVA </b>siguiendo la estructura de <span style="color: #a2c4c9;"><i><b>Wsdl/Xsd</b></i></span> para poder hacer <span style="color: #a2c4c9;"><i><b>Get/Set</b></i></span> de los datos según convenga.</div>
<br />
<div style="text-align: justify;">
Esto es bueno pero y estándar, pero existe una transformación detrás de este manejo. Por otro lado, es bueno saber que estas apis facilitan el manejo siempre y cuando la estructura de diseñada del <i><b>WS</b></i>, no sea compleja, ni dinámica. Esto se menciona ya que en algunas ocasiones debido una alta complejidad en la estructura (<span style="color: #a2c4c9;"><i>Request/Response</i></span>), seguridad, etc del servicio provider, es necesario manejar un proxy client de manera dinámica.<br />
<br />
Para estos escenarios es bueno conocer que se puede crear un <span style="color: #a2c4c9;"><i><b>Proxy Client</b></i></span> dinámico, que se adapte a cualquier escenario que el negocio requiera y armar los Request. Así mismo, para obtener los datos del Response por más compleja que sea la estructura de respuesta, en vez de manejar un api <span style="color: #a2c4c9;"><i><b>Jaxb</b></i></span> (<u><i>transformación</i></u>), nos podemos apoyar en "<span style="color: #a2c4c9;">XPath</span>" ..., ya que por medio de este lenguaje de expressions podremos navegar entre las estructuras <span style="color: #a2c4c9;">XML </span>del Response de una manera muy veloz y potente.</div>
<br />
<div style="text-align: justify;">
El dummy preparado permite mostrar todo lo mencionado anteriormente.</div>
<br />
<span style="color: #ffe599;"><b>1. </b>Desplegamos un <b>WS</b>, median un <i><b>Mock </b></i>en <i><b>SOAPUI </b></i>y así simular un <i><b>WS Provider</b></i>:</span><br />
<div style="text-align: center;">
<a href="http://2.bp.blogspot.com/-vjOyVyWqrrs/Vm-bsZnkfhI/AAAAAAAABfE/8ZEG3Nzm6bg/s1600/ws.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="123" src="http://2.bp.blogspot.com/-vjOyVyWqrrs/Vm-bsZnkfhI/AAAAAAAABfE/8ZEG3Nzm6bg/s320/ws.jpg" width="320" /></a></div>
<br />
<span style="color: #ffe599;"><b>2. </b>Definir los métodos que servirán para el procesamiento <b><i>Rquest/Response</i></b> y el Main que simulará el lanzamiento:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-gH9-FKp4o6Y/Vm-dMYXgmMI/AAAAAAAABfQ/PA7OnaP52U8/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="http://4.bp.blogspot.com/-gH9-FKp4o6Y/Vm-dMYXgmMI/AAAAAAAABfQ/PA7OnaP52U8/s320/2.jpg" width="320" /></a></div>
<br />
<span style="color: #ffe599;"><b>3.</b> Se debe mapear diferentes puntos propios del servicio: <u><i>URL, Namespace, ServiceName, PortName, TimeOut</i></u>, etc:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-rfoLUcXlVZY/Vm-goReNE-I/AAAAAAAABfk/LYvoUmGilLk/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="http://4.bp.blogspot.com/-rfoLUcXlVZY/Vm-goReNE-I/AAAAAAAABfk/LYvoUmGilLk/s320/3.png" width="320" /></a></div>
<br />
<span style="color: #ffe599;"><b>4. </b>Se definen los métodos: procesarRequestWS y procesarResponseWS:</span><br />
<div style="text-align: center;">
<a href="http://2.bp.blogspot.com/-FEMe7wLflhM/Vm-g7bKUiQI/AAAAAAAABfs/0vD1yoNLSI8/s1600/4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="http://2.bp.blogspot.com/-FEMe7wLflhM/Vm-g7bKUiQI/AAAAAAAABfs/0vD1yoNLSI8/s320/4.jpg" width="320" /></a></div>
<br />
<span style="color: #ffe599;"><b>5.</b> Se arma el Request <b>XML</b>, independientemente de la estructura y/o complejidad que se tenga (<u><i>esta puede está incluso mapeada en .properties y ser reutilizada</i></u>):</span><br />
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-JY_LPvQ0t34/Vm-hcbg6yPI/AAAAAAAABf0/sJa1CG-ihdk/s1600/5.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="http://4.bp.blogspot.com/-JY_LPvQ0t34/Vm-hcbg6yPI/AAAAAAAABf0/sJa1CG-ihdk/s320/5.jpg" width="320" /></a></div>
<br />
<span style="color: #ffe599;"><b>6</b>. Aquí se muestra el poder de XPath para obtener los datos de la cadena XML Response, independientemente que sea un dato y/o lista, se debe entender que todo en si son cadenas y se pueden manipular y obtener como tales por medio de las sentencias XPath propiamen</span><span style="color: #ffe599;">te:</span><br />
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-zxgg2WTI-TM/Vm-h5-teQ4I/AAAAAAAABf8/oOFfPvnHVNw/s1600/6.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="http://3.bp.blogspot.com/-zxgg2WTI-TM/Vm-h5-teQ4I/AAAAAAAABf8/oOFfPvnHVNw/s320/6.jpg" width="320" /></a></div>
<br />
<span style="color: #ffe599;"><b>7</b>. El resultado de la prueba y consumo respectivo se muestra en LOGs:</span><br />
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-1gL9Xes3cKs/Vm-ifSBAOKI/AAAAAAAABgI/C6CkeleGmtY/s1600/7.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="http://3.bp.blogspot.com/-1gL9Xes3cKs/Vm-ifSBAOKI/AAAAAAAABgI/C6CkeleGmtY/s320/7.jpg" width="320" /></a></div>
<br />
Con esto espero haber demostrado comoconsumir dinámicamente un <b>WS</b>, sin usa una sola api adicional, todo apoyandonos en las librerias del <b>JDK</b>, así mismo como el apoyo del poderoso <b>XPath</b> ...!<br />
<br />
Para los interesados, se puede descargar las fuentes del dummy aquí: <br />
<a href="http://www.mediafire.com/download/ctbw2389i8dabaf/DummyDinamicProxyWs.zip" rel="nofollow" target="_blank">http://www.mediafire.com/download/ctbw2389i8dabaf/DummyDinamicProxyWs.zip</a><br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-2623609046802213392015-11-15T06:34:00.004-08:002015-11-15T06:37:47.193-08:00WSDL 1.1 vs WSDL 2.0<br />
<div style="text-align: justify;">
Desde el 2007 la <i><b>(W3C)</b></i>, como consorcio internacional para el desarrollo de estándares Web, publicó lo que se conoce como el futuro y mejorado estándar para servicios, el estándar <b><i>WSDL 2.0</i></b>.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Esta versión nueva de <i><b>WSDL 2.0</b></i> maneja varias diferencias y mejoras con relación a su antecesora y aún estándar <i><b>WSDL 1.1</b></i>, que son las siguientes:</div>
<ul>
<li style="text-align: justify;"><span style="color: #38761d;"><i>El <b>WSDL 2.0</b> integra el elemento <span style="color: #ffe599;">Message </span>dentro del elemento <span style="color: #ffe599;">Types</span>, con relación al <b>WSDL 1.1</b>. </i></span></li>
<li style="text-align: justify;"><span style="color: #38761d;"><i>El <b>WSDL 2.0</b> renombra el elemento <span style="color: #ffe599;">PortType </span>como <span style="color: #ffe599;">Interface</span>, con relación al <b>WSDL 1.1</b>. </i></span></li>
<li style="text-align: justify;"><span style="color: #38761d;"><i>El <b>WSDL 2.0</b> renombra el elemento <span style="color: #ffe599;">Port </span>a </i></span><span style="color: #ffe599;"><i>Endpoint</i></span><span style="color: #38761d;"><i>, con relación al <b>WSDL 1.1</b>. </i></span></li>
<li style="text-align: justify;"><span style="color: #38761d;"><i>El <b>WSDL 2.0 </b>renombra lo parte inicial de declaración en la interface conocida como <span style="color: #ffe599;">Definitions </span>como <span style="color: #ffe599;">Description</span>, con relación al <b>WSDL 1.1</b>. <br /> </i></span></li>
</ul>
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-xiazvoljSoc/VkiWTQs0_oI/AAAAAAAABd0/XhhLJ4oXbV0/s1600/2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="139" src="http://4.bp.blogspot.com/-xiazvoljSoc/VkiWTQs0_oI/AAAAAAAABd0/XhhLJ4oXbV0/s320/2.jpg" width="320" /></a> </div>
<br />
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-hEI4tTAb5fU/VkiWTpNiTAI/AAAAAAAABd8/PVrk9uzWwas/s1600/3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="219" src="http://4.bp.blogspot.com/-hEI4tTAb5fU/VkiWTpNiTAI/AAAAAAAABd8/PVrk9uzWwas/s320/3.png" width="320" /></a></div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
El modelo <i><b>WSDL 2.0</b></i> también impone restricciones semánticas más allá de la conformidad estructural. Con el fin de describir con precisión estas limitaciones, y como ayuda para definir con precisión el significado de cada documento <i><b>WSDL 2.0</b></i>, la especificación <b>WSDL 2.0</b> define un modelo de componentes como una capa adicional de abstracción por encima del conjunto de información <b>XML</b>. El siguiente diagrama ofrece una visión de los componentes de <i><b>WSDL 2.0</b></i> y su herencia. <br /><br /></div>
<div style="text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-GI4IrM-UJxk/VkiWTxpCpXI/AAAAAAAABd4/fIjFtuh9rdk/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="http://2.bp.blogspot.com/-GI4IrM-UJxk/VkiWTxpCpXI/AAAAAAAABd4/fIjFtuh9rdk/s320/1.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Esta nueva estructura del modelo <b>WSDL </b>es más amigable, mejor diseñada y entendible. Así mismo, lo resaltante de esta versión de <b>WSDL 2.0</b> es que permite a los desarrolladores elegir el modelo de desarrollo de aplicaciones de Servicios: <b>HTTP </b>o <b>SOAP</b>. Esto debido a la creciente popularidad del modelo <b>REST </b>y <b>SOAP</b>.Con respecto al HTTP, se reconoció la clara necesidad de la compatibilidad con <b>HTTP </b>en las descripciones de aplicaciones Web (contratos). Por tanto, el <b>WSDL 2.0</b> ofrece una compatibilidad absoluta con <b><i>HTTP </i></b>y <b><i>SOAP</i></b>, lo que lo hace muy útil tanto para aplicaciones Web sencillas, como para aplicaciones de Servicios Web que requieran de funcionalidades adicionales.<br />
<br />
Lo desagradable es que actualmente hasta la fecha, esta versión de <b>WSDL 2.0</b>, no se ha vuelto aún estándar, debido a ello herramientas muy conocimiento como lo son: <span style="color: #fff2cc;"><b>SOAPUI, ORACLE, IBM</b></span> y apis como <span style="color: #fff2cc;"><b>JAXWS </b></span>aún <u><b>NO </b>lo soportan,</u> teniendo conocimiento que el único que si lo soportar es <span style="color: #fff2cc;"><b>AXIS2</b></span>. Esto quiere decir que seguiremos usando como estándar para nuestros desarrollos el <b>WSDL</b> <b>1.1</b> por algo más de tiempo.Finalmente, los que desee actualmente existe un <span style="color: #fff2cc;"><u><b>conversor </b></u></span>de <b>WSDL 1.1</b> a <b>WSDL 2.0</b> (<i><a href="http://www.w3.org/2006/02/WSDLConvert.html" target="_blank">http://www.w3.org/2006/02/WSDLConvert.html</a></i>), para que se alguna manera, para los que no se acostumbran aún, de esta manera les sea más fácil la transición al nuevo futuro estándar.</div>
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-40251555411310623252015-10-31T23:32:00.000-07:002015-10-31T23:34:31.828-07:00SOA vs MICROSERVICIOS<div style="text-align: justify;">
<br />
<div style="text-align: justify;">
En esta oportunidad complementaré la idea de este muy bueno artículo hecho por:<i> <b>Andrés Hevia</b></i> </div>
<div style="text-align: justify;">
<a href="http://pensandoensoa.com/2015/10/25/a-vueltas-con-los-microservicios-y-soa/" rel="nofollow" target="_blank">http://pensandoensoa.com/2015/10/25/a-vueltas-con-los-microservicios-y-soa/</a>, dando mi punto de vista sobre este tema tan controversial del cual se habla este último tiempo.</div>
<br />
En si NO se debe de confundir lo que es <span style="color: #9fc5e8;"><i>SOAP </i></span>con <span style="color: #9fc5e8;"><i>WS-*</i></span>, ya que <span style="color: #9fc5e8;"><i>SOAP </i></span>(<u><i>Simple Object Access Protocol</i></u>), es un protocolo de comunicación estándar para mensajería apoyado por la <span style="color: #9fc5e8;"><i>W3C </i></span>como un modelo distribuido. Por otro lado, <span style="color: #9fc5e8;"><i>WS-*</i></span> es un protocolo definido por <span style="color: #9fc5e8;"><i>OASIS </i></span>orientado al desarrollo y la adopción de estándares. Dichos estándares son comúnmente implementados por los <u><i><b>Vendors</b></i></u> (<span style="color: #9fc5e8;"><i>ORACLE, IBM</i></span>) en sus herramientas, así como en apis <span style="color: #9fc5e8;"><i>OpenSource</i></span>. </div>
<br />
<div style="text-align: justify;">
Ahora, en si una de las diferencias que comúnmente se menciona es que <span style="color: #9fc5e8;"><i>SOA </i></span>en su implementación debe ser desarrollada con <b><u><i>Web Service</i></u></b> específicamente y por otro lado, MicroServicios debe ser implementado con servicios <u><b><i>RestFul </i></b></u>basado en arquitectura <span style="color: #9fc5e8;"><i>REST</i></span>. En mi opinión está mal ya que se en un proyecto <span style="color: #9fc5e8;"><i>SOA </i></span>las implementaciones deben ser orientadas a servicios (<u><i>NO Web Service</i></u>), esto quiere decir que dichos servicios pueden también ser considerados de tipo <u><b><i>RestFul</i></b></u>, NO hay problema con ello.</div>
<br />
<div style="text-align: justify;">
Por otro lado, la gran diferencia entre ambos es que una de las características de <span style="color: #9fc5e8;"><i>SOA </i></span>es que es recomiendable como patrón, el usar un <span style="color: #9fc5e8;"><i>ESB </i></span>para la <i>comunicación, seguridad, transformaciones, eliminaciones de conexiones punto a punto, etc</i>, entre los servicios de manera desacoplada, en sí que sea la columna vertebral de las soluciones <span style="color: #9fc5e8;"><i>SOA</i></span>. Por otro lado, <span style="color: #9fc5e8;"><i> MicroServicios </i></span>NO manejan la visión del manejo del <span style="color: #9fc5e8;"><i>ESB</i></span>, ellos de apoyan en lo que se denomina <span style="color: #9fc5e8;"><i>API Gateway</i></span> que proporciona un punto de acceso central para administrar, enrutar, supervisar y asegurar el acceso a servicios expuestos públicamente. </div>
<br />
<div style="text-align: justify;">
Finalmente, desde mi punto de vista veo que un <span style="color: #9fc5e8;"><i>API Gateway</i></span> no es un sustituto de un <span style="color: #9fc5e8;"><i>ESB</i></span>, sino más bien una mejora para la implementación de una <u><i>Arquitectura Orientada a Servicios</i></u> (<b>SOA</b>).<br /><br /></div>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-58356600382300712492015-10-27T16:19:00.002-07:002015-10-27T16:27:45.531-07:00SOAP FAULTs vs ERROR CODE<div style="text-align: justify;">
<br />
Todos los que tenemos conocimiento y hemos trabajado con servicios sabemos que para llevar a cabo un proyecto <i><b>SOA </b></i>es requerida la aplicación del paradigma de la orientación a servicios, en nuestros desarrollos. Ahora es necesario, durante la implementación de estos servicios, seguir una serie de principios que ayudarán para estandarizar con buenas prácticas dichas implementaciones. Justamente el primero y más importante principio <i><b>SOA</b></i>, habla sobre la <u><b><i>''Creación de Contrato de Servicio Estandarizado"</i></b></u>, durante la definición de dicho contrato a nivel de Web Service (.wsdl), surge una gran duda que es abordada en este post, esta es cómo manejar el control de errores: con <i><span style="color: #9fc5e8;">'Soap Faults'</span> </i>o con <span style="color: #9fc5e8;"><i>'Error Code'</i></span> personalizados. </div>
<br />
<div style="text-align: justify;">
Las <u><i>Excepciones </i></u>y <u><i>Fallos </i></u>a nivel de servicios se utilizan para comunicar los errores dentro del servicio o para comunicar errores a través de límites de servicio. Por ejemplo, el protocolo <i><b>HTTP</b></i> utiliza códigos de estado como <i><b>404</b></i>, que indica el problema a nivel de <u><i><b>URL </b>(No disponible</i></u><i>)</i>. Así mismo, es importante considera lo que son excepciones por <u><i>Timeout, excepciones al momento de consumir alguna BD y/o servicios que forman parte del servicio compuesto, etc</i></u>.</div>
<br />
<div style="text-align: justify;">
Hay que tener en cuenta al lanzar una excepción, que se tiene que permitir a las <b><u><i>aplicaciones consumidoras</i></u></b> identificar la excepción y/o problema sucedidos, para que estos puedan estas interpretar y reaccionar adecuadamente a la excepción. Así mismo, debe de proporcionar información suficiente para que dicha <i><b>aplicación y/o servicio</b></i> (dentro del flujo compuesto), pueda entender lo que salió mal y definir cómo controlarlo.</div>
<br />
<div style="text-align: justify;">
A nivel de <i><b>Web Service </b></i>se pueden solucionar este problema de dos formas con <span style="color: #9fc5e8;"><i><b>Soap Faults</b></i></span> ó con <span style="color: #9fc5e8;"><i>Error Code </i></span>personalizados.</div>
<br />
<br />
<span style="color: yellow;"><b>I. </b><i><u><b>SOAP FAULTs</b></u><b>:</b></i></span><br />
<div style="text-align: justify;">
Este es el modo de control de errores provisto dentro del .wsdl, para el manejo de cualquier tipo de problema dentro del servicio. La falla es registrada dentro del cuerpo elemento de un servicio web. Así mismo, para su manejo debe ser creado un tercer elemento menssage de tipo <u><b><i>Fault </i></b></u>dentro del <u><b><i>PortType</i></b></u>: </div>
<br />
<span style="color: #b6d7a8;"><i>[<span style="color: black;"><span style="background-color: yellow;">fault message</span></span>="tns:MissingName" name="NombreObjetoError" /]</i></span><br />
<br />
<div style="text-align: justify;">
Actualmente, existen en base al tipo de <i><b>SOAP </b></i>utilizado: (<u><i><span style="color: #9fc5e8;">SOAP:1.1</span> ó <span style="color: #9fc5e8;">SOAP:1.2</span></i></u>), que manejan estructuras de falla diferentes por versión respectivamente.</div>
<br />
<span style="color: #cc0000;"><u><i>SOAP 1.1</i></u><i>:</i></span><br />
<span style="color: #b6d7a8;"><i> [SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"]<br /> [SOAP-ENV:Header/]<br /> [SOAP-ENV:Body]<br /> [SOAP-ENV:Fault]<br /> [faultcode]SOAP-ENV:Client[/faultcode]<br /> [faultstring]INFORMACION DEL PROBLEMA[/faultstring]<br /> [faultactor]http://gizmos.com/order[/faultactor]<br /> [detail]<br /> [PO:order xmlns:PO="http://gizmos.com/orders/"]AQUÍ DETALLE COMPLETO DEL PROBLEMA[/PO:order]<br /> [/detail]<br /> [/SOAP-ENV:Fault]<br /> [/SOAP-ENV:Body]<br /> [/SOAP-ENV:Envelope]</i></span><br />
<br />
<span style="color: #cc0000;"><u><i>SOAP 1.2</i></u><i>: </i></span><br />
<span style="color: #b6d7a8;"><i>[env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"]<br /> [env:Header/]<br /> [env:Body]<br /> [env:Fault]<br /> [env:Code]<br /> [env:Value]env:Sender[/env:Value]<br /> [/env:Code]<br /> [env:Reason]<br /> [env:Text xml:lang="en-US" ]INFORMACION DEL PROBLEMA[/env:Text]<br /> [/env:Reason]<br /> [env:Role]http://gizmos.com/order[/env:Role]<br /> [env:Detail] <br /> [PO:order xmlns:PO="http://gizmos.com/orders/"]AQUÍ DETALLE COMPLETO DEL PROBLEMA[/PO:order]<br /> [/env:Detail]<br /> [/env:Fault]<br /> [/env:Body]<br />[/env:Envelope]</i></span><br />
<br />
<br />
<span style="color: yellow;"><b><span style="color: yellow;"><b>II. </b></span></b><i><u><b>ERROR CODE</b></u><b>:</b><u><b><br /></b></u></i></span>Consiste en NO manejar los message de tipo <u><b><i>Fault </i></b></u>dentro del <span style="color: #9fc5e8;"><i>PortType </i></span>(<u><i>Input message</i></u><i> y </i><u><i>Output message)</i></u>, y definir un estándar a nivel de <b><i>.xsd </i></b>(<span style="color: #9fc5e8;"><i>ComplexType</i></span>), con los parámetros de control de errores: <span style="color: #9fc5e8;"><b><i>CodError</i></b></span>, <span style="color: #9fc5e8;"><i><b>MsjError</b></i></span>, donde se estandarizarán los controles de error mencionados (<u><i>No disponible, TimeOut, BD, etc</i></u>), ya sean de tipo <u><i><b>Técnicos </b></i></u>ó <b><u><i>Funcionales </i></u></b>(negocio). Así mismo, estos cuando se ejecuten serán controlados en la implementación del servicio e identificados por tipo de excepción, y retornados a la <span style="color: #9fc5e8;"><i>aplicación consumidora</i></span> en el mismo elemento: <span style="color: #9fc5e8;"><i>Output message</i></span> (<span style="color: #9fc5e8;"><i>CodError, MsjError</i></span>). Esto facilitaría la identificación de la falla del servicio para el cliente (transparente). <i> </i><br />
<br />
<span style="color: yellow;"><i><u><b>Recomendación:</b></u></i></span><br />
<div style="text-align: justify;">
Muchos estarán a favor del manejo por <b><i><span style="color: #a2c4c9;">Soap Faults</span> </i></b>y otros por el manejo por <b><i><span style="color: #a2c4c9;">Error Code</span> </i></b>personalizados<b><i>.</i></b> Desde mi punto de vista, he trabajado con ambos formas de control y procederé a dar mis comentarios y puntos de vista:</div>
<br />
<div style="text-align: justify;">
En lo relacionado a <span style="color: #a2c4c9;"><u><b><i>Soap Faults</i></b></u></span>, el manejo <u><b>facilita </b></u>el desarrollo <i><u>del lado de la implementación del servicio</u></i>, ya que uno como desarrollador se olvidaría un poco del control de excepciones, debido a que ante una falla, esta será lanzado por el: <span style="color: #9fc5e8;"><i>fault message</i></span>. Por otro lado, este manejo <u><i>dificulta el control e identificación del error por parte de las aplicaciones consumidoras</i></u> que tendrán que pelearse con dos estructuras diferentes de <i><b>Soap Fault</b></i> (<u><i>Versión SOAP: 1.1 y 1.2</i></u>), así mismo como los problemas del lado e algunos Frameworks, que al hacer el Topdown generan problemas para acceder a la parte de <b><i>Fault </i></b>a nivel de código.</div>
<br />
<div style="text-align: justify;">
En lo relacionado a <span style="color: #a2c4c9;"><u><i><b>Error Code</b></i></u></span>, el manejo <u><b>dificulta </b></u>el desarrollo <u><i>del lado de la implementación del servicio</i></u> debido a que se deberá identificar, dentro del servicio, los posibles tipos de errores que puedan generar problemas en el servicio: <u><i>TimeOut, No disponible, BD, etc</i></u>, y ser respondidos por el mismo objeto: <span style="color: #9fc5e8;"><i>Output message</i></span>. Por otro lado, este manejo <u><i>facilitaría haciendo transparente el control de errores del lado de las aplicaciones consumidoras</i></u>, es más se podría definir desde el inicio como parte del <u><i><b>documento de especificaciones del servicio</b></i></u> los posibles:<span style="color: #9fc5e8;"> </span><span style="color: #cfe2f3;"><i><span style="color: #9fc5e8;">codError</span> </i></span>y <span style="color: #9fc5e8;"><i>msjError</i></span>, para los diferentes escenarios de tipo <i><b>Técnicos </b></i>o <b><i>Funcionales </i></b>(negocio). Incluso, favorecería la identificación por el lado de los administradores del servidores (a nivel de Logs).</div>
<br />
<div style="text-align: justify;">
Finalizando, solo me queda mencionar que se ha tratado de detallar datos importante, en base a experiencia en el manejo, de estas dos modalidades existentes para el <b><u><i>Control de Errores</i></u></b> a nivel de <i><b>Web Service</b></i>. De su lado, ya queda tomar nota y ver que manera de adecúa mejor a la implementación en su negocio (proyectos).</div>
<br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-9265982994800847402015-10-23T09:18:00.005-07:002015-10-23T11:38:40.032-07:00CENTRALIZACIÓN DE LOG's (SYSLOGs)<br />
<div style="text-align: justify;">
En un post anterior comenté sobre lo que es la:<i> </i><a href="http://frameworksjava2008.blogspot.pe/2015/09/importancia-de-log-en-los-servicios.html" rel="nofollow" target="_blank"><i>Importancia de los LOGs en los Servicios</i></a>, en esta oportunidad hablaré y mostraré sobre algo importante que está de la mano con este tema, en si es posterior a dicho tema, este es la <span style="color: #9fc5e8;"><i>'</i></span><i><span style="color: #9fc5e8;">Centralización de Logs'</span></i>. </div>
<br />
<div style="text-align: justify;">
La '<span style="color: #9fc5e8;"><i>Centralización de Logs'</i></span> como su nombre lo dice es muy importante, ya que si analizamos en un ambiente <b><i>Prod</i></b>, existen una gran cantidad de archivos <b><i>Log </i></b>que a diario se van generando y creciendo con los <u><i>procesamientos de los sistemas</i></u>. Para ello anteriormente también se recomendó una serie de consideraciones a tener en cuenta, sobre lo que debería contener cada <b><i>Log</i></b>. Adicionalmente a ello, es recomendable, pensando en proyectos relacionados de <b><i>SOA</i></b>, definir por servidor una <u><b><i>Ruta Absoluta Fija</i></b></u> (por ejemplo:<span style="color: #ffe599;"><i> /home/tdp/soa/logs</i></span>), que contendrá en su interior los directorios con los nombres de los proyectos trabajados (<u><b><i>servicios</i></b></u>) y dentro de estos directorios se generen <b><i>Logs </i></b>de cada servicio. Así mismo, definir a un <i><span style="color: #9fc5e8;">Operador/Administrador</span> </i>de servidores que sea el encargado de la revisión y mantenimiento de los <i><b>Logs </b></i>(<u><i>ya que estos, dependiendo de los mecanismos que se utilicen para su generación, van creciendo por día considerablemente</i></u>), debido a ellos dichos <b><i>Operadores </i></b>deben velar por el bienestar de los <i><b>servidores</b></i>, eliminando <b><i>Logs </i></b>de <u><i>fechas anteriores</i></u> (<i>por ejemplo cuatro semanas de antigüedad, dependiendo del negocio</i>) a <u>nivel del <i>Servidor </i>y de los <i>Nodos </i>que existan (Cluster), </u>por medio de Script por ejemplo. Esta es una tarea que si no se realiza ordenadamente, definiendo rutas absolutas fijas donde ir a buscar directamente, ante una falla del servicio, puede llevar al caos el identificar problemas existentes.</div>
<br />
<div style="text-align: justify;">
Justamente, pensando en aligerar un poco esta tarea de identificación de fallas en los servicios, nace el concepto de '<span style="color: #9fc5e8;"><i><b>Centralización de Logs</b></i></span>', esto consiste en que los sistemas y/o aplicaciones generadoras de <i><b>Logs</b></i>, por medio de un mecanismo, lancen sus <b><i>Logs </i></b>a un <u><b><i>Servidor Central de Logs</i></b></u>, estos servidores (<i><b>Virtuales/Físicos</b></i>), deberá tener la capacidad de recepcionar los mensajes de <b><i>Logs</i></b> enviados y por medio de una consola de administración, el <i><b>Operador/Administrador </b></i>será alertado vía emails, así como poder visualizar listado en pantalla los problemas, etc.</div>
<br />
<div style="text-align: justify;">
En esta oportunidad mostraré una solución para realizar dicha tarea de: <span style="color: #9fc5e8;"><i>'Centralización de Logs'</i></span>, por medio de <span style="color: #9fc5e8;"><i><b>'Log4j Syslog'</b></i></span> y <span style="color: #9fc5e8;"><i>'Kiwi Syslog Server'</i>.</span> Ahora explicando un poco sobre: <b><i>'Kiwi Syslog </i>Server',</b> es una solución de pago que trabaja como servidor <span style="color: #9fc5e8;"><i><b>syslog</b></i></span>, brindando características de administración de archivos de registro, fácil de usar para los <b><i>Operadores/Administradores</i></b> y los equipos de red, de instalar y configurar, este trabaja con alertas, SNMP, eventos, etc, sobre las plataformas <b><i>Windows, Linux</i></b>. Para más detalles del producto visualizar el <b><i><a href="https://www.youtube.com/watch?v=A2XIbFa3X_I&feature=youtu.be" rel="nofollow" target="_blank">Video.</a></i></b></div>
<b><i><br /></i></b><span style="color: #ffd966;"><b>I. </b><u><b>SYSLO<u>G SERVER (</u>Kiwi)</b></u><i>: </i></span><b><i><br /></i></b>Lo bueno para el tema de pruebas es que este <u><b><i>Syslog Server</i></b></u>, maneja su <i><u>versión Free</u></i>, que se puede descargar de <a href="http://www.kiwisyslog.com/products/kiwi-syslog-server/product-overview.aspx" rel="nofollow" target="_blank">aquí</a>. <br />
<br />
Un vez descargado se debe de instalar el software que trabajará fijo con <span style="color: #9fc5e8;"><b><i>Evento </i></b></span>permanente instalado en la máquina y que escuchará los mensajes <i><b>Syslog</b></i>: <span style="color: #9fc5e8;"><i>SolarWinds_Event_LogForwarder_Setup</i></span>, luego se debe instalar el <b><u><i>Syslog Server</i></u></b> como tal: <span style="color: #9fc5e8;"><i>Kiwi_Syslog_Server_9.5.0.Freeware.setup</i></span>.<br />
<br />
<b><i><a href="http://1.bp.blogspot.com/-jYLAgznnYxg/VipgUgv5uCI/AAAAAAAABaQ/22RX7CIzg3k/s1600/1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="128" src="http://1.bp.blogspot.com/-jYLAgznnYxg/VipgUgv5uCI/AAAAAAAABaQ/22RX7CIzg3k/s320/1.jpg" width="320" /></a></i></b><br />
<b><i><br /></i></b>Terminada la instalación así se visualizará el:<b><i> <u>Kiwi </u></i></b><b><u><i>Syslog Server</i></u></b>:<br />
<br />
<b><i><a href="http://4.bp.blogspot.com/-NFe6MLmd6FI/VipjtwUqGBI/AAAAAAAABac/eVPLurOXQDk/s1600/2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="114" src="http://4.bp.blogspot.com/-NFe6MLmd6FI/VipjtwUqGBI/AAAAAAAABac/eVPLurOXQDk/s320/2.jpg" width="320" /></a></i></b><br />
<br />
<b><span style="color: #ffe599;">II. </span></b><b><span style="color: #ffe599;"><u>LOG4J (Syslog)</u>: </span></b><br />
Por medio de <span style="color: #9fc5e8;"><i><b>Log4j </b></i></span>y su integración con <b><i>Servidores de Aplicaciones</i></b> como <span style="color: #9fc5e8;"><i><b>Weblogic </b></i></span>ó <span style="color: #9fc5e8;"><b><i>WAS</i></b></span>, uno puede configurar la autogeneración de <b><i>Logs</i></b>, en <b><u><i>Rutas Absolutas Fijas</i></u></b> por Servicio (<u><i>Justo la primera parte que anteriormente ya se había mencionado y recomendado</i></u>). <br />
<b><i><br /></i></b>He creado un proyecto <b><i>JAVA </i></b>para simular el manejo, configuración y envío de los <b><i>Logs </i></b>(mensajes) al <b><i>Servidor Central</i></b> por medio de <span style="color: #9fc5e8;"><i>Syslog</i></span>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-_lwlYOf7uuQ/VipllIEdrRI/AAAAAAAABao/3enNWmcvDtI/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="149" src="http://4.bp.blogspot.com/-_lwlYOf7uuQ/VipllIEdrRI/AAAAAAAABao/3enNWmcvDtI/s320/3.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br />
Todo debende de manejar una buena configuración de los <span style="color: #9fc5e8;"><i>Appender </i></span>de <i><b>Log4j</b></i>, mi caso tengo configurado dos <span style="color: #9fc5e8;"><i>Appender</i></span>, para que tabajen de la mano: </div>
<ul style="text-align: justify;">
<li><span style="color: #b6d7a8;"><i>org.apache.log4j.net.SyslogAppender</i>:</span> Para la comunicación con el <u><b><i>Servidor Central Syslog</i></b></u>.</li>
<li><span style="color: #b6d7a8;"><i>org.apache.log4j.DailyRollingFileAppender</i><i>:</i></span> Para la generación de los <i><b>Log </b></i>en las <u><i>rutas absolutas fijas definidas</i></u>. </li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-GcIxNYTOxYU/VipmHT6-QhI/AAAAAAAABaw/EV7AA4pVLAk/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="211" src="http://1.bp.blogspot.com/-GcIxNYTOxYU/VipmHT6-QhI/AAAAAAAABaw/EV7AA4pVLAk/s320/4.jpg" width="320" /></a></div>
<b><i><br /></i></b>
<b><span style="color: #ffe599;">III. <u>TESTING</u></span></b><i><b><span style="color: #ffe599;">: </span></b></i><br />
<div style="text-align: justify;">
El dummy preparado inicia desde <b><i>Eclipse </i></b>que mandará el <i><b>Log </b></i>a generarse, tanto en la<i> <u><b>Ruta Absoluta Fija</b></u></i><u> definida</u>, como en el <u><b><i>Servidor Central Syslog</i></b></u>: </div>
<b><i></i></b>
<b><i></i></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-Wls50T92rUg/VipwagNMqvI/AAAAAAAABbA/Fb9tPFxrNZA/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="http://2.bp.blogspot.com/-Wls50T92rUg/VipwagNMqvI/AAAAAAAABbA/Fb9tPFxrNZA/s320/5.jpg" width="320" /></a></div>
<br />
El mensaje será registrado en el archivo <b><i>Log</i></b>, del <u><i>directorio fijo</i></u> definido. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-SlD9q-eILcc/VipwarsHUsI/AAAAAAAABbE/6cTM58MESeE/s1600/6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="82" src="http://3.bp.blogspot.com/-SlD9q-eILcc/VipwarsHUsI/AAAAAAAABbE/6cTM58MESeE/s320/6.jpg" width="320" /></a></div>
<br />
Así mismo, se registrará el mensaje en el <b><i><u>Servidor Central Syslog</u>, </i></b>tal como se muestra en imagen<b><i>.</i></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-DX8Kjabn1TM/VipwavmcgFI/AAAAAAAABbI/ejJKIfSsiug/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="98" src="http://2.bp.blogspot.com/-DX8Kjabn1TM/VipwavmcgFI/AAAAAAAABbI/ejJKIfSsiug/s320/7.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br />
Esto ayudará el <u><b><i>Operador/Administrador</i></b></u>, a que tenga más visión de los problemas existentes a nivel de los servicios y aplicaciones desplegadas en el Server. </div>
<div style="text-align: justify;">
<br />
Una segunda prueba, ya simulando un escenario real a <i><u>nivel de servicios</u> </i>sería la siguiente:</div>
<br />
<div style="text-align: justify;">
Se debe configurar de manera similar el archivo <span style="color: #a2c4c9;"><i>log4j.xml</i></span> que se tiene integrado con <i><b>Weblogic</b></i> <i>Server</i>, definiendo el <b><i>Appender </i></b>adicional que se deberá manejar para la comunicacion con el <u><b><i>Servidor Centra Syslog</i></b></u>, posteriormente reiniciamos (<i>Asuminemos que el servicio para pruebas, ya está desplegado</i>).</div>
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-xNYwpJHhNdY/VipzTHhd_QI/AAAAAAAABbc/kWIqQfRuCJQ/s1600/8.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-xNYwpJHhNdY/VipzTHhd_QI/AAAAAAAABbc/kWIqQfRuCJQ/s320/8.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Desde <i><b>SOAPUI </b></i>ejecutamos la prueba del servicio respectivo y configurado:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Ti29a3krqXA/Vip2PPd3mlI/AAAAAAAABb4/dHeofN19bmw/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="154" src="http://3.bp.blogspot.com/-Ti29a3krqXA/Vip2PPd3mlI/AAAAAAAABb4/dHeofN19bmw/s320/9.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br />
Este lanzamiento registrará, la traza real del servicio en el archivo <b><i>Log </i></b>del servicio, generado en la <u><i>Ruta Fija</i></u> absoluta.<b><i><br /></i></b></div>
<b><i></i></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-LIvV5whbBSs/Vip1xtg9r7I/AAAAAAAABbo/ZSSHzEZw67Q/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="http://2.bp.blogspot.com/-LIvV5whbBSs/Vip1xtg9r7I/AAAAAAAABbo/ZSSHzEZw67Q/s320/10.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Así mismo, el mismo mensaje se registrará en el <u><i><b>Servidor Central</b></i> </u><i><b><u>Syslog</u> (Kiwi)</b></i> de <i><b>Logs</b></i>. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-azJJ3qReI6g/Vip1x66qiOI/AAAAAAAABbs/adPP3EvnL4U/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="http://2.bp.blogspot.com/-azJJ3qReI6g/Vip1x66qiOI/AAAAAAAABbs/adPP3EvnL4U/s320/11.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br />
Finalmente, solo que me queda mencionar que se ha tratado de mostrar uno de las tantas maneras y mecanismos que existen para la <b><i>'Centralizacion de Log'</i></b>, un poco más orientado a entornos <b><i>SOA</i></b>.<br />
<br />
Para los interesados pueden descargar el <b><i>Dummy </i></b>del proyecto <u><b><i>Log4jSyslog</i></b></u><b><i> </i></b>desde aquí<b><i>: <a href="http://www.mediafire.com/download/ysjeyglklk8sa89/LoggerSyslog.zip" rel="nofollow" target="_blank">http://www.mediafire.com/download/ysjeyglklk8sa89/LoggerSyslog.zip</a></i></b></div>
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-11603497548043416992015-10-21T18:42:00.002-07:002015-10-21T21:05:27.037-07:00'TEMPLATEs' & 'REUSE PROJECT' IN OSB 12c<div style="text-align: justify;">
<br />
Una característica muy resaltante e importante que brinda ‘<span style="color: #9fc5e8;"><b><i>Oracle Service Bus 12c</i></b></span>’ (<i><b>OSB</b></i>), es la capacidad de definir y manejar Templates para diferentes tipos de proyectos <b><i>OSB</i></b>, en los cuales uno puede estandarizar dichos Templates en un <i><b>SVN </b></i>por ejemplo y compartirlos con el equipo de desarrollo para que realicen las implementaciones de los ‘<b><i>Servicios Virtuale</i><i>s</i></b>’ requeridas. Esto es importante ya que todo lo definido en los <span style="color: #9fc5e8;"><b><i>Templates </i></b></span>se ajustan a reglas y directrices (<i><b>estándares</b></i>) del proyecto, esto significa eliminar la costumbre común de copiar y pegar de ciertas nodos del <b><i>OSB</i></b> (<u><i>v</i><i>ersión anterior 11g</i></u>), y favorece la reutilización al <b><i>100%</i></b>. <i><b>OSB 12c</b></i> cumple con tener un entorno de desarrollo mucho más integrado (vía <u><i><b>Enterprise Manager</b></i></u>) y con un más fácil modo de instalación como parte de todo la <span style="color: #9fc5e8;"><i>SOA Suite 12c</i></span>.</div>
<br />
<div style="text-align: justify;">
En este artículo trataré de mostrar cómo utilizar esta nueva funcionalidad a base de <b><i>Templates </i></b>en <i><b>OSB 12c</b></i>, que tal como se comentó facilitará la construcción y reutilización de una gran cantidad de servicios a través de diferentes proyectos. Así mismo, comentaré son la reutilización de proyectos por referencia para manejar todo lo relacionado a recursos utilitarios de diferentes tipos a nivel general.</div>
<br />
<span style="color: #ffe599;"><b>I. <u>TEMPLATE</u>:</b></span><br />
<div style="text-align: justify;">
El manejo de Templates se puede manejar de diferentes formas que son las siguientes:</div>
<br />
<span style="color: #6fa8dc;"><i>A. <u>En base a un proyecto existente</u>:</i></span> <br />
En base a un proyecto existente, se puede generar un <b><i>Template </i></b>de la manera mostrada en la imagen, pero esto puede problemas y errores debido a las dependencias con <b><i>Xquerys </i></b>y archivos los cuales se tenga dependencia a nivel de rutas.<br />
<br />
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-M20CTpdLOsU/VigxvmtRf6I/AAAAAAAABYI/mI5hFyjYk_w/s1600/1.jpg"><img border="0" src="http://3.bp.blogspot.com/-M20CTpdLOsU/VigxvmtRf6I/AAAAAAAABYI/mI5hFyjYk_w/s320/1.jpg" /></a></div>
<span style="color: #6fa8dc;"><a href="http://3.bp.blogspot.com/-M20CTpdLOsU/VigxvmtRf6I/AAAAAAAABYI/mI5hFyjYk_w/s1600/1.jpg"><br /></a>
<i>B. <u>Definiendo Template desde cero</u>: </i></span><br />
El <b><i>Template </i></b>es creado desde cero desde la barra de menú: <br />
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-i7YaDS8H45E/VigzaoS6ryI/AAAAAAAABYU/_wYzNwHqy9U/s1600/2.jpg"><img border="0" src="http://1.bp.blogspot.com/-i7YaDS8H45E/VigzaoS6ryI/AAAAAAAABYU/_wYzNwHqy9U/s320/2.jpg" /></a></div>
<br />
<div style="text-align: justify;">
Se define la ruta donde se almacenará el <i><b>Template</b></i>:<br />
<br /></div>
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-OZePeJLCFUM/VigzalZWuWI/AAAAAAAABYk/BSKmMmyZnL0/s1600/3.jpg"><img border="0" src="http://3.bp.blogspot.com/-OZePeJLCFUM/VigzalZWuWI/AAAAAAAABYk/BSKmMmyZnL0/s320/3.jpg" /></a></div>
<br />
<div style="text-align: justify;">
Dependiendo como se desee manejar el <span style="color: #9fc5e8;"><b><i>.WSDL</i></b></span> a futuro, se define este punto. En mi caso recomiento manejarlo como <span style="color: #9fc5e8;"><i>WSDL SOAP </i></span>(independiente de la versión), para que cuando se <u><i>autogenere</i></u><i> </i>se exija el manejo del <span style="color: #9fc5e8;"><i>TopDown</i></span>. </div>
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-WRH5-Xr-97A/Vigza6aalFI/AAAAAAAABYY/OH7B6aAyfys/s1600/4.jpg"><img border="0" src="http://1.bp.blogspot.com/-WRH5-Xr-97A/Vigza6aalFI/AAAAAAAABYY/OH7B6aAyfys/s320/4.jpg" /></a></div>
<br />
<br />
<span style="color: #ffe599;"><i><u>RECOMENDACIÓN</u></i></span><span style="color: #9fc5e8;">:</span><br />
<div style="text-align: justify;">
Una recomendación que daría para el manejo de Templates, es de la siguiente manera:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Definir formalmente (estandarizar) Templates específicando, como se requieren manejar con relación a su implementación de los '<u><i><b>Servicios Virtuales</b></i></u>' en sus organizaciones:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En mi caso he definido 3 posibles Templates:</div>
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-I0xOnsuxt-g/Vig4AIJvy8I/AAAAAAAABY8/B4P6JcnUHXA/s1600/8.jpg"><img border="0" src="http://1.bp.blogspot.com/-I0xOnsuxt-g/Vig4AIJvy8I/AAAAAAAABY8/B4P6JcnUHXA/s1600/8.jpg" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: justify;">
<span style="color: #ffe599;"><i>- VirtualServiceAgnosticSOAP_Template.ptx</i>:</span> <br />
Plantilla para <u><b>AUTOGENERAR</b></u><b> </b>la estructura de un '<u><b><i>Servicio Virtual</i></b></u>' con comunicacion <u>AGNÓSTICA</u> (Sin Transformación), el .<b>WSDL </b>debe ser reutilizado para la creación del '<b><u><i>Business Service</i></u></b>' como para el '<u><i><b>Proxy Service</b></i></u>'.</div>
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-JouGiSte7zM/Vig3_ghK-1I/AAAAAAAABYw/5IMi8LcphK4/s1600/5.jpg"><img border="0" src="http://1.bp.blogspot.com/-JouGiSte7zM/Vig3_ghK-1I/AAAAAAAABYw/5IMi8LcphK4/s320/5.jpg" /></a> </div>
<br />
<div style="text-align: justify;">
<i><span style="color: #ffe599;">- VirtualServiceTransformSOAP_Template.ptx:</span></i> <br />
Plantilla para <u><b>AUTOGENERAR</b></u><b> </b>la estructura de un '<u><b><i>Servicio Virtual</i></b></u>' SIN comunicacion <u>AGNÓSTICA</u> (Con Transformación), el .<b><i>WSDL </i></b>requiere de modificaciones (campos extras) y/o modificación a nivel de <i><b>Namespace</b></i>. Debido a ellos los .<i><b>WSDL</b></i>'s del '<u><i><b>Business Service</b></i></u>' como para el '<b><u><i>Proxy Service</i></u></b>', deben ser diferentes y america una transformación intermedia.<br />
<br /></div>
<div style="text-align: center;">
<a href="http://2.bp.blogspot.com/--ADn8NDleYQ/Vig3_-J6YAI/AAAAAAAABY0/oTY3HXEiatc/s1600/6.jpg"><img border="0" src="http://2.bp.blogspot.com/--ADn8NDleYQ/Vig3_-J6YAI/AAAAAAAABY0/oTY3HXEiatc/s320/6.jpg" /></a></div>
<br />
<div style="text-align: justify;">
<span style="color: #ffe599;"><i>- VirtualServiceTransformGeneric_Template.ptx:</i></span> <br />
Plantilla para <u><b>AUTOGENERAR </b></u>la estructura de un '<u><i><b>Servicio Virtual</b></i></u>' genérico, con espacio para para una implementación de tipo Secuencial. </div>
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-EeYXsXQZiIk/Vig3_ziTLqI/AAAAAAAABY4/l-4LL_k5IaY/s1600/7.jpg"><img border="0" src="http://1.bp.blogspot.com/-EeYXsXQZiIk/Vig3_ziTLqI/AAAAAAAABY4/l-4LL_k5IaY/s320/7.jpg" /></a></div>
<br />
<div style="text-align: left;">
</div>
<div style="text-align: justify;">
<span style="color: #ffe599;"><i><b>- </b></i><u><i><b>IMPORTANTE</b></i></u>:</span> <br />
Los servicios en paralelos basados en '<span style="color: #6fa8dc;"><i>Split-Join</i></span>', NO pueden ser trabajados con Plantillas. En este caso deberán ser desarrollados como '<u><i>Servicios Virtuales</i></u>' a medida.<br />
<br />
El manejo recomendada a base de <b><i>Templates</i></b>, puede implementarse fácilmente tal como se muestra en la imágen, todos en un mismo proyecto y manejada la estructura, tal como se recomendó en un post <a href="http://frameworksjava2008.blogspot.pe/2015/10/definicion-de-estructura-de-directorios.html" rel="nofollow" target="_blank">anterior</a>. Esto asegurará un correcto, rápido y estandarizado manejo con la organización.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-wUtK6QAwBTo/VihFBDO_fuI/AAAAAAAABZY/DKgzgtYfCrI/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="149" src="http://3.bp.blogspot.com/-wUtK6QAwBTo/VihFBDO_fuI/AAAAAAAABZY/DKgzgtYfCrI/s320/9.jpg" width="320" /></a></div>
<br />
<b><span style="color: #ffe599;">II. <u>REUSE PROJECT</u>:</span></b><br />
<div style="text-align: justify;">
El manejo de reutilización de proyectos <i><b>OSB</b></i>, por referencia se maneja para casos como el que procederé a explicar.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Imaginemos
que tal como se recomendó seguimos un estándar a nivel de estructura de
directorios, y tenemos gran cantidad de '<u><b><i>Servicios Virtuales</i></b></u>' que
manejan de similar y repetida manera: (<span style="color: #9fc5e8;"><i>Xquery. Jar, Xsd, etc</i></span>). Debido a
este motivo es necesario definir y estandarizar también un mecanismo que
permita reutilizar entre todos los proyectos lo mencionado. </div>
<br />
<div style="text-align: justify;">
Para
ello es importante crear un estándar de proyecto <b><i>OSB </i></b>a modo utilitario
donde se maneje todo lo explicado anteriormente. La propuesta de manejo
sería la siguiente: </div>
<br />
Un directorio <b><i>OSB </i></b>en mi caso: <span style="color: #ffe599;"><i>UTILITY_OSB</i></span>, que contenga en su interior los recursos:<br />
<br />
<ul style="text-align: justify;">
<li><span style="color: #ffe599;"><b><u>ALERT</u>:</b><i> <span style="color: #fff2cc;">Alertas por nivel para ser referenciadas desde el interior de todos los proyectos. </span></i></span></li>
<span style="color: #ffe599;">
</span>
<li><span style="color: #ffe599;"><b><u>JAR</u>:</b><i> <span style="color: #fff2cc;">Librerías Java para ser referenciadas estáticamente para lo que son Log y Properties externos.</span></i></span></li>
<span style="color: #ffe599;">
</span>
<li><span style="color: #ffe599;"><b><u>TEMPLATE</u>:</b><i> P<span style="color: #fff2cc;">lantillas base estándar para la generación de proyectos OSB por tipo.</span></i></span></li>
<span style="color: #ffe599;">
</span>
<li><span style="color: #ffe599;"><b><u>XQUERY</u>:</b><i> <span style="color: #fff2cc;">Archivos de tipo XQuery para ser referenciadas desde el interior de todos los proyectos.</span></i></span></li>
<span style="color: #ffe599;">
</span>
<li><span style="color: #ffe599;"><b><u>XSD</u>:</b><i> <span style="color: #fff2cc;">Archivos de tipo Xsd para el manejo de Auditoría, para ser incrustado a modo import/include en los .wsdl creados de todos los proyectos.</span></i></span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-FoQ8-uyhd5g/VihMPtYZUhI/AAAAAAAABZs/DEoYilzV01Y/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-FoQ8-uyhd5g/VihMPtYZUhI/AAAAAAAABZs/DEoYilzV01Y/s320/10.jpg" width="257" /></a></div>
<br />
<div style="text-align: justify;">
Este tipo de proyecto utilitario debe ser desplegado en el servidor (<i><b>Cluster </b></i>y<i><b> Nodos</b></i>), ya que la referencia será manejada a modo local, desarrollo como en los demás ambientes existentes en el servidor <i><b>Weblogic</b></i>.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-VH1-oEkoZFA/VihMPka2CsI/AAAAAAAABZo/9WW0Gz_FklA/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-VH1-oEkoZFA/VihMPka2CsI/AAAAAAAABZo/9WW0Gz_FklA/s320/11.jpg" width="244" /></a></div>
<br />
<div style="text-align: justify;">
No olvidar que las referencias todos los <b><i>Templates </i></b>estandarizados, deben estar totalmente documentados, para poder uno como desarrollador saber y tener conocimiento lo que ya está definido y falta agregar para implementar. Así mismo, todas las <u><b><i>Templates</i></b></u><b><i> </i></b>están directamente relacionados con el tema de: <u><i><b>Reuse Project</b></i></u>, ya que sus recursos reutilizables referencian a lo existente en dicho proyecto utilitario <i><b>OSB</b></i>. <br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-P8snbkKLAjM/VihPaKQIFfI/AAAAAAAABZ8/oDU8lB5WfAE/s1600/12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="170" src="http://3.bp.blogspot.com/-P8snbkKLAjM/VihPaKQIFfI/AAAAAAAABZ8/oDU8lB5WfAE/s320/12.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Finalmente, se debe recordar tanto el manejo de: <u><b><i>Templates</i></b></u>, como el manejo de <u><b><i>Reuse Project</i></b></u> y el de <b><u><i>Estructura de Directorios</i></u></b> en <b><i>OSB</i></b>, es un tema también considerado como buenas prácticas en lo relacionado a estandarizar todo el proyecto, esto para llevar un mejor control de tal así como favorecer el desarrollo y mantenimiento respectivamente.</div>
<br />
<br />
<div style="text-align: justify;">
Para los interesados en los <b><i>Templates </i></b>propuestos, estos se pueden descargar desde aquí: </div>
<div style="text-align: justify;">
<a href="https://www.mediafire.com/folder/dyz2j9044r0qd/OSB" rel="nofollow" target="_blank">https://www.mediafire.com/folder/dyz2j9044r0qd/OSB</a></div>
<br />
<br />
<span style="border: none windowtext 1.0pt; color: #373737; font-family: "Arial","sans-serif"; font-size: 10.0pt; mso-border-alt: none windowtext 0cm; padding: 0cm;"><br /></span>
JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-59947681321520982382015-10-19T20:42:00.002-07:002015-10-19T21:00:28.571-07:00DEFINICIÓN DE ESTRUCTURA DE DIRECTORIOS EN OSB 12c<br />
<div style="text-align: justify;">
El manejo de los <i><b>estándares </b></i>en todo tipo de proyectos es importante, ya que permite definir un mismo modo de trabajo (un estándar), con relación a todo el <b><i>equipo de desarrollo</i></b>. Estos <b><i>estándares</i></b> pueden ser aplicados a prácticamente todo, desde fuentes, documentación etc. <br />
<br />
A nivel de <span style="color: #9fc5e8;"><b><i>Oracle Service Bus</i></b></span> (<span style="color: #9fc5e8;"><i>OSB</i></span>), esto también es recomendable que se aplique, para la creación de los proyecto <i><b>OSB </b></i>relacionados los <u><b><i>Servicios Virtuales</i></b></u>: (<span style="color: #9fc5e8;"><i>Exposiciones, Virtualizaciones, etc</i></span>). En esta oportunidad mostraré una forma de cómo estandarizar la <span style="color: #9fc5e8;"><i>Estructura de Directorios</i></span> del proyecto <i><b>OSB </b></i>propiamente, con relación al manejo de un proyecto <span style="color: #9fc5e8;"><i>mediano/grande</i></span> a <u><i>nivel departamental</i></u>. Dicha estructura de directorios debe ser capaz de soportar ser lo más ordenado y reutilizable posible, pensando en la gran cantidad de <u><i><b>Servicios Virtuales</b></i></u> que manejará internamente, así mismo como facilitar la segmentación y mantenimiento de estos.</div>
<br />
<div style="text-align: justify;">
La <span style="color: #ffe599;"><i>Estructura de Directorios</i></span> propuesta, para este tipo de proyectos <b><i>OSB </i></b>de <span style="color: #9fc5e8;"><i>mediano/grande envergadura</i></span>, así como la <u><i>extensión</i></u><i> </i>de los archivos manejados por directorios, son las que se muestran en imagen:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-3LArbQHTtUY/ViWu1Sn9hKI/AAAAAAAABXM/DLmBXY0iwRE/s1600/1.%2BEstructura_Extension.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-3LArbQHTtUY/ViWu1Sn9hKI/AAAAAAAABXM/DLmBXY0iwRE/s320/1.%2BEstructura_Extension.jpg" width="270" /></a></div>
<br />
Cada <span style="color: #ffe599;"><i>Estructura de Directorios</i></span> tiene una finalidad con relación a lo que manejará en su interior. Esta estructura está bien detallada:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-wQ0IVSQD1L8/ViWu1VaapXI/AAAAAAAABXQ/8a090lTO5ZE/s1600/2.%2BEstructura_Definicion.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="135" src="http://4.bp.blogspot.com/-wQ0IVSQD1L8/ViWu1VaapXI/AAAAAAAABXQ/8a090lTO5ZE/s320/2.%2BEstructura_Definicion.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
El contenido de los archivos deberán tener así como una ubicación fija (<i><b>directorio</b></i>), una <u><i>nomenclatura</i> <i>estándar</i></u><i> </i>con relación al nombre del <i><span style="color: #9fc5e8;">proyecto/servicio/operación</span></i> manejado. La propuesta es la siguiente:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-R4L_xlzPtk0/ViWu1YdSoZI/AAAAAAAABXU/jpP27H3-nXM/s1600/3.%2BEstructura_Estandar.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="http://1.bp.blogspot.com/-R4L_xlzPtk0/ViWu1YdSoZI/AAAAAAAABXU/jpP27H3-nXM/s320/3.%2BEstructura_Estandar.jpg" width="320" /></a></div>
<br />
Finalmente, como se visualizaría dicha <span style="color: #ffe599;"><i><b>Estructura de Directorios</b></i></span> estándar propuesta, a nivel de la <u><i><b>herramienta </b></i></u>sería de la siguiente forma: (<u><i>Los nombres de empresa, servicios, etc, son subjetivos</i></u>)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-P4z-5vqyLLE/ViWu1r4os9I/AAAAAAAABXY/5liTY9CkJAI/s1600/4.%2BEstructura.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-P4z-5vqyLLE/ViWu1r4os9I/AAAAAAAABXY/5liTY9CkJAI/s320/4.%2BEstructura.jpg" width="170" /></a></div>
<br />
<div style="text-align: justify;">
Así mismo, desde la <b><i>consola OSB</i></b> el agrupamiento departamental de los <span style="color: #9fc5e8;"><i>proyectos/servicios</i></span> de tipo <i><b>OSB</b></i>, deberían visualizarse de la siguiente manera:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-KvGE5Q-3-z0/ViW6EkX63XI/AAAAAAAABX0/81Hk0H-JC9Q/s1600/Consola_OSB.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /><img border="0" height="320" src="http://1.bp.blogspot.com/-KvGE5Q-3-z0/ViW6EkX63XI/AAAAAAAABX0/81Hk0H-JC9Q/s320/Consola_OSB.jpg" width="267" /></a></div>
<br />
Espero que este post haya sido de gran importancia para eliminar duda alguna existente anteriormente, sobre la definición para el manejo de una correcta <span style="color: #ffe599;"><i>Estructura de Directorios</i></span> en <b><i>OSB</i></b>.<br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com1tag:blogger.com,1999:blog-5458598926546072955.post-50638336907007284622015-10-19T12:11:00.000-07:002015-10-19T12:44:10.545-07:00CATCHING & LOAD BALANCING EN OSB<div style="text-align: justify;">
<br />
En post anteriores he explicado sobre la importancia del manejo del <b><i>Cache </i></b>en las aplicaciones y servicios por medio del framework <b><i>Ehcache</i></b>. En esta oportunidad daré detalles de cómo manejar dos temas muy importantes que son el <span style="color: #9fc5e8;"><b><i>Catching</i></b></span>, así mismo como el <span style="color: #9fc5e8;"><i>Balanceo de Carga</i></span> a nivel de <span style="color: #9fc5e8;"><b><i>Oracle Service Bus 12c</i></b></span>.</div>
<br />
<div style="text-align: justify;">
Este artículo se ha creado para ayudar a aquellos que quieren poner en marcha el almacenamiento en caché por medio de <i><b>OSB</b></i>, ya que en él se describe cómo utilizar esta funcionalidad por medio de un ejemplo de cómo el cache maneja dicho almacenamiento y como distribuir la carga existente por medio del balanceo de carga, para mejorar el rendimiento por medio del caché y la configuración de equilibrio de carga en <b><i>OSB</i></b>. Así mismo, <i><b>OSB</b></i> proporciona una funcionalidad que viene ya integrada, que es el soporte de caché por medio de <b><i>Oracle Coherence</i></b>, que brinda muchas estrategias de almacenamiento en caché, a continuación se procederá con la explicación.</div>
<br />
<div style="text-align: justify;">
Antes que nada, es necesario para el <b><i>dummy </i></b>preparado crear un <i><b>Web Service</b></i> con <i><b>JaxWS</b></i>, para ejecutarlo a modo local sin necesidad de desplegarlo en un servidor. Este <i><b>Web Service</b></i> expondrá dos servicios con diferente puerto simulando dos server distintos:</div>
<ul>
<li><span style="color: yellow;"><i>http://localhost:<span style="color: red;">8098</span>/ServidorWS_JAXWS_Generado/UsuarioDAOImpl?wsdl</i></span></li>
<li><span style="color: yellow;"><i>http://localhost:<span style="color: red;">8099</span>/ServidorWS_JAXWS_Generado/UsuarioDAOImpl?wsdl</i></span></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-L359dCiId_U/ViUuS28DazI/AAAAAAAABVc/6Uf0OE8fcXs/s1600/1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="http://4.bp.blogspot.com/-L359dCiId_U/ViUuS28DazI/AAAAAAAABVc/6Uf0OE8fcXs/s320/1.jpg" width="320" /></a></div>
<br />
Luego, en la operación: <span style="color: cyan;"><i>sumar</i></span>, hemos ingresado una línea para aplicar un delay de <span style="color: yellow;">10 segundos </span>en la respuesta de dicho servicio, esto para probar posteriormente la eficacia del <u><b><i>cache </i></b></u>configurado.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-uHv8SG98YQ0/ViU6gGkBAFI/AAAAAAAABWM/vWKxWSpzidQ/s1600/6.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="http://2.bp.blogspot.com/-uHv8SG98YQ0/ViU6gGkBAFI/AAAAAAAABWM/vWKxWSpzidQ/s320/6.jpg" width="320" /></a></div>
<br />
Finalmente, crearemos en el <i><b>OSB </b></i>un <b><i>Servicio Virtua</i></b>l de dicho servicio, en base al<i><b> .wsdl</b> </i>(TopDown) ya expuesto. La <b><i>URL </i></b>de este servicio virtual será: <br />
<ul>
<li><span style="color: yellow;"><i>http://localhost:<span style="color: red;">7101</span>/Operaciones_SB/Pipeline/OperacionesWS?wsdl</i></span></li>
</ul>
<br />
<div style="text-align: center;">
<a href="http://2.bp.blogspot.com/-vA4whlwpCco/ViUyTUh2XQI/AAAAAAAABVo/9owxrntKjwE/s1600/2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="109" src="http://2.bp.blogspot.com/-vA4whlwpCco/ViUyTUh2XQI/AAAAAAAABVo/9owxrntKjwE/s320/2.jpg" width="320" /></a></div>
<br />
<br />
<span style="color: yellow;"><b><i>I. </i></b><u><b><i>CATCHING</i></b></u>: </span><br />
<div style="text-align: justify;">
Para el manejo del <b><i>Caching </i></b>en <b><i>OSB</i></b>, realizaremos la configuración en el: <span style="color: #9fc5e8;"><i>BusinessService (<u>Operaciones_BS</u>) </i></span>previamenete ya creado. Luego, vamos a la opción: <span style="color: #9fc5e8;"><i>Performance</i></span> y habilitamos el check: <span style="color: #9fc5e8;"><i>Enable Result Caching</i></span>. Después, configuramos en: <span style="color: #9fc5e8;"><i>Expiration Time</i></span>, a nivel de: <span style="color: #9fc5e8;"><i>Días, Hora, Minutos</i></span> y <span style="color: #9fc5e8;"><i>Segundos</i></span>, que se requiere que el Cache almacene la información para posteriormente refrescar con la nueva info. <u><i>Esto se debe configurar en base a la información que proporcione el negocio en escenarios donde la información NO variará</i></u>, esto para agilizar la respuesta y evitar consultas a <b><i>BD </i></b>y/o <b><i>servicios </i></b>por gusto. </div>
<br />
<div style="text-align: justify;">
Para este escenario del <i><b>dummy</b></i>, configuraremos solo la parte de los <span style="color: #9fc5e8;"><i>segundos </i></span>(<span style="color: yellow;">20 segundos</span>), para que se refresque dicho cache en ese tiempo.</div>
<br />
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-YGvrjvIVmnk/ViUzx53AQAI/AAAAAAAABV0/rCWkcJHZLWU/s1600/3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="http://1.bp.blogspot.com/-YGvrjvIVmnk/ViUzx53AQAI/AAAAAAAABV0/rCWkcJHZLWU/s320/3.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Desplegamos el <b><i>Servicio Virtual </i></b>dummy e iniciamos la consola de pruebas, tal como se muestra en imagen.</div>
<br />
<div style="text-align: center;">
<a href="http://3.bp.blogspot.com/-CdanGUhCDww/ViU5u9VJkyI/AAAAAAAABWE/THSMA3VCxIc/s1600/4.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="http://3.bp.blogspot.com/-CdanGUhCDww/ViU5u9VJkyI/AAAAAAAABWE/THSMA3VCxIc/s320/4.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Verificamos que al ser ejecutado el <b><i>Servicio Virtual</i></b>, demora exactamente <span style="color: yellow;"><b>10 segundos</b></span> en mostrar la respuesta (<u><i><span style="color: yellow;">ANTES </span>de aplicar la configuración del cache</i></u>).</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Y362HJaV6aA/ViU7xLsMtDI/AAAAAAAABWY/r4d_IT-Yots/s1600/7.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="http://1.bp.blogspot.com/-Y362HJaV6aA/ViU7xLsMtDI/AAAAAAAABWY/r4d_IT-Yots/s320/7.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://1.bp.blogspot.com/-0eA8dHwug1s/ViU7xNZ8qPI/AAAAAAAABWc/MtO_8UxJIRI/s1600/8.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://1.bp.blogspot.com/-0eA8dHwug1s/ViU7xNZ8qPI/AAAAAAAABWc/MtO_8UxJIRI/s320/8.jpg" width="301" /></a></div>
<br />
<div style="text-align: justify;">
Posteriormente, a la configuración del <b><i>Cache</i></b>, el tiempo de <span style="color: #9fc5e8;"><i>10 segundos</i></span> para la respuesta del <b><i>Servicio Virtual</i></b>, será aplicado <i><span style="color: #ffe599;"><u>solo la primera vez</u><u> que se ejecute</u></span></i>. Ya que a la siguiente vez <u><b>automáticamente </b></u>se activará el <b><i>Cache </i></b>configurado e iniciará el conteo de tiempo de <span style="color: #9fc5e8;"><i>20 segundos</i></span> configurado. Esto efecto se puede apreciar desde la consola misma de pruebas, ya que la primera vez demorará y luego de ello, uno puede ejecutar varias veces y la respuesta demorará <span style="color: #9fc5e8;"><u><i>menos de un segundo en responder</i></u><i>,</i><u><i> </i></u></span><u><i>ya que se obtendrá del <b>Cache </b>respectivamente, durante el delay configurado</i></u>.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-djTLmRwHAkA/ViU-UGj5QsI/AAAAAAAABWs/84kmuhxpj3w/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="http://3.bp.blogspot.com/-djTLmRwHAkA/ViU-UGj5QsI/AAAAAAAABWs/84kmuhxpj3w/s320/9.jpg" width="320" /></a></div>
<br />
<span style="color: yellow;"><b><i>II. <u>LOAD BALANCING</u></i></b>: </span><br />
<div style="text-align: justify;">
Para el manejo del <b><i>Load Balancing</i></b> en <b><i>OSB</i></b>, realizaremos la configuración en el: <span style="color: #9fc5e8;"><i>BusinessService (<u>Operaciones_BS</u>) </i></span>previamente ya creado. Luego, vamos a la opción: <span style="color: #9fc5e8;"><i>Transport </i></span>y seleccionamos el <i><b>Algoritmo </b></i>que más nos acomode (<i>en este caso: <b>round-robin</b></i>). Luego, agregamos la segunda <b><i>URL</i></b> que al inicio del post definimos (<i>con diferente <b>puerto</b></i>) a la lista y finalmente, el <span style="color: #9fc5e8;"><i>máximo número</i></span> de reintentos posibles y el <span style="color: #9fc5e8;"><i>intervalo</i></span> entre cada uno de estos.<br /><br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-cDjiXMjH8dI/ViVACg0qHhI/AAAAAAAABW4/FrsUyDDvg_Q/s1600/10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="http://1.bp.blogspot.com/-cDjiXMjH8dI/ViVACg0qHhI/AAAAAAAABW4/FrsUyDDvg_Q/s320/10.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Finalmente, volvemos a desplegar el <i><b>Servicio Virtual </b></i>en la consola <b><i>OSB </i></b>y validamos el efecto ya con todo el <b><i>Balanceo de Carga </i></b>configurado. </div>
<br />
<br />
<div style="text-align: justify;">
Esperemos que el post haya sido de su agrada y lo puedan aplicar de la mejor manera en sus proyectos <i><b>OSB</b></i>. Para los interesados en descargar las fuentes (<span style="color: #9fc5e8;"><b><i>Eclipse </i></b></span>&<b><i> <span style="color: #9fc5e8;">OSB</span></i></b>) lo pueden hacer <b>aquí</b>:</div>
<div style="text-align: justify;">
<a href="http://www.mediafire.com/download/76562h6mo37731o/Dummy_Caching_%26_LoadBalancing.zip" rel="nofollow" target="_blank">http://www.mediafire.com/download/76562h6mo37731o/Dummy_Caching_%26_LoadBalancing.zip</a></div>
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-33843079677776210322015-10-19T09:33:00.000-07:002015-10-19T09:48:19.821-07:00(XSD) INCLUDE vs (XSD) IMPORT<div style="text-align: justify;">
<br />
Tanto en los proyectos <b><i>SOA </i></b>donde existe la necesidad de orientar la arquitectura a nivel de servicios, como en las exposiciones de sistemas <b><i>Legacy </i></b>y <b><i>Virtualizaciones de Servicios</i></b> por medio de <b><i>OSB</i></b>, en todos estos proyectos nace la necesidad de desarrollar servicios de tipo <b><i>Web Service</i></b>. Ahora, durante el diseño de dichos <b><i>Web Service</i></b> lo primero que se requiere hacer son los contratos de servicio (.<i><b>wsdl</b></i>), ahora nace aquí el problema <span style="color: yellow;"><i>¿cómo los diseño?</i></span>..., por medio de una <b>IDE </b>o manualmente, en mi caso yo recomendaría inicialmente apoyarse en una <b>IDE </b>como <i><b>JDeveloper </b></i>o <b><i>Eclipse </i></b>que manejan editores que facilitan de algún modo su creación, posteriormente cuando ya tengan práctica y como yo acostumbro hacer, por rapidez y conocimiento, es definir una plantilla base y desde <b><i>ultraEdit</i></b> aplicar replace a los nombres estándar de: <span style="color: yellow;"><i>wsdl:definitions, Namespace, xsd:element, wsdl:message, wsdl:binding, wsdl:service, wsdl:port, soap:address, wsdl:part, wsdl:operation</i></span>. Así mismo, la edición del modelo de negocio dentro: <span style="color: cyan;"><i>wsdl:types</i></span>.</div>
<br />
<div style="text-align: justify;">
Jústamente, aquí es la idea de este post, ya que es recomendable <b>NO </b>embeber el modelo por medio de los: <span style="color: cyan;"><i>wsdl:types</i></span>, dentro de las interfaces: <b><i>.wsdl</i></b>. Aquí se genera la gran duda de muchos profesionales que es: <span style="color: yellow;"><i>¿Cómo lo manejo con Include o con Import?</i></span>, <span style="color: yellow;"><i>¿Cual es la diferencia de ambos</i></span>?, y que así nomás no se encuentra su explicación. La diferencia es la siguiente:<b><span style="color: red;"><i><br /><br />xsd:include</i></span></b><span style="color: red;">: </span></div>
<span style="color: #9fc5e8;"><i>Se debe usar cuando se requiere manejar los datos de un <b>.<u>xsd</u></b><u> </u>con un mismo <u><b>Namespace</b></u>.</i></span><br />
<b><br /><span style="color: red;"><i>xsd:import</i></span></b><span style="color: red;">:</span><b> </b><br />
<span style="color: #9fc5e8;"><i>Se debe usar cuando se requiere manejar los datos de un <b>.<u>xsd</u></b><u> </u>con un diferente <u><b>Namespace</b></u></i>. </span><br />
<br />
Esto quiere decir que la gran diferencia entre ambos en a nivel de como uno diseñe su contrato de servicio, específicamente a como segmentará <b><i>.wsdl </i></b>y <i><b>.xsd's</b></i> con relación a sus <b><i>Namespace</i></b>.<br />
<br />
Procederé a explicar mejor por medio de un dummy de un diseño que he
creado para su mejor entendimiento, este consiste en un <i><b>.wsdl</b></i> y tres
modelos <b><i>.xsd:</i></b><br />
<br />
<span style="color: red;"><i>ObtenerTecnologia.wsdl</i></span>, este es el contrato de servicio el cual se ha diseñado para que <b>NO </b>se alterado y/o modificado posteriormente. Maneja un <b><i>Namespace </i></b>definido como: <span style="color: yellow;"><b><i>http://pe.com.eai.dummySOA/bean/obtenerTecnologiaWS</i></b></span>, y segmenta su modelo de negocio de manera externa a el, por medio de un <span style="color: cyan;"><i>xsd.include</i></span> ya que manejará el mismo <b><i>Namespace</i></b>: <br />
<br />
<span style="color: cyan;"><i>[xsd:include schemaLocation="./ObtenerTecnologia.xsd" /]</i></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-4j0hgCjfRyk/ViUR7AEVEwI/AAAAAAAABU8/ZGRm8ZVx4Xk/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="164" src="http://4.bp.blogspot.com/-4j0hgCjfRyk/ViUR7AEVEwI/AAAAAAAABU8/ZGRm8ZVx4Xk/s320/1.jpg" width="320" /></a></div>
<br />
<br />
<span style="color: red;"><i>ObtenerTecnologia.xsd</i></span>, es el modelo principal y base del contrato, este se ha diseñado para manejar un mismo contrato que dicho contrato: <span style="color: yellow;"><i>http://pe.com.eai.dummySOA/bean/obtenerTecnologiaWS</i></span>. Así mismo, desde el se referenciará a los demás modelos<b><i> .xsd</i></b> que se han creado: <br />
<br />
<span style="color: red;"><i>- Persona.xsd:</i></span> la referencia con relación a este modelo, será por medio de <i><b>xsd.include:</b></i> <span style="color: cyan;"><i>[xsd:include schemaLocation="./Persona.xsd" /]</i></span>, ya que dicho <i><b>.xsd</b></i> SI manejará el mismo <b><i>Namespace</i></b>: <span style="color: yellow;"><i>http://pe.com.eai.dummySOA/bean/obtenerTecnologiaWS</i></span><br />
<br />
<span style="color: red;"><i>- Auditoria.xsd</i></span>: la referencia con relación a este modelo, será por medio de <b><i>xsd.import:</i></b> <span style="color: cyan;"><i>[xsd:import namespace="http://pe.com.eai.dummySOA/bean/auditoria" schemaLocation="./Auditoria.xsd" /]</i></span>, ya que dicho <b>.xsd </b>NO manejará el mismo <b><i>Namespace </i></b>(<u><i>ya que este modelo será REUTILIZABLE entre diferentes proyectos</i></u>). El <b><i>NameSpace </i></b>que manejará será: <span style="color: yellow;"><i>http://pe.com.eai.dummySOA/bean/auditoria<br /></i></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-nmo0WSQ9PTU/ViUR7RuZaQI/AAAAAAAABU4/WLpF-K9KAIw/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="http://2.bp.blogspot.com/-nmo0WSQ9PTU/ViUR7RuZaQI/AAAAAAAABU4/WLpF-K9KAIw/s320/2.jpg" width="320" /></a></div>
<span style="color: red;"><i><br />Persona.xsd</i></span>, es el modelo donde será definido los campos embebidos en los objetos: <span style="color: cyan;"><i>simpleType</i></span>, <span style="color: cyan;"><i>complexType</i></span>, relacionados directamente al negocio que el servicio implementado utilizará.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-BJFk1_nHF8Q/ViUR7cnmLCI/AAAAAAAABU0/t9ECEajIz_o/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="144" src="http://2.bp.blogspot.com/-BJFk1_nHF8Q/ViUR7cnmLCI/AAAAAAAABU0/t9ECEajIz_o/s320/3.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<span style="color: red;"><i><br />Auditoria.xsd</i></span>, es el modelo donde será definido los campos de auditoría especificamente, embebidos en los objetos: <span style="color: cyan;"><i>simpleType</i></span>, <span style="color: cyan;"><i>complexType</i></span>, que serán <u><i>REUTILIZADO</i></u><i> </i>en diferentes proyectos (modelos). <br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NUomfS3e1hw/ViUR7sRwdhI/AAAAAAAABVA/dvhm3fk_Gt0/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="197" src="http://3.bp.blogspot.com/-NUomfS3e1hw/ViUR7sRwdhI/AAAAAAAABVA/dvhm3fk_Gt0/s320/4.jpg" width="320" /></a></div>
<br />
Finalmente, con esto se completa la explicación del post. Para los interesados en el diseño explicado, pulsar aquí: <br />
<a href="http://www.mediafire.com/download/l152h524h6l2rrb/xsd.include++VS++xsd.import.zip" rel="nofollow" target="_blank">http://www.mediafire.com/download/l152h524h6l2rrb/xsd.include++VS++xsd.import.zip</a><br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-17029418232709574852015-10-18T16:50:00.003-07:002015-10-18T17:11:23.462-07:00PROCESOS PARALELOS CON 'SPLIT-JOIN'<br />
<div style="text-align: justify;">
Los procesos <i><b>paralelos </b></i>son muy importantes en todo flujo de tareas, así mismo en '<i><b>Oracle Service Bus 12c'</b></i> (<i>desde ahora <b>OSB</b></i>) este tratamiento también es utilizado en la mediación, debido a que es una buena práctica, <u><i>ya que son mucho más ágiles y rápidos</i></u> que los procesos <b><i>secuenciales</i></b> comúnmente usados. <br />
<br />
<i><b>OSB </b></i>ofrece el manejo de este tipo de procesos por medio de su colección nodos, pero lastimosamente este manejo en <i><b>paralelo </b></i>no es muy utilizado comúnmente en los diferentes proyectos. <i><b>OSB </b></i>brinda lo que se conoce como <i><b>Split-Join</b></i> (<u><i>Para los procesos PARALELOS)</i></u> y <i><b>Pipeline </b></i>(<u><i>Para los proceso SECUENCIALES</i></u>). Así mismo, <i><b>Split-Join</b></i> proviene de un patrón que es <i><b>SPLITTER </b></i>este patrón consiste en dividir los mensajes grandes en muchos mensajes más pequeños y ser manejados todos estos en paralelo y por medio de <i><b>JOIN</b></i>, se vuelven a unir. Es importante mencionar que para el tratamiento en paralelo se debe antes que nada verificar que las tareas que se irán a poder en paralelo <u><i>NO tengan dependencia alguna entre ellas</i></u>.</div>
<br />
<a href="http://3.bp.blogspot.com/-ClhqtSvUWlA/ViQWloLdZuI/AAAAAAAABSU/7fWcs-ET7ME/s1600/1.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="102" src="http://3.bp.blogspot.com/-ClhqtSvUWlA/ViQWloLdZuI/AAAAAAAABSU/7fWcs-ET7ME/s320/1.jpg" width="320" /></a><br />
<br />
<div style="text-align: justify;">
En esta oportunidad mostraré como crear dicho <i><b>Split-Join</b></i>, con el objetivo de exponer dos servicios virtuales: <span style="color: cyan;"><i>DatosClienteService.wsdl </i></span>y <span style="color: cyan;"><i>DeudaClienteService.wsdl</i></span>, por medio de un <span style="color: cyan;"><i>SOAP-UI</i> <i>MockServices</i></span>, dichos servicios simularan los posibles servicios creados en <b><i>BPEL</i></b>. Estos servicios serán virtualizado por medio de <i><b>OSB </b></i>y con los mismo<b><i> .wsdls </i></b>se generarán nuevas <b><i>URLs </i></b>propias del <i><b>OSB</b></i>. Estos <b><i>Servicios Virtualizados</i></b> son parte del proyecto: <span style="color: cyan;"><i>ExternalService </i></span>(<u><i>estos dos serán los servicios que se utilizarán en el posterior proceso en paralelo</i></u>). Luego, se ha creado un proyecto: <span style="color: cyan;"><i>InternalService</i></span>, en el cual se expondrá el servicio compuesto de tipo: <i><b>Split-Join</b></i>, que procesará los mensajes de cada<b><i> Servicio Virtual</i></b> (<i>por medio de los: <span style="color: cyan;">BusinessService's</span></i>), y posteriormente integrará los mensajes de ambas respuestas en una sola respuesta final.</div>
<br />
Los detalles de los recursos trabajados son:<br />
<br />
<br />
<span style="color: yellow;"><i><b><u>Servicio Virtual #1</u>: </b></i></span><br />
<span style="color: cyan;"><i>http://localhost:7101/ExternalService/ClienteService/<span style="color: black;"><span style="background-color: yellow;">Pipelines</span></span>/DatosClienteWS?wsdl</i></span><br />
<br />
<span style="color: lime;"><i><b><u>SOAP-UI (Mock#1)</u>: </b></i></span><br />
DatosClienteService => <b><i>DatosClienteService.wsdl </i></b><br />
<span style="color: cyan;"><i>http://localhost:8090/mockDatosClienteService?wsdl</i></span><br />
<a href="http://3.bp.blogspot.com/-6pOQxvcO8pg/ViQcshQJ8QI/AAAAAAAABSk/1852YPj3aDs/s1600/2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="143" src="http://3.bp.blogspot.com/-6pOQxvcO8pg/ViQcshQJ8QI/AAAAAAAABSk/1852YPj3aDs/s320/2.jpg" width="320" /></a><br />
<br />
<br />
<span style="color: yellow;"><i><b><u>Servicio Virtual #2</u>: </b></i></span><br />
<span style="color: cyan;"><i>http://localhost:7101/ExternalService/ClienteService/<span style="color: black;"><span style="background-color: yellow;">Pipelines</span></span>/DeudaClienteWS?wsdl</i></span><br />
<br />
<i><span style="color: lime;"><b><u>SOAP-UI (Mock#2)</u>: </b> </span></i> <br />
DeudaClienteService => <b><i>DeudaClienteService.wsdl </i></b> <br />
<span style="color: cyan;"><i>http://localhost:8091/mockDeudaClienteService?wsdl </i></span> <br />
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-TdaEc2B4i88/ViQc4Ln0lbI/AAAAAAAABSs/ODsF42b2Cds/s1600/3.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="http://2.bp.blogspot.com/-TdaEc2B4i88/ViQc4Ln0lbI/AAAAAAAABSs/ODsF42b2Cds/s320/3.jpg" width="320" /></a><a href="http://2.bp.blogspot.com/-TdaEc2B4i88/ViQc4Ln0lbI/AAAAAAAABSs/ODsF42b2Cds/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b><br />
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b><br />
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b>
<span style="color: yellow;"><b><u>Servicio Principal (Split-Join)</u>: </b></span><br />
<span style="color: cyan;"><i>http://localhost:7101/InternalService/ClienteService/<span style="color: black;"><span style="background-color: yellow;">SplitJoin</span></span>/InfoClienteWS?wsdl</i></span><br />
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/--yNqXbU5AEE/ViQdBHJoVXI/AAAAAAAABS0/lr6HDc21wpo/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="http://2.bp.blogspot.com/--yNqXbU5AEE/ViQdBHJoVXI/AAAAAAAABS0/lr6HDc21wpo/s320/4.jpg" width="320" /></a></div>
<br />
Tal como se mencionó anteriormente, primero se debe de construir el proyecto base llamado: <span style="color: cyan;"><b><i>ExternalService</i></b></span>, que contendrá los servicios que se procesarán en paralelo (<i><b>BusinessServices</b></i>):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-HvwjGmUr-eg/ViQde8QY4OI/AAAAAAAABS8/8uafhvZCQJ8/s1600/5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="http://3.bp.blogspot.com/-HvwjGmUr-eg/ViQde8QY4OI/AAAAAAAABS8/8uafhvZCQJ8/s320/5.jpg" width="320" /></a></div>
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"><br /></span></span></u></b>
Dentro de cada <i><b>Pipeline</b></i>, se debe redireccionar por medio de un nodo: <span style="color: cyan;"><i>route</i></span>, del: <i><b>Servicio Virtual, </b></i>al servicio expuesto por los<i><b> </b><span style="color: cyan;">SOAP-UI MockServices</span></i>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NntnQ2nt_u8/ViQeNHphbkI/AAAAAAAABTE/x2Ton3AOn8c/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="http://3.bp.blogspot.com/-NntnQ2nt_u8/ViQeNHphbkI/AAAAAAAABTE/x2Ton3AOn8c/s320/6.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-5Qk7VMM0ak4/ViQePZGGe0I/AAAAAAAABTM/qRdIVw_8DHc/s1600/7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="http://3.bp.blogspot.com/-5Qk7VMM0ak4/ViQePZGGe0I/AAAAAAAABTM/qRdIVw_8DHc/s320/7.jpg" width="320" /></a></div>
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b>
<br />
<div style="text-align: justify;">
Dentro del proyecto: <span style="color: cyan;"><i>InternalService</i></span>, se debe de crear dos procesos: un <i><b>Pipeline </b></i>y un <b><i>Split-Join</i></b>. El proceso: <i><b>Pipeline </b></i>servirá solo para redireccionar el <span style="color: cyan;"><i>ProxyService </i></span>creado (<u><i>TopDown en base al: InfoClienteService.wsdl</i></u>), al proceso:<b><i> Split-Join</i></b>. Dentro de este se manejará el proceso en paralelo respectivamente:</div>
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-XiiSHhP8MaM/ViQjEpCUlAI/AAAAAAAABTc/-d-syfhOTRQ/s1600/8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="110" src="http://1.bp.blogspot.com/-XiiSHhP8MaM/ViQjEpCUlAI/AAAAAAAABTc/-d-syfhOTRQ/s320/8.jpg" width="320" /></a></div>
<br />
Dentro del proceso: <i><b>Split-Join</b></i> se diseñará todo el proceso en <b><i>Paralelo </i></b>requerido:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-ImgR2LsYwQA/ViQlb_pgKwI/AAAAAAAABTo/xu4AJ3JpJ0s/s1600/9.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="http://2.bp.blogspot.com/-ImgR2LsYwQA/ViQlb_pgKwI/AAAAAAAABTo/xu4AJ3JpJ0s/s320/9.jpg" width="320" /></a></div>
<b style="mso-bidi-font-weight: normal;"><u><span style="color: #1f497d; font-family: "Arial","sans-serif"; font-size: 10.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text2;"><span style="mso-spacerun: yes;"></span></span></u></b>
<br />
<div style="text-align: justify;">
Las '<i><b>Variables Locales</b></i>' almacenan el resultado los mapeos respectivos por medio de los nodos: <span style="color: cyan;"><i>Assign</i></span>, así como por medio de los nodos: <span style="color: cyan;"><i>Invoke Service</i></span>, se puede consumir los <b><i>Servicios Virtuales</i></b> respectivamente. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-tU7l3qfekd4/ViQn5b00z1I/AAAAAAAABT0/ycmjm8KD6lY/s1600/11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="http://4.bp.blogspot.com/-tU7l3qfekd4/ViQn5b00z1I/AAAAAAAABT0/ycmjm8KD6lY/s320/11.jpg" width="320" /></a></div>
<br />
Finalmente, por medio de un nodo: <span style="color: cyan;"><i>Assign </i></span>se integran todos los mensajes resultantes del consumo de los dos <i><b>Servicios Virtuale</b></i>s, para luego ser integrados en un solo mensaje por medio de: <span style="color: cyan;"><i>XQuery</i></span>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-urm30EGcjas/ViQp6oLtjaI/AAAAAAAABUA/l9uuQkHgll4/s1600/12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="146" src="http://1.bp.blogspot.com/-urm30EGcjas/ViQp6oLtjaI/AAAAAAAABUA/l9uuQkHgll4/s320/12.jpg" width="320" /></a></div>
<div style="text-align: justify;">
<br />
Es importante recordar que para los mapeos en <b><i>OSB 12c,</i></b> la estructura de los <span style="color: cyan;"><i>XQuery</i></span>, varía con relación a la estructura de creación de los <span style="color: cyan;"><i>XQuery </i></span>(<u><i>Tanto del editor como de código generado</i></u>) con relación a la <b><i>versión 11g</i></b>, esto quiere decir que no se podrán reutilizar los <span style="color: cyan;"><i>XQuery </i></span>que ya se tengan, pero no es complicada de interpretarlo. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-DlWwjxzkcYg/ViQrKUYEzUI/AAAAAAAABUM/sBVRs8A2Fug/s1600/13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="http://2.bp.blogspot.com/-DlWwjxzkcYg/ViQrKUYEzUI/AAAAAAAABUM/sBVRs8A2Fug/s320/13.jpg" width="320" /></a></div>
<br />
Así mismo, tener en cuenta que <u><i><b>NO </b>todo el mapping se podrá realizar desde el editor</i></u>, ya al igual que se hacía en la version <b><i>11g</i></b>, para el tema de las listas se tendrá que hacer el mapping manualmente tal como se muestra en el ejemplo con dos <b><i>FOR </i></b>para la obtención de los atributos de la list de respuesta: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-FVDlDeuHZ6E/ViQrKUQBjJI/AAAAAAAABUQ/IFx36VQtTDo/s1600/14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="http://1.bp.blogspot.com/-FVDlDeuHZ6E/ViQrKUQBjJI/AAAAAAAABUQ/IFx36VQtTDo/s320/14.jpg" width="320" /></a></div>
<br />
<div style="text-align: justify;">
Considerar la creación de los <span style="color: cyan;"><i>XQuery </i></span>como arma principal para <u><i>todo trabajo de transformación a nivel de <b>OSB</b></i></u>, prefieriendo su uso antes al de <span style="color: cyan;"><i>XLST </i></span>por tenas de rendimiento. Así mismo, evitar el uso de <i><b>XQuery </b></i>incrustado dentro del los nodos: <span style="color: cyan;"><i>Assign</i></span>, por temas de mantenimiento. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-DWG-SWxlQp8/ViQs4wkI1GI/AAAAAAAABUg/vOjQ2gUFLuE/s1600/15.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/-DWG-SWxlQp8/ViQs4wkI1GI/AAAAAAAABUg/vOjQ2gUFLuE/s320/15.jpg" width="302" /></a></div>
<br />
<div style="text-align: justify;">
Esperemos que con el post se hayan cubierto todas las dudas con relación al manejo de <b><i>Split-Join</i></b> y puedan a partir de ahora aplicarlos en sus proyectos. Para los interesados se pueden descargar las fuentes del post desde aquí: <a href="http://www.mediafire.com/download/44dzwabl2ibo452/OracleServiceBusApp_SplitJoin.zip" rel="nofollow" target="_blank">http://www.mediafire.com/download/44dzwabl2ibo452/OracleServiceBusApp_SplitJoin.zip</a></div>
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-38291235943655767032015-10-15T22:30:00.001-07:002016-01-17T13:44:17.989-08:00APLICACIÓN DE SEGURIDAD EN OSB 12c<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
<div style="text-align: justify;">
Debido a la constante necesidad para la comunicación entre servicios existentes en diferentes inventarios de servicios (<i>externos</i>), es importante conocer que el <b><i>OSB </i></b>al ser el bus de comunicación entre ellos soporta como una de sus características, el manejo de la seguridad entre estos. Esta será aplicada de modo que sólo los usuarios válidos pueden invocar. Por esta razón, en esta oportunidad mostraré cómo aplicar seguridad a los servicios virtuales desarrollados en <b><i>OSB</i></b>.</div>
<br />
<div style="text-align: justify;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>El dummy que mostraré consiste en una <u><i>virtualización </i></u>de un servicio (<i>ya previamente creado</i>), que por medio de la capa <b><i>OSB</i></b>, se accede al servicio compuesto principal (<b><i>SOAPUI MockService</i></b>). </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="http://1.bp.blogspot.com/-vtNzbi4qXS0/ViCMCqZdr0I/AAAAAAAABPM/KSindP9o5jo/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="http://1.bp.blogspot.com/-vtNzbi4qXS0/ViCMCqZdr0I/AAAAAAAABPM/KSindP9o5jo/s320/1.png" width="320" /></a></div>
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
Con fines del tema principal del tutorial que es la seguridad en sí, procederé a aplicar y mostrar los pasos a seguir para poder realizar dicha protección en <b><span style="color: #a2c4c9;"><i>OSB 12c</i></span></b>.<br />
<br />
Antes que nada resumiré los puntos principales a configurar para la seguridad:<br />
<ul>
<li><span style="color: #93c47d;"><i>CREAR EL USUARIO DE ACCESO.</i></span></li>
<li><span style="color: #93c47d;"><i>APLICAR POLITICA DE SEGURIDAD (2 FORMAS).</i></span></li>
</ul>
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
<br />
<span style="color: yellow;">I. <u>CREAR EL USUARIO DE ACCESO</u>:</span><br />
<br />
Como primer paso, es necesario crear los usuarios que puedan ser invocados por las aplicaciones consumidoras (<i>Muchas organizaciones manejan sus usuarios en el directorio <b>LDAP</b>, pero la configuración de amarre no es parte de este tutorial</i>). Este usuario será creado desde la <b><i>consola Weblogic</i></b> de la siguiente manera:<br />
<br />
Desde el árbol de la consola de Weblogic (<span style="color: #9fc5e8;"><i>http://localhost:7101/console</i></span>) acceder a: <span style="color: #a2c4c9;"><i>M</i><i>yDomain/Dominios de Seguridad y seleccionar</i></span>: <span style="color: #ffe599;"><i>myrealm</i></span>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-FFLaBcPE8ik/ViCMNplOd8I/AAAAAAAABPU/9BWtfOLomZM/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="http://2.bp.blogspot.com/-FFLaBcPE8ik/ViCMNplOd8I/AAAAAAAABPU/9BWtfOLomZM/s320/2.png" width="320" /></a></div>
<br />
Seleccionar la pestaña: <i><span style="color: #a2c4c9;">Usuarios y Grupos</span> </i>y seleccionar el botón: <span style="color: #a2c4c9;"><i>Nuevo</i></span>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-HrtVOL6XOts/ViCNEnsFeKI/AAAAAAAABPg/hDaw-F4Uho4/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="169" src="http://2.bp.blogspot.com/-HrtVOL6XOts/ViCNEnsFeKI/AAAAAAAABPg/hDaw-F4Uho4/s320/3.png" width="320" /></a></div>
<br />
Ingresar los datos para la <span style="color: #a2c4c9;"><u><i>autenticación del usuario</i></u></span> al que se le brindará el acceso entre: <b><i>servicio & OSB</i></b>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="http://4.bp.blogspot.com/-FQONw0kKk-I/ViCNh59afUI/AAAAAAAABPo/fuPyBTWMkgo/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="http://4.bp.blogspot.com/-FQONw0kKk-I/ViCNh59afUI/AAAAAAAABPo/fuPyBTWMkgo/s320/4.png" width="320" /></a></div>
<br />
Luego de registro se debe poder visualizarse de la siguiente manera en la tabla de usuarios: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-DpOT9Z4o3aQ/ViCRms9oUtI/AAAAAAAABP0/1qTQDicTSR0/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="http://4.bp.blogspot.com/-DpOT9Z4o3aQ/ViCRms9oUtI/AAAAAAAABP0/1qTQDicTSR0/s320/5.png" width="320" /></a></div>
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
<span style="color: yellow;">II. <u>APLICAR POLÍTICAS DE SEGURIDAD</u>: </span><br />
<br />
Como herramienta el <i><b>OSB </b></i>está completamente integrado con: <span style="color: #a2c4c9;"><i><b>Oracle Webservices Administrador (OWSM)</b></i></span>, que ofrece gran cantidad de las políticas de seguridad que se pueden utilizar para asegurar los servicios virtuales. <br />
<br />
Entre las políticas una de las más resaltantes es denominada: <span style="color: #a2c4c9;"><i><b>oracle/wss_username_token_service_policy</b></i></span>, para la protección por medio de un: <span style="color: #a2c4c9;"><i>user/password </i></span>definir y creado en el paso anterior. Esta es la que se utilizará en la demostración: <br />
<br />
Para la aplicación de las políticas de seguridad se mostrarán dos formas: <br />
<br />
<br />
<span style="color: #93c47d;">A. <u>DESDE LA FUENTE OSB:</u></span><br />
<br />
Esta forma consiste en la aplicación de la política desde la misma fuente del <b><i>proyecto OSB</i></b> (<i>específicamente desde el: <b>Proxy Service</b></i>): <br />
<br />
Desde las fuentes (proyecto OSB), ingresar al proxy del servicio virtual que se desea enmascarar y proteger. Luego, seleccionar: <span style="color: #a2c4c9;"><i>Policies</i></span>, dar check en: <span style="color: #a2c4c9;"><i>From OWSM Policy Store</i></span>. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-0ETzKuUMNzQ/ViCTSPK_5iI/AAAAAAAABQA/n_9wlSiDg4w/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="http://2.bp.blogspot.com/-0ETzKuUMNzQ/ViCTSPK_5iI/AAAAAAAABQA/n_9wlSiDg4w/s320/6.png" width="320" /></a></div>
<br />
Agregar desde: <span style="color: #a2c4c9;"><i>Security</i></span>, la política requerida, en nuestro caso será: <span style="color: #a2c4c9;"><i>oracle/wss_username_token_service_policy</i></span> y pulsar el botón: <span style="color: #a2c4c9;"><i>OK</i></span>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="http://3.bp.blogspot.com/-tCOi7XZa1A8/ViCTqKuVEtI/AAAAAAAABQI/AtAsWjzL0Fc/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="http://3.bp.blogspot.com/-tCOi7XZa1A8/ViCTqKuVEtI/AAAAAAAABQI/AtAsWjzL0Fc/s320/7.png" width="320" /></a></div>
<br />
Verificar que la política se haya agregado correctamente: <br />
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a> <span style="color: black; font-family: "Arial","sans-serif"; font-size: 9.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text1;"><span style="color: black; font-family: "Arial","sans-serif"; font-size: 9.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text1;"><a href="http://1.bp.blogspot.com/-RXCc5G4CDC0/ViCUng8MQTI/AAAAAAAABQU/irXf-bOJlqE/s1600/8.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="http://1.bp.blogspot.com/-RXCc5G4CDC0/ViCUng8MQTI/AAAAAAAABQU/irXf-bOJlqE/s320/8.png" width="320" /></a></span></span><br />
<br />
Una vez terminado esto ya se puede desplegar el servicio virtual. <br />
<br />
<br />
<span style="color: black; font-family: "Arial","sans-serif"; font-size: 9.0pt; line-height: 115%; mso-ansi-language: ES-PE; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-themecolor: text1;"><span style="color: #93c47d;">A. <u>DESDE LA CONSOLA OSB</u>:</span></span><br />
<br />
<div style="text-align: justify;">
Esta forma consiste en la aplicación de la política desde la misma consola <b><i>OSB</i></b>: <span style="color: #a2c4c9;"><i>http://localhost:7101/sbconsole</i></span>, ya que como se mencionó posee conexión directa con <b>OWSM</b>. Ingresar a la consola y seleccionar el proyecto OSB desplegado. Luego, dar check en: <span style="color: #a2c4c9;"><i>De Almacén de Políticas OWSM</i></span>: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-uvV87cuRIT0/ViCXt-P3H8I/AAAAAAAABQg/-QZYDPnK9nM/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="110" src="http://4.bp.blogspot.com/-uvV87cuRIT0/ViCXt-P3H8I/AAAAAAAABQg/-QZYDPnK9nM/s320/9.png" width="320" /></a></div>
<br />
Asociar la política requerida, en nuestro caso será: <b><span style="color: #a2c4c9;"><i>oracle/wss_username_token_service_policy</i></span></b>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-_n9E9Oqqh2k/ViCYCh8ENMI/AAAAAAAABQo/kzlx9gwL8Nk/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="http://4.bp.blogspot.com/-_n9E9Oqqh2k/ViCYCh8ENMI/AAAAAAAABQo/kzlx9gwL8Nk/s320/10.png" width="320" /></a></div>
<br />
Ingresar la descripción de la política deseada y pulsar: <span style="color: #a2c4c9;"><i>Activar</i></span>: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-F_rGDrS4How/ViCY3_40_AI/AAAAAAAABQ8/CZExXoYuKGw/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="http://3.bp.blogspot.com/-F_rGDrS4How/ViCY3_40_AI/AAAAAAAABQ8/CZExXoYuKGw/s320/11.png" width="320" /></a></div>
<br />
Verificar que la política se haya agregado correctamente. Luego, pulsar el botón: <span style="color: #a2c4c9;"><i>Guardar </i></span>y luego: <span style="color: #a2c4c9;"><i>Activar</i></span>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="http://3.bp.blogspot.com/-ZCuilzZ8fms/ViCZPRkHaDI/AAAAAAAABRE/hg9dFPfz0-I/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="http://3.bp.blogspot.com/-ZCuilzZ8fms/ViCZPRkHaDI/AAAAAAAABRE/hg9dFPfz0-I/s320/12.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>Una vez terminado esto ya se puede probar el servicio virtual. <span style="color: #a2c4c9;"><i><u>IMPORTANTE</u></i></span>, esta configuración de este modo estará activa siempre y cuando no se despliegue de nuevo el servicio (<u><i>Se tendrá que aplicar luego de cada despliegue</i></u>). </div>
<br />
<br />
<span style="color: yellow;">III. <u>PRUEBA DEL SERVICIO VIRTUAL</u>: </span><br />
<br />
<div style="text-align: justify;">
Una vez terminado las configuraciones ya sea de cualquiera de las dos formas anteriormente mencionadas, validaremos la URL expuesta en el navegador donde se verificará los tags de las políticas que se han agregado:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NSEuYLHr2o8/ViCbZIyDG-I/AAAAAAAABRQ/8EzGyX7keBs/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="147" src="http://3.bp.blogspot.com/-NSEuYLHr2o8/ViCbZIyDG-I/AAAAAAAABRQ/8EzGyX7keBs/s320/13.png" width="320" /></a></div>
<br />
<div style="text-align: justify;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>Las pruebas realizadas se pueden realizar tanto desde <b><i>SOAPUI </i></b>como desde el tester de la consola <b><i>OSB</i></b>. Una vez configura y expuesto el servicio, si se desea probar sin ingresar los tags de <span style="color: #a2c4c9;"><i>policy</i></span> adicionales en la cabecera o ingresándolos incorrectamente el: <span style="color: #a2c4c9;"><i>user/password</i></span>, se mostrará el error siguiente: </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="http://4.bp.blogspot.com/-T_kqlOFSo1I/ViCbx7pLzOI/AAAAAAAABRY/do4ZaZXSFbQ/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="http://4.bp.blogspot.com/-T_kqlOFSo1I/ViCbx7pLzOI/AAAAAAAABRY/do4ZaZXSFbQ/s320/14.png" width="320" /></a></div>
<br />
Agregando el contenido correcto de los <b><i>tags </i></b>en la parte del header con relación a las <b><i>políticas</i></b>, el servicio deberá responder correctamente:<br />
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><span style="color: #93c47d;"><i><span style="font-size: x-small;"> [soapenv:Header]<br /> [wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"]<br /> [wsse:UsernameToken]<br /> [wsse:Username]<span style="color: red;">USUARIO</span>[/wsse:Username]<br /> [wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"]<span style="color: red;">PASSWORD</span>[/wsse:Password]<br /> [/wsse:UsernameToken]<br /> [/wsse:Security]<br /> [/soapenv:Header]</span></i></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-DglgMXzePg8/ViCcdGsZCsI/AAAAAAAABRk/mVJbxYr3It4/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="115" src="http://1.bp.blogspot.com/-DglgMXzePg8/ViCcdGsZCsI/AAAAAAAABRk/mVJbxYr3It4/s320/15.png" width="320" /></a></div>
<br />
Así mismo, se puede realizar la misma prueba en la <b><i>consola OSB,</i></b> desde el <span style="color: #a2c4c9;"><i>Proxy Service </i></span>respectivamente:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-FryAcBm6IZM/ViCc2WFwIsI/AAAAAAAABRs/Q8bX26Vk4O8/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="141" src="http://4.bp.blogspot.com/-FryAcBm6IZM/ViCc2WFwIsI/AAAAAAAABRs/Q8bX26Vk4O8/s320/16.png" width="320" /></a></div>
<br />
Luego, de ingresar el bloque de <b><i>policy </i></b>en el header al igual que se hizo desde <b><i>SOAPUI</i></b>, el resultado de las pruebas sería el siguiente: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-zYQzNSYaFdw/ViCdfqQ3TzI/AAAAAAAABR4/6zv45BHx5sc/s1600/A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="186" src="http://2.bp.blogspot.com/-zYQzNSYaFdw/ViCdfqQ3TzI/AAAAAAAABR4/6zv45BHx5sc/s320/A.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-NQC4DGuyDLg/ViCdzhV4dfI/AAAAAAAABSA/HZOTCLNNEug/s1600/B.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="http://1.bp.blogspot.com/-NQC4DGuyDLg/ViCdzhV4dfI/AAAAAAAABSA/HZOTCLNNEug/s320/B.png" width="320" /></a></div>
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5458598926546072955" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
Con esto se termina el post, esperando que lo puedan aplicar en sus proyectos OSB.<br />
<br />
<br />
<br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-64662729465240514772015-10-12T13:51:00.002-07:002016-02-24T20:08:39.409-08:00BUENAS PRÁCTICAS Y LECCIONES APRENDIDAS EN OSB<br />
<div style="text-align: justify;">
Para la implantación de un proyecto <i><b>SOA </b></i>es importante considerar el manejo de un <i><b>ESB </b></i>que controle la comunicación entre los servicios entre otros puntos importantes. Por otro lado, el contar con dicha capa de virtualización los clientes no podrán consumir directamente los servicios expuestos por los proveedores, proporcionando agilidad en las transformaciones, orquestaciones, desacoplamiento entre servicios expuestos y/o los servicios consumidores. Así mismo, los beneficios a considerar por utilizar OSB son: </div>
<br />
<span style="color: yellow;"><i>- La mediación.</i></span><br />
<span style="color: yellow;"><i>- La transformación.</i></span><br />
<span style="color: yellow;"><i>- El redirecionamiento.</i></span><br />
<span style="color: yellow;"><i>- La eliminación de conexiones punto a punto.</i></span><br />
<span style="color: yellow;"><i>- Virtualización.</i></span><br />
<span style="color: yellow;"><i>- Orquestamiento.</i></span><br />
<span style="color: yellow;"><i>- Balanceo entre servicios.</i></span><br />
<span style="color: yellow;"><i>- Aseguramiento de Servicios.</i></span><br />
<span style="color: yellow;"><i>- Desacoplamiento entre clientes y proveedores.</i></span><br />
<div style="text-align: justify;">
Para el cumplimiento de esto <i><b>ORACLE</b></i>, ofrece su propio <i><b>ESB </b></i>denominado <i><b>OSB </b></i>(<i>Oracle Service Bus</i>), con la finalidad de cubrir dichos puntos importantes. Así mismo, con relación a los desarrollos en esta herramienta, se debe tener claro que el <b><i>OSB </i></b>deberá ser el intermediario de los servicios, convirtiéndose en la columna vertebral de integración empresarial, debiendo ofrecer un altísimo desempeño en el bus, para cumplir esta meta se debe de considerar algunos puntos conocidos como buenas prácticas y/o lecciones aprendidas en base a la experiencia en muchos proyectos de similar calibre. Estos son: </div>
<br />
<br />
<span style="color: yellow;"><b>A. ¿QUE SE DEBE CONSIDERAR EN OSB?:</b></span><br />
<ul style="text-align: justify;">
<li style="text-align: justify;"><i>Se debe de considerar que el OSB debe tener altísimo desempeño, monitoreo, soporte a legacy, disponibilidad 24x7, siendo considerado como única plataforma base de la infraestructura SOA. <br /></i></li>
<li style="text-align: justify;"><i>Se debe utilizar XmlObject y XmlCursor en Java Callout , ya que con esto se puede manejar toda la potencia de las bibliotecas Java, para cubrir necesidades de procesamiento de mensajes.<br /></i></li>
<li style="text-align: justify;"><i>Se debe de generar automáticamente los WSDL (topDown). Lo mismo puede decirse acerca de las transformaciones de XQuery.<br /></i></li>
<li style="text-align: justify;"><i>Se debe de reutilizar en los WSDL los XSD de manera externa en un servidor SOA-MDS, esto para fomentar la reutilización de estos. <br /> </i></li>
<li style="text-align: justify;"><i>Se debe redefinir la URL del servicio virtual expuesto por el OSB, esto debido a que la URL generada es muy extensa. Esta desde ser redefinida desde el Transport del Proxy Service respectivamente. <br /></i></li>
<li style="text-align: justify;"><i>Se debe establecer por cada Proxy Service y Business Service un tiempo de espera (TimeOut).<br /></i></li>
<li style="text-align: justify;"><i>Se debe de incentivar el uso de Split-Join para reducir la latencia. Esto debido a que las ejecuciones en paralelo se utilizan para reducir la latencia cuando se consume altos recursos del sistema. Se debe analizar que si un conjunto de actividades no tienen dependencia (unos de otras), estas pueden ser ejecutadas en paralelo.<br /></i></li>
<li style="text-align: justify;"><i>Se debe de usar un Dynamic Routing para dinámicamente invocar un diferente Business Service.<br /></i></li>
<li style="text-align: justify;"><i>Se debe de usar un HTTP Transport de un Proxy Service para aceptar llamadas RESTful. Mapear métodos HTTP (GET/PUT/POST/DELETE) para la operación SOAP, usando un nodo: Branch Conditional.<br /></i></li>
<li style="text-align: justify;"><i>Se debe de usar el transporte JEJB en ambos extremos de OSB, para desacoplar los EJB consumers de los EJB providers.<br /><br /><br /> </i></li>
<li style="text-align: justify;"><i>Se debe de usar un Conditional Branch o un Routing Table en lugar de una sola acción de Routing.<br /></i></li>
<li style="text-align: justify;"><i>Se debe usar un Result Caching para almacenar en memoria la información del OSB.<br /></i></li>
<li style="text-align: justify;"><i>Se debe usar un adaptador JCA para integrar los sistemas Legacy a través de adaptadores proporcionados por la SOA Suite, tales como, DB, File, FTP adapters y EJB, JMS, File y FTP Transport.<br /></i></li>
<li style="text-align: justify;"><i>Se debe considerar el control de Exception (fault) y logging en todos los servicios.<br /></i></li>
<li style="text-align: justify;"><div style="text-align: justify;">
<i>Se debe de manejar la auditoría para el rastreo de los servicios. Un complexType que contenga tiempo de respuesta, codResp, DetaResp, nombUsuario, nomApplicacion, ipAplicacion. Se debe registrar eficientemente dicha información por ejemplo con log4j de manera asíncrona a un archivo. </i></div>
<i><br /></i></li>
<li style="text-align: justify;"><i>Se debe configurar siempre el controlador de errores a nivel de servicio. Cualquier tipo de error existente en el Pipeline debe ser controlado por medio de los nodos que brinda el OSB. Esto se puede aplicar en las 4 áreas diferentes en el OSB: Pipeline, Proxy Service, Route Node, Stage Node. Esto para que no exista una respuesta de error estándar (como un error de SOAP que puede auto generar con el TopDown).<br /></i></li>
<li style="text-align: justify;"><i>Se debe considerar si un servicio de proxy tiene un WSDL con múltiples operaciones, generalmente se recomienda el uso de: operational branch, para manejar mensajes por separado para cada operación en vez de blogues: IF.<br /></i></li>
<li style="text-align: justify;"><i>Se debe considerar las acciones de actualización como: Delete, Insert, Replace, Rename, son más eficientes para correcciones pequeñas en un documento, que usando Asign con XQuery debido a que regenera todo el documento, sobre todo si el documento es grande.</i></li>
<li style="text-align: justify;"><i>Se debe utilizar para transformaciones con XQuery el uso de XQuery mapper. Esto debido a puede ser más productivo (más rápido). Así mismo, una subRutina XQuery puede ser menos eficiente que acciones de transformación como: Rename, Delete, etc.<br /></i></li>
<li style="text-align: justify;"><i>Se debe de configurar los servicios en OSB en modo alta disponibilidad (cluster), esto para que el procesamiento de carga sea compartido por cada server (físico / virtual) , así mismo para que el servicio pueda estar expuesto y si uno URL no está disponible, se pueda acceder de forma automática al otro server.<br /></i></li>
<li style="text-align: justify;"><i>Se debe en vez de tener un solo controlador de errores en todo el Pipeline, apoyarse en cada nodo Stage ya que en un diseño request/response Pipeline, se puede controlar los errores existentes en su interior por cada Stage. <br /></i></li>
<li style="text-align: justify;"><i>Se recomienda configurar el Throttling para la protección de los servicios OSB, con relación a los picos de sobrecarga. Throttling puede definir políticas de limitación de peticiones para un servicio de negocio dentro de OSB. Esto para evitar que se alcance la capacidad de un servicio web y se continúe aceptando conexiones.<br /></i></li>
<li style="text-align: justify;"><i>Se debe utilizar para la creación de DataSource de tipo Select (Operaciones Query), el los Driver que brinda Weblogic de tipo: non-XA. Esto con relación al futuro manejo del JCA que será autogenerado.<br /></i></li>
<li style="text-align: justify;"><i>Se recomienda el uso de expresiones FLOWR (acrónimo de: For, Let, Where, Oorder By, Return), en la creación de los XQuery. </i></li>
</ul>
<span style="color: yellow;"><b>B. ¿QUE SE DEBE EVITAR EN OSB?: </b></span><br />
<ul style="text-align: justify;">
<li><i>No se debe tratar de desarrollar toda una solución sólo en OSB. Ya que el OSB es un ESB y este NO debe ser usado para manejar lógica de negocio y ser utilizador exclusivamente para desarrollos ESB (Mediación, redireccionamiento, transformación). Es muy común que en muchos proyectos se cometa este error (el desarrollo de la totalidad de su solución en OSB).<br /></i></li>
<li><i>No se debe diseñar flujos transaccionales StateFul dentro de OSB. Esto debido a que OSB es una herramienta de tipo StateLess, que no debe ser utilizada para manejar transacciones StateFul. Para este manejo transaccional StateFul se debe utilizar como solución BPEL o BPM en vez de OSB.<br /></i></li>
<li><i>No se debe usar OSB para ejecutar SQL ó llamados a Store Procedimientos complejos: Aunque OSB proporciona mecanismo para ejecutar estos dentro del ‘pipeline’, se debe restringir su manejo sólo para operaciones para recuperar datos (SELECT), nunca se debe de ejecutar para operaciones SQL de tipo CRUD (INSERT / UPDATE / DELETE) dentro del pipeline en OSB. <br /></i></li>
<li><i>No se debe usar Java CallOut para satisfacer necesidades de negocio. Esto debido a que las llamadas Java es la característica más abusado de OSB (y a veces se abusa de su manejo). Sea cual sea la lógica de negocio no debe ser manejada a través de OSB (Java CallOut) para implementaciones de lógica de negocio compleja, dentro de OSB pipeline. Puede ser utilizada para tareas utilitarias como transformaciones puntuales o para log. <br /></i></li>
<li><i>No se debe desarrollar lógica de negocio compleja dentro de OSB pipeline: Teniendo en cuenta el hecho de que se puede cambiar fácilmente en Runtime desde la consola OSB. Oracle SOA Suite maneja lo que se conoce como OBR (Oracle Business Rule) para definir la lógica de negocio, así que por qué definir reglas de negocio en otro lugar (OSB). Se debe de definir reglas de negocio en OBR y exponerlas como servicio web, para posteriormente consumir dichas reglas de negocio en OSB (como WS) cuando sea requerido.<br /></i></li>
<li><i>No se debe utilizar la consola OSB para el desarrollo. Anteriormente en OSB no había existía el apoyo de IDEs, pero actualmente el desarrollo directamente desde la consola OSB es considerado reliquia. Actualmente, soluciones como OEPE permiten crear proyectos OSB y componentes de manera local, que puede ser fácilmente controlados. Así mismo, se debe tener en cuenta que desarrollos OSB por medio de OEPE tiene muchas ventajas sobre la consola OSB como Xquery editor, split-join, etc.<br /></i></li>
<li><i>No se debe utilizar WS Policy para el control de Seguridad en OSB. Para implementar la seguridad alrededor de Servicio OSB utiliza OWSM (Oracle Web Service Manager), esto debido a que las políticas en Weblogic no están actualizadas. <br /></i></li>
<li><i>No se debe desarrollar los flujos de mensajes completos en un solo Stage dentro de un Pipeline. Esta es una mala práctica muy común, el manejar todo en un solo Stage así como definir los nombres sin mucho significado. Se debe manejar cada parte que tenga acciones relevantes (agrupando), con nombres de Stage explicando claramente lo que hacen. <br /></i></li>
<li><i>No se debe procesar archivos de gran tamaño a través de OSB. Ya que OSB no es para trabajo pesados, para estos casos se debe utilizar ODI (Oracle Data Integrator), que es una herramienta especializada para el procesamiento de archivos de gran tamaño.<br /></i></li>
<li><i>No se debe manejar comodines en expresiones de tipo XPath. Se debe evitar el uso de caracteres comodines con: * u operadores recursivos de ruta como: "//" con XPath. Esto debido a que su manejo causa impacto en el rendimiento significativo. Se debe evitar lo más que pueda.<br /></i></li>
<li><i>No se debe crear un Proxy Service es de tipo: Any SOAP, Messaging type services o Any XML ya que OSB tiene problemas al autogenerar WSDL eficaces para este tipo de servicios, es preferible seleccionar los tipos SOAP desde .WSDL ó XML desde .WSDL, esto para favorecer los estandarizado con el TopDown (todos lo objetos definidos dentro de la interface): element, message, portType, etc. Así mismo, posteriormente apoyarse con el nodo: Operationa Branch para automáticamente reconocer cada operación existente.<br /></i></li>
<li><i>No se debe abusar en las comunicaciones de datos, enviando parámetros en XML (como Texto). Estas se deben de minimizar ya que el Marshalling / Unmarshalling de mensajes, es de las acciones más costosas en OSB.<br /></i></li>
<li><i>No se debe abusar del manejo de Proxies EJBs (EJB Transport). Esto permiten la transformación de: XML a Java, pero son caros tanto para el mantenimiento como para el rendimiento. Si es necesaria la interacción con el mundo Java, verificar si es que no se pueda realizar simplemente usando un Java Callout. EJB Transport está diseñado para ofrecer un débil acoplamiento orientados a la interface por medio de un WSDL autogenerado. Este binding tiene un costo de trasformación que es aceptable cuando el EJB representa un servicio reutilizable. Así mismo, un Java Callout puede ser una mejor solución para acceder a un EJB, y obtener un más bajo acoplamiento.<br /></i></li>
<li><i>No se debe crear de muchas variables de contexto OSB, que se utilicen una sola vez dentro de algún XQuery. En si la creación de variables se debe de realizar con el objetivo de la reutilización en varias partes del OSB. <br /></i></li>
<li><i>No es recomendable el manejo de XLST en proyectos en OSB. Si analizamos XSLT es para XQuery como JavaScript es para Java y en actualmente no existe una equivalencia en versiones con relación al motor de transformaciones de xsl existente en OSB con el actual generando por ello muchos errores. Debido a ello de preferencia para todo tipo de transformaciones en OSB es mejor considerar trabajarse con XQuery. <br /></i></li>
<li><i>No se debe de crear componentes JCA para consumir Store Procedure que manejen ORACLE Types, esto debido a que el OSB como herramienta autogenera unos ORACLE Package como Wrappers que contienen todo el parseo de equivalencias. Esto genera problemas con las áreas de QA, ya que por su estructura es muy complicada su prueba como Script (PL/SQL) y traerá problemas al momento del pase. Es preferible referenciar a Store Procedure que manejen parámetros de tipos nativos.</i></li>
</ul>
<br />
<div style="text-align: justify;">
Esperemos que estas recomendaciones sean consideradas y aplicadas de la mejor manera, para que mejoren el rendimiento de estos en sus proyectos de tipo <i><b>OSB</b></i>.</div>
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0tag:blogger.com,1999:blog-5458598926546072955.post-34108933048393870062015-10-11T22:46:00.000-07:002015-10-11T22:52:32.292-07:00STATELESS vs STATEFUL<div style="text-align: justify;">
<br />
Muchas dudas existen sobre la diferencia entre: '<i><b>StateLess</b></i>' y '<i><b>StateFul</b></i>', con relación al control del estado. A continuación una diferencia resaltante para entender el concepto: </div>
<br />
<ul>
<li style="text-align: justify;"><span style="color: red;"><i><u><b>StateLess</b></u></i>:</span> Significa que <b>NO </b>se controla la memoria del pasado (ya procesada). Cada transacción se realiza como si se está haciendo por primera vez. Ejemplo:</li>
</ul>
<span style="color: yellow;">public int agregar( int numero ){<br /> return (numero + 1);<br />}</span><br />
<br />
<ul>
<li style="text-align: justify;"><span style="color: red;"><u><b><i>StateFul</i></b></u>:</span> Significa que <b>SI </b>se controla la memoria del pasado (ya procesada). Cada transacción anterior se recuerda y puede afectar a la transacción actual. Ejemplo:</li>
</ul>
<span style="color: yellow;">private int numero = 0; </span><br />
<br />
<span style="color: yellow;">public int agregar(){<br /> numero ++;<br /> return numero ;<br />}</span><br />
<br />
<div style="text-align: justify;">
Así mismo, es importante tener concimiento que como conceptos a nivel de herramientas <u><i><b>Oracle SOA</b></i></u> son considerados: </div>
<br />
- <b>BPEL</b>: (<span style="color: yellow;"><i>StateFul</i></span>)<br />
- <b>OSB</b>: (<span style="color: yellow;"><i>StateLess</i></span>) <br />
<br />JAVAMANhttp://www.blogger.com/profile/09913148950509824567noreply@blogger.com0