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