You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by al...@apache.org on 2016/06/08 21:35:06 UTC
svn commit: r1747457 - in /aries/trunk/blueprint/blueprint-maven-plugin/src:
main/java/org/apache/aries/blueprint/plugin/
main/java/org/apache/aries/blueprint/plugin/model/
test/java/org/apache/aries/blueprint/plugin/
test/java/org/apache/aries/bluepri...
Author: alien11689
Date: Wed Jun 8 21:35:06 2016
New Revision: 1747457
URL: http://svn.apache.org/viewvc?rev=1747457&view=rev
Log:
[ARIES-1568] Support @DependsOn annotation
Modified:
aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
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/ProducedBean.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean5.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean6.java
aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryNamedBean.java
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/Generator.java Wed Jun 8 21:35:06 2016
@@ -156,6 +156,9 @@ public class Generator implements Proper
if (bean.activation != null) {
writer.writeAttribute("activation", bean.activation.toString());
}
+ if (bean.dependsOn != null) {
+ writer.writeAttribute("depends-on", bean.dependsOn);
+ }
if (bean instanceof ProducedBean) {
writeFactory((ProducedBean) bean);
}
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=1747457&r1=1747456&r2=1747457&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 Wed Jun 8 21:35:06 2016
@@ -20,9 +20,11 @@ package org.apache.aries.blueprint.plugi
import org.apache.aries.blueprint.plugin.Activation;
import org.apache.aries.blueprint.plugin.model.service.ServiceProvider;
+import org.apache.commons.lang.StringUtils;
import org.ops4j.pax.cdi.api.OsgiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@@ -56,12 +58,15 @@ public class Bean extends BeanRef {
public boolean isPrototype;
public List<ServiceProvider> serviceProviders = new ArrayList<>();
public Activation activation;
+ public String dependsOn;
public Bean(Class<?> clazz) {
super(clazz, BeanRef.getBeanName(clazz));
Introspector introspector = new Introspector(clazz);
activation = getActivation(clazz);
+ dependsOn = getDependsOn(clazz);
+
initMethod = findMethodAnnotatedWith(introspector, PostConstruct.class);
destroyMethod = findMethodAnnotatedWith(introspector, PreDestroy.class);
@@ -75,6 +80,15 @@ public class Bean extends BeanRef {
interpretServiceProvider();
}
+ protected String getDependsOn(AnnotatedElement annotatedElement) {
+ DependsOn annotation = annotatedElement.getAnnotation(DependsOn.class);
+ if (annotation == null || annotation.value().length == 0) {
+ return null;
+ }
+ String[] value = annotation.value();
+ return StringUtils.join(value, " ");
+ }
+
protected Activation getActivation(AnnotatedElement annotatedElement) {
Lazy lazy = annotatedElement.getAnnotation(Lazy.class);
if (lazy == null) {
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/ProducedBean.java Wed Jun 8 21:35:06 2016
@@ -29,20 +29,19 @@ public class ProducedBean extends Bean {
private Method producingMethod;
public ProducedBean(Class<?> clazz, BeanRef factoryBean, Method factoryMethod) {
- super(clazz);
- this.factoryBean = factoryBean;
- this.factoryMethod = factoryMethod.getName();
- this.producingMethod = factoryMethod;
- overrideActivationIfNeeded(factoryMethod);
+ this(clazz, null, factoryBean,factoryMethod);
}
public ProducedBean(Class<?> clazz, String id, BeanRef factoryBean, Method factoryMethod) {
super(clazz);
- this.id = id;
+ if(id != null) {
+ this.id = id;
+ }
this.factoryBean = factoryBean;
this.factoryMethod = factoryMethod.getName();
this.producingMethod = factoryMethod;
overrideActivationIfNeeded(factoryMethod);
+ overrideDependsOnIfNeeded(factoryMethod);
}
private void overrideActivationIfNeeded(Method factoryMethod) {
@@ -52,6 +51,13 @@ public class ProducedBean extends Bean {
}
}
+ private void overrideDependsOnIfNeeded(Method factoryMethod) {
+ String dependsOn = getDependsOn(factoryMethod);
+ if (dependsOn != null) {
+ this.dependsOn = dependsOn;
+ }
+ }
+
public void setSingleton() {
this.isPrototype = false;
}
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java Wed Jun 8 21:35:06 2016
@@ -325,6 +325,48 @@ public class GeneratorTest {
assertXpathEquals(bean, "@activation", "eager");
}
+ @Test
+ public void testBeanWithoutDependsOnHasNotDependsOnAttribute() throws Exception {
+ Node bean = getBeanById("beanWithSetters");
+
+ assertXpathDoesNotExist(bean, "@depends-on");
+ }
+
+ @Test
+ public void testBeanWithEmptyDependsOnHasNotDependsOnAttribute() throws Exception {
+ Node bean = getBeanById("myBean6");
+
+ assertXpathDoesNotExist(bean, "@depends-on");
+ }
+
+ @Test
+ public void testBeanWithOneIdInDependsOnHasDependsOnAttribute() throws Exception {
+ Node bean = getBeanById("myBean5");
+
+ assertXpathEquals(bean, "@depends-on", "myBean6");
+ }
+
+ @Test
+ public void testBeanWithTwoIdInDependsOnHasDependsOnAttribute() throws Exception {
+ Node bean = getBeanById("myBean4");
+
+ assertXpathEquals(bean, "@depends-on", "myBean5 myBean6");
+ }
+
+ @Test
+ public void testProducedBeanMetohodWithoutDependsOnHasNotDependsOnAttribute() throws Exception {
+ Node bean = getBeanById("produced1");
+
+ assertXpathDoesNotExist(bean, "@depends-on");
+ }
+
+ @Test
+ public void testProducedBeanMethodWithDependsOnHasDependsOnAttribute() throws Exception {
+ Node bean = getBeanById("produced2");
+
+ assertXpathEquals(bean, "@depends-on", "produced1");
+ }
+
private void assertXpathDoesNotExist(Node node, String xpathExpression) throws XPathExpressionException {
assertXpathEquals(node, "count(" + xpathExpression + ")", "0");
}
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java Wed Jun 8 21:35:06 2016
@@ -18,14 +18,16 @@
*/
package org.apache.aries.blueprint.plugin.test;
-import javax.inject.Inject;
-
import org.osgi.framework.BundleContext;
+import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
+import javax.inject.Inject;
+
@Component
+@DependsOn({"myBean5", "myBean6"})
public class MyBean4 {
@Inject
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean5.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean5.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean5.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean5.java Wed Jun 8 21:35:06 2016
@@ -21,12 +21,14 @@ package org.apache.aries.blueprint.plugi
import org.apache.aries.blueprint.plugin.AnnotatedService;
import org.ops4j.pax.cdi.api.OsgiService;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.DependsOn;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@Singleton
+@DependsOn("myBean6")
public class MyBean5 {
ServiceA serviceA1;
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean6.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean6.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean6.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean6.java Wed Jun 8 21:35:06 2016
@@ -18,10 +18,13 @@
*/
package org.apache.aries.blueprint.plugin.test;
+import org.springframework.context.annotation.DependsOn;
+
import javax.inject.Named;
import javax.inject.Singleton;
@Singleton
+@DependsOn
public class MyBean6 {
private final ServiceA serviceA1;
Modified: aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryNamedBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryNamedBean.java?rev=1747457&r1=1747456&r2=1747457&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryNamedBean.java (original)
+++ aries/trunk/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyFactoryNamedBean.java Wed Jun 8 21:35:06 2016
@@ -18,6 +18,7 @@
*/
package org.apache.aries.blueprint.plugin.test;
+import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Lazy;
import javax.enterprise.inject.Produces;
@@ -36,6 +37,7 @@ public class MyFactoryNamedBean {
@Produces
@Named("produced2")
@Singleton
+ @DependsOn("produced1")
public MyProduced createBean2() {
return new MyProduced("My message");
}