Configuración e implementación del proveedor de caché de escritura directa
Para usar el almacenamiento en caché de escritura simultánea, debe implementar el IWriteThruProvider
interfaz para .NET y el WriteThruProvider
interfaz para Java. NCache utilizará esta implementación personalizada para escribir datos en la fuente de datos. Por favor refiérase a Configuración de la caché de escritura simultánea en la Guía del administrador para más información.
advertencia
Si el proveedor de caché de escritura directa se especifica en cliente.ncconf existentes default-writethru-provider
etiqueta y también a través de API, entonces el proveedor en API sobrescribirá el especificado en cliente.ncconf.
Importante:
Para Java, antes de implementar sus archivos JAR, debe asegurarse de que:
- JDK 17 está instalado.
- La variable de entorno para Java está configurada.
Requisitos previos
- Para obtener información sobre los requisitos previos estándar necesarios para trabajar con todos NCache funciones del lado del servidor, incluida la caché de escritura directa, consulte la página proporcionada en Requisitos previos de la API del lado del servidor.
- Este debería ser un proyecto de biblioteca de clases usando Microsoft Visual Studio.
- Asegúrese de Implementar proveedor de escritura simultánea usando el NCache Centro de Gestión.
- Para obtener detalles de la API, consulte: IWriteThruProvider, Escribir en fuente de datos.
Note
In NCache, Los proveedores de escritura directa se configuran a nivel de caché, es decir, para cachés agrupadas, todos los nodos contendrán configuraciones de proveedores y sus ensamblados implementados.
Implementación de muestra
El siguiente ejemplo de código proporciona una implementación de ejemplo para IWriteThruProvider
interfaz para .NET y WriteThruProvider
para Java respectivamente. Él WriteToDataSource
El método contiene lógica para realizar una operación de escritura en una fuente de datos configurada. Con esto, puede escribir objetos, objetos masivos y tipos de datos desde la caché en la fuente de datos.
Después de implementar y desplegar este proveedor, puede realizar llamadas directas a NCache para operaciones de escritura en el origen de datos. NCache utiliza el WriteToDataSource
método en la clase de acceso a datos especificada para escribir operaciones en la fuente de datos.
// Contains methods used to save/update an object to the master data source.
public class SampleWriteThruProvider : IWriteThruProvider
{
// Object used to communicate with the Data source.
private SqlConnection _connection;
// Perform tasks like allocating resources or acquiring connections
public void Init(IDictionary parameters, string cacheId)
{
try
{
string connString = GetConnectionString(parameters);
if (!string.IsNullOrEmpty(connString))
{
_connection = new SqlConnection(connString);
_connection.Open();
}
}
catch (Exception ex)
{
// Handle exception
}
}
// Perform tasks associated with freeing, releasing, or resetting resources.
public void Dispose()
{
if (_connection != null)
{
_connection.Close();
}
}
//Responsible for write operations on data source
public OperationResult WriteToDataSource(WriteOperation operation)
{
ProviderCacheItem cacheItem = operation.ProviderItem;
Product product = cacheItem.GetValue<Product>();
switch (operation.OperationType)
{
case WriteOperationType.Add:
// Insert logic for any Add operation
break;
case WriteOperationType.Delete:
// Insert logic for any Delete operation
break;
case WriteOperationType.Update:
// Insert logic for any Update operation
break;
}
// Write Thru operation status can be set according to the result.
return new OperationResult(operation, OperationResult.Status.Success);
}
public ICollection<OperationResult> WriteToDataSource(ICollection<WriteOperation> operations)
{
var operationResult = new List<OperationResult>();
foreach (WriteOperation operation in operations)
{
ProviderCacheItem cacheItem = operation.ProviderItem;
Product product = cacheItem.GetValue<Product>();
switch (operation.OperationType)
{
case WriteOperationType.Add:
// Insert logic for any Add operation
break;
case WriteOperationType.Delete:
// Insert logic for any Delete operation
break;
case WriteOperationType.Update:
// Insert logic for any Update operation
break;
}
// Write Thru operation status can be set according to the result
operationResult.Add(new OperationResult(operation, OperationResult.Status.Success));
}
return operationResult;
}
public ICollection<OperationResult> WriteToDataSource(ICollection<DataTypeWriteOperation> operations)
{
var operationResult = new List<OperationResult>();
foreach (DataTypeWriteOperation operation in operations)
{
var list = new List<Product>();
ProviderDataTypeItem<object> cacheItem = operation.ProviderItem;
Product product = (Product)cacheItem.Data;
switch (operation.OperationType)
{
case DatastructureOperationType.CreateDataType:
// Insert logic for creating a new List
IList myList = new List<Product>();
myList.Add(product.ProductID);
break;
case DatastructureOperationType.AddToDataType:
// Insert logic for any Add operation
list.Add(product);
break;
case DatastructureOperationType.DeleteFromDataType:
// Insert logic for any Remove operation
list.Remove(product);
break;
case DatastructureOperationType.UpdateDataType:
// Insert logic for any Update operation
list.Insert(0, product);
break;
}
// Write Thru operation status can be set according to the result.
operationResult.Add(new OperationResult(operation, OperationResult.Status.Success));
}
return operationResult;
}
// Parameters specified in Manager are passed to this method
// These parameters make the connection string
private string GetConnectionString(IDictionary parameters)
{
string connectionString = string.Empty;
string server = parameters["server"] as string, database = parameters["database"] as string;
string userName = parameters["username"] as string, password = parameters["password"] as string;
try
{
connectionString = string.IsNullOrEmpty(server) ? "" : "Server=" + server + ";";
connectionString = string.IsNullOrEmpty(database) ? "" : "Database=" + database + ";";
connectionString += "User ID=";
connectionString += string.IsNullOrEmpty(userName) ? "" : userName;
connectionString += ";";
connectionString += "Password=";
connectionString += string.IsNullOrEmpty(password) ? "" : password;
connectionString += ";";
}
catch (Exception exp)
{
// Handle exception
}
return connectionString;
}
// Deploy this class on cache
}
Note
Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
Recursos adicionales
NCache proporciona una aplicación de muestra para escritura directa en GitHub.
Vea también
.NETO: Alachisoft.NCache.Tiempo de ejecución espacio de nombres
Java: com.alachisoft.ncache.runtime.datasourceprovider espacio de nombres