Author: cschneider
Date: Thu Jan 15 13:10:56 2015
New Revision: 1652086
URL: http://svn.apache.org/r1652086
Log:
ARIES-1284 applied path with thanks to Andrei
Added:
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java
- copied, changed from r1652028,
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java?rev=1652086&r1=1652085&r2=1652086&view=diff
==============================================================================
---
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
(original)
+++
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Bean.java
Thu Jan 15 13:10:56 2015
@@ -18,6 +18,7 @@
*/
package org.apache.aries.blueprint.plugin.model;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.SortedSet;
@@ -43,11 +44,11 @@ public class Bean implements Comparable<
this.clazz = clazz;
this.id = getBeanName(clazz);
for (Method method : clazz.getDeclaredMethods()) {
- PostConstruct postConstruct =
method.getAnnotation(PostConstruct.class);
+ PostConstruct postConstruct = getEffectiveAnnotation(method,
PostConstruct.class);
if (postConstruct != null) {
this.initMethod = method.getName();
}
- PreDestroy preDestroy = method.getAnnotation(PreDestroy.class);
+ PreDestroy preDestroy = getEffectiveAnnotation(method,
PreDestroy.class);
if (preDestroy != null) {
this.destroyMethod = method.getName();
}
@@ -104,6 +105,46 @@ public class Bean implements Comparable<
private static String getBeanNameFromSimpleName(String name) {
return name.substring(0, 1).toLowerCase() + name.substring(1,
name.length());
}
+
+ private static <T extends Annotation> T getEffectiveAnnotation(Method
method, Class<T> annotationClass) {
+ final Class<?> methodClass = method.getDeclaringClass();
+ final String name = method.getName();
+ final Class<?>[] params = method.getParameterTypes();
+
+ // 1. Current class
+ final T rootAnnotation = method.getAnnotation(annotationClass);
+ if (rootAnnotation != null) {
+ return rootAnnotation;
+ }
+
+ // 2. Superclass
+ final Class<?> superclass = methodClass.getSuperclass();
+ if (superclass != null) {
+ final T annotation = getMethodAnnotation(superclass, name, params,
annotationClass);
+ if (annotation != null)
+ return annotation;
+ }
+
+ // 3. Interfaces
+ for (final Class<?> intfs : methodClass.getInterfaces()) {
+ final T annotation = getMethodAnnotation(intfs, name, params,
annotationClass);
+ if (annotation != null)
+ return annotation;
+ }
+
+ return null;
+ }
+
+ private static <T extends Annotation> T getMethodAnnotation(Class<?>
searchClass, String name, Class<?>[] params,
+ Class<T> annotationClass) {
+ try {
+ Method method = searchClass.getMethod(name, params);
+ return getEffectiveAnnotation(method, annotationClass);
+ } catch (NoSuchMethodException e) {
+ return null;
+ }
+ }
+
public boolean matches(Class<?> destType, String destId) {
boolean assignable = destType.isAssignableFrom(this.clazz);
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java?rev=1652086&r1=1652085&r2=1652086&view=diff
==============================================================================
---
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
(original)
+++
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Context.java
Thu Jan 15 13:10:56 2015
@@ -27,6 +27,7 @@ import java.util.TreeSet;
import javax.inject.Named;
import org.ops4j.pax.cdi.api.OsgiService;
+import org.springframework.beans.factory.annotation.Qualifier;
public class Context implements Matcher {
@@ -67,8 +68,7 @@ public class Context implements Matcher
}
public Bean getMatching(Field field) {
- Named named = field.getAnnotation(Named.class);
- String destId = (named == null) ? null : named.value();
+ String destId = getDestinationId(field);
// TODO Replace loop by lookup
for (Bean bean : beans) {
if (bean.matches(field.getType(), destId)) {
@@ -83,6 +83,18 @@ public class Context implements Matcher
return null;
}
+ private String getDestinationId(Field field) {
+ Named named = field.getAnnotation(Named.class);
+ if (named != null) {
+ return named.value();
+ }
+ Qualifier qualifier = field.getAnnotation(Qualifier.class);
+ if (qualifier != null) {
+ return qualifier.value();
+ }
+ return null;
+ }
+
public SortedSet<Bean> getBeans() {
return beans;
}
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java?rev=1652086&r1=1652085&r2=1652086&view=diff
==============================================================================
---
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
(original)
+++
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java
Thu Jan 15 13:10:56 2015
@@ -24,6 +24,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
public class Property implements Comparable<Property> {
@@ -58,7 +59,14 @@ public class Property implements Compara
*/
private static String getRefName(Field field) {
Named named = field.getAnnotation(Named.class);
- return (named != null) ? named.value() :
Bean.getBeanName(field.getType());
+ if (named != null) {
+ return named.value();
+ }
+ Qualifier qualifier = field.getAnnotation(Qualifier.class);
+ if (qualifier != null) {
+ return qualifier.value();
+ }
+ return Bean.getBeanName(field.getType());
}
private static boolean needsInject(Field field) {
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java?rev=1652086&r1=1652085&r2=1652086&view=diff
==============================================================================
---
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
(original)
+++
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
Thu Jan 15 13:10:56 2015
@@ -18,8 +18,6 @@
*/
package org.apache.aries.blueprint.plugin.test;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
import javax.inject.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceUnit;
@@ -30,7 +28,7 @@ import org.springframework.beans.factory
@Singleton
@Transactional(value=TxType.REQUIRED)
-public class MyBean1 {
+public class MyBean1 extends ParentBean {
@Autowired
ServiceA bean2;
@@ -38,14 +36,10 @@ public class MyBean1 {
@PersistenceUnit(unitName="person")
EntityManager em;
- @PostConstruct
public void init() {
-
}
- @PreDestroy
public void destroy() {
-
}
public void saveData() {
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java?rev=1652086&r1=1652085&r2=1652086&view=diff
==============================================================================
---
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java
(original)
+++
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java
Thu Jan 15 13:10:56 2015
@@ -22,6 +22,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -34,7 +35,7 @@ public class MyBean3 {
ServiceA serviceA1;
@Inject
- @Named("my2")
+ @Qualifier("my2")
ServiceA serviceA2;
@Inject
Copied:
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java
(from r1652028,
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java)
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java?p2=aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java&p1=aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java&r1=1652028&r2=1652086&rev=1652086&view=diff
==============================================================================
---
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java
(original)
+++
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java
Thu Jan 15 13:10:56 2015
@@ -20,35 +20,14 @@ package org.apache.aries.blueprint.plugi
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-import javax.inject.Singleton;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceUnit;
-import javax.transaction.Transactional;
-import javax.transaction.Transactional.TxType;
-import org.springframework.beans.factory.annotation.Autowired;
+public class ParentBean {
-@Singleton
-@Transactional(value=TxType.REQUIRED)
-public class MyBean1 {
-
- @Autowired
- ServiceA bean2;
-
- @PersistenceUnit(unitName="person")
- EntityManager em;
-
@PostConstruct
public void init() {
-
}
@PreDestroy
public void destroy() {
-
- }
-
- public void saveData() {
-
}
}