Skip to content

Commit

Permalink
Bugfix: Support for qualified clients in case there are unqualified i…
Browse files Browse the repository at this point in the history
…nstances
  • Loading branch information
mp911de committed Aug 11, 2014
1 parent ea5b9b2 commit 5b49c84
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@ abstract class AbstractCdiBean<T> implements Bean<T> {
protected final BeanManager beanManager;
protected final Set<Annotation> qualifiers;
protected final Bean<RedisURI> redisURIBean;
protected final String name;

public AbstractCdiBean(Bean<RedisURI> redisURIBean, BeanManager beanManager, Set<Annotation> qualifiers) {
public AbstractCdiBean(Bean<RedisURI> redisURIBean, BeanManager beanManager, Set<Annotation> qualifiers, String name) {
this.redisURIBean = redisURIBean;
this.beanManager = beanManager;
this.qualifiers = qualifiers;
this.name = name;
}

@Override
Expand All @@ -40,6 +42,11 @@ public Set<Annotation> getQualifiers() {
return qualifiers;
}

@Override
public String getName() {
return name;
}

@Override
public Class<? extends Annotation> getScope() {
return ApplicationScoped.class;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -63,20 +69,40 @@ <T> void processBean(@Observes ProcessBean<T> processBean) {
*/
void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager) {

int counter = 0;
for (Entry<Set<Annotation>, Bean<RedisURI>> entry : redisUris.entrySet()) {

Bean<RedisURI> redisUri = entry.getValue();
Set<Annotation> 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<Annotation> qualifiers, Class<Default> defaultClass) {
Optional<Annotation> result = Iterables.tryFind(qualifiers, new Predicate<Annotation>() {
@Override
public boolean apply(Annotation input) {
return input instanceof Default;
}
});
return result.isPresent();
}

private void register(AfterBeanDiscovery afterBeanDiscovery, Set<Annotation> qualifiers, Bean<?> bean) {
LOGGER.info(String.format("Registering bean '%s' with qualifiers %s.", bean.getBeanClass().getName(), qualifiers));
afterBeanDiscovery.addBean(bean);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,8 @@
*/
class RedisClientCdiBean extends AbstractCdiBean<RedisClient> {

public RedisClientCdiBean(BeanManager beanManager, Set<Annotation> qualifiers, Bean<RedisURI> redisURIBean) {
super(redisURIBean, beanManager, qualifiers);
}

@Override
public String getName() {
return "RedisClient";
RedisClientCdiBean(BeanManager beanManager, Set<Annotation> qualifiers, Bean<RedisURI> redisURIBean, String name) {
super(redisURIBean, beanManager, qualifiers, name);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,9 @@
*/
class RedisClusterClientCdiBean extends AbstractCdiBean<RedisClusterClient> {

public RedisClusterClientCdiBean(BeanManager beanManager, Set<Annotation> qualifiers, Bean<RedisURI> redisURIBean) {
super(redisURIBean, beanManager, qualifiers);
}

@Override
public String getName() {
return "RedisClusterClient";
public RedisClusterClientCdiBean(BeanManager beanManager, Set<Annotation> qualifiers, Bean<RedisURI> redisURIBean,
String name) {
super(redisURIBean, beanManager, qualifiers, name);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,8 @@ public class InjectedClient {

@Inject
public RedisClusterClient redisClusterClient;

@Inject
@PersonDB
public RedisClient qualifiedRedisClient;
}
16 changes: 16 additions & 0 deletions lettuce/src/test/java/com/lambdaworks/redis/support/PersonDB.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.lambdaworks.redis.support;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.inject.Qualifier;

/**
* @author <a href="mailto:mpaluch@paluch.biz">Mark Paluch</a>
* @since 11.08.14 16:43
*/
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface PersonDB {

}

0 comments on commit 5b49c84

Please sign in to comment.