10.2. 組み込みキャッシュのインジェクト
組み込みキャッシュをインジェクトするために CDI Bean を設定します。
手順
キャッシュ修飾子アノテーションを作成します。
... import javax.inject.Qualifier; @Qualifier @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface GreetingCache {1 }- 1
@GreetingCache修飾子を作成します。
キャッシュ設定を定義するプロデューサーメソッドを追加します。
... import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.cdi.ConfigureCache; import javax.enterprise.inject.Produces; public class Config { @ConfigureCache("mygreetingcache")1 @GreetingCache2 @Produces public Configuration greetingCacheConfiguration() { return new ConfigurationBuilder() .memory() .size(1000) .build(); } }必要に応じて、クラスター化されたキャッシュマネージャーを作成するプロデューサーメソッドを追加します。
... package org.infinispan.configuration.global.GlobalConfigurationBuilder; public class Config { @GreetingCache1 @Produces @ApplicationScoped2 public EmbeddedCacheManager defaultClusteredCacheManager() {3 return new DefaultCacheManager( new GlobalConfigurationBuilder().transport().defaultTransport().build(); } }注記キャッシュマネージャーは、ヘビーウェイトオブジェクトです。アプリケーションで複数のキャッシュマネージャーを実行すると、パフォーマンスが低下する可能性があります。複数のキャッシュを挿入する場合は、各キャッシュの修飾子をキャッシュマネージャープロデューサーメソッドに追加するか、修飾子を追加しないでください。
@GreetingCache修飾子をキャッシュインジェクションポイントに追加します。... import javax.inject.Inject; public class GreetingService { @Inject @GreetingCache private Cache<String, String> cache; public String greet(String user) { String cachedValue = cache.get(user); if (cachedValue == null) { cachedValue = "Hello " + user; cache.put(user, cachedValue); } return cachedValue; } }