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: [email protected]
For additional commands, e-mail: [email protected]