diff --git a/lettuce/src/main/java/com/lambdaworks/redis/support/AbstractCdiBean.java b/lettuce/src/main/java/com/lambdaworks/redis/support/AbstractCdiBean.java index 0991de41c6..1cb7c0805f 100644 --- a/lettuce/src/main/java/com/lambdaworks/redis/support/AbstractCdiBean.java +++ b/lettuce/src/main/java/com/lambdaworks/redis/support/AbstractCdiBean.java @@ -23,11 +23,13 @@ abstract class AbstractCdiBean implements Bean { protected final BeanManager beanManager; protected final Set qualifiers; protected final Bean redisURIBean; + protected final String name; - public AbstractCdiBean(Bean redisURIBean, BeanManager beanManager, Set qualifiers) { + public AbstractCdiBean(Bean redisURIBean, BeanManager beanManager, Set qualifiers, String name) { this.redisURIBean = redisURIBean; this.beanManager = beanManager; this.qualifiers = qualifiers; + this.name = name; } @Override @@ -40,6 +42,11 @@ public Set getQualifiers() { return qualifiers; } + @Override + public String getName() { + return name; + } + @Override public Class getScope() { return ApplicationScoped.class; diff --git a/lettuce/src/main/java/com/lambdaworks/redis/support/LettuceCdiExtension.java b/lettuce/src/main/java/com/lambdaworks/redis/support/LettuceCdiExtension.java index 9f2f67788a..80ed8bd90e 100644 --- a/lettuce/src/main/java/com/lambdaworks/redis/support/LettuceCdiExtension.java +++ b/lettuce/src/main/java/com/lambdaworks/redis/support/LettuceCdiExtension.java @@ -9,9 +9,15 @@ import java.util.Set; import javax.enterprise.event.Observes; +import javax.enterprise.inject.Default; import javax.enterprise.inject.spi.*; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.lambdaworks.redis.RedisClient; import com.lambdaworks.redis.RedisURI; +import com.lambdaworks.redis.cluster.RedisClusterClient; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; @@ -63,20 +69,40 @@ void processBean(@Observes ProcessBean processBean) { */ void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager) { + int counter = 0; for (Entry, Bean> entry : redisUris.entrySet()) { Bean redisUri = entry.getValue(); Set qualifiers = entry.getKey(); - RedisClientCdiBean clientBean = new RedisClientCdiBean(beanManager, qualifiers, redisUri); + String clientBeanName = RedisClient.class.getSimpleName(); + String clusterClientBeanName = RedisClusterClient.class.getSimpleName(); + if (!contains(qualifiers, Default.class)) { + clientBeanName += counter; + clusterClientBeanName += counter; + counter++; + } + + RedisClientCdiBean clientBean = new RedisClientCdiBean(beanManager, qualifiers, redisUri, clientBeanName); register(afterBeanDiscovery, qualifiers, clientBean); - RedisClusterClientCdiBean clusterClientBean = new RedisClusterClientCdiBean(beanManager, qualifiers, redisUri); + RedisClusterClientCdiBean clusterClientBean = new RedisClusterClientCdiBean(beanManager, qualifiers, redisUri, + clusterClientBeanName); register(afterBeanDiscovery, qualifiers, clusterClientBean); } } + private boolean contains(Set qualifiers, Class defaultClass) { + Optional result = Iterables.tryFind(qualifiers, new Predicate() { + @Override + public boolean apply(Annotation input) { + return input instanceof Default; + } + }); + return result.isPresent(); + } + private void register(AfterBeanDiscovery afterBeanDiscovery, Set qualifiers, Bean bean) { LOGGER.info(String.format("Registering bean '%s' with qualifiers %s.", bean.getBeanClass().getName(), qualifiers)); afterBeanDiscovery.addBean(bean); diff --git a/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClientCdiBean.java b/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClientCdiBean.java index e28e9ef44f..5503accd05 100644 --- a/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClientCdiBean.java +++ b/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClientCdiBean.java @@ -16,13 +16,8 @@ */ class RedisClientCdiBean extends AbstractCdiBean { - public RedisClientCdiBean(BeanManager beanManager, Set qualifiers, Bean redisURIBean) { - super(redisURIBean, beanManager, qualifiers); - } - - @Override - public String getName() { - return "RedisClient"; + RedisClientCdiBean(BeanManager beanManager, Set qualifiers, Bean redisURIBean, String name) { + super(redisURIBean, beanManager, qualifiers, name); } @Override diff --git a/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClusterClientCdiBean.java b/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClusterClientCdiBean.java index 70d192b27b..ac9db8c63b 100644 --- a/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClusterClientCdiBean.java +++ b/lettuce/src/main/java/com/lambdaworks/redis/support/RedisClusterClientCdiBean.java @@ -16,13 +16,9 @@ */ class RedisClusterClientCdiBean extends AbstractCdiBean { - public RedisClusterClientCdiBean(BeanManager beanManager, Set qualifiers, Bean redisURIBean) { - super(redisURIBean, beanManager, qualifiers); - } - - @Override - public String getName() { - return "RedisClusterClient"; + public RedisClusterClientCdiBean(BeanManager beanManager, Set qualifiers, Bean redisURIBean, + String name) { + super(redisURIBean, beanManager, qualifiers, name); } @Override diff --git a/lettuce/src/test/java/com/lambdaworks/redis/support/CdiTest.java b/lettuce/src/test/java/com/lambdaworks/redis/support/CdiTest.java index f039473119..a604699414 100644 --- a/lettuce/src/test/java/com/lambdaworks/redis/support/CdiTest.java +++ b/lettuce/src/test/java/com/lambdaworks/redis/support/CdiTest.java @@ -36,6 +36,12 @@ public RedisURI redisURI() { return RedisURI.Builder.redis(AbstractCommandTest.host, AbstractCommandTest.port).build(); } + @PersonDB + @Produces + public RedisURI redisURIQualified() { + return RedisURI.Builder.redis(AbstractCommandTest.host, AbstractCommandTest.port + 1).build(); + } + @Test public void testInjection() { diff --git a/lettuce/src/test/java/com/lambdaworks/redis/support/InjectedClient.java b/lettuce/src/test/java/com/lambdaworks/redis/support/InjectedClient.java index ea0f2d9073..c33fbcaf01 100644 --- a/lettuce/src/test/java/com/lambdaworks/redis/support/InjectedClient.java +++ b/lettuce/src/test/java/com/lambdaworks/redis/support/InjectedClient.java @@ -16,4 +16,8 @@ public class InjectedClient { @Inject public RedisClusterClient redisClusterClient; + + @Inject + @PersonDB + public RedisClient qualifiedRedisClient; } diff --git a/lettuce/src/test/java/com/lambdaworks/redis/support/PersonDB.java b/lettuce/src/test/java/com/lambdaworks/redis/support/PersonDB.java new file mode 100644 index 0000000000..0c656a38de --- /dev/null +++ b/lettuce/src/test/java/com/lambdaworks/redis/support/PersonDB.java @@ -0,0 +1,16 @@ +package com.lambdaworks.redis.support; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Qualifier; + +/** + * @author Mark Paluch + * @since 11.08.14 16:43 + */ +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +public @interface PersonDB { + +}