私はさまざまな小片を見てきましたが、これにアプローチするのが間違っているか、Guice の理解が少し不足しています。このcache4guice Infinispan モジュールを変更/拡張して 、JBoss 組み込みモジュールにアクセスできるようにし、最終的に選択したキャッシュ コンテナー内のキャッシュに名前を付けようとしています。
したがって、次のようにstandalone.xmlがあります。
<cache-container name="InfinispanCacheModule" default-cache="cache1" jndi-name="java:jboss/infinispan/container/mycachecontainer>
<local-cache name="cache1">
<eviction strategy="LRU" max-entries="1000"/>
<expiration max-idle="50000"/>
<file-store preload="true" passivation="true" purge="false"/>
</local-cache>
<local-cache name="cache2">
<eviction strategy="LRU" max-entries="500"/>
<expiration max-idle="20000"/>
<file-store preload="true" passivation="false" purge="false"/>
</local-cache>
@Cached アノテーションを変更して、オプションで cachedName 引数を含めることができるようにしました。これをデフォルトのキャッシュに使用できるという考え:
@Cached
public someMethod(String someArg) {...}
これは、cache2以降にアクセスするためのものです...
@Cached(cacheName="cache2")
public someOtherMethod(String someArg) {...}
私がアクセスできると思われる唯一の例は、このページのような jndi リソースを使用する方法です - ttp://my.safaribooksonline.com/book/web-development/ 9781590599976/guice-recipes/integrating_jndi
これにより、次のようなことを試すようになります。
public class InfinispanCacheModule extends CacheModule {
...
@Override
protected void configure() {
// bind naming context to the default InitialContext
bind(Context.class).to(InitialContext.class);
bind(CacheContainer.class).toProvider(JndiIntegration.fromJndi(CacheContainer.class, "java:jboss/infinispan/container/mycachecontainer"));
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Cached.class), new CacheInterceptor(this));
}
さらに、ここや他の場所の投稿から、@ Providesメソッドを使用したいと思うかもしれません - 次の行に沿って: https://stackoverflow.com/a/8999548/880884
ここで詳細に入ります。元の InfinispanModule を見ると、モジュールの作成時に CacheManager を渡すか、何らかの方法でモジュール内に CacheManager を作成することが考えられます。
public class MyGuiceFactory {
private static final Injector inj = Guice.createInjector(
new SomeGuiceModule(),
new InfinispanCacheModule(---- what goes here? -----)
);
public static Injector getInjector() {
return inj;
}
}