package com.lambdaworks.redis.support; import java.lang.annotation.Annotation; import java.util.Set; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import com.lambdaworks.redis.RedisURI; import com.lambdaworks.redis.cluster.RedisClusterClient; import com.lambdaworks.redis.resource.ClientResources; /** * Factory Bean for {@link RedisClusterClient} instances. Requires a {@link RedisURI} and allows to reuse * {@link com.lambdaworks.redis.resource.ClientResources}. URI Format: {@code * redis://[password@]host[:port] * } * * @see RedisURI * @author Mark Paluch * @since 3.0 */ class RedisClusterClientCdiBean extends AbstractCdiBean<RedisClusterClient> { public RedisClusterClientCdiBean(Bean<RedisURI> redisURIBean, Bean<ClientResources> clientResourcesBean, BeanManager beanManager, Set<Annotation> qualifiers, String name) { super(redisURIBean, clientResourcesBean, beanManager, qualifiers, name); } @Override public Class<?> getBeanClass() { return RedisClusterClient.class; } @Override public RedisClusterClient create(CreationalContext<RedisClusterClient> creationalContext) { CreationalContext<RedisURI> uriCreationalContext = beanManager.createCreationalContext(redisURIBean); RedisURI redisURI = (RedisURI) beanManager.getReference(redisURIBean, RedisURI.class, uriCreationalContext); if (clientResourcesBean != null) { ClientResources clientResources = (ClientResources) beanManager.getReference(clientResourcesBean, ClientResources.class, uriCreationalContext); return RedisClusterClient.create(clientResources, redisURI); } return RedisClusterClient.create(redisURI); } @Override public void destroy(RedisClusterClient instance, CreationalContext<RedisClusterClient> creationalContext) { instance.shutdown(); } }