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.RedisClient; import com.lambdaworks.redis.RedisURI; import com.lambdaworks.redis.resource.ClientResources; /** * Factory Bean for {@link RedisClient} instances. Requires a {@link RedisURI} and allows to reuse * {@link com.lambdaworks.redis.resource.ClientResources}. URI Formats: * {@code * redis-sentinel://host[:port][,host2[:port2]][/databaseNumber]#sentinelMasterId * } * * {@code * redis://host[:port][/databaseNumber] * } * * @see RedisURI * @author Mark Paluch * @since 3.0 */ class RedisClientCdiBean extends AbstractCdiBean<RedisClient> { RedisClientCdiBean(Bean<RedisURI> redisURIBean, Bean<ClientResources> clientResourcesBean, BeanManager beanManager, Set<Annotation> qualifiers, String name) { super(redisURIBean, clientResourcesBean, beanManager, qualifiers, name); } @Override public Class<?> getBeanClass() { return RedisClient.class; } @Override public RedisClient create(CreationalContext<RedisClient> 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 RedisClient.create(clientResources, redisURI); } return RedisClient.create(redisURI); } @Override public void destroy(RedisClient instance, CreationalContext<RedisClient> creationalContext) { instance.shutdown(); } }