如今,许多公司在其企业环境中同时运行 .NET 和 Java 应用程序。 通常这些应用程序需要在运行时相互共享数据。 他们今天这样做的最常见方法是将数据存储在数据库中,并让其他应用程序轮询并查找它。 有些人还开发 Web 服务的目的仅仅是为了允许 Java 应用程序从 .NET 应用程序获取数据,反之亦然。
第一种方法的问题是数据共享不能立即发生,因为其他“消费者”应用程序必须轮询数据库,这会在某个预定时间间隔之后发生。 它还具有性能和可扩展性问题,就像任何访问数据库以获取数据的应用程序一样。 如您所知,数据库无法像今天的应用程序那样扩展。 这是因为尽管您可以通过添加更多应用程序服务器来线性扩展应用程序层,但您不能在数据库层执行相同的操作。
第二种方法需要大量自定义编程并从根本上更改应用程序的体系结构,以便您可以与其他应用程序共享数据,无论它们是 .NET 还是 Java。 如果您可以继续开发每个应用程序以实现其正在构建的目的,而不必担心创建用于数据共享的自定义框架,那就更好了。
第二种方法需要大量自定义编程并从根本上更改应用程序的体系结构,以便您可以与其他应用程序共享数据,无论它们是 .NET 还是 Java。 如果您可以继续开发每个应用程序以实现其正在构建的目的,而不必担心创建用于数据共享的自定义框架,那就更好了。
理想情况下,你会想要一个 事件驱动模型 只要 Java 应用程序有一些数据,就可以通知 .NET 应用程序,反之亦然。 但是,如您所知,.NET 和 Java 在这种用途上并不兼容。
这是分布式缓存的地方 NCache 真的很方便。 NCache 提供独立于平台并且可以在 .NET 和 Java 之间共享的事件。 NCache 还提供 .NET 和 Java 之间的二进制级数据类型兼容性。 这使您不仅可以接收事件,还可以接收对象形式的相应数据以及所有这些,而无需通过任何基于 XML 的转换来实现数据共享。
NCache 事件通知框架使您能够注册以在缓存集群中发生不同类型的事件时获得通知。 这样,只要 .NET 或 Java 应用程序对数据进行任何更改,您的应用程序就会收到通知。 这是使用的示例代码 NCache 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 为您提供不同的缓存项目级别通知,如项目添加、项目删除和项目更新。 应用程序可以注册对各种缓存项键(可能存在也可能不存在于缓存中)的兴趣,并且每当任何人出于任何原因从分布式缓存中添加、更新或删除该项时,它们都会收到单独的通知。 例如,即使项目由于过期或驱逐而被删除,也会触发 item-remove 事件通知。
.NET 和 Java 应用程序都可以注册对相同缓存项的兴趣并收到有关它们的通知。 通知还包括受影响的缓存项,根据应用程序的类型,它会转换为 .NET 或 Java。
这是使用的示例代码 NCache .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); } |
总之,与 NCache 您不仅可以在运行时在 .NET 和 Java 应用程序之间共享数据,还可以使用分布式事件来通知应用程序数据的任何变化。
因此,请下载完整的 60 天试用版 NCache Enterprise 并亲自尝试一下。