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 2011/08/15 19:47:19 UTC
svn commit: r1157924 - in /incubator/rave/trunk/rave-shindig/src:
main/java/org/apache/rave/inject/ main/java/org/apache/rave/opensocial/model/
test/java/org/apache/rave/inject/
Author: mfranklin
Date: Mon Aug 15 17:47:19 2011
New Revision: 1157924
URL: http://svn.apache.org/viewvc?rev=1157924&view=rev
Log:
Fixed error when registering the same interface twice with Guice.
Added:
incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringContextProvider.java
Modified:
incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringBindingModule.java
incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java
incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java
Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringBindingModule.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringBindingModule.java?rev=1157924&r1=1157923&r2=1157924&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringBindingModule.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringBindingModule.java Mon Aug 15 17:47:19 2011
@@ -29,6 +29,10 @@ import org.springframework.stereotype.Co
import javax.annotation.PostConstruct;
import java.lang.reflect.Proxy;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import java.util.regex.Pattern;
/**
@@ -41,9 +45,11 @@ public class SpringBindingModule extends
private ApplicationContext applicationContext;
private String basePackage;
+ private Set<Class<?>> mappedClasses;
@Override
protected void configure() {
+ mappedClasses = new HashSet<Class<?>>();
bindFromApplicationContext();
}
@@ -59,12 +65,13 @@ public class SpringBindingModule extends
String fullClassName = Proxy.isProxyClass(bean.getClass()) ? bean.toString() : bean.getClass().getName();
if (fullClassName.matches(basePackage + ".*")) {
for (final Class clazz : bean.getClass().getInterfaces()) {
- bind(clazz).toProvider(new Provider() {
- @Override
- public Object get() {
- return applicationContext.getBean(clazz);
- }
- });
+ //Check to see if we have already bound a provider for this interface. If we have,
+ //then don't attempt to bind it again as the provider will pull from the application context by type
+ //and any multi-bean errors will be handled at injection time
+ if(!mappedClasses.contains(clazz)) {
+ bind(clazz).toProvider(new SpringContextProvider(clazz, applicationContext));
+ mappedClasses.add(clazz);
+ }
}
}
}
@@ -82,4 +89,6 @@ public class SpringBindingModule extends
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
+
+
}
Added: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringContextProvider.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringContextProvider.java?rev=1157924&view=auto
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringContextProvider.java (added)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/inject/SpringContextProvider.java Mon Aug 15 17:47:19 2011
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.rave.inject;
+
+import com.google.inject.Provider;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * Provides beans for injection by Guice that are managed by Spring
+ * @param <T> the type of the bean to pull
+ */
+public class SpringContextProvider<T> implements Provider<T> {
+
+ private final Class<T> clazz;
+ private final ApplicationContext context;
+
+ public SpringContextProvider(Class<T> clazz, ApplicationContext context) {
+ this.clazz = clazz;
+ this.context = context;
+ }
+
+ @Override
+ public T get() {
+ return context.getBean(clazz);
+ }
+}
Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java?rev=1157924&r1=1157923&r2=1157924&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java Mon Aug 15 17:47:19 2011
@@ -20,6 +20,7 @@ package org.apache.rave.opensocial.model
import org.apache.rave.persistence.BasicEntity;
+import javax.annotation.Generated;
import javax.persistence.*;
import java.util.*;
@@ -554,6 +555,7 @@ public class Person implements BasicEnti
}
@Override
+ @Generated("IDE Generated Method")
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (username != null ? username.hashCode() : 0);
@@ -600,6 +602,7 @@ public class Person implements BasicEnti
}
@Override
+ @Generated("IDE Generated Method")
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Modified: incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java?rev=1157924&r1=1157923&r2=1157924&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java (original)
+++ incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/inject/SpringBindingModuleTest.java Mon Aug 15 17:47:19 2011
@@ -21,13 +21,18 @@ package org.apache.rave.inject;
import com.google.inject.Guice;
import com.google.inject.Injector;
+import org.apache.rave.opensocial.model.Organization;
import org.apache.rave.opensocial.service.impl.DefaultPersonService;
+import org.apache.rave.persistence.BasicEntity;
+import org.apache.rave.persistence.jpa.AbstractJpaRepository;
import org.apache.shindig.social.opensocial.spi.PersonService;
+import org.hamcrest.CoreMatchers;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
+import org.springframework.stereotype.Repository;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -67,4 +72,20 @@ public class SpringBindingModuleTest {
LocalEntityManagerFactoryBean factory = injector.getInstance(LocalEntityManagerFactoryBean.class);
assertThat(factory, is(not(nullValue())));
}
+
+ @Test
+ public void multipleRepositories() {
+ TestRepo repo = injector.getInstance(TestRepo.class);
+ assertThat(repo, is(not(nullValue())));
+ }
+
+ public static interface TestRepo extends org.apache.rave.persistence.Repository<BasicEntity> {}
+
+ @Repository
+ public static class JpaTestRepo extends AbstractJpaRepository<BasicEntity> implements TestRepo {
+
+ protected JpaTestRepo() {
+ super(BasicEntity.class);
+ }
+ }
}