In the previous post, I described a way to intercept in .NET cache invalidate events generated in Java. This post presents the way to configure, use and write your own code that handles the Java generated invalidate events.
The entire code presented here is available on this blog's GIT repository. Link here.
Copy file cache-notifier.jar to your website's /bin/lib folder.
Create a class that implements Com.MihaiConsulting.Cache.ICacheInvalidator interface:
This class must be set as the 'Invalidator' to call when a message comes from the CacheNotifier on the Java side. The simplest way to achieve this is to use some Dependency Injection framework and set this instance as the Invalidator for the .NET proxy Com.MihaiConsulting.Cache.CacheNotifier. In the absence of such a DI framework, the simplest solution is to set 'this' as the Invalidator at the moment of constructing the instance:
At this point, the method Invalidate of class MyCacheInvalidator will be called when a message is sent to the DD4TDependencyTracker in Java for method processRemove().
The entire code presented here is available on this blog's GIT repository. Link here.
Java Stuff
Modify your cd_storage_conf.xml (located in your .net website /bin/conf folder), and reference class com.tridion.cache.DD4TDependencyTracker as the Feature inside node ObjectCache:<Configuration Version="7.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schemas/cd_storage_conf.xsd"> <Global> <ObjectCache Enabled="true"> <Policy Type="LRU" Class="com.tridion.cache.LRUPolicy"> <Param Name="MemSize" Value="512mb"/> </Policy> <Features> <!-- <Feature Type="DependencyTracker" Class="com.tridion.cache.DependencyTracker"/> --> <Feature Type="DependencyTracker" Class="com.tridion.cache.DD4TDependencyTracker"/> </Features> ...
Copy file cache-notifier.jar to your website's /bin/lib folder.
.NET Stuff
In your .NET project, copy DLL Com.MihaiConsulting.CacheNotifier.dll and reference it from your project.Create a class that implements Com.MihaiConsulting.Cache.ICacheInvalidator interface:
using Com.MihaiConsulting.Cache; namespace MyCacheInvalidator.Example { public class MyCacheInvalidator : ICacheInvalidator { public MyCacheInvalidator() { CacheNotifier.Instance.Invalidator = this; } public void Invalidate(string key) { //perform your own cache removal here //cache.Remove(key); } } }
This class must be set as the 'Invalidator' to call when a message comes from the CacheNotifier on the Java side. The simplest way to achieve this is to use some Dependency Injection framework and set this instance as the Invalidator for the .NET proxy Com.MihaiConsulting.Cache.CacheNotifier. In the absence of such a DI framework, the simplest solution is to set 'this' as the Invalidator at the moment of constructing the instance:
CacheNotifier.Instance.Invalidator = this;
Comments