Atualmente, muitas empresas estão executando aplicativos .NET e Java em seu ambiente corporativo. Muitas vezes, esses aplicativos precisam compartilhar dados entre si em tempo de execução. A maneira mais comum de fazer isso hoje é armazenando os dados no banco de dados e fazendo com que o outro aplicativo pesquise e procure. Algumas pessoas também desenvolvem serviços da Web exclusivamente com o propósito de permitir que aplicativos Java obtenham dados de aplicativos .NET e vice-versa.
O problema com a primeira abordagem é que o compartilhamento de dados não pode acontecer instantaneamente porque o outro aplicativo “consumidor” precisa pesquisar o banco de dados, o que acontece após algum intervalo predeterminado. Ele também tem problemas de desempenho e escalabilidade, como qualquer aplicativo que acessa o banco de dados para obter dados. Como você sabe, um banco de dados não pode ser dimensionado da mesma forma que os aplicativos atuais. Isso ocorre porque, embora você possa dimensionar linearmente uma camada de aplicativo adicionando mais servidores de aplicativos, não é possível fazer o mesmo na camada de banco de dados.
A segunda abordagem requer muita programação personalizada e basicamente alterando a arquitetura do seu aplicativo apenas para que você possa compartilhar dados com outros aplicativos, sejam eles .NET ou Java. Seria muito melhor se você pudesse continuar desenvolvendo cada aplicativo para o propósito que está sendo construído e não se preocupar em criar uma estrutura personalizada para compartilhamento de dados.
A segunda abordagem requer muita programação personalizada e basicamente alterando a arquitetura do seu aplicativo apenas para que você possa compartilhar dados com outros aplicativos, sejam eles .NET ou Java. Seria muito melhor se você pudesse continuar desenvolvendo cada aplicativo para o propósito que está sendo construído e não se preocupar em criar uma estrutura personalizada para compartilhamento de dados.
Idealmente, você gostaria de ter um modelo orientado a eventos onde um aplicativo .NET pode ser notificado sempre que um aplicativo Java tiver alguns dados para ele e vice-versa. Mas, como você sabe, .NET e Java não são inerentemente compatíveis para esse tipo de uso.
É aqui que um cache distribuído como NCache vem muito a calhar. NCache fornece eventos que são independentes de plataforma e podem ser compartilhados entre .NET e Java. NCache também fornece compatibilidade de tipo de dados de nível binário entre .NET e Java. Isso permite não apenas receber eventos, mas também dados correspondentes na forma de objetos e tudo isso sem ter que passar por nenhuma transformação baseada em XML para fins de compartilhamento de dados.
NCache estrutura de notificação de eventos permite que você se registre para ser notificado quando diferentes tipos de eventos ocorrerem no cluster de cache. Dessa forma, sempre que houver alguma alteração nos dados, seja por aplicativos .NET ou Java, seu aplicativo será notificado. Aqui está o código de exemplo usando NCache evento baseado em item para compartilhamento de dados em 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 fornece diferentes notificações de nível de item em cache, como itens adicionados, removidos e atualizados. Os aplicativos podem registrar interesse em várias chaves de itens armazenados em cache (que podem ou não existir no cache ainda) e são notificados separadamente sempre que esse item é adicionado, atualizado ou removido do cache distribuído por qualquer pessoa por qualquer motivo. Por exemplo, mesmo que um item seja removido devido à expiração ou despejo, a notificação de evento de remoção de item é acionada.
Os aplicativos .NET e Java podem registrar interesse pelos mesmos itens armazenados em cache e ser notificados sobre eles. A notificação também inclui o item em cache afetado, que é transformado em .NET ou Java, dependendo do tipo de aplicativo.
Aqui está um código de exemplo de uso NCache evento baseado em item para compartilhamento de dados em .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); } |
Em resumo, com NCache você pode não apenas compartilhar dados entre aplicativos .NET e Java em tempo de execução, mas também pode usar eventos distribuídos para notificar os aplicativos sobre qualquer alteração nos dados.
Então, baixe um teste de 60 dias totalmente funcional do NCache Enterprise e experimente você mesmo.