Al giorno d'oggi, molte aziende eseguono applicazioni .NET e Java nel proprio ambiente aziendale. Spesso queste applicazioni devono condividere i dati tra loro in fase di esecuzione. Il modo più comune in cui lo fanno oggi è archiviare i dati nel database e fare in modo che l'altra applicazione esegua il sondaggio e li cerchi. Alcune persone sviluppano anche servizi Web esclusivamente allo scopo di consentire alle applicazioni Java di ottenere dati da applicazioni .NET e viceversa.
Il problema con il primo approccio è che la condivisione dei dati non può avvenire istantaneamente perché l'altra applicazione "consumatore" deve eseguire il polling del database, cosa che avviene dopo un intervallo predeterminato. Presenta anche problemi di prestazioni e scalabilità come qualsiasi applicazione che accede al database per i dati. Come sapete, un database non può scalare allo stesso modo delle applicazioni odierne. Questo perché, sebbene sia possibile ridimensionare linearmente un livello dell'applicazione aggiungendo più server delle applicazioni, non è possibile fare lo stesso a livello del database.
Il secondo approccio richiede molta programmazione personalizzata e sostanzialmente la modifica dell'architettura dell'applicazione in modo da poter condividere i dati con altre applicazioni, siano esse .NET o Java. Sarebbe molto più bello se potessi continuare a sviluppare ogni applicazione per lo scopo per cui è stata creata e non preoccuparti di creare un framework personalizzato per la condivisione dei dati.
Il secondo approccio richiede molta programmazione personalizzata e sostanzialmente la modifica dell'architettura dell'applicazione in modo da poter condividere i dati con altre applicazioni, siano esse .NET o Java. Sarebbe molto più bello se potessi continuare a sviluppare ogni applicazione per lo scopo per cui è stata creata e non preoccuparti di creare un framework personalizzato per la condivisione dei dati.
Idealmente, vorresti avere un modello guidato dagli eventi dove un'applicazione .NET può essere notificata ogni volta che un'applicazione Java ha dei dati per essa e viceversa. Ma, come sapete, .NET e Java non sono intrinsecamente compatibili per questo tipo di utilizzo.
È qui che piace una cache distribuita NCache torna davvero utile. NCache fornisce eventi indipendenti dalla piattaforma e condivisibili tra .NET e Java. NCache fornisce anche la compatibilità del tipo di dati a livello binario tra .NET e Java. Ciò consente non solo di ricevere eventi, ma anche dati corrispondenti sotto forma di oggetti e tutto il resto senza dover passare attraverso alcuna trasformazione basata su XML per scopi di condivisione dei dati.
NCache il framework di notifica degli eventi consente di registrarsi per essere avvisati quando si verificano diversi tipi di eventi all'interno del cluster di cache. In questo modo, ogni volta che vengono apportate modifiche ai dati, da applicazioni .NET o Java, l'applicazione viene notificata. Ecco il codice di esempio che utilizza NCache evento basato su elementi per la condivisione dei dati in Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import com.alachisoft.ncache.web.caching.*; public void AddToCache() { CacheEventListener onItemRemoved = new CacheEventListner(); Cache cache = NCache.initializeCache("PORCache"); Employee emp = new Employee(); emp.setDept("Mechanical"); CacheItem cItem = new CacheItem(emp); cItem.setItemRemoveCallback(onItemRemoved); cache.insert("EMP-1000-ENG", cItem); } public class CacheEventListner implements CacheItemRemovedCallback { ... public void itemRemoved(String key, Object value, CacheItemRemovedReason reason) { Employee emp = (Employee) key; System.out.println("Employee Removed " + key + "Dept" + emp.getDept()); } ... } |
NCache fornisce diverse notifiche a livello di elemento memorizzato nella cache come elemento aggiunto, elemento rimosso e aggiornamento dell'elemento. Le applicazioni possono registrare interesse per varie chiavi di elementi memorizzate nella cache (che possono esistere o meno nella cache) e vengono notificate separatamente ogni volta che quell'elemento viene aggiunto, aggiornato o rimosso dalla cache distribuita da qualcuno per qualsiasi motivo. Ad esempio, anche se un elemento viene rimosso a causa della scadenza o dello sfratto, viene attivata la notifica dell'evento di rimozione dell'elemento.
Sia le applicazioni .NET che Java possono registrare interesse per gli stessi elementi memorizzati nella cache e riceverne una notifica. La notifica include anche l'elemento memorizzato nella cache interessato, che viene trasformato in .NET o Java, a seconda del tipo di applicazione.
Ecco un esempio di codice di utilizzo NCache evento basato su elementi per la condivisione dei dati in .NET:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public void AddToCache() { Cache cache = NCache.InitializeCache("PORCache"); Employee emp = new Employee(); emp.Name = "David Rox"; emp.Dept = "Engineering"; ... cache.Insert("EMP-1000-ENG", emp, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,CacheItemPriority.Default); //Register Callback to get notified of changes related to provided key cache.RegisterKeyNotificationCallback("EMP-1000-ENG", new CacheItemUpdatedCallback(OnItemUpdated), newCacheItemRemovedCallback(OnItemRemoved)); } ... void OnItemRemoved(string key, object value,CacheItemRemovedReason reason) { //Item is removed. Do something Employee emp = (Employee) value; Console.WriteLine("Employee Removed {0}, Name {1}", key, emp.Dept); } |
In sintesi, con NCache non solo puoi condividere i dati tra .NET e le applicazioni Java in fase di esecuzione, ma puoi anche utilizzare eventi distribuiti per notificare alle applicazioni qualsiasi modifica dei dati.
Quindi, scarica una versione di prova di 60 giorni completamente funzionante di NCache Enterprise e provalo tu stesso.