You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2012/08/20 19:40:18 UTC
svn commit: r1375133 - in
/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src:
main/java/org/apache/rave/inject/ test/java/org/apache/rave/inject/
test/resources/
Author: mfranklin
Date: Mon Aug 20 17:40:17 2012
New Revision: 1375133
URL: http://svn.apache.org/viewvc?rev=1375133&view=rev
Log:
Fixed RAVE-762
Modified:
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml
Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java?rev=1375133&r1=1375132&r2=1375133&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/inject/SpringContextProvider.java Mon Aug 20 17:40:17 2012
@@ -20,8 +20,13 @@
package org.apache.rave.inject;
import com.google.inject.Provider;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
+import java.util.Map;
+
/**
* Provides beans for injection by Guice that are managed by Spring
* @param <T> the type of the bean to pull
@@ -38,6 +43,22 @@ public class SpringContextProvider<T> im
@Override
public T get() {
- return context.getBean(clazz);
+ Map<String, T> beans = context.getBeansOfType(clazz);
+ return beans.size() == 1 ? getSingleBean(beans) : getPrimaryBean(beans);
+ }
+
+ private T getPrimaryBean(Map<String, T> beans) {
+ AutowireCapableBeanFactory factory = context.getAutowireCapableBeanFactory();
+ for(Map.Entry<String, T> bean : beans.entrySet()) {
+ if(factory instanceof ConfigurableListableBeanFactory &&
+ ((ConfigurableListableBeanFactory) factory).getBeanDefinition(bean.getKey()).isPrimary()) {
+ return bean.getValue();
+ }
+ }
+ throw new NoSuchBeanDefinitionException(clazz, "Matching bean count for class: " + beans.size());
+ }
+
+ private T getSingleBean(Map<String, T> beans) {
+ return beans.entrySet().iterator().next().getValue();
}
}
Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java?rev=1375133&r1=1375132&r2=1375133&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java Mon Aug 20 17:40:17 2012
@@ -21,8 +21,12 @@ package org.apache.rave.inject;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import com.google.inject.ProvisionException;
import org.apache.log4j.spi.LoggerRepository;
import org.apache.rave.opensocial.service.impl.DefaultPersonService;
+import org.apache.rave.service.LockService;
+import org.apache.rave.service.impl.DefaultLockService;
+import org.apache.shindig.social.opensocial.spi.GroupService;
import org.apache.shindig.social.opensocial.spi.PersonService;
import org.junit.Before;
import org.junit.Test;
@@ -69,6 +73,17 @@ public class SpringBindingModuleTest {
assertThat(string, is(notNullValue()));
}
+ @Test
+ public void bindsPrimaryBean() {
+ LockService lockService = injector.getInstance(LockService.class);
+ assertThat(lockService, is(not(instanceOf(DefaultLockService.class))));
+ }
+
+ @Test(expected = ProvisionException.class)
+ public void exceptionIfNoPrimary() {
+ injector.getInstance(GroupService.class);
+ }
+
@Test(expected = com.google.inject.ConfigurationException.class)
public void doesNotBindOthers() {
ResultSetExtractor personService1 = injector.getInstance(ResultSetExtractor.class);
Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml?rev=1375133&r1=1375132&r2=1375133&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/resources/rave-shindig-test-applicationContext.xml Mon Aug 20 17:40:17 2012
@@ -67,12 +67,24 @@
<constructor-arg value="org.apache.rave.opensocial.repository.OpenSocialPersonRepository"/>
</bean>
+ <bean id="mockLockService" class="org.easymock.EasyMock" factory-method="createNiceMock" primary="true">
+ <constructor-arg value="org.apache.rave.service.LockService"/>
+ </bean>
+
+ <bean id="lockService" class="org.apache.rave.service.impl.DefaultLockService" />
+
+ <bean id="mockGroupService" class="org.easymock.EasyMock" factory-method="createNiceMock">
+ <constructor-arg value="org.apache.shindig.social.opensocial.spi.GroupService"/>
+ </bean>
+
<bean id="nonRaveBean" class="org.apache.log4j.spi.NOPLoggerRepository" />
<bean id="mockSpringBean" class="org.easymock.EasyMock" factory-method="createNiceMock">
<constructor-arg value="org.springframework.jdbc.core.ResultSetExtractor"/>
</bean>
+ <bean id="groupService" class="org.apache.rave.opensocial.service.impl.DefaultGroupService" />
+
<bean id="personService" class="org.apache.rave.opensocial.service.impl.DefaultPersonService">
<constructor-arg name="repository" ref="mockPersonRepo" />
</bean>