Donde puedo almacenar las BR?

BizTalk Server a través del Business Rule Engine (BRE) ofrece la posibilidad de almacenar las reglas de negocio (BR) implementadas en archivos xml o en bases de datos para su posterior invocación y ejecución.  Cada almacenamiento ofrece sus ventajas y desventajas, y adicional su invocación difiere en cada uno.

Archivos XML

Una BR se puede almacenar e invocar desde un archivo plano usando la clase FileRuleStore.

 void SaveToFile()
{
    RuleStore ruleStore = new FileRuleStore("filename");
    ruleStore.Save(new RuleSet("rulesetname"));
}

void LoadFromFile()
{
    RuleStore ruleStore = new FileRuleStore("filename");
    RuleSetInfoCollection rsInfo = ruleStore.GetRuleSets("rulesetname", RuleStore.Filter.Latest);
    RuleSet newRS = ruleStore.GetRuleSet(rsInfo[0]);
}

Este almacenamiento ofrece las siguientes ventajas:

  • No es necesario tener una base de datos (como SQL Server) para su almacenamiento y ejecución.
  • El instanciamiento de la BR es mas rápida ya que evita el acceso a la base de datos.
  • La BR puede ser modificada con un editor como Bloc de Notas (notepad) y no es necesaria su publicación (publish) y despliegue (deploy) posterior.

Las desventajas son:

  • Estas BR no pueden ser invocadas desde un orquestación con el Call Rules Shape, sólo desde .net assemblies utilizando la clase FileRuleStore.
  • Si una BR va a ser accedida por varias aplicaciones se debe copiar el archivo en una ruta compartida o crear una copia en cada aplicación.
  • No se puede editar con el Business Rule Composer.

Base de datos

Una BR puede ser almacenada e invocada desde una base de datos usando las clases SqlRuleStore o OleDbRuleStore

 using Microsoft.BizTalk.RuleEngineExtensions;

static void DeployRuleSet(RuleSet ruleset)
{
    RuleSetDeploymentDriver dd = new RuleSetDeploymentDriver();
    SqlRuleStore sqlrs;
    sqlrs = (SqlRuleStore) dd.GetRuleStore();

    sqlrs.Add(ruleset, true);
    dd.Deploy(new RuleSetInfo(ruleset.Name, 
            ruleset.CurrentVersion.MajorRevision, ruleset.CurrentVersion.MinorRevision));
}

static void GetRuleStore(string rulesetname)
{
    RuleSetDeploymentDriver dd = new RuleSetDeploymentDriver();
    SqlRuleStore sqlrs = (SqlRuleStore) dd.GetRuleStore();

    RuleSetInfoCollection rss = new RuleSetInfoCollection();
    rss = sqlrs.GetRuleSets(rulesetname, RuleStore.Filter.Latest);
}

Las ventajas de utilizar una base de datos se enumeran en:

  • Las BR quedan almacenadas en forma centralizada, por lo tanto las aplicaciones que la consuman tendran siempre un repositorio único
  • Se puede utilizar el Business Rule Composer para administrar las BR, publicarlas (publish) o desplegarlas (deploy).
  • La BR puede ser invocada desde un .net assembly utilizando las clases provitas por el framework de BRE.
  • Las BR pueden ser invocadas desde orquestaciones usando Call Rules Shapes.

Las desventajas son:

  • El instanciamiento inicial de la BR puede ser lenta dependiendo de la conexion a la base de datos
  • Se debe tener una base de datos para el almacenamiento de las BR
  • La administracion y modificaciones a las BR tienen que hacerse por medio de un editor de BR, ejemplo el Business Rule Composer.

 

En ambos casos se puede exportar facilmente una BR de un archivo xml a la base de datos y viceversa, para ello se puede utilizar el framework de BRE o el Business Rule Engine Deployment Wizard que provee BizTalk Server.

 

Autor: Carlos Medina
Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningun derecho