http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java index 668cfbe..2cc6bae 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java @@ -28,6 +28,8 @@ import java.io.InputStream; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.events.InVMEventBus; +import org.apache.james.mailbox.events.delivery.InVmEventDelivery; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.inmemory.InMemoryMessageId; @@ -40,13 +42,13 @@ import org.apache.james.mailbox.store.NoMailboxPathLocker; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreRightManager; -import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; import org.apache.james.mailbox.store.mail.AttachmentMapperFactory; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.QuotaComponents; import org.apache.james.mailbox.store.search.MessageSearchIndex; import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex; +import org.apache.james.metrics.api.NoopMetricFactory; import org.junit.Before; public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManagerAttachmentTest { @@ -62,11 +64,11 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory(); Authenticator noAuthenticator = null; Authorizator noAuthorizator = null; - DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); + InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory())); MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory(); GroupMembershipResolver groupMembershipResolver = null; UnionMailboxACLResolver aclResolver = new UnionMailboxACLResolver(); - StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, delegatingListener); + StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, aclResolver, groupMembershipResolver, eventBus); SessionProvider sessionProvider = new SessionProvider(noAuthenticator, noAuthorizator); QuotaComponents quotaComponents = QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory); @@ -74,12 +76,12 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager); mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), - new MessageParser(), messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents, index); + new MessageParser(), messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index); MessageParser failingMessageParser = mock(MessageParser.class); when(failingMessageParser.retrieveAttachments(any(InputStream.class))) .thenThrow(new RuntimeException("Message parser set to fail")); parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), - failingMessageParser, messageIdFactory, delegatingListener, annotationManager, storeRightManager, quotaComponents, index); + failingMessageParser, messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index); super.setUp(); }
http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java index d2d57b1..2e1a3de 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java @@ -23,6 +23,8 @@ import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.events.InVMEventBus; +import org.apache.james.mailbox.events.delivery.InVmEventDelivery; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; @@ -45,7 +47,6 @@ import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageIdManager; import org.apache.james.mailbox.store.StoreRightManager; -import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxAnnotationListener; import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; @@ -56,6 +57,7 @@ import org.apache.james.mailbox.store.quota.QuotaComponents; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import org.apache.james.mailbox.store.search.MessageSearchIndex; import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex; +import org.apache.james.metrics.api.NoopMetricFactory; public class InMemoryIntegrationResources implements IntegrationResources<StoreMailboxManager> { @@ -104,17 +106,17 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM private SimpleGroupMembershipResolver groupMembershipResolver; @Override - public InMemoryMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) throws MailboxException { + public InMemoryMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) { return createResources(groupMembershipResolver).mailboxManager; } - public Resources createResources(GroupMembershipResolver groupMembershipResolver) throws MailboxException { + public Resources createResources(GroupMembershipResolver groupMembershipResolver) { return createResources(groupMembershipResolver, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE); } - public Resources createResources(GroupMembershipResolver groupMembershipResolver, int limitAnnotationCount, int limitAnnotationSize) throws MailboxException { + public Resources createResources(GroupMembershipResolver groupMembershipResolver, int limitAnnotationCount, int limitAnnotationSize) { FakeAuthenticator fakeAuthenticator = new FakeAuthenticator(); fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS); fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS); @@ -122,22 +124,22 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM return createResources(groupMembershipResolver, fakeAuthenticator, FakeAuthorizator.defaultReject(), limitAnnotationCount, limitAnnotationSize); } - public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) throws MailboxException { + public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) { return createResources(groupMembershipResolver, authenticator, authorizator).mailboxManager; } - public Resources createResources(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) throws MailboxException { + public Resources createResources(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator) { return createResources(groupMembershipResolver, authenticator, authorizator, MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX, MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE); } private Resources createResources(GroupMembershipResolver groupMembershipResolver, Authenticator authenticator, Authorizator authorizator, - int limitAnnotationCount, int limitAnnotationSize) throws MailboxException { + int limitAnnotationCount, int limitAnnotationSize) { InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory(); - DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); + InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory())); StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), - groupMembershipResolver, delegatingListener); + groupMembershipResolver, eventBus); StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager, limitAnnotationCount, limitAnnotationSize); SessionProvider sessionProvider = new SessionProvider(authenticator, authorizator); @@ -146,7 +148,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory); InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(new CurrentQuotaCalculator(mailboxSessionMapperFactory, quotaRootResolver), sessionProvider); StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager); - ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, delegatingListener, quotaManager); + ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, quotaManager); QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, quotaManager, quotaRootResolver, listeningCurrentQuotaUpdater); MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor()); @@ -157,20 +159,16 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM new JVMMailboxPathLocker(), new MessageParser(), new InMemoryMessageId.Factory(), - delegatingListener, + eventBus, annotationManager, storeRightManager, quotaComponents, index); - delegatingListener.addGlobalListener((ListeningCurrentQuotaUpdater) quotaComponents.getQuotaUpdater(), sessionProvider.createSystemSession("admin")); - delegatingListener.addGlobalListener(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider), sessionProvider.createSystemSession("admin")); + eventBus.register(listeningCurrentQuotaUpdater); + eventBus.register(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider)); - try { - return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory(), currentQuotaManager, quotaRootResolver, maxQuotaManager); - } catch (Exception e) { - throw new RuntimeException(e); - } + return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory(), currentQuotaManager, quotaRootResolver, maxQuotaManager); } @Override @@ -183,7 +181,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM return new StoreMessageIdManager( mailboxManager, mailboxManager.getMapperFactory(), - mailboxManager.getDelegationListener(), + mailboxManager.getEventBus(), factory, quotaComponents.getQuotaManager(), quotaComponents.getQuotaRootResolver()); http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java index 8f32bf8..e270749 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.inmemory.manager; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.inmemory.InMemoryMessageId; @@ -35,7 +36,6 @@ import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMessageIdManager; import org.apache.james.mailbox.store.StoreRightManager; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; @@ -55,7 +55,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan } @Override - protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, DelegatingMailboxListener delegatingMailboxListener) { + protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, EventBus eventBus) { InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory(); FakeAuthenticator fakeAuthenticator = new FakeAuthenticator(); @@ -63,7 +63,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS); FakeAuthorizator fakeAuthorizator = FakeAuthorizator.defaultReject(); - StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), delegatingMailboxListener); + StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), eventBus); JVMMailboxPathLocker locker = new JVMMailboxPathLocker(); InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory(); SessionProvider sessionProvider = new SessionProvider(fakeAuthenticator, fakeAuthorizator); @@ -76,7 +76,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan locker, new MessageParser(), messageIdFactory, - delegatingMailboxListener, + eventBus, new StoreMailboxAnnotationManager(mapperFactory, rightManager), rightManager, quotaComponents, @@ -84,7 +84,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan StoreMessageIdManager messageIdManager = new StoreMessageIdManager( mailboxManager, mapperFactory, - delegatingMailboxListener, + eventBus, messageIdFactory, quotaManager, quotaComponents.getQuotaRootResolver()); http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/plugin/quota-mailing/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/plugin/quota-mailing/pom.xml b/mailbox/plugin/quota-mailing/pom.xml index b9f5fbd..a0071ae 100644 --- a/mailbox/plugin/quota-mailing/pom.xml +++ b/mailbox/plugin/quota-mailing/pom.xml @@ -44,6 +44,11 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>apache-james-mailbox-event-memory</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>apache-james-mailbox-store</artifactId> <scope>test</scope> </dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java ---------------------------------------------------------------------- diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java index fc5f31c..c399025 100644 --- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java +++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java @@ -22,33 +22,37 @@ package org.apache.james.mailbox.quota.mailing.listeners; import org.apache.james.eventsourcing.eventstore.EventStore; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.mailbox.Event; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MailboxSessionUtil; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.InVMEventBus; +import org.apache.james.mailbox.events.RegistrationKey; +import org.apache.james.mailbox.events.delivery.InVmEventDelivery; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration; -import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; +import org.apache.james.metrics.api.NoopMetricFactory; import org.apache.james.server.core.JamesServerResourceLoader; import org.apache.james.server.core.filesystem.FileSystemImpl; import org.apache.james.user.memory.MemoryUsersRepository; import org.apache.mailet.MailetContext; -public class QuotaThresholdListenersTestSystem { +import com.google.common.collect.ImmutableSet; - private final DefaultDelegatingMailboxListener delegatingListener; +class QuotaThresholdListenersTestSystem { + private static final ImmutableSet<RegistrationKey> NO_KEYS = ImmutableSet.of(); - public QuotaThresholdListenersTestSystem(MailetContext mailetContext, EventStore eventStore, QuotaMailingListenerConfiguration configuration) throws MailboxException { - delegatingListener = new DefaultDelegatingMailboxListener(); + private final EventBus eventBus; + + QuotaThresholdListenersTestSystem(MailetContext mailetContext, EventStore eventStore, QuotaMailingListenerConfiguration configuration) throws MailboxException { + eventBus = new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory())); FileSystem fileSystem = new FileSystemImpl(new JamesServerResourceLoader(".")); QuotaThresholdCrossingListener thresholdCrossingListener = new QuotaThresholdCrossingListener(mailetContext, MemoryUsersRepository.withVirtualHosting(), fileSystem, eventStore, configuration); - MailboxSession mailboxSession = MailboxSessionUtil.create("system"); - delegatingListener.addGlobalListener(thresholdCrossingListener, mailboxSession); + eventBus.register(thresholdCrossingListener); } - public void event(Event event) { - delegatingListener.event(event); + void event(Event event) { + eventBus.dispatch(event, NO_KEYS); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java ---------------------------------------------------------------------- diff --git a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java index 92e6995..38cd886 100644 --- a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java +++ b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java @@ -32,7 +32,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest } @Override - protected void initializeMailboxManager() throws Exception { + protected void initializeMailboxManager() { storeMailboxManager = new InMemoryIntegrationResources() .createMailboxManager(new SimpleGroupMembershipResolver()); @@ -44,7 +44,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest messageIdManager = new StoreMessageIdManager( storeMailboxManager, storeMailboxManager.getMapperFactory(), - storeMailboxManager.getDelegationListener(), + storeMailboxManager.getEventBus(), storeMailboxManager.getMessageIdFactory(), storeMailboxManager.getQuotaComponents().getQuotaManager(), storeMailboxManager.getQuotaComponents().getQuotaRootResolver()); http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/spring/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/spring/pom.xml b/mailbox/spring/pom.xml index f4247f1..048fa96 100644 --- a/mailbox/spring/pom.xml +++ b/mailbox/spring/pom.xml @@ -44,6 +44,10 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>apache-james-mailbox-event-memory</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>apache-james-mailbox-jpa</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java ---------------------------------------------------------------------- diff --git a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java index 9527a4a..49029e6 100644 --- a/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java +++ b/mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java @@ -22,11 +22,9 @@ package org.apache.james.mailbox.spring; import javax.inject.Inject; import org.apache.james.mailbox.MailboxManager; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.SessionProvider; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxAnnotationListener; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.QuotaUpdater; @@ -35,37 +33,35 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex; public class MailboxInitializer { private final SessionProvider sessionProvider; - private final DelegatingMailboxListener delegatingMailboxListener; + private final EventBus eventBus; private final MessageSearchIndex messageSearchIndex; private final QuotaUpdater quotaUpdater; private final MailboxManager mailboxManager; private final MailboxSessionMapperFactory mapperFactory; @Inject - public MailboxInitializer(SessionProvider sessionProvider, DelegatingMailboxListener delegatingMailboxListener, MessageSearchIndex messageSearchIndex, QuotaUpdater quotaUpdater, MailboxManager mailboxManager, MailboxSessionMapperFactory mapperFactory) { + public MailboxInitializer(SessionProvider sessionProvider, EventBus eventBus, MessageSearchIndex messageSearchIndex, QuotaUpdater quotaUpdater, MailboxManager mailboxManager, MailboxSessionMapperFactory mapperFactory) { this.sessionProvider = sessionProvider; - this.delegatingMailboxListener = delegatingMailboxListener; + this.eventBus = eventBus; this.messageSearchIndex = messageSearchIndex; this.quotaUpdater = quotaUpdater; this.mailboxManager = mailboxManager; this.mapperFactory = mapperFactory; } - public void init() throws MailboxException { - MailboxSession session = sessionProvider.createSystemSession("admin"); - + public void init() { if (messageSearchIndex instanceof ListeningMessageSearchIndex) { ListeningMessageSearchIndex index = (ListeningMessageSearchIndex) messageSearchIndex; - delegatingMailboxListener.addGlobalListener(index, session); + eventBus.register(index); } if (quotaUpdater instanceof ListeningCurrentQuotaUpdater) { ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = (ListeningCurrentQuotaUpdater) quotaUpdater; - delegatingMailboxListener.addGlobalListener(listeningCurrentQuotaUpdater, session); + eventBus.register(listeningCurrentQuotaUpdater); } if (mailboxManager.getSupportedMailboxCapabilities().contains(MailboxManager.MailboxCapabilities.Annotation)) { - delegatingMailboxListener.addGlobalListener(new MailboxAnnotationListener(mapperFactory, sessionProvider), session); + eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider)); } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml ---------------------------------------------------------------------- diff --git a/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml b/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml index f21a0b7..ff0447a 100644 --- a/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml +++ b/mailbox/spring/src/main/resources/META-INF/spring/event-system.xml @@ -23,15 +23,11 @@ xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - <bean id="delegating-listener" class="org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener" lazy-init="true"> + <bean id="event-bus" class="org.apache.james.mailbox.events.InVMEventBus" lazy-init="true"> <constructor-arg index="0" ref="event-delivery"/> - <constructor-arg index="1" ref="event-registry"/> </bean> - <bean id="event-delivery" class="org.apache.james.mailbox.events.delivery.InVmEventDelivery" lazy-init="true"> <constructor-arg index="0" ref="metricFactory"/> </bean> - <bean id="event-registry" class="org.apache.james.mailbox.store.event.MailboxListenerRegistry"/> - </beans> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/spring/src/main/resources/META-INF/spring/quota.xml ---------------------------------------------------------------------- diff --git a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml index 9cb5a2c..c9e1ae7 100644 --- a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml +++ b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml @@ -54,7 +54,7 @@ <bean id="eventQuotaUpdater" class="org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater" lazy-init="true"> <constructor-arg index="0" ref="currentQuotaManager"/> <constructor-arg index="1" ref="quotaRootResolver"/> - <constructor-arg index="2" ref="delegating-listener"/> + <constructor-arg index="2" ref="event-bus"/> <constructor-arg index="3" ref="storeQuotaManager"/> </bean> http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml ---------------------------------------------------------------------- diff --git a/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml b/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml index bedb91a..e9c5cf7 100644 --- a/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml +++ b/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml @@ -63,7 +63,7 @@ <constructor-arg index="0" ref="messageMapperFactory" /> <constructor-arg index="1" ref="aclResolver" /> <constructor-arg index="2" ref="groupMembershipResolver" /> - <constructor-arg index="3" ref="delegating-listener" /> + <constructor-arg index="3" ref="event-bus" /> </bean> <bean id="sessionProvider" class="org.apache.james.mailbox.store.SessionProvider" > @@ -73,7 +73,7 @@ <bean id="mailbox-init" class="org.apache.james.mailbox.spring.MailboxInitializer" init-method="init"> <constructor-arg index="0" ref="sessionProvider" /> - <constructor-arg index="1" ref="delegating-listener" /> + <constructor-arg index="1" ref="event-bus" /> <constructor-arg index="2" ref="indexer" /> <constructor-arg index="3" ref="quotaUpdater" /> <constructor-arg index="4" ref="mailboxmanager" /> http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index 2145f1f..fdf2ffb 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -39,7 +39,8 @@ import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.StandardMailboxMetaDataComparator; -import org.apache.james.mailbox.events.Group; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.events.Registration; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; @@ -64,7 +65,6 @@ import org.apache.james.mailbox.model.search.MailboxNameExpression; import org.apache.james.mailbox.model.search.MailboxQuery; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.MessageMapper; @@ -101,7 +101,7 @@ public class StoreMailboxManager implements MailboxManager { private static final SecureRandom RANDOM = new SecureRandom(); private final StoreRightManager storeRightManager; - private final DelegatingMailboxListener delegatingListener; + private final EventBus eventBus; private final MailboxSessionMapperFactory mailboxSessionMapperFactory; private final MailboxAnnotationManager annotationManager; private final MailboxPathLocker locker; @@ -118,9 +118,9 @@ public class StoreMailboxManager implements MailboxManager { public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider, MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager, - DelegatingMailboxListener delegatingListener, StoreRightManager storeRightManager, + EventBus eventBus, StoreRightManager storeRightManager, QuotaComponents quotaComponents, MessageSearchIndex searchIndex, MailboxManagerConfiguration configuration) { - Preconditions.checkNotNull(delegatingListener); + Preconditions.checkNotNull(eventBus); Preconditions.checkNotNull(mailboxSessionMapperFactory); this.annotationManager = annotationManager; @@ -129,7 +129,7 @@ public class StoreMailboxManager implements MailboxManager { this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; this.messageParser = messageParser; this.messageIdFactory = messageIdFactory; - this.delegatingListener = delegatingListener; + this.eventBus = eventBus; this.storeRightManager = storeRightManager; this.quotaRootResolver = quotaComponents.getQuotaRootResolver(); this.quotaManager = quotaComponents.getQuotaManager(); @@ -166,12 +166,12 @@ public class StoreMailboxManager implements MailboxManager { } /** - * Return the {@link DelegatingMailboxListener} which is used by this {@link MailboxManager} + * Return the {@link EventBus} which is used by this {@link MailboxManager} * * @return delegatingListener */ - public DelegatingMailboxListener getDelegationListener() { - return delegatingListener; + public EventBus getEventBus() { + return eventBus; } /** @@ -250,7 +250,7 @@ public class StoreMailboxManager implements MailboxManager { * @return storeMailbox */ protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException { - return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getDelegationListener(), + return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getEventBus(), getLocker(), mailbox, quotaManager, getQuotaComponents().getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), configuration.getBatchSizes(), getStoreRightManager()); @@ -345,11 +345,12 @@ public class StoreMailboxManager implements MailboxManager { try { mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m)))); // notify listeners - delegatingListener.event(EventFactory.mailboxAdded() + eventBus.dispatch(EventFactory.mailboxAdded() .randomEventId() .mailboxSession(mailboxSession) .mailbox(m) - .build()); + .build(), + new MailboxIdRegistrationKey(m.getMailboxId())); } catch (MailboxExistsException e) { LOGGER.info("{} mailbox was created concurrently", m.generateAssociatedPath()); } @@ -393,14 +394,15 @@ public class StoreMailboxManager implements MailboxManager { // mailbox once we remove it SimpleMailbox m = new SimpleMailbox(mailbox); mailboxMapper.delete(mailbox); - delegatingListener.event(EventFactory.mailboxDeleted() + eventBus.dispatch(EventFactory.mailboxDeleted() .randomEventId() .mailboxSession(session) .mailbox(mailbox) .quotaRoot(quotaRoot) .quotaCount(QuotaCount.count(messageCount)) .quotaSize(QuotaSize.size(totalSize)) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); return m; }); @@ -439,13 +441,14 @@ public class StoreMailboxManager implements MailboxManager { mailbox.setName(to.getName()); mapper.save(mailbox); - delegatingListener.event(EventFactory.mailboxRenamed() + eventBus.dispatch(EventFactory.mailboxRenamed() .randomEventId() .mailboxSession(session) .mailboxId(mailbox.getMailboxId()) .oldPath(from) .newPath(to) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); // rename submailboxes MailboxPath children = new MailboxPath(from.getNamespace(), from.getUser(), from.getName() + getDelimiter() + "%"); @@ -457,13 +460,14 @@ public class StoreMailboxManager implements MailboxManager { MailboxPath fromPath = new MailboxPath(children, subOriginalName); sub.setName(subNewName); mapper.save(sub); - delegatingListener.event(EventFactory.mailboxRenamed() + eventBus.dispatch(EventFactory.mailboxRenamed() .randomEventId() .mailboxSession(session) .mailboxId(sub.getMailboxId()) .oldPath(fromPath) .newPath(sub.generateAssociatedPath()) - .build()); + .build(), + new MailboxIdRegistrationKey(sub.getMailboxId())); LOGGER.debug("Rename mailbox sub-mailbox {} to {}", subOriginalName, subNewName); } @@ -721,40 +725,6 @@ public class StoreMailboxManager implements MailboxManager { @Override public Registration register(MailboxListener listener, MailboxId registrationKey) { - MailboxSession session = createSystemSession("admin"); - try { - delegatingListener.addListener(registrationKey, listener, session); - } catch (MailboxException e) { - throw new RuntimeException(e); - } - return () -> { - try { - delegatingListener.removeListener(registrationKey, listener, session); - } catch (MailboxException e) { - throw new RuntimeException(e); - } - }; - } - - @Override - public Registration register(MailboxListener listener, Group group) { - MailboxSession session = createSystemSession("admin"); - try { - delegatingListener.addGlobalListener(listener, session); - } catch (MailboxException e) { - throw new RuntimeException(e); - } - return () -> { - try { - delegatingListener.removeGlobalListener(listener, session); - } catch (MailboxException e) { - throw new RuntimeException(e); - } - }; - } - - @Override - public Registration register(MailboxListener.GroupMailboxListener groupMailboxListener) { - return register(groupMailboxListener, groupMailboxListener.getGroup()); + return eventBus.register(listener, new MailboxIdRegistrationKey(registrationKey)); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java index 3efdb14..04478cd 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java @@ -37,6 +37,8 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.DeleteResult; @@ -51,7 +53,6 @@ import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.model.UpdatedFlags; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.MessageIdMapper; @@ -101,18 +102,18 @@ public class StoreMessageIdManager implements MessageIdManager { private final MailboxManager mailboxManager; private final MailboxSessionMapperFactory mailboxSessionMapperFactory; - private final DelegatingMailboxListener delegatingMailboxListener; + private final EventBus eventBus; private final MessageId.Factory messageIdFactory; private final QuotaManager quotaManager; private final QuotaRootResolver quotaRootResolver; @Inject public StoreMessageIdManager(MailboxManager mailboxManager, MailboxSessionMapperFactory mailboxSessionMapperFactory, - DelegatingMailboxListener delegatingMailboxListener, MessageId.Factory messageIdFactory, + EventBus eventBus, MessageId.Factory messageIdFactory, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver) { this.mailboxManager = mailboxManager; this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; - this.delegatingMailboxListener = delegatingMailboxListener; + this.eventBus = eventBus; this.messageIdFactory = messageIdFactory; this.quotaManager = quotaManager; this.quotaRootResolver = quotaRootResolver; @@ -218,12 +219,13 @@ public class StoreMessageIdManager implements MessageIdManager { MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession); for (MetadataWithMailboxId metadataWithMailboxId : metadataWithMailbox) { - delegatingMailboxListener.event(EventFactory.expunged() + eventBus.dispatch(EventFactory.expunged() .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailboxMapper.findMailboxById(metadataWithMailboxId.mailboxId)) .addMetaData(metadataWithMailboxId.messageMetaData) - .build()); + .build(), + new MailboxIdRegistrationKey(metadataWithMailboxId.mailboxId)); } } @@ -286,11 +288,14 @@ public class StoreMessageIdManager implements MessageIdManager { addMessageToMailboxes(mailboxMessage, messageMoves.addedMailboxIds(), mailboxSession); removeMessageFromMailboxes(mailboxMessage, messageMoves.removedMailboxIds(), mailboxSession); - delegatingMailboxListener.event(EventFactory.moved() + eventBus.dispatch(EventFactory.moved() .session(mailboxSession) .messageMoves(messageMoves) .messageId(mailboxMessage.getMessageId()) - .build()); + .build(), + messageMoves.impactedMailboxIds() + .map(MailboxIdRegistrationKey::new) + .collect(Guavate.toImmutableSet())); } private void removeMessageFromMailboxes(MailboxMessage message, Set<MailboxId> mailboxesToRemove, MailboxSession mailboxSession) throws MailboxException { @@ -300,12 +305,13 @@ public class StoreMessageIdManager implements MessageIdManager { for (MailboxId mailboxId: mailboxesToRemove) { messageIdMapper.delete(message.getMessageId(), mailboxesToRemove); - delegatingMailboxListener.event(EventFactory.expunged() + eventBus.dispatch(EventFactory.expunged() .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailboxMapper.findMailboxById(mailboxId)) .addMetaData(eventPayload) - .build()); + .build(), + new MailboxIdRegistrationKey(mailboxId)); } } @@ -317,12 +323,13 @@ public class StoreMessageIdManager implements MessageIdManager { if (updatedFlags.flagsChanged()) { Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); - delegatingMailboxListener.event(EventFactory.flagsUpdated() + eventBus.dispatch(EventFactory.flagsUpdated() .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailbox) .updatedFlag(updatedFlags) - .build()); + .build(), + new MailboxIdRegistrationKey(mailboxId)); } } @@ -384,12 +391,13 @@ public class StoreMessageIdManager implements MessageIdManager { .build(); save(mailboxSession, messageIdMapper, copy); - delegatingMailboxListener.event(EventFactory.added() + eventBus.dispatch(EventFactory.added() .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailboxMapper.findMailboxById(mailboxId)) .addMessage(copy) - .build()); + .build(), + new MailboxIdRegistrationKey(mailboxId)); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index a92914c..e38a291 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -46,6 +46,8 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.ReadOnlyException; import org.apache.james.mailbox.model.ComposedMessageId; @@ -65,7 +67,6 @@ import org.apache.james.mailbox.model.SearchQuery; import org.apache.james.mailbox.model.UpdatedFlags; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.MessageMapper; import org.apache.james.mailbox.store.mail.MessageMapper.FetchType; @@ -133,7 +134,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana private static final Logger LOG = LoggerFactory.getLogger(StoreMessageManager.class); private final EnumSet<MailboxManager.MessageCapabilities> messageCapabilities; - private final DelegatingMailboxListener delegatingMailboxListener; + private final EventBus eventBus; private final Mailbox mailbox; private final MailboxSessionMapperFactory mapperFactory; private final MessageSearchIndex index; @@ -145,12 +146,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana private final Factory messageIdFactory; private final BatchSizes batchSizes; - public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, DelegatingMailboxListener delegatingMailboxListener, + public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, + MessageSearchIndex index, EventBus eventBus, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, StoreRightManager storeRightManager) { this.messageCapabilities = messageCapabilities; - this.delegatingMailboxListener = delegatingMailboxListener; + this.eventBus = eventBus; this.mailbox = mailbox; this.mapperFactory = mapperFactory; this.index = index; @@ -228,7 +230,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana * * In this implementation, all permanent flags are shared, ergo we simply * return {@link #getPermanentFlags(MailboxSession)} - * + * * @see UnionMailboxACLResolver#isReadWrite(MailboxACLRights, Flags) * * @param session @@ -256,12 +258,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana } Map<MessageUid, MessageMetaData> uids = deleteMarkedInMailbox(set, mailboxSession); - delegatingMailboxListener.event(EventFactory.expunged() + eventBus.dispatch(EventFactory.expunged() .randomEventId() .mailboxSession(mailboxSession) .mailbox(getMailboxEntity()) .metaData(ImmutableSortedMap.copyOf(uids)) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); return uids.keySet().iterator(); } @@ -403,12 +406,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana Mailbox mailbox = getMailboxEntity(); MailboxMessage copy = copyMessage(message); - delegatingMailboxListener.event(EventFactory.added() + eventBus.dispatch(EventFactory.added() .randomEventId() .mailboxSession(mailboxSession) .mailbox(mailbox) .addMessage(copy) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); return new ComposedMessageId(mailbox.getMailboxId(), data.getMessageId(), data.getUid()); }, true); } @@ -565,12 +569,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana Iterator<UpdatedFlags> it = messageMapper.execute(() -> messageMapper.updateFlags(getMailboxEntity(), new FlagsUpdateCalculator(flags, flagsUpdateMode), set)); List<UpdatedFlags> updatedFlags = Iterators.toStream(it).collect(Guavate.toImmutableList()); - delegatingMailboxListener.event(EventFactory.flagsUpdated() + eventBus.dispatch(EventFactory.flagsUpdated() .randomEventId() .mailboxSession(mailboxSession) .mailbox(getMailboxEntity()) .updatedFlags(updatedFlags) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); return updatedFlags.stream().collect(Guavate.toImmutableMap( UpdatedFlags::getUid, @@ -729,20 +734,22 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana messageIds.add(message.getMessageId()); } - delegatingMailboxListener.event(EventFactory.added() + eventBus.dispatch(EventFactory.added() .randomEventId() .mailboxSession(session) .mailbox(to.getMailboxEntity()) .metaData(copiedUids) - .build()); - delegatingMailboxListener.event(EventFactory.moved() + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); + eventBus.dispatch(EventFactory.moved() .session(session) .messageMoves(MessageMoves.builder() .previousMailboxIds(getMailboxEntity().getMailboxId()) .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId()) .build()) .messageId(messageIds.build()) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); return copiedUids; } @@ -758,26 +765,29 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana messageIds.add(message.getMessageId()); } - delegatingMailboxListener.event(EventFactory.added() + eventBus.dispatch(EventFactory.added() .randomEventId() .mailboxSession(session) .mailbox(to.getMailboxEntity()) .metaData(moveUids) - .build()); - delegatingMailboxListener.event(EventFactory.expunged() + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); + eventBus.dispatch(EventFactory.expunged() .randomEventId() .mailboxSession(session) .mailbox(getMailboxEntity()) .addMetaData(moveResult.getOriginalMessages()) - .build()); - delegatingMailboxListener.event(EventFactory.moved() + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); + eventBus.dispatch(EventFactory.moved() .messageMoves(MessageMoves.builder() .previousMailboxIds(getMailboxEntity().getMailboxId()) .targetMailboxIds(to.getMailboxEntity().getMailboxId()) .build()) .messageId(messageIds.build()) .session(session) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); return moveUids; } http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java index 84bc1f0..25a8bdc 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java @@ -32,6 +32,8 @@ import org.apache.james.mailbox.RightManager; import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.MailboxACLResolver; +import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.exception.DifferentDomainException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.UnsupportedRightException; @@ -43,7 +45,6 @@ import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; import org.apache.james.mailbox.model.MailboxACL.Right; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -55,7 +56,7 @@ import com.google.common.collect.ImmutableMap; public class StoreRightManager implements RightManager { public static final boolean GROUP_FOLDER = true; - private final DelegatingMailboxListener delegatingMailboxListener; + private final EventBus eventBus; private final MailboxSessionMapperFactory mailboxSessionMapperFactory; private final MailboxACLResolver aclResolver; private final GroupMembershipResolver groupMembershipResolver; @@ -64,11 +65,11 @@ public class StoreRightManager implements RightManager { public StoreRightManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver, - DelegatingMailboxListener delegatingMailboxListener) { + EventBus eventBus) { this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; this.aclResolver = aclResolver; this.groupMembershipResolver = groupMembershipResolver; - this.delegatingMailboxListener = delegatingMailboxListener; + this.eventBus = eventBus; } @Override @@ -139,12 +140,13 @@ public class StoreRightManager implements RightManager { Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand); - delegatingMailboxListener.event(EventFactory.aclUpdated() + eventBus.dispatch(EventFactory.aclUpdated() .randomEventId() .mailboxSession(session) .mailbox(mailbox) .aclDiff(aclDiff) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); } private void assertSharesBelongsToUserDomain(String user, ACLCommand mailboxACLCommand) throws DifferentDomainException { @@ -222,12 +224,13 @@ public class StoreRightManager implements RightManager { private void setRights(MailboxACL mailboxACL, MailboxMapper mapper, Mailbox mailbox, MailboxSession session) throws MailboxException { ACLDiff aclDiff = mapper.setACL(mailbox, mailboxACL); - delegatingMailboxListener.event(EventFactory.aclUpdated() + eventBus.dispatch(EventFactory.aclUpdated() .randomEventId() .mailboxSession(session) .mailbox(mailbox) .aclDiff(aclDiff) - .build()); + .build(), + new MailboxIdRegistrationKey(mailbox.getMailboxId())); } /** http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java deleted file mode 100644 index 1cc0319..0000000 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java +++ /dev/null @@ -1,126 +0,0 @@ -/**************************************************************** - * 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.mailbox.store.event; - -import java.util.Collection; - -import javax.inject.Inject; - -import org.apache.james.mailbox.Event; -import org.apache.james.mailbox.MailboxListener; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.events.delivery.EventDelivery; -import org.apache.james.mailbox.events.delivery.InVmEventDelivery; -import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.model.MailboxId; -import org.apache.james.metrics.api.NoopMetricFactory; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableList; - -import reactor.core.publisher.Mono; - -/** - * Receive a {@link org.apache.james.mailbox.MailboxListener.MailboxEvent} and delegate it to an other - * {@link MailboxListener} depending on the registered mailboxId - * - * This is a mono instance Thread safe implementation for DelegatingMailboxListener - */ -public class DefaultDelegatingMailboxListener implements DelegatingMailboxListener { - - private final MailboxListenerRegistry registry; - private final EventDelivery eventDelivery; - - @Override - public ListenerType getType() { - return ListenerType.EACH_NODE; - } - - @VisibleForTesting - public DefaultDelegatingMailboxListener() { - this(new InVmEventDelivery(new NoopMetricFactory()), - new MailboxListenerRegistry()); - } - - @Inject - public DefaultDelegatingMailboxListener(EventDelivery eventDelivery, MailboxListenerRegistry registry) { - this.registry = registry; - this.eventDelivery = eventDelivery; - } - - @Override - public void addListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) throws MailboxException { - if (listener.getType() != ListenerType.MAILBOX) { - throw new MailboxException(listener.getClass().getCanonicalName() + " registred on specific MAILBOX operation while its listener type was " + listener.getType()); - } - registry.addListener(mailboxId, listener); - } - - @Override - public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException { - if (listener.getType() != ListenerType.EACH_NODE && listener.getType() != ListenerType.ONCE) { - throw new MailboxException(listener.getClass().getCanonicalName() + " registered on global event dispatching while its listener type was " + listener.getType()); - } - registry.addGlobalListener(listener); - } - - @Override - public void removeListener(MailboxId mailboxId, MailboxListener listener, MailboxSession session) { - registry.removeListener(mailboxId, listener); - } - - @Override - public void removeGlobalListener(MailboxListener listener, MailboxSession session) { - registry.removeGlobalListener(listener); - } - - @Override - public void event(Event event) { - if (!event.isNoop()) { - ImmutableList<MailboxListener> listeners = ImmutableList.<MailboxListener>builder() - .addAll(registry.getGlobalListeners()) - .addAll(registeredMailboxListeners(event)) - .build(); - - eventDelivery.deliver(listeners, event) - .synchronousListenerFuture() - .onErrorResume(throwable -> Mono.empty()) // suppress InVmEventDelivery delivery errors. This class will be removed soon - .block(); - - if (event instanceof MailboxDeletion) { - MailboxDeletion deletion = (MailboxDeletion) event; - registry.deleteRegistryFor(deletion.getMailboxId()); - } - } - } - - private Collection<MailboxListener> registeredMailboxListeners(Event event) { - if (event instanceof MailboxEvent) { - MailboxEvent mailboxEvent = (MailboxEvent) event; - - return registry.getLocalMailboxListeners(mailboxEvent.getMailboxId()); - } - return ImmutableList.of(); - } - - public MailboxListenerRegistry getRegistry() { - return registry; - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java deleted file mode 100644 index 15b4e84..0000000 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DelegatingMailboxListener.java +++ /dev/null @@ -1,27 +0,0 @@ -/**************************************************************** - * 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.mailbox.store.event; - -import org.apache.james.mailbox.MailboxListener; -import org.apache.james.mailbox.MailboxListenerSupport; - -public interface DelegatingMailboxListener extends MailboxListenerSupport, MailboxListener{ - -} http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java index 2514a40..09e30f8 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java @@ -25,6 +25,7 @@ import javax.inject.Inject; import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.events.Group; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxId; @@ -34,8 +35,12 @@ import org.apache.james.mailbox.store.mail.AnnotationMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class MailboxAnnotationListener implements MailboxListener { +public class MailboxAnnotationListener implements MailboxListener.GroupMailboxListener { + private static final class MailboxAnnotationListenerGroup extends Group {} + private static final Logger logger = LoggerFactory.getLogger(MailboxAnnotationListener.class); + private static final Group GROUP = new MailboxAnnotationListenerGroup(); + private final MailboxSessionMapperFactory mailboxSessionMapperFactory; private final SessionProvider sessionProvider; @@ -44,7 +49,12 @@ public class MailboxAnnotationListener implements MailboxListener { this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; this.sessionProvider = sessionProvider; } - + + @Override + public Group getGroup() { + return GROUP; + } + @Override public ListenerType getType() { return ListenerType.EACH_NODE; http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java index c084bcd..97cfdea 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java @@ -26,32 +26,36 @@ import javax.inject.Inject; import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.events.Group; +import org.apache.james.mailbox.events.RegistrationKey; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.event.DelegatingMailboxListener; import org.apache.james.mailbox.store.event.EventFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.ImmutableSet; + public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailboxListener, QuotaUpdater { private static class ListeningCurrentQuotaUpdaterGroup extends Group {} private static final Logger LOGGER = LoggerFactory.getLogger(ListeningCurrentQuotaUpdater.class); - private static final Group GROUP = new ListeningCurrentQuotaUpdaterGroup(); + public static final Group GROUP = new ListeningCurrentQuotaUpdaterGroup(); + private static final ImmutableSet<RegistrationKey> NO_REGISTRATION_KEYS = ImmutableSet.of(); private final StoreCurrentQuotaManager currentQuotaManager; private final QuotaRootResolver quotaRootResolver; - private final DelegatingMailboxListener delegatingMailboxListener; + private final EventBus eventBus; private final QuotaManager quotaManager; @Inject - public ListeningCurrentQuotaUpdater(StoreCurrentQuotaManager currentQuotaManager, QuotaRootResolver quotaRootResolver, DelegatingMailboxListener delegatingMailboxListener, QuotaManager quotaManager) { + public ListeningCurrentQuotaUpdater(StoreCurrentQuotaManager currentQuotaManager, QuotaRootResolver quotaRootResolver, EventBus eventBus, QuotaManager quotaManager) { this.currentQuotaManager = currentQuotaManager; this.quotaRootResolver = quotaRootResolver; - this.delegatingMailboxListener = delegatingMailboxListener; + this.eventBus = eventBus; this.quotaManager = quotaManager; } @@ -97,7 +101,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo if (addedCount != 0 && addedSize != 0) { currentQuotaManager.decrease(quotaRoot, addedCount, addedSize); } - delegatingMailboxListener.event( + eventBus.dispatch( EventFactory.quotaUpdated() .randomEventId() .user(expunged.getUser()) @@ -105,7 +109,8 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo .quotaCount(quotaManager.getMessageQuota(quotaRoot)) .quotaSize(quotaManager.getStorageQuota(quotaRoot)) .instant(Instant.now()) - .build()); + .build(), + NO_REGISTRATION_KEYS); } private void handleAddedEvent(Added added, QuotaRoot quotaRoot) throws MailboxException { @@ -119,7 +124,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo if (addedCount != 0 && addedSize != 0) { currentQuotaManager.increase(quotaRoot, addedCount, addedSize); } - delegatingMailboxListener.event( + eventBus.dispatch( EventFactory.quotaUpdated() .randomEventId() .user(added.getUser()) @@ -127,7 +132,8 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo .quotaCount(quotaManager.getMessageQuota(quotaRoot)) .quotaSize(quotaManager.getStorageQuota(quotaRoot)) .instant(Instant.now()) - .build()); + .build(), + NO_REGISTRATION_KEYS); } private void handleMailboxDeletionEvent(MailboxDeletion mailboxDeletionEvent) throws MailboxException { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
