Configurazione e implementazione del provider della cache write-through
Per utilizzare la cache write-through, è necessario implementare il file IWriteThruProvider
interfaccia per .NET e WriteThruProvider
interfaccia per Java. NCache utilizzerà questa implementazione personalizzata per scrivere i dati nell'origine dati. Per favore riferisci a Configurazione della cache write-through nella Guida dell'amministratore per ulteriori dettagli.
avvertimento
Se il provider della cache write-through è specificato in client.ncconf nel default-writethru-provider
tag e anche tramite API, quindi il provider in API sovrascriverà quello specificato in client.ncconf.
Consigli
Per Java, prima di distribuire i tuoi file JAR, devi assicurarti che:
- JDK 17 è installato.
- La variabile di ambiente per Java è impostata.
Prerequisiti
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache Per le funzionalità lato server, inclusa la cache Write-Through, fare riferimento alla pagina specificata Prerequisiti API lato server.
- Questo dovrebbe essere un progetto di libreria di classi che usa Microsoft Visual Studio.
- Assicurati che Distribuire il provider WriteThrough usando il NCache Centro Direzionale.
- Per i dettagli dell'API fare riferimento a: IWriteThruProvider, WriteToDataSource.
Note:
In NCache, I provider write-through sono configurati a livello di cache, ovvero per le cache in cluster tutti i nodi conterranno le configurazioni dei provider e i relativi assembly distribuiti.
Esempio di implementazione
L'esempio di codice seguente fornisce un'implementazione di esempio per IWriteThruProvider
interfaccia per .NET e WriteThruProvider
rispettivamente per Java. Il WriteToDataSource
Il metodo contiene la logica per eseguire un'operazione di scrittura su un'origine dati configurata. Usandolo, puoi scrivere oggetti, oggetti in blocco e tipi di dati dalla cache all'origine dati.
Dopo aver implementato e distribuito questo provider, puoi effettuare chiamate dirette a NCache per le operazioni di scrittura sull'origine dati. NCache utilizza l' WriteToDataSource
metodo nella classe di accesso ai dati specificata per scrivere operazioni sull'origine dati.
// 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:
Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
Risorse addizionali
NCache fornisce un'applicazione di esempio per Write-through attivo GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.Durata spazio dei nomi.
Giava: com.alachisoft.ncache.runtime.datasourceprovider spazio dei nomi.