You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rd...@apache.org on 2008/12/17 21:54:49 UTC

svn commit: r727509 - in /james/server/trunk: avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/ core-api/src/main/java/org/apache/james/api/ core-api/src/main/java/org/apache/james/api/kernel/ spoolmanager-function...

Author: rdonkin
Date: Wed Dec 17 12:54:48 2008
New Revision: 727509

URL: http://svn.apache.org/viewvc?rev=727509&view=rev
Log:
Basic resource injection for spring. No long term commitment for support but I like the idea...

Added:
    james/server/trunk/core-api/src/main/java/org/apache/james/api/
    james/server/trunk/core-api/src/main/java/org/apache/james/api/kernel/   (props changed)
      - copied from r727485, james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/api/kernel/
Removed:
    james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/api/
Modified:
    james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java
    james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java

Modified: james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java?rev=727509&r1=727508&r2=727509&view=diff
==============================================================================
--- james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java (original)
+++ james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java Wed Dec 17 12:54:48 2008
@@ -34,6 +34,15 @@
     private Collection excludeBeans;
     private BeanFactory beanFactory;
 
+    
+    /**
+     * Gets the bean factory
+     * @return the beanFactory not null
+     */
+    public final BeanFactory getBeanFactory() {
+        return beanFactory;
+    }
+
     public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
         this.beanFactory = beanFactory;
     }

Modified: james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
URL: http://svn.apache.org/viewvc/james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java?rev=727509&r1=727508&r2=727509&view=diff
==============================================================================
--- james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java (original)
+++ james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java Wed Dec 17 12:54:48 2008
@@ -18,12 +18,15 @@
  ****************************************************************/
 package org.apache.james.container.spring.lifecycle;
 
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
 import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 
 import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.james.api.kernel.ServiceLocator;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.core.Ordered;
@@ -31,16 +34,43 @@
 /**
  * calls initialize() for all avalon components
  */
-public class InitializationPropagator extends AbstractPropagator implements BeanPostProcessor, Ordered {
+public class InitializationPropagator extends AbstractPropagator implements BeanPostProcessor, Ordered, ServiceLocator {
 
     protected Class getLifecycleInterface() {
         return Initializable.class;
     }
 
     protected void invokeLifecycleWorker(String beanName, Object bean, BeanDefinition beanDefinition) {
+        // TODO: share reflection code
+        Method[] methods = bean.getClass().getMethods();
+        for (Method method : methods) {
+            Resource resourceAnnotation = method.getAnnotation(Resource.class);
+            if (resourceAnnotation != null) {
+                final String name = resourceAnnotation.name();
+                final Object service;
+                if ("org.apache.james.ServiceLocator".equals(name)) {
+                    service = this;
+                } else {
+                    service = get(name);
+                }
+                
+                if (bean == null) {
+               } else {
+                    try {
+                        Object[] args = {service};
+                        method.invoke(bean, args);
+                    } catch (IllegalAccessException e) {
+                        throw new RuntimeException("Injection failed", e);
+                    } catch (IllegalArgumentException e) {
+                        throw new RuntimeException("Injection failed", e);
+                    } catch (InvocationTargetException e) {
+                        throw new RuntimeException("Injection failed", e);
+                    }
+                }
+            }
+        }
         try {
-            ContainerUtil.initialize(bean);
-            Method[] methods = bean.getClass().getMethods();
+            ContainerUtil.initialize(bean);;
             for (Method method : methods) {
                 PostConstruct postConstructAnnotation = method.getAnnotation(PostConstruct.class);
                 if (postConstructAnnotation != null) {
@@ -57,4 +87,8 @@
         return 4;
     }
 
+    public Object get(String name) {
+        return getBeanFactory().getBean(name);
+    }
+
 }

Propchange: james/server/trunk/core-api/src/main/java/org/apache/james/api/kernel/
------------------------------------------------------------------------------
    svn:mergeinfo = 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org