Aplicaciones SOA con XUL y OpenESB

  • Enlace amigable (slug) de la revisión: Project:Aplicaciones_SOA_con_XUL_y_OpenESB
  • Título de la revisión: Aplicaciones SOA con XUL y OpenESB
  • Id de la revisión: 52673
  • Creada:
  • Creador: Maharba
  • ¿Es la revisión actual? No
  • Comentario 1 words added, 3 words removed

Contenido de la revisión

Llevando la tecnología mozilla al infinito y más allá, este artículo describe como desarrollar aplicaciones distribuidas (SOA) con Firefox o xulrunner y OpenESB, los arquitectos de soluciones encontrarán una guía para hacer aplicaciones distribuidas que tendrán el performance de una aplicación de escritorio y una interfaz más rica y personalizable de lo que puede ser por ejemplo swing, aspectos en que resulta muy superior; verán que el tiempo requerido para desarrollo en esta arquitectura es mucho menor a la mayoría de lo conocido, si piensas que tiempo es dinero llegaste al lugar indicado. A los desarrolladores conocedores de mozilla, podrán ver un nuevo mundo de posibilidades. Se que XUL Remoto ya no está habilitado por default en firefox, pero puedo decirles solamente una cosa, si quieren seguir con XUL remoto usen ample sdk,

Necesitamos algunas herramientas para este desarrollo:

XULRunner que puede ser descargado desde: http://releases.mozilla.org/pub/mozi...nner/releases/

OpenESB: http://www.logicoy.com/download_glass

Arquitectura

Esta es una arquitectura Enterprise basada en el concepto SOA, donde los sistemas funcionan en una nube de datos y la lógica requiere de una orquestación de servicios. Para ello se propone el uso de OpenESB que es gratuito y es una extensión para el servidor de aplicaciones Glassfish. Estos servicios serán consumidos en clientes basados en XUL por medio de AJAX, DOM y XSLT. Las tecnologías que involucra la arquitectura son las siguientes:

tech.jpg

En un principio nos centraremos en XULRunner y firefox así como la interfaz gráfica XUL, de manera similar se pueden usar HTML o SVG, para el caso del XUL multibrowser con ampleSDK que además incluye otros elementos de interfaz gráfica será visto en un apartado más adelante.

Una arquitectura SOA tiene como principio que los procesos son distribuidos, pero al mismo tiempo se necesita una orquestación e Integración de los mismos para obtener un sistema funcional, dichos sistemas pueden ser de índole bancaria, gobierno, comercial, maquiladoras y desde luego proyectos Open Source de índoles que muchos tal vez aún no hemos conceptualizado si quiera. La arquitectura se basa en estándares conocidos o tecnologías bastante aplicadas, AJAX, SOAP, XML, XUL, XSLT, XML-DOM, referencias a ellas son:

XSLT: http://www.w3schools.com/xsl/

SOAP: http://www.w3schools.com/soap/default.asp

AJAX: http://www.w3schools.com/ajax/default.asp

XML-DOM: http://www.w3schools.com/dom/default.asp

XUL: http://developer.mozilla.org/es/xul

Mostraré el diagrama de la arquitectura general para luego abordar cada punto en específico, este es el diagrama:

openarchitecture.jpg

Esta arquitectura muestra como el core es totalmente independiente de las demás capas, la ventaja de usa r XUL es que se puede usar una arquitectura de front web lo mismo que una cliente – servidor. Esto nos da la flexibilidad de extender y extraer la lógica como sea necesario sin afectar el funcionamiento de la aplicación y reutilizar todos los componentes del core en otras aplicaciones cualquiera que sea su índole por ejemplo en un cliente móvil como el caso de un PDA. Y dado que usa datasources configurados en el servidor de aplicaciones puede migrarse de base de datos siempre y cuando la lógica de la nueva base se adapte a las funciones de la previa, es decir: tablas, funciones, Stored Procedures, etc, con cambios mínimos a los servicios.

AJAX

El proceso de la comunicación SOAP en esta arquitectura se basa en AJAX es decir, se envían los mensajes SOAP por medio del objeto XmlHttpRequest, para transformar la información de XUL a SOAP y la respuesta SOAP en XUL se usa XSLT, el siguiente diagrama tal vez lo haga un poco más entendible:

ProcesoSOAP.jpg

Aquí se muestra un ejemplo de un XSLT que genera un SOAP a partir de XUL:

{{ syntax.xml{code: "\n<xsl:stylesheet version="\"1.0\"" xmlns:xsl="\"http://www.w3.org/1999/XSL/Transform\"" xmlns:xul="\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\"">\n<xsl:template match="\"xul:groupbox\"">\n\t<soapenv:envelope \"="" envelope="" http:="" schemas.xmlsoap.org="" soap="" xmlns:ins="\"http://j2ee.netbeans.org/wsdl/InsertBpelm/InsertSOAP\"" xmlns:soapenv="\"http://schemas.xmlsoap.org/soap/envelope/\"" xmlns:tab="\"http://j2ee.netbeans.org/xsd/tableSchema\"" xmlns:xsd="\"http://www.w3.org/2001/XMLSchema\"" xmlns:xsi="\"http://www.w3.org/2001/XMLSchema-instance\"" xsi:schemalocation="\"http://schemas.xmlsoap.org/soap/envelope/">\n\t\t<soapenv:body>\n\t\t\t<ins:insertsoapoperation soapenv:encodingstyle="\"http://schemas.xmlsoap.org/soap/encoding/\"">\n\t\t\t\t<part1>\n\t\t\t\t\t<tab:insertdb_request>\n\t\t\t\t\t\t<xsl:for-each select="\"xul:hbox/xul:grid/xul:rows/xul:row/xul:textbox\"">\n\t\t\t\t\t\t\t<xsl:if test="\"@id='folio'\"">\n\t\t\t\t\t\t\t\t<tab:param1><xsl:value-of select="@value"></xsl:value-of></tab:param1>\n\t\t\t\t\t\t\t</xsl:if>\n\t\t\t\t\t\t\t<xsl:if test="\"@id='nombre'\"">\n\t\t\t\t\t\t\t\t<tab:param2><xsl:value-of select="@value"></xsl:value-of></tab:param2>\n\t\t\t\t\t\t\t</xsl:if>\n\t\t\t\t\t\t</xsl:for-each>\n\t\t\t\t\t</tab:insertdb_request>\n\t\t\t\t</part1>\n\t\t\t</ins:insertsoapoperation>\n\t\t</soapenv:body>\n\t</soapenv:envelope>\n</xsl:template>\n</xsl:stylesheet>"} }}

 El siguiente XSLT muestra la operación inversa, de SOAP a XUL:

 {{ syntax.xml{code: "\n<xsl:stylesheet version="\"1.0\"" xmlns:m="\"http://j2ee.netbeans.org/wsdl/ListaEmpresasBpel/ListaEmpresasSOAP\"" xmlns:msgns="\"http://j2ee.netbeans.org/wsdl/ListaEmpresasBpel/ListaEmpresasDB\"" xmlns:ns="\"http://j2ee.netbeans.org/xsd/tableSchema\"" xmlns:ns0="\"http://j2ee.netbeans.org/wsdl/ListaEmpresasBpel/ListaEmpresasSOAP\"" xmlns:soap-env="\"http://schemas.xmlsoap.org/soap/envelope/\"" xmlns:xsi="\"http://www.w3.org/2001/XMLSchema-instance\"" xmlns:xsl="\"http://www.w3.org/1999/XSL/Transform\"">\n\t<xsl:template match="\"ns:ListaEmpresasSOAPOperationResponse\"">\n\t\t<xsl:for-each select="\"ns:cat_empresas_Record\"">\n\t\t\t<xul:treeitem xmlns:xul="\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\"">\n\t\t\t\t<xul:treerow id="\"comp{ns:id_folio}\"">\n\t\t\t\t\t<xul:treecell label="\"{ns:id_folio}\"/">\n\t\t\t\t\t<xul:treecell label="\"{ns:nombre}\"/">\n\t\t\t\t</xul:treecell></xul:treecell></xul:treerow>\n\t\t\t</xul:treeitem>\n\t\t</xsl:for-each>\n\t</xsl:template>\n</xsl:stylesheet>"} }}

Vamos a explicar cómo funcionan la comunicación y las transformaciones, El cliente transforma la vista XUL en un Mensaje SOAP por medio de un XSLT que procesa el XSLTProcessor de Firefox, después se envía ese mensaje SOAP por medio de xmlHttprequest remoto al ESB, es decir AJAX remoto; luego el ESB responde un mensaje SOAP, mismo que es transformado en una vista XUL de nuevo por medio de XSLT y el XSLTProcessor, al final la salida XUL generada se añade a la vista por medio del DOM, una técnica muy conocida en AJAX. A continuación se muestra un ejemplo javascript de cómo hacer la comunicación AJAX-SOAP:

{{ syntax.JavaScript{code: "xhttp=new XMLHttpRequest();\nnetscape.security.PrivilegeManager.enablePrivilege(\"UniversalBrowserRead UniversalBrowserWrite\");\nnetscape.security.PrivilegeManager.enablePrivilege(\"UniversalXPConnect\");\nvar xslproc=new XSLTProcessor;\nvar xsl = document.implementation.createDocument(\"\", \"\", null);\nxsl.async = false;\nxsl.onload = new XMLSerializer().serializeToString(xsl);\nxsl.load(\"req/\"+soap);\nxslproc.importStylesheet(xsl);\nvar docIn=document.implementation.createDocument(\"\", \"\", null);\ndocIn.async = false;\ndocIn.onload = new XMLSerializer().serializeToString(docIn);\ndocIn.load(ample.documentElement);\nreqMsg = xslproc.transformToDocument(docIn); \nxhttp.open(\"POST\", port, false);\nxhttp.onreadystatechange = state_Change();\nxhttp.setRequestHeader(\"Content-Type\", \"text/xml\");\nxhttp.setRequestHeader(\"SOAPAction\", '\"\"');\nxhttp.send(reqMsg);\nswitch(xhttp.readyState) {\n\tcase 1,2,3:\n\t\talert('Bad Ready State: '+xhttp.status); \n\t\treturn false;\n\t\tbreak;\n\tcase 4: \n\t\tif(xhttp.status !=200) {\n\t\t\talert('The server respond with a bad status code: '+xhttp.status);\n\t\t\treturn false;\n\t\t} else {\n\t\t\txml=xhttp.responseXML;\n\t\t\tdisplayResult(xml, xslt, cont);\n\t\t}\n\tbreak; }"} }}

Preparación del ambiente.

 

Necesitaremos una base de datos, en el ejemplo usaré mysql, deberías conocer SQL, javascript y XUL, aunque XUL es muy sencillo y ver el código en la tabla periódica de XUL te bastará para iniciar, la tabla está aquí: http://www.hevanet.com/acorbin/xul/top.xul verás los elementos XUL y una pestaña source donde puedes ver el código fuente XUL de lo que estás viendo.

Empezaremos creando la estructura de directorios de la aplicación XUL de la siguiente forma:

XULAPP-STRUCTURE.png

Los dos elementos que están al final, la carpeta xulrunner y el ejecutable xulapp, los obtienes de la versión de xulrunner que hayas bajado para linux o windows, el ejecutable es un archivo que viene dentro de la carpeta xulrunner llamado xulrunner-stub y basta con ponerlo en la carpeta raíz de la aplicación xul junto al archivo application.ini y renombrarlo con el nombre de tu aplicación, este será el ejecutable de tu aplicación sea en linux o windows. en este caso lo renombramos como xulapp. En mi caso bajé el xulrunner de linux. Lo siguiente es instalar el Open-ESB, para ello pues simplemente es ejecutar el instalador de windows o linux y seguir las instrucciones. Crearemos una base de datos llamada XULAPPDB y después hay que crear una tabla de usuarios en la base de datos, pueden usar cualquier base para la que tengan un driver JDBC para configurar el datasource en el ESB. La tabla se compondrá de sólo dos campos, usuario y password, ambos de tipo varchar al menos en mysql, oracle, mssql, sybase, etc. Este sería el script en mysql:

CREATE TABLE IF NOT EXISTS `usuarios` (
  `USR` varchar(15) NOT NULL,
  `PWD` varchar(30) NOT NULL,
  PRIMARY KEY (`USR`,`PWD`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Fuente de la revisión

<p>Llevando la tecnología mozilla al infinito y más allá, este artículo describe como desarrollar aplicaciones distribuidas (SOA) con Firefox o xulrunner y OpenESB, los arquitectos de soluciones encontrarán una guía para hacer aplicaciones distribuidas que tendrán el performance de una aplicación de escritorio y una interfaz más rica y personalizable de lo que puede ser por ejemplo swing, aspectos en que resulta muy superior; verán que el tiempo requerido para desarrollo en esta arquitectura es mucho menor a la mayoría de lo conocido, si piensas que tiempo es dinero llegaste al lugar indicado. A los desarrolladores conocedores de mozilla, podrán ver un nuevo mundo de posibilidades. Se que XUL Remoto ya no está habilitado por default en firefox, pero puedo decirles solamente una cosa, si quieren seguir con XUL remoto usen ample sdk,</p>
<p>Necesitamos algunas herramientas para este desarrollo:</p>
<p>XULRunner que puede ser descargado desde: <a class=" external" href="http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/" rel="freelink">http://releases.mozilla.org/pub/mozi...nner/releases/</a></p>
<p>OpenESB: <a class=" external" href="http://www.logicoy.com/download_glass" rel="freelink">http://www.logicoy.com/download_glass</a></p>
<h2>Arquitectura</h2>
<p><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:TargetScreenSize>800x600</o:TargetScreenSize>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves />
<w:TrackFormatting />
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning />
<w:ValidateAgainstSchemas />
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF />
<w:LidThemeOther>ES-MX</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables />
<w:SnapToGridInCell />
<w:WrapTextWithPunct />
<w:UseAsianBreakRules />
<w:DontGrowAutofit />
<w:SplitPgBreakAndParaMark />
<w:EnableOpenTypeKerning />
<w:DontFlipMirrorIndents />
<w:OverrideTableStyleHps />
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math" />
<m:brkBin m:val="before" />
<m:brkBinSub m:val="&#45;-" />
<m:smallFrac m:val="off" />
<m:dispDef />
<m:lMargin m:val="0" />
<m:rMargin m:val="0" />
<m:defJc m:val="centerGroup" />
<m:wrapIndent m:val="1440" />
<m:intLim m:val="subSup" />
<m:naryLim m:val="undOvr" />
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" />
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" />
<w:LsdException Locked="false" Priority="39" Name="toc 1" />
<w:LsdException Locked="false" Priority="39" Name="toc 2" />
<w:LsdException Locked="false" Priority="39" Name="toc 3" />
<w:LsdException Locked="false" Priority="39" Name="toc 4" />
<w:LsdException Locked="false" Priority="39" Name="toc 5" />
<w:LsdException Locked="false" Priority="39" Name="toc 6" />
<w:LsdException Locked="false" Priority="39" Name="toc 7" />
<w:LsdException Locked="false" Priority="39" Name="toc 8" />
<w:LsdException Locked="false" Priority="39" Name="toc 9" />
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" />
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" />
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" />
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" />
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" />
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" />
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" />
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" />
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" />
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" />
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" />
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" />
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" />
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" />
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" />
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" />
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" />
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" />
<w:LsdException Locked="false" Priority="37" Name="Bibliography" />
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" />
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Calibri","sans-serif";
mso-bidi-font-family:"Times New Roman";}
</style>
<![endif]--><span style="font-size: medium;"><span style='; line-height: 115%; font-family: "Calibri","sans-serif";'>Esta es una arquitectura Enterprise basada en el concepto SOA, donde los sistemas funcionan en una nube de datos y la lógica requiere de una orquestación de servicios. Para ello se propone el uso de OpenESB que es gratuito y es una extensión para el servidor de aplicaciones Glassfish.</span></span> Estos servicios serán consumidos en clientes basados en XUL por medio de AJAX, DOM y XSLT. Las tecnologías que involucra la arquitectura son las siguientes:</p>
<p><img alt="tech.jpg" class="internal default" src="/@api/deki/files/5587/=tech.jpg"></p>
<p>En un principio nos centraremos en XULRunner y firefox así como la interfaz gráfica XUL, de manera similar se pueden usar HTML o SVG, para el caso del XUL multibrowser con ampleSDK que además incluye otros elementos de interfaz gráfica será visto en un apartado más adelante.</p>
<p>Una arquitectura SOA tiene como principio que los procesos son distribuidos, pero al mismo tiempo se necesita una orquestación e Integración de los mismos para obtener un sistema funcional, dichos sistemas pueden ser de índole bancaria, gobierno, comercial, maquiladoras y desde luego proyectos Open Source de índoles que muchos tal vez aún no hemos conceptualizado si quiera. La arquitectura se basa en estándares conocidos o tecnologías bastante aplicadas, AJAX, SOAP, XML, XUL, XSLT, XML-DOM, referencias a ellas son:</p>
<p>XSLT: <a class=" external" href="http://www.w3schools.com/xsl/" rel="freelink">http://www.w3schools.com/xsl/</a></p>
<p>SOAP: <a class=" external" href="http://www.w3schools.com/soap/default.asp" rel="freelink">http://www.w3schools.com/soap/default.asp</a></p>
<p>AJAX: <a class=" external" href="http://www.w3schools.com/ajax/default.asp" rel="freelink">http://www.w3schools.com/ajax/default.asp</a></p>
<p>XML-DOM: <a class=" external" href="http://www.w3schools.com/dom/default.asp" rel="freelink">http://www.w3schools.com/dom/default.asp</a></p>
<p>XUL: http://developer.mozilla.org/es/xul</p>
<p>Mostraré el diagrama de la arquitectura general para luego abordar cada punto en específico, este es el diagrama:</p>
<p><img alt="openarchitecture.jpg" class="internal default" src="/@api/deki/files/5601/=openarchitecture.jpg"></p>
<p><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:TargetScreenSize>800x600</o:TargetScreenSize>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves />
<w:TrackFormatting />
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning />
<w:ValidateAgainstSchemas />
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF />
<w:LidThemeOther>ES-MX</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables />
<w:SnapToGridInCell />
<w:WrapTextWithPunct />
<w:UseAsianBreakRules />
<w:DontGrowAutofit />
<w:SplitPgBreakAndParaMark />
<w:EnableOpenTypeKerning />
<w:DontFlipMirrorIndents />
<w:OverrideTableStyleHps />
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math" />
<m:brkBin m:val="before" />
<m:brkBinSub m:val="&#45;-" />
<m:smallFrac m:val="off" />
<m:dispDef />
<m:lMargin m:val="0" />
<m:rMargin m:val="0" />
<m:defJc m:val="centerGroup" />
<m:wrapIndent m:val="1440" />
<m:intLim m:val="subSup" />
<m:naryLim m:val="undOvr" />
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal" />
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" />
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" />
<w:LsdException Locked="false" Priority="39" Name="toc 1" />
<w:LsdException Locked="false" Priority="39" Name="toc 2" />
<w:LsdException Locked="false" Priority="39" Name="toc 3" />
<w:LsdException Locked="false" Priority="39" Name="toc 4" />
<w:LsdException Locked="false" Priority="39" Name="toc 5" />
<w:LsdException Locked="false" Priority="39" Name="toc 6" />
<w:LsdException Locked="false" Priority="39" Name="toc 7" />
<w:LsdException Locked="false" Priority="39" Name="toc 8" />
<w:LsdException Locked="false" Priority="39" Name="toc 9" />
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" />
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title" />
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" />
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle" />
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong" />
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis" />
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid" />
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" />
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1" />
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" />
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" />
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote" />
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5" />
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6" />
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6" />
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6" />
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" />
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" />
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6" />
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6" />
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" />
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" />
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" />
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6" />
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6" />
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6" />
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6" />
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" />
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" />
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" />
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" />
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title" />
<w:LsdException Locked="false" Priority="37" Name="Bibliography" />
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" />
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman","serif";}
</style>
<![endif]--></p>
<p align="left" class="MsoNormal" style="text-align:left">Esta arquitectura muestra como el core es totalmente independiente de las demás capas, la ventaja de usa r XUL es que se puede usar una arquitectura de front web lo mismo que una cliente – servidor. Esto nos da la flexibilidad de extender y extraer la lógica como sea necesario sin afectar el funcionamiento de la aplicación y reutilizar todos los componentes del core en otras aplicaciones cualquiera que sea su índole por ejemplo en un cliente móvil como el caso de un PDA. Y dado que usa datasources configurados en el servidor de aplicaciones puede migrarse de base de datos siempre y cuando la lógica de la nueva base se adapte a las funciones de la previa, es decir: tablas, funciones, Stored Procedures, etc, con cambios mínimos a los servicios.</p>
<p align="left" class="MsoNormal" style="text-align:left">AJAX</p>
<p align="left" class="MsoNormal" style="text-align:left">El proceso de la comunicación SOAP en esta arquitectura se basa en AJAX es decir, se envían los mensajes SOAP por medio del objeto XmlHttpRequest, para transformar la información de XUL a SOAP y la respuesta SOAP en XUL se usa XSLT, el siguiente diagrama tal vez lo haga un poco más entendible:</p>
<p align="left" class="MsoNormal" style="text-align:left"><img alt="ProcesoSOAP.jpg" class="internal default" src="/@api/deki/files/5603/=ProcesoSOAP.jpg" style=""></p>
<p class="MsoNormal">Aquí se muestra un ejemplo de un XSLT que genera un SOAP a partir de XUL:</p>
<table border="1" cellpadding="1" cellspacing="1" style="width: 100%; table-layout: fixed;"> <tbody> <tr> <td>{{ syntax.xml{code: "<!--?xml version=\"1.0\" encoding=\"ISO-8859-1\"?-->\n<xsl:stylesheet version='\"1.0\"' xmlns:xsl='\"http://www.w3.org/1999/XSL/Transform\"' xmlns:xul='\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\"'>\n<xsl:template match='\"xul:groupbox\"'>\n\t<soapenv:envelope \"="" envelope="" http:="" schemas.xmlsoap.org="" soap="" xmlns:ins='\"http://j2ee.netbeans.org/wsdl/InsertBpelm/InsertSOAP\"' xmlns:soapenv='\"http://schemas.xmlsoap.org/soap/envelope/\"' xmlns:tab='\"http://j2ee.netbeans.org/xsd/tableSchema\"' xmlns:xsd='\"http://www.w3.org/2001/XMLSchema\"' xmlns:xsi='\"http://www.w3.org/2001/XMLSchema-instance\"' xsi:schemalocation='\"http://schemas.xmlsoap.org/soap/envelope/'>\n\t\t<soapenv:body>\n\t\t\t<ins:insertsoapoperation soapenv:encodingstyle='\"http://schemas.xmlsoap.org/soap/encoding/\"'>\n\t\t\t\t<part1>\n\t\t\t\t\t<tab:insertdb_request>\n\t\t\t\t\t\t<xsl:for-each select='\"xul:hbox/xul:grid/xul:rows/xul:row/xul:textbox\"'>\n\t\t\t\t\t\t\t<xsl:if test="\&quot;@id='folio'\&quot;">\n\t\t\t\t\t\t\t\t<tab:param1><xsl:value-of select="@value"></xsl:value-of></tab:param1>\n\t\t\t\t\t\t\t</xsl:if>\n\t\t\t\t\t\t\t<xsl:if test="\&quot;@id='nombre'\&quot;">\n\t\t\t\t\t\t\t\t<tab:param2><xsl:value-of select="@value"></xsl:value-of></tab:param2>\n\t\t\t\t\t\t\t</xsl:if>\n\t\t\t\t\t\t</xsl:for-each>\n\t\t\t\t\t</tab:insertdb_request>\n\t\t\t\t</part1>\n\t\t\t</ins:insertsoapoperation>\n\t\t</soapenv:body>\n\t</soapenv:envelope>\n</xsl:template>\n</xsl:stylesheet>"} }}</td> </tr> </tbody>
</table>
<p class="MsoNormal"> El siguiente XSLT muestra la operación inversa, de SOAP a XUL:</p>
<table border="1" cellpadding="1" cellspacing="1" style="width: 100%; table-layout: fixed;"> <tbody> <tr> <td> {{ syntax.xml{code: "<!--?xml version=\"1.0\" encoding=\"ISO-8859-1\"?-->\n<xsl:stylesheet version='\"1.0\"' xmlns:m='\"http://j2ee.netbeans.org/wsdl/ListaEmpresasBpel/ListaEmpresasSOAP\"' xmlns:msgns='\"http://j2ee.netbeans.org/wsdl/ListaEmpresasBpel/ListaEmpresasDB\"' xmlns:ns='\"http://j2ee.netbeans.org/xsd/tableSchema\"' xmlns:ns0='\"http://j2ee.netbeans.org/wsdl/ListaEmpresasBpel/ListaEmpresasSOAP\"' xmlns:soap-env='\"http://schemas.xmlsoap.org/soap/envelope/\"' xmlns:xsi='\"http://www.w3.org/2001/XMLSchema-instance\"' xmlns:xsl='\"http://www.w3.org/1999/XSL/Transform\"'>\n\t<xsl:template match='\"ns:ListaEmpresasSOAPOperationResponse\"'>\n\t\t<xsl:for-each select='\"ns:cat_empresas_Record\"'>\n\t\t\t<xul:treeitem xmlns:xul='\"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\"'>\n\t\t\t\t<xul:treerow id='\"comp{ns:id_folio}\"'>\n\t\t\t\t\t<xul:treecell label='\"{ns:id_folio}\"/'>\n\t\t\t\t\t<xul:treecell label='\"{ns:nombre}\"/'>\n\t\t\t\t</xul:treecell></xul:treecell></xul:treerow>\n\t\t\t</xul:treeitem>\n\t\t</xsl:for-each>\n\t</xsl:template>\n</xsl:stylesheet>"} }}</td> </tr> </tbody>
</table>
<p class="MsoNormal">Vamos a explicar cómo funcionan la comunicación y las transformaciones, El cliente transforma la vista XUL en un Mensaje SOAP por medio de un XSLT que procesa el XSLTProcessor de Firefox, después se envía ese mensaje SOAP por medio de xmlHttprequest remoto al ESB, es decir AJAX remoto; luego el ESB responde un mensaje SOAP, mismo que es transformado en una vista XUL de nuevo por medio de XSLT y el XSLTProcessor, al final la salida XUL generada se añade a la vista por medio del DOM, una técnica muy conocida en AJAX. A continuación se muestra un ejemplo javascript de cómo hacer la comunicación AJAX-SOAP:</p>
<table border="1" cellpadding="1" cellspacing="1" style="table-layout: fixed; width: 100%;"> <tbody> <tr> <td>{{ syntax.JavaScript{code: "xhttp=new XMLHttpRequest();\nnetscape.security.PrivilegeManager.enablePrivilege(\"UniversalBrowserRead UniversalBrowserWrite\");\nnetscape.security.PrivilegeManager.enablePrivilege(\"UniversalXPConnect\");\nvar xslproc=new XSLTProcessor;\nvar xsl = document.implementation.createDocument(\"\", \"\", null);\nxsl.async = false;\nxsl.onload = new XMLSerializer().serializeToString(xsl);\nxsl.load(\"req/\"+soap);\nxslproc.importStylesheet(xsl);\nvar docIn=document.implementation.createDocument(\"\", \"\", null);\ndocIn.async = false;\ndocIn.onload = new XMLSerializer().serializeToString(docIn);\ndocIn.load(ample.documentElement);\nreqMsg = xslproc.transformToDocument(docIn); \nxhttp.open(\"POST\", port, false);\nxhttp.onreadystatechange = state_Change();\nxhttp.setRequestHeader(\"Content-Type\", \"text/xml\");\nxhttp.setRequestHeader(\"SOAPAction\", '\"\"');\nxhttp.send(reqMsg);\nswitch(xhttp.readyState) {\n\tcase 1,2,3:\n\t\talert('Bad Ready State: '+xhttp.status); \n\t\treturn false;\n\t\tbreak;\n\tcase 4: \n\t\tif(xhttp.status !=200) {\n\t\t\talert('The server respond with a bad status code: '+xhttp.status);\n\t\t\treturn false;\n\t\t} else {\n\t\t\txml=xhttp.responseXML;\n\t\t\tdisplayResult(xml, xslt, cont);\n\t\t}\n\tbreak; }"} }}</td> </tr> </tbody>
</table>
<h2>Preparación del ambiente.</h2>
<p> </p>
<p>Necesitaremos una base de datos, en el ejemplo usaré mysql, deberías conocer SQL, javascript y XUL, aunque XUL es muy sencillo y ver el código en la tabla periódica de XUL te bastará para iniciar, la tabla está aquí: <a class=" external" href="http://www.hevanet.com/acorbin/xul/top.xul" rel="freelink">http://www.hevanet.com/acorbin/xul/top.xul</a> verás los elementos XUL y una pestaña source donde puedes ver el código fuente XUL de lo que estás viendo.</p>
<p>Empezaremos creando la estructura de directorios de la aplicación XUL de la siguiente forma:</p>
<p><img alt="XULAPP-STRUCTURE.png" class="internal default" src="/@api/deki/files/4345/=XULAPP-STRUCTURE.png" style=""></p>
<p>Los dos elementos que están al final, la carpeta xulrunner y el ejecutable xulapp, los obtienes de la versión de xulrunner que hayas bajado para linux o windows, el ejecutable es un archivo que viene dentro de la carpeta xulrunner llamado xulrunner-stub y basta con ponerlo en la carpeta raíz de la aplicación xul junto al archivo application.ini y renombrarlo con el nombre de tu aplicación, este será el ejecutable de tu aplicación sea en linux o windows. en este caso lo renombramos como xulapp. En mi caso bajé el xulrunner de linux. Lo siguiente es instalar el Open-ESB, para ello pues simplemente es ejecutar el instalador de windows o linux y seguir las instrucciones. Crearemos una base de datos llamada XULAPPDB y después hay que crear una tabla de usuarios en la base de datos, pueden usar cualquier base para la que tengan un driver JDBC para configurar el datasource en el ESB. La tabla se compondrá de sólo dos campos, usuario y password, ambos de tipo varchar al menos en mysql, oracle, mssql, sybase, etc. Este sería el script en mysql:</p>
<table border="1" cellpadding="1" cellspacing="0" style="width: 100%; table-layout: fixed;"> <tbody> <tr> <td>CREATE TABLE IF NOT EXISTS `usuarios` (<br>   `USR` varchar(15) NOT NULL,<br>   `PWD` varchar(30) NOT NULL,<br>   PRIMARY KEY (`USR`,`PWD`)<br> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</td> </tr> </tbody>
</table>
Revertir a esta revisión