我正在尝试将来自 Infinispan 的 JCache 集成到我现有的 EJB 项目中。
我已将 Infinispan 5.0.1 CDI 和 Core 包添加到 Maven pom。在 beans.xml 中添加了 Infinispan 拦截器,并且能够使用 CacheResult 注释。
我正在 Glassfish 3.1.1 中部署该应用程序。我检查了 Weld jar 版本,即 Module : org.jboss.weld.osgi-bundle:1.1.1.Final
在运行时,CacheResult 方法拦截器不会缓存方法结果,它总是被调用。
我的代码看起来像这样,
public void cacheTest() {
Thread.currentThread().setContextClassLoader(
this.getClass().getClassLoader());
EmbeddedCacheManager manager = createCacheConfig();
Set<String> cacheList = manager.getCacheNames(); // new
// DefaultCacheManager().getCacheNames();
for (String cache : cacheList) {
System.out.println("Cache name " + cache);
}
defaultCache = manager.getCache("test-cache");
defaultCache.put("aa", "AA");
String user = "User";
greet(user);
Set<String> keys = defaultCache.keySet();
for (String key : keys) {
System.out.println("Key is -" + key + "Value is -"
+ defaultCache.get(key));
}
}
@CacheResult(cacheName = "test-cache")
public String greet(@CacheKeyParam String user) {
user += "Hello";
return user;
}
public EmbeddedCacheManager createCacheConfig() {
EmbeddedCacheManager manager = new DefaultCacheManager();
Configuration conf = new Configuration();
conf.fluent().eviction().strategy(EvictionStrategy.FIFO).maxEntries(10)
.expiration().maxIdle(1200000L).build();
conf.fluent().clustering().sync();
manager.start();
manager.defineConfiguration("test-cache", conf);
return manager;
}
greet() 方法被调用,但它永远不会将方法结果添加到测试缓存中。我觉得我错过了一些配置还是......我不知道。请帮助我。
当我注入类时,它们不会被构造并且它们是空的。代码是这样的,
@Inject
private static org.infinispan.Cache<String, String> defaultCache;
@Inject
private static EmbeddedCacheManager defaultCacheManager;
这些会在没有任何错误的情况下执行,但不会被初始化。
我不知道......但我可以很容易地在这个类中注入其他 EJB。顺便说一句,我正在尝试在其中一个 EJB 中添加 Jcache 功能。
我会很感激你的帮助...
谢谢...拉吉小号