From a6a950f7311aa6c4df5514041c12fa0708c28304 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 16 May 2011 15:41:42 -0400 Subject: [PATCH] INT-1903 polishing --- .../config/IdGeneratorConfigurer.java | 87 ++++++++++--------- ...ltConfiguringBeanFactoryPostProcessor.java | 22 +++-- 2 files changed, 58 insertions(+), 51 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java b/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java index fb4087ee82..d986f8e66d 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.config; import java.lang.reflect.Field; @@ -22,6 +23,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.integration.MessageHeaders; @@ -29,63 +31,62 @@ import org.springframework.integration.MessageHeaders.IdGenerator; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; - /** * @author Oleg Zhurakousky - * @since 2.0 + * @since 2.0.4 */ -public class IdGeneratorConfigurer implements ApplicationListener, DisposableBean{ +public final class IdGeneratorConfigurer implements ApplicationListener, DisposableBean { private final Log logger = LogFactory.getLog(getClass()); - + + public void onApplicationEvent(ContextRefreshedEvent event) { - this.setIdGenerationStrategy(event); + this.setIdGenerator(event.getApplicationContext()); } public void destroy() throws Exception { - this.resetIdGenerationStrategy(); + this.unsetIdGenerator(); } - - private void resetIdGenerationStrategy(){ - try{ + + private void setIdGenerator(ApplicationContext context) { + try { + IdGenerator idGeneratorBean = context.getBean(IdGenerator.class); + if (logger.isDebugEnabled()) { + logger.debug("using custom MessageHeaders.IdGenerator [" + idGeneratorBean.getClass() + "]"); + } + Field idGeneratorField = ReflectionUtils.findField(MessageHeaders.class, "idGenerator"); + ReflectionUtils.makeAccessible(idGeneratorField); + IdGenerator existingIdGenerator = (IdGenerator) idGeneratorField.get(null); + Assert.state(existingIdGenerator == null, "'MessageHeaders.idGenerator' " + + "has already been set and can not be set again"); + if (logger.isInfoEnabled()) { + logger.info("Message IDs will be generated using custom IdGenerator [" + idGeneratorBean.getClass() + "]"); + } + ReflectionUtils.setField(idGeneratorField, null, idGeneratorBean); + } + catch (NoSuchBeanDefinitionException e) { + // We will use the default. + if (logger.isDebugEnabled()) { + logger.debug("Unable to locate MessageHeaders.IdGenerator. Will use default: UUID.randomUUID()"); + } + } + catch (Exception e) { + if (logger.isWarnEnabled()) { + logger.warn("Unexpected exception occurred while accessing idGenerator of MessageHeaders." + + " Will use default: UUID.randomUUID()", e); + } + } + } + + private void unsetIdGenerator() { + try { Field idGeneratorField = ReflectionUtils.findField(MessageHeaders.class, "idGenerator"); ReflectionUtils.makeAccessible(idGeneratorField); idGeneratorField.set(null, null); - } - catch (Exception ex){ + } + catch (Exception e) { if (logger.isWarnEnabled()) { - logger.warn("Unexpected exception happened while accessing idGenerator of MessageHeaders.", ex); - } - } - } - - private void setIdGenerationStrategy(ContextRefreshedEvent event){ - try { - IdGenerator idGenerationStrategy = - event.getApplicationContext().getBean(IdGenerator.class); - if (logger.isDebugEnabled()) { - logger.debug("Using MessageHeaders.idGenerator [" + idGenerationStrategy + "]"); - } - Field idGeneratorField = ReflectionUtils.findField(MessageHeaders.class, "idGenerator"); - ReflectionUtils.makeAccessible(idGeneratorField); - IdGenerator idGenerator = (IdGenerator) idGeneratorField.get(null); - Assert.state(idGenerator == null, "'MessageHeaders.idGenerator' " + - "has already been set and can not be set again"); - if (logger.isInfoEnabled()){ - logger.info("Message IDs will be generated using custom ID generation strategy: " + idGenerationStrategy); - } - ReflectionUtils.setField(idGeneratorField, null, idGenerationStrategy); - } - catch (NoSuchBeanDefinitionException ex) { - // We need to use the default. - if (logger.isDebugEnabled()) { - logger.debug("Unable to locate MessageHeaders.idGenerator. Will use default UUID.randomUUID()"); - } - } - catch (Exception e){ - if (logger.isWarnEnabled()) { - logger.warn("Unexpected exception happened while accessing idGenerator of MessageHeaders." + - " Will use default UUID.randomUUID()", e); + logger.warn("Unexpected exception occurred while accessing idGenerator of MessageHeaders.", e); } } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultConfiguringBeanFactoryPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultConfiguringBeanFactoryPostProcessor.java index d7c0d802f9..a29e9bbd9a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultConfiguringBeanFactoryPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/DefaultConfiguringBeanFactoryPostProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -46,15 +46,17 @@ class DefaultConfiguringBeanFactoryPostProcessor implements BeanFactoryPostProce private static final String ERROR_LOGGER_BEAN_NAME = "_org.springframework.integration.errorLogger"; + private Log logger = LogFactory.getLog(this.getClass()); + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { if (beanFactory instanceof BeanDefinitionRegistry) { BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; this.registerNullChannel(registry); this.registerErrorChannelIfNecessary(registry); this.registerTaskSchedulerIfNecessary(registry); - this.registerMessageIdGenerator(registry); + this.registerIdGeneratorConfigurer(registry); } else if (logger.isWarnEnabled()) { logger.warn("BeanFactory is not a BeanDefinitionRegistry. The default '" @@ -62,18 +64,22 @@ class DefaultConfiguringBeanFactoryPostProcessor implements BeanFactoryPostProce + IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME + "' cannot be configured."); } } - - private void registerMessageIdGenerator(BeanDefinitionRegistry registry){ + + private void registerIdGeneratorConfigurer(BeanDefinitionRegistry registry) { String listenerClassName = "org.springframework.integration.config.IdGeneratorConfigurer"; String[] definitionNames = registry.getBeanDefinitionNames(); for (String definitionName : definitionNames) { BeanDefinition definition = registry.getBeanDefinition(definitionName); - if (listenerClassName.equals(definition.getBeanClassName())){ - logger.warn(listenerClassName + " is already registered and will be used"); + if (listenerClassName.equals(definition.getBeanClassName())) { + if (logger.isWarnEnabled()) { + logger.warn(listenerClassName + " is already registered and will be used"); + } return; } - } - BeanDefinitionReaderUtils.registerWithGeneratedName(new RootBeanDefinition(listenerClassName), registry); + } + RootBeanDefinition beanDefinition = new RootBeanDefinition(listenerClassName); + beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + BeanDefinitionReaderUtils.registerWithGeneratedName(beanDefinition, registry); } /**