Mi primer Blue Screen en Vista

Luego de años y cientos de programas instalados, hoy tuve mi primer blue screen.

Eso no me molestó tanto, sino que al volver, Vista asumió que no tenía activada la copia y volvió a pedirla, pero al intentarlo me dio el error “Se superó el número máximo de secretos que se pueden guardar en un único sistema”. 0×80070565

En la línea de comandos (cmd.exe), probé con sfc /SCANNOW sin ningún éxito.

Bajé Dr.Web por algunas referencias a soluciones para problemas de este tipo (www.freedrweb.com) e hice un scan, encontró un malware, reboot, y volví a tener máquina.

Igualmente creo que ya es tiempo de reinstalar, así que el fin de semana probaré Windows 7 RC.

Publicado en Uncategorized | Deja un comentario

Como recibir un string desde el MSQC Adapter en Biztalk

En realidad esta solución funciona para cualquier caso donde tenga que recibir un string y llevarlo a una orquestación donde el mensaje en el receive shape queramos que sea un string.

En el caso particular del adapter para MQSeries (o WebSphere MQ), de tipo cliente (que se instala con el CD de HIS), lo que recibo del adaptador es lo que está en el mensaje, con todos los datos de lo que sería el contexto del MQMessage en el contexto del mensaje Biztalk.

El problema es que si ingreso con un pipeline passthrough, Biztalk no procesará la suscripción, no entraré en detalles pero si les interesa lo que sucede se explica en el artículo de la Kb a continuación http://support.microsoft.com/kb/837860/en-us 

Una posible solución es usar un RawString para la entrada como se explica en esta entrada http://www.traceofthought.net/CommentView,guid,c5418f3d-2ea7-4530-ab9c-ae4c49154fcb.aspx el único tema con esto es que hay que hacer el deployment no solamente del ContextAdder (ContextAdder) , sino del RawString, y usarlo en la orquestación. Asumiendo que entienda el artículo y cómo hacerlo, no es una mala solución.

La otra solución es tener un ContextAdder que además de agregar al contexto la propiedad MessageType como se ve debajo al tipo string, agregue al string raw que viene, el xml <string></string> alrededor del string original que entra.

image

Aquí ContextAdderModificado subo la solución con un ContextAdder modificado que hace lo anterior.

Igualmente persiste, si necesitamos escribir WebSphere MQ via el MQSC Adapter la necesidad de usar un RawString por lo que en el mismo proyecto está incluida la clase RawString del SDK.

Hay una orquestación que asume que están los artefactos correctamente implementados para probar y recibe un string y envía un string (con una lógica de dominio que puede quitarse si quieren probarse strings simples).

Ya que estamos, comento un par de cosas importantes para interactuar con MQSC.

1) en el Receive, los siguientes parámetros son mandatorios: Channel Name, Queue y Queue Manager

image

2) en el Send los párámetros mandatorios son: Channel Name, Connection Name, Queue y Queue Manager

image

Si estos parámetros no están, los errores 2058 con una descripción como Reason code 2058 Failure encountered while attempting to open queue pueden sucederse sin que esto nos indique exactamente qué está sucediendo.

Publicado en Uncategorized | Deja un comentario

Guía para optimización de performance en Biztalk

La guía para optimización de performance en Biztalk ha sido publicada aquí, y me tomé el tiempo para no solamente leerla sino hacer un resumen de la misma para poder tener de referencia y buscar esos puntos. Es una guía muy interesante y diría que es de lectura obligatoria para todo el que piense realizar serios proyectos con Biztalk. Sin embargo, tampoco lo veo como la "guía definitiva" para la performance en Biztalk, dado que la variedad de escenarios puede ser muy compleja, la profundidad con la que se tocan los temas es variada y muchas porciones están teñidas (para bien Y para mal) por la experiencia de los participantes en la confección de la guía.

La primer parte "Performance Factors", es una recorrida por diferentes puntos que pueden afectar a la solución. Es extremadamente complejo hacer algo que abarque todo, pero es de esperar al menos que sea una muestra representativa de problemas encontrados por los que lo elaboraron. En este sentido, debe tomarse como un muy buen punto de comienzo, pero deben ser incorporadas experiencias de otros expertos.

De la revisión de los diferentes factores, elaboré el cuadro debajo.

image

image

La segunda parte "Performance Tools" es una lista de las herramientas que normalmente uno podría usar con Biztalk. Incluye todas las herramientas que se deben tener a mano pero es únicamente una pequeña lista.

La tercera parte se enfoca en realizar un "Performance Assessment" a una instalación Biztalk y es un acercamiento más metodológico que técnico. La metodología es más que adecuada y se ve no solamente alienada con las metodologías que normalmente usamos con MCS sino que es coherente y realizable.

Reseño debajo algunos puntos destacables

  • En las páginas 35 y 36 hay una buena guía para el scoping del proyecto.
  • La página 37 tiene una lista de potenciales medidas a optimizar en el análisis de performance.
  • La página 39 es muy interesante dado que en un cuadro tenemos algunas medidas de los posibles máximos de performance. Inclusive menciona la máxima performance de orquestaciones por segundo que la ubica en 1156 con la friolera de 23 Quad Processor Biztalk 2006
  • Documentación de cómo separar las diferentes bases de datos en la página 52.

La cuarta parte se centra en encontrar y eliminar los cuellos de botella en Biztalk. A continuación un cuadro de recomendaciones generales

image

y de las de Biztalk específicamente

image

La quinta parte trata del testing de aplicaciones. Es un muy detallado análisis del uso de herramientas, aunque en mi criterio no forma parte de la guía como tal y en ese lugar, sino en otra guía o apéndice (aunque debo reconocer que suma hojas para que la guía se vea contundente :)   )

La última sección está estrictamente dedicada a la optimización de performance. Hasta ahora, la guía, realmente ha centrado su atención en evitar, encontrar y corregir problemas que afectan la performance. En esta sección, entra directamente en la búsqueda de performance máxima una vez determinada una infraestructura. Esto será parte de mi próxima entrada en el blog.

Publicado en Uncategorized | 2 comentarios

Un PAR de días mejorando mis deployments Biztalk – Parte 5

Lo último que quería aprender era la relación entre los bats de implementación y los XML de los wizards.

El bat de implementación ServerDeployWizard.bat tiene dos líneas:

EnvironmentSettingsExporter.exe EnvironmentSettings\SettingsFileGenerator.xml EnvironmentSettings
SetEnvUI.exe InstallWizard.xml ServerDeploy.bat

Donde el primero genera los archivos de configuración diferentes por ambiente y el segundo implementa en variables de ambiente los datos que el wizard pide y llama al bat que hace el deployment que es ServerDeploy.bat que tiene:

EnvironmentSettingsExporter.exe EnvironmentSettings\SettingsFileGenerator.xml EnvironmentSettings
nant.exe -D:skipUndeploy=true -D:deployBizTalkMgmtDB=%BT_DEPLOY_MGMT_DB% -l:DeployResults\DeployResults.txt serverDeploy
nant.exe -buildfile:CopyDeployResults.nant >nul

Que exporta (nuevamente y realmente no se por qué) los datos. Pre-procesa (no en mi caso) el xml para incluirle los datos de ambiente y realiza el deployment con Nant

Los xml InstallWizar y UninstallWizard son usados por el SetEnvUi que toma el xml y hace pantallas que piden datos para instalación poniéndolas en variables de ambiente. Dado que no afectaba a mi instalación, quité todo lo que venía del ejemplo dejando únicamente la pregunta para caso multi servidor y no dio problemas.

Lo único adicional que me quedaría por resolver es cómo se relacionan las variables cargadas en el excel XML con el deployment, dado que hasta ahora no he visto esa relación.

Publicado en Uncategorized | Deja un comentario

Reconozco que me equivoqué, la informática sí es para pobres

Publicado en Uncategorized | 2 comentarios

Un PAR de días mejorando mis deployments Biztalk – Parte 4

Voy a incluir un Setup de Visual Studio para mi deployment y ver si lo puedo integrar con la implementación con Nant.

Para esto, agregué un proyecto de Setup a mi proyecto y agregué los Project Outputs para orquestaciones, esquemas, transformaciones y assemblies utilitarias. Es importante que los agregue con la información de Debug (porque así está configurado).

Agrego los archivos que no forman parte de solución:

    • Los 6 .bat que empiezan con Server
    • InstallWizard.xml y UninstallWizard.xml
    • BizatalkDeploymentInclude.Nant, NombreSolucion.PortBindings.Xml, NombreSolucion.sln.deploy.build y CopyDeployResults.nant
    • Los archivos de EnvironmentSettings (dentro de su folder)
    • Los archivos de Deploytools (dentro de su folder) con sus sub-folders y sus contenidos

La estructura de directorios debe quedar como se ve debajo

image

Luego creé shortcuts para los wizards de deploy/redeploy/undeploy

image

y moví los shortcuts al User Program y les cambié los nombres para que fueran más "user-friendly" dentro de un folder.

image

 

Hago el Build y luego de instalar tengo el mismo comportamiento que con WiX (pero sin WiX). Estoy más que contento.

Ahora a ver qué más puedo mejorar del resto de la instalación.

Publicado en Uncategorized | 1 comentario

Un día mejorando mis deployments Biztalk – Parte 3

Una de las cosas que normalmente pasa en los proyectos es que los settings de los diferentes artefactos en el binding es diferente. Para experimentar con esto, decidí usar el EnvironmentSettingManager que se aplica dentro del deploymentframework.

La primera cosa que ví es que a pesar de que la documentación expresa que al cerrar la planila se actualizan los archivos (por una macro), esto no sucede, pero es fácilmente subsanable usando el utilitario EnvironmentSettingsExporter.exe que está en el subdirectorio DeployTools.

Con esto quedé conforme pero dejaré esta configuración para más adelante, dado que ahora quiero crear un instalador con WiX

Creando el instalador con WiX 

Lo primero es copiar el directorio BizTalkSample.WiXSetup y renombrarlo con NombreProyecto delante en nuestra solución, luego renombrar el BiztalkSample.WiXSetup.build con NombreProyecto delante y yo lo incluí en el directorio "Solution Items" por comodidad.

Hay que masajear un poco el archivo, no olvidar generar los GUIDs diferentes para el installer.

Luego hay que ejecutar nant en el directorio setup debajo de WixSetup (no hay path, pero está donde nosotros mismos lo copiamos ;) ), y no encontrará los archivos:

        • InstallWizard.xml
        • UnInstallWizard.xml
        • CopyDeployResults.nant

que deben copiarse del directorio raíz de la solución de ejemplo a nuestro directorio raíz.

corriendo Nant luego de esto, generó el MSI.

El MSI solamente instala los archivos, y genera entradas en el menú Start para que se pueda implementar la versión. Corrí el MSI, pero no generó las entradas de implementar/desimplementar, por lo que solo me quedó ir al panel de control y desinstalar el producto, y a empezar a pensar por qué no quedó bien instalado.

Round 1- Verificar que el BtsSample funciona: Generé el instalador y lo instalé, quedando correctamente instalado.

image

Round 2 – Por qué no quedó instalado: . Toqué el BizTalk.WiXSetup.nant comentando la línea debajo relacionada a DeploymentTest dado que en mi ejemplo no tengo.

image

pero eso no ayudó, dado que provocó otro error. Creo que el error es que siempre intenta invocar con un deploymentTest aunque en el archivo NombreProyecto.sln.deploy.build yo tengo esa variable en false.

image

Creé entonces una solución NombreProyecto.DeploymentTest con un test que siempre de correcto. Hay que crear también un app.config con los valores que tiene el app.config de la solución de ejemplo. Creado el archivo .config, copiarlo en la raíz del proyecto.

Hecho todo esto, los errores desaparecieron, sin importar lo que hayas puesto en IncludeDeploymentTest genera el "Verify Deployment" y nada más. Esto para mí es un bug, pero tengo que investigarlo más adelante.

Lo que sí encontré es por qué no me genera el resto, es porque (y tuve que buscarlo bastante), el script generate-install-script.js de WiX modificado que está en el directorio WiXSetup\Setup, busca en la raíz del proyecto los archivos:

        • ServerDeployWizard.bat
        • ServerUnDeployWizard.bat
        • ServerRedeployWizard.bat
        • y si hay algún CHM

Para incluirlos en el menú. Estos .bat están en la raíz del directorio de la aplicación de ejemplo (junto con otros .bat que hay que copiar para que estos funcionen).

El final de la búsqueda – ¿vale la pena?

No quiero caer en la disonancia cognitiva que es lo que hace que mis amigos del pinguino piensen que "si es tan difícil, seguro que debe valer la pena, no es que soy un tarado masoquista, es que realmente vale la pena :) ".

El problema al que nos enfrentamos cuando tenemos que hacer una distribución Biztalk, hoy, es que las alternativas no son buenas. Normalmente en cualquier distribución tenemos los siguientes requerimientos:

      • Crear un MSI para distribuir la aplicación: esto lo realiza correctamente para Biztalk, pero nuestras assemblies personalizadas no van en el MSI para ponerlas en la GAC. Además, siempre la distribución es desde una instalación completa, no de mis propios fuentes, lo que debe ejecutarse de otra manera.
      • Instalar en el ambiente: a través de la "importación" en biztalk y la distribución de los bindings, que obliga a que el operador haga la operación directamente sobre el servidor.
      • Tener configuraciones personalizadas para cada ambiente: aquí la mejor opción es editar el xml de los bindings para cada caso, el uso del configurador a partir de la plantilla excel es una buena opción, dado que normalmente en otro caso lo que hacemos es dar un documento detallado de instalación para resolverlo.

Por lo anterior, pareciera que vale la pena tener toda esa infraestructura, sobretodo teniendo en cuenta la cantidad de utilitarios y casos que comprende el instalador.

Además, por lo que vi, hay dos complejidades conceptuales:

a) La complejidad conceptual de los bindings: esta complejidad es solo complejidad de comprensión, pero en la ejecución se mostró bastante simple, y la complejidad de comprensión es por dos motivos: el primero es porque el tema es complejo si no se conoce (diferentes tipos de artefactos, vinculación entre ellos, pero esto es Biztalk en sí) y el segundo es porque el encapsulamiento no está completamente terminado (y esto es porque no es un producto).

b) La complejidad grande de usar WiX para generar el MSI: aquí me encantaría saber por qué se usó WiX para este deployment en particular, dado que entiendo que por la complejidad media que tiene no sería necesario usarlo

Haciéndolo fácil, sustituyendo WiX

¿Podemos hacer esto con un proyecto de setup? Lo que necesito es:

      • Generar un instalador que haga la implantación de los assemblies: esto es simple y la única ventaja que tiene el instalador actual es que puedo indicar qué quiero que se implemente y qué no y el los toma automáticamente, pero me obliga a tener los nombres de una cierta manera (lo cual a mí me parece una buena idea pero entiendo que no a todos les parezca).
      • Generar los ítems de de menú para implementación: esto debería ser simple porque son puntos "semi-dinámicos" dado que solamente debo tener en cuenta si debo o no generar de cinco puntos posibles.
      • Generar el script adecuado para que el instalador funcione correctamente, pero eso es simple porque eso sí es lo que se usa con Nant para implementar, esa es la parte que propongo mantener.

Así que voy a mi parte 4 y luego cuento cómo me fue.

Publicado en Uncategorized | Deja un comentario