Clases de Replicacion
De
<keywords content="keywords">
replicacion, replicación, entidades replicadas, replicación de entidades, replicacion de entidades, replicacion entidades, replicar entidad, replicación entidades, integración a nivel de datos, nivel de datos, mySQL, replicación personalizada, replicacion personalizada
</keywords>
Aplica para las EDICIONES ENTERPRISE |
Contenido |
Clases de Replicación
Introducción
Este artículo presenta un ejemplo de las clases de replicación que implementan las interfaces "IProviderVirtualDA" y "IReplicationEntDA". Esta implementación es requerida para una replicación personalizada (a una fuente de datos diferente a Oracle o Microsoft SQL Server).
El ejemplo a continuación ilustra una replicación personalizada contra una fuente de datos en MySQL.
Alerta: Tenga en cuenta que el siguiente código provee una guía sobre la implementación del método "GetEntity()", sin embargo los otros métodos no están incluídos y por lo tanto deberán ser completados en las clases. |
Prerequisitos
Para implementar estas clases, se requiere descargar e instalar el componente "MySQL Connector/Net" que se utiliza para la conexión a la instancia de MySQL.
Para este ejemplo, estas clases fueron trabajadas en Microsoft Visual Studio. En el proyecto de .Net (con Visual Studio), la librería "MySql.Data.dll" instalada por el componente "MySQL Connector/Net" debe ser referenciado en el proyecto de .Net.
De igual manera, se requiere referenciar también la librería "Bizagi.EntityManager.Interfaces.IEntityDA.dll" de Bizagi, que se encuentra ubicada en el folder de la aplicación web del proyecto (por defecto en "C:\Bizagi\Enterprise\Projects\[NOMBRE_PROYECTO]\WebApplication\bin\".
Ejemplo de Implementación de las clases
Clase que Implementa la interface IProviderVirtualDA
using System; using System.Data; using System.Data.OleDb; using System.Collections; using System.Collections.Specialized; using System.Text; using MySql.Data.MySqlClient; using Bizagi.EntityManager.Interfaces; namespace BizagiMySQL { public class CMySQLProvider : IProviderVirtualDA { protected HybridDictionary m_htMetadata; protected MySqlConnection MySqlconn; protected bool bDisposed; public CMySQLProvider() { bDisposed = false; MySqlconn = null; } #region IProviderVirtualDA Members public void BeginTransaction() { // TODO: Adicionar la implementación de CMySQLProvider.BeginTransaction } public void Rollback() { // TODO: Adicionar la implementación de CMySQLProvider.Rollback } public void Commit() { // TODO: Adicionar la implementación de CMySQLProvider.Commit } public void OpenConnection() { if (MySqlconn == null) { // Verifica que los campos de los metadatos son correctos if (!m_htMetadata.Contains("Server") || !m_htMetadata.Contains("Database") || !m_htMetadata.Contains("Username") || !m_htMetadata.Contains("Password")) { throw new CEntityClassInterfaceException("Incomplete metadata:" + "connection parameters missing"); } else { // construye la cadena de la conexión string sConn; string sServer = m_htMetadata["Server"].ToString(); string sDatabase = m_htMetadata["Database"].ToString(); string sUsername = m_htMetadata["Username"].ToString(); string sPassword = m_htMetadata["Password"].ToString(); sConn = "Server=" + sServer + ";Database=" + sDatabase + ";Uid=" + sUsername + ";Pwd=" + sPassword + ";"; MySqlconn = new MySqlConnection(sConn); MySqlconn.Open(); } } } public void Init(HybridDictionary htMetadata) { m_htMetadata = htMetadata; } public void CloseConnection() { if (MySqlconn != null) MySqlconn.Close(); MySqlconn = null; } #endregion #region IDisposable Members public void Dispose() { if (!bDisposed) { // nunca cierre la conexión en este método!! bDisposed = true; } } #endregion public MySqlConnection getConnection() { return this.MySqlconn; } public DataSet executeMySQLQuery(string sSQL) { MySqlCommand command; MySqlDataAdapter adapter; DataSet ds = new DataSet(); command = new MySqlCommand(sSQL, this.getConnection()); adapter = new MySqlDataAdapter(command); adapter.Fill(ds); return ds; } public void executeNonQueryMySQL(string sSQL) { MySqlCommand command; command = new MySqlCommand(sSQL, this.getConnection()); command.ExecuteNonQuery(); } } }
Clase que Implementa la interface IReplicationEntDA
using System; using System.Data; using System.Data.OleDb; using System.Collections; using System.Collections.Specialized; using System.Text; using System.Xml; using Bizagi.EntityManager.Interfaces; using MySql.Data.MySqlClient; using Bizagi.Defs; namespace BizagiMySQL { public class CMySQLReplication : IReplicationEntDA { /// <summary> /// Indicador para saber si el objeto ha sido eliminado /// </summary> protected bool m_bDisposed; /// <summary> /// Conexión con el sistema virtual /// </summary> protected CMySQLProvider m_objSystem; /// <summary> /// Metadata usada para inicializar el objeto, como una coleción de parejas nombre-valor /// </summary> protected HybridDictionary m_htMetadata; public CMySQLReplication() { m_bDisposed = false; } #region IReplicationEntDA Members public void Init(IProviderVirtualDA objProvider, HybridDictionary htMetadata) { m_objSystem = (CMySQLProvider)objProvider; m_htMetadata = htMetadata; } public DataSet GetEntity(string sEntSource, string[] arrsColList) { try { StringBuilder sbSQL = new StringBuilder(); sbSQL.Append(" SELECT "); sbSQL.Append(string.Join(",", arrsColList)); // Cláusula FROM sbSQL.Append(" FROM "); sbSQL.Append(sEntSource); DataSet ds = m_objSystem.executeMySQLQuery(sbSQL.ToString()); return ds; } catch (Exception e) { throw new ApplicationException(e.Message); } } #endregion #region IDisposable Members public void Dispose() { if (!m_bDisposed) { m_bDisposed = true; } } #endregion } }
Artículos Relacionados
- Cómo integrar a Bizagi con una fuente externa de datos.
- Replicación Personalizada.
- Ejemplos de clases de virtualización para MySQL.
<comments />