Author: berndf
Date: Tue Jul 31 14:09:31 2007
New Revision: 561544
URL: http://svn.apache.org/viewvc?view=rev&rev=561544
Log:
switch from BeanFactoryPostProcessor to BeanPostProcessor. This is for
mimmicking Avalon lifecycle correctly: Do a complete lifecycle for one
bean/component, only then go to the next (instead of calling each lifecycle
method for all beans and then go to the next method, which is wrong)
use property setter injection consequently.
Modified:
james/server/sandbox/spring-integration/src/main/config/beans-base-config.xml
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationPropagator.java
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ContextPropagator.java
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/LoggerPropagator.java
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ServicePropagator.java
Modified:
james/server/sandbox/spring-integration/src/main/config/beans-base-config.xml
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/config/beans-base-config.xml?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/config/beans-base-config.xml
(original)
+++
james/server/sandbox/spring-integration/src/main/config/beans-base-config.xml
Tue Jul 31 14:09:31 2007
@@ -70,13 +70,21 @@
<!--
beans managing bootstrapping and component lifecycle
-->
- <bean id="loggerPropagator"
class="org.apache.james.container.spring.lifecycle.LoggerPropagator" />
+ <bean id="loggerPropagator"
class="org.apache.james.container.spring.lifecycle.LoggerPropagator" >
+ <property name="loggingBridge" ref="logger"/>
+ </bean>
- <bean id="contextPropagator"
class="org.apache.james.container.spring.lifecycle.ContextPropagator" />
+ <bean id="contextPropagator"
class="org.apache.james.container.spring.lifecycle.ContextPropagator" >
+ <property name="context" ref="avalonContext"/>
+ </bean>
- <bean id="servicePropagator"
class="org.apache.james.container.spring.lifecycle.ServicePropagator" />
+ <bean id="servicePropagator"
class="org.apache.james.container.spring.lifecycle.ServicePropagator" >
+ <property name="serviceManagerFactory" ref="serviceManager"/>
+ </bean>
- <bean id="configurationManager"
class="org.apache.james.container.spring.lifecycle.ConfigurationPropagator" />
+ <bean id="configurationManager"
class="org.apache.james.container.spring.lifecycle.ConfigurationPropagator" >
+ <property name="configurationProvider" ref="configurationProvider"/>
+ </bean>
<bean id="initializationManager"
class="org.apache.james.container.spring.lifecycle.InitializationPropagator" />
Modified:
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java
(original)
+++
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/AbstractPropagator.java
Tue Jul 31 14:09:31 2007
@@ -18,34 +18,46 @@
****************************************************************/
package org.apache.james.container.spring.lifecycle;
-import java.util.Collection;
-
-import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.config.BeanDefinition;
+import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+
+import java.util.Collection;
/**
* visitor. iterating over all spring beans having some specific
implementation
*/
-public abstract class AbstractPropagator {
+public abstract class AbstractPropagator implements BeanFactoryAware {
private Collection excludeBeans;
+ private BeanFactory beanFactory;
- public void postProcessBeanFactory(ConfigurableListableBeanFactory
configurableListableBeanFactory) throws BeansException {
+ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
+ this.beanFactory = beanFactory;
+ }
+
+ public Object postProcessBeforeInitialization(Object bean, String
beanName) throws BeansException {
+ return bean;
+ }
- Class lifecycleInterface = getLifecycleInterface();
- String[] beanNames =
BeanFactoryUtils.beanNamesForTypeIncludingAncestors(configurableListableBeanFactory,
lifecycleInterface);
- for (int i = 0; i < beanNames.length; i++) {
- String beanName = beanNames[i];
- if (excludeBeans == null || !excludeBeans.contains(beanName)) {
- BeanDefinition beanDefinition =
configurableListableBeanFactory.getBeanDefinition(beanName);
- Object bean =
configurableListableBeanFactory.getBean(beanName);
- invokeLifecycleWorker(beanName, bean, beanDefinition);
- }
+ protected BeanDefinition getBeanDefinition(String beanName) {
+ if (beanFactory instanceof ConfigurableListableBeanFactory) {
+ ConfigurableListableBeanFactory configurableListableBeanFactory =
(ConfigurableListableBeanFactory) beanFactory;
+ return
configurableListableBeanFactory.getBeanDefinition(beanName);
}
+ return null; // cannot lookup bean definition
}
-
+
+ public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
+ if (excludeBeans == null || !excludeBeans.contains(beanName)) {
+ BeanDefinition beanDefinition = getBeanDefinition(beanName);
+ invokeLifecycleWorker(beanName, bean, beanDefinition);
+ }
+ return bean;
+ }
+
public void setExcludeBeans(Collection excludeBeans) {
this.excludeBeans=excludeBeans;
}
Modified:
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationPropagator.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationPropagator.java?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationPropagator.java
(original)
+++
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationPropagator.java
Tue Jul 31 14:09:31 2007
@@ -22,18 +22,21 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.james.container.spring.adaptor.ConfigurationProvider;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
/**
* calls configure() for all avalon components
*/
-public class ConfigurationPropagator extends AbstractPropagator implements
BeanFactoryPostProcessor, Ordered {
+public class ConfigurationPropagator extends AbstractPropagator implements
BeanPostProcessor, Ordered {
+
private Configuration configuration;
+ public void setConfigurationProvider(ConfigurationProvider
configurationProvider) {
+ this.configuration = configurationProvider.getConfiguration();
+ }
+
private boolean isConfigurationEmpty(Configuration componentConfiguration)
{
return (componentConfiguration.getChildren() == null ||
componentConfiguration.getChildren().length == 0)
&& (componentConfiguration.getAttributeNames() == null ||
componentConfiguration.getAttributeNames().length == 0);
@@ -47,16 +50,8 @@
return Configurable.class;
}
- public void postProcessBeanFactory(ConfigurableListableBeanFactory
configurableListableBeanFactory) throws BeansException {
-
- // prepare load data
- ConfigurationProvider configurationProvider = (ConfigurationProvider)
configurableListableBeanFactory.getBean("configurationProvider");
- configuration = configurationProvider.getConfiguration();
-
- super.postProcessBeanFactory(configurableListableBeanFactory);
- }
-
protected void invokeLifecycleWorker(String beanName, Object bean,
BeanDefinition beanDefinition) {
+ if (!(bean instanceof Configurable)) return;
Configurable configurable = (Configurable)bean;
try {
Configuration componentConfiguration =
configuration.getChild(beanName);
Modified:
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ContextPropagator.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ContextPropagator.java?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ContextPropagator.java
(original)
+++
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ContextPropagator.java
Tue Jul 31 14:09:31 2007
@@ -21,30 +21,27 @@
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
/**
* calls contextualize() for all avalon components
*/
-public class ContextPropagator extends AbstractPropagator implements
BeanFactoryPostProcessor, Ordered {
- private Context context;
-
- public void postProcessBeanFactory(ConfigurableListableBeanFactory
configurableListableBeanFactory) throws BeansException {
+public class ContextPropagator extends AbstractPropagator implements
BeanPostProcessor, Ordered {
- context = (Context)
configurableListableBeanFactory.getBean("avalonContext");
+ private Context context;
- super.postProcessBeanFactory(configurableListableBeanFactory);
+ public void setContext(Context context) {
+ this.context = context;
}
-
+
protected Class getLifecycleInterface() {
return Contextualizable.class;
}
protected void invokeLifecycleWorker(String beanName, Object bean,
BeanDefinition beanDefinition) {
+ if (!(bean instanceof Contextualizable)) return;
Contextualizable contextualizable = (Contextualizable) bean;
try {
contextualizable.contextualize(context);
Modified:
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
(original)
+++
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
Tue Jul 31 14:09:31 2007
@@ -19,20 +19,21 @@
package org.apache.james.container.spring.lifecycle;
import org.apache.avalon.framework.activity.Initializable;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
/**
* calls initialize() for all avalon components
*/
-public class InitializationPropagator extends AbstractPropagator implements
BeanFactoryPostProcessor, Ordered {
+public class InitializationPropagator extends AbstractPropagator implements
BeanPostProcessor, Ordered {
protected Class getLifecycleInterface() {
return Initializable.class;
}
protected void invokeLifecycleWorker(String beanName, Object bean,
BeanDefinition beanDefinition) {
+ if (!(bean instanceof Initializable)) return;
Initializable initializable = (Initializable) bean;
try {
initializable.initialize();
Modified:
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/LoggerPropagator.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/LoggerPropagator.java?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/LoggerPropagator.java
(original)
+++
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/LoggerPropagator.java
Tue Jul 31 14:09:31 2007
@@ -19,37 +19,33 @@
package org.apache.james.container.spring.lifecycle;
import org.apache.avalon.framework.logger.LogEnabled;
-import org.apache.james.container.spring.logging.LoggerToComponentMapper;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.apache.james.container.spring.adaptor.LoggingBridge;
import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
/**
* propagates Loggers for all avalon components
*/
-public class LoggerPropagator extends AbstractPropagator implements
BeanFactoryPostProcessor, Ordered {
- private LoggerToComponentMapper loggerToComponentMapper;
+public class LoggerPropagator extends AbstractPropagator implements
BeanPostProcessor, Ordered {
- public void postProcessBeanFactory(ConfigurableListableBeanFactory
configurableListableBeanFactory) throws BeansException {
-
- loggerToComponentMapper = (LoggerToComponentMapper)
configurableListableBeanFactory.getBean("loggerMap");
-
- super.postProcessBeanFactory(configurableListableBeanFactory);
- }
+ private LoggingBridge loggingBridge;
protected Class getLifecycleInterface() {
return LogEnabled.class;
}
protected void invokeLifecycleWorker(String beanName, Object bean,
BeanDefinition beanDefinition) {
+ if (!(bean instanceof LogEnabled)) return;
LogEnabled logEnabled = (LogEnabled) bean;
-
logEnabled.enableLogging(loggerToComponentMapper.getComponentLogger(beanName));
+ logEnabled.enableLogging(loggingBridge);
}
public int getOrder() {
return 0;
}
+ public void setLoggingBridge(LoggingBridge loggingBridge) {
+ this.loggingBridge = loggingBridge;
+ }
}
Modified:
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ServicePropagator.java
URL:
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ServicePropagator.java?view=diff&rev=561544&r1=561543&r2=561544
==============================================================================
---
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ServicePropagator.java
(original)
+++
james/server/sandbox/spring-integration/src/main/java/org/apache/james/container/spring/lifecycle/ServicePropagator.java
Tue Jul 31 14:09:31 2007
@@ -1,35 +1,50 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
package org.apache.james.container.spring.lifecycle;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.context.Contextualizable;
import org.apache.james.container.spring.adaptor.ServiceManagerFactory;
-import org.springframework.beans.BeansException;
+import org.apache.james.container.spring.adaptor.DefaultServiceManagerFactory;
import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
/**
* calls service() for all avalon components
*/
-public class ServicePropagator extends AbstractPropagator implements
BeanFactoryPostProcessor, Ordered {
+public class ServicePropagator extends AbstractPropagator implements
BeanPostProcessor, Ordered {
private ServiceManagerFactory serviceManagerFactory;
-
- public void postProcessBeanFactory(ConfigurableListableBeanFactory
configurableListableBeanFactory) throws BeansException {
-
- serviceManagerFactory = (ServiceManagerFactory)
configurableListableBeanFactory.getBean("serviceManager");
-
- super.postProcessBeanFactory(configurableListableBeanFactory);
+
+ public void setServiceManagerFactory(DefaultServiceManagerFactory
serviceManagerFactory) {
+ this.serviceManagerFactory = serviceManagerFactory;
}
-
+
protected Class getLifecycleInterface() {
return Serviceable.class;
}
protected void invokeLifecycleWorker(String beanName, Object bean,
BeanDefinition beanDefinition) {
-
+ if (!(bean instanceof Serviceable)) return;
Serviceable serviceable = (Serviceable) bean;
try {
ServiceManager serviceManager =
serviceManagerFactory.getInstanceFor(beanName, beanDefinition);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]