JAMES-1823 quotaUpdater is not invoked more than one time for a message addition or deletion
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e30634c9 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e30634c9 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e30634c9 Branch: refs/heads/master Commit: e30634c9db343b8d333ae1e678ee07832341e7d1 Parents: 4f71913 Author: quynhn <qngu...@linagora.com> Authored: Thu Apr 27 17:27:15 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Thu May 4 09:25:52 2017 +0700 ---------------------------------------------------------------------- ...oxConfigurationBeanFactoryPostProcessor.java | 41 ++++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/e30634c9/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java ---------------------------------------------------------------------- diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java index db2625c..516dec4 100644 --- a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java +++ b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java @@ -22,6 +22,8 @@ package org.apache.james.container.spring.bean.factorypostprocessor; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.james.container.spring.lifecycle.ConfigurationProvider; + +import com.google.common.collect.ImmutableSet; import org.springframework.beans.BeansException; import org.springframework.beans.FatalBeanException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; @@ -36,11 +38,21 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; * It will register it with the alias mailboxmanager */ public class MailboxConfigurationBeanFactoryPostProcessor implements BeanFactoryPostProcessor { - /** * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory * (org.springframework.beans.factory.config.ConfigurableListableBeanFactory) */ + + private static final String JPA_MAILBOXMANAGER = "jpa-mailboxmanager"; + private static final String MEMORY_MAILBOX_MANAGER = "memory-mailboxManager"; + private static final String JCR_MAILBOXMANAGER = "jcr-mailboxmanager"; + private static final String MAILDIR_MAILBOXMANAGER = "maildir-mailboxmanager"; + private static final String HBASE_MAILBOXMANAGER = "hbase-mailboxmanager"; + private static final String CASSANDRA_MAILBOXMANAGER = "cassandra-mailboxmanager"; + private static final ImmutableSet<String> MAILBOX_MANAGER_IDS = ImmutableSet.of(JPA_MAILBOXMANAGER, MEMORY_MAILBOX_MANAGER, + JCR_MAILBOXMANAGER, MAILDIR_MAILBOXMANAGER, + HBASE_MAILBOXMANAGER, CASSANDRA_MAILBOXMANAGER); + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { ConfigurationProvider confProvider = beanFactory.getBean(ConfigurationProvider.class); try { @@ -54,34 +66,35 @@ public class MailboxConfigurationBeanFactoryPostProcessor implements BeanFactory String mailboxIdDeserializer = null; String mailboxIdFactory = null; if (provider.equalsIgnoreCase("jpa")) { - mailbox = "jpa-mailboxmanager"; + mailbox = JPA_MAILBOXMANAGER; subscription = "jpa-subscriptionManager"; messageMapperFactory = "jpa-sessionMapperFactory"; mailboxIdDeserializer = "jpa-mailbox-id-deserializer"; mailboxIdFactory = "jpa-mailboxIdFactory"; } else if (provider.equalsIgnoreCase("memory")) { - mailbox = "memory-mailboxmanager"; + mailbox = MEMORY_MAILBOX_MANAGER; subscription = "memory-subscriptionManager"; messageMapperFactory = "memory-sessionMapperFactory"; mailboxIdDeserializer = "memory-mailbox-id-deserializer"; mailboxIdFactory = "memory-mailboxIdFactory"; } else if (provider.equalsIgnoreCase("jcr")) { - mailbox = "jcr-mailboxmanager"; + mailbox = JCR_MAILBOXMANAGER; subscription = "jcr-subscriptionManager"; messageMapperFactory = "jcr-sessionMapperFactory"; mailboxIdDeserializer = "jcr-mailbox-id-deserializer"; } else if (provider.equalsIgnoreCase("maildir")) { - mailbox = "maildir-mailboxmanager"; + mailbox = MAILDIR_MAILBOXMANAGER; subscription = "maildir-subscriptionManager"; messageMapperFactory = "maildir-sessionMapperFactory"; mailboxIdDeserializer = "maildir-mailbox-id-deserializer"; + mailboxIdFactory = "maildir-mailboxIdFactory"; } else if (provider.equalsIgnoreCase("hbase")) { - mailbox = "hbase-mailboxmanager"; + mailbox = HBASE_MAILBOXMANAGER; subscription = "hbase-subscriptionManager"; messageMapperFactory = "hbase-sessionMapperFactory"; mailboxIdDeserializer = "hbase-mailbox-id-deserializer"; } else if (provider.equalsIgnoreCase("cassandra")) { - mailbox = "cassandra-mailboxmanager"; + mailbox = CASSANDRA_MAILBOXMANAGER; subscription = "cassandra-subscriptionManager"; messageMapperFactory = "cassandra-sessionMapperFactory"; mailboxIdDeserializer = "cassandra-mailbox-id-deserializer"; @@ -96,10 +109,24 @@ public class MailboxConfigurationBeanFactoryPostProcessor implements BeanFactory registry.registerAlias(mailboxIdDeserializer, "mailbox-id-deserializer"); registry.registerAlias(mailboxIdFactory, "mailboxIdFactory"); + removeMailboxManagersExceptRightSelectedOne(registry, mailbox); + } catch (ConfigurationException e) { throw new FatalBeanException("Unable to config the mailboxmanager", e); } } + private void removeMailboxManagersExceptRightSelectedOne(BeanDefinitionRegistry registry, String selectedMailboxManager) { + for (String mailboxManagerId : MAILBOX_MANAGER_IDS) { + if (registeredAndNotSelected(registry, selectedMailboxManager, mailboxManagerId)) { + registry.removeBeanDefinition(mailboxManagerId); + } + } + } + + private boolean registeredAndNotSelected(BeanDefinitionRegistry registry, String selectedMailboxManager, String otherMailboxManager) { + return !otherMailboxManager.equals(selectedMailboxManager) && registry.containsBeanDefinition(otherMailboxManager); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org