Author: norman Date: Mon Jun 20 10:07:03 2011 New Revision: 1137573 URL: http://svn.apache.org/viewvc?rev=1137573&view=rev Log: Its now possible to directly use StoreMailboxManager and StoreMessageManager, so we can remove some of its sub-classes. Part of MAILBOX-98
Added: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java - copied, changed from r1135926, james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java Removed: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/AbstractJCRMapper.java james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/AbstractJCRScalingMapper.java james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java james/mailbox/trunk/tool/src/main/java/org/apache/james/mailbox/copier/MailboxCopierImpl.java Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/AbstractJCRScalingMapper.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/AbstractJCRScalingMapper.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/AbstractJCRScalingMapper.java (original) +++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/AbstractJCRScalingMapper.java Mon Jun 20 10:07:03 2011 @@ -20,25 +20,99 @@ package org.apache.james.mailbox.jcr; import javax.jcr.Node; import javax.jcr.RepositoryException; +import javax.jcr.Session; import org.apache.jackrabbit.commons.JcrUtils; +import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.store.transaction.TransactionalMapper; +import org.slf4j.Logger; /** - * Abstract base class for Mapper's which support scaling + * Abstract base class for Mapper's which support scaling. This supports Level 1 Implementations of JCR. So no real transaction management is used. + * + * The Session.save() will get called on commit() method, session.refresh(false) on rollback, and session.refresh(true) on begin() * */ -public abstract class AbstractJCRScalingMapper extends AbstractJCRMapper{ +public abstract class AbstractJCRScalingMapper extends TransactionalMapper implements JCRImapConstants { + public final static String MAILBOXES_PATH = "mailboxes"; + private final MailboxSessionJCRRepository repository; private final int scaling; + + private MailboxSession mSession; private final static char PAD ='_'; public AbstractJCRScalingMapper(MailboxSessionJCRRepository repository, MailboxSession mSession, int scaling) { - super(repository, mSession); this.scaling = scaling; + + this.mSession = mSession; + this.repository = repository; + } + + /** + * Return the logger + * + * @return logger + */ + protected Logger getLogger() { + return mSession.getLog(); + } + + /** + * Return the JCR Session + * + * @return session + */ + protected Session getSession() throws RepositoryException{ + return repository.login(mSession); + } + + /** + * Begin is not supported by level 1 JCR implementations, however we refresh the session + */ + protected void begin() throws MailboxException { + try { + getSession().refresh(true); + } catch (RepositoryException e) { + // do nothin on refresh + } + // Do nothing } /** + * Just call save on the underlying JCR Session, because level 1 JCR implementation does not offer Transactions + */ + protected void commit() throws MailboxException { + try { + if (getSession().hasPendingChanges()) { + getSession().save(); + } + } catch (RepositoryException e) { + throw new MailboxException("Unable to commit", e); + } + } + + /** + * Rollback is not supported by level 1 JCR implementations, so just do nothing + */ + protected void rollback() throws MailboxException { + try { + // just refresh session and discard all pending changes + getSession().refresh(false); + } catch (RepositoryException e) { + // just catch on rollback by now + } + } + + /** + * Logout from open JCR Session + */ + public void endRequest() { + repository.logout(mSession); + } + + /** * Construct the user node path part, using the specified scaling factor. * If the username is not long enough it will fill it with {@link #PAD} * Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java (original) +++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java Mon Jun 20 10:07:03 2011 @@ -46,9 +46,9 @@ import org.apache.james.mailbox.jcr.JCRI import org.apache.james.mailbox.jcr.MailboxSessionJCRRepository; import org.apache.james.mailbox.jcr.mail.model.JCRMailbox; import org.apache.james.mailbox.jcr.mail.model.JCRMessage; +import org.apache.james.mailbox.store.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.AbstractMessageMapper; import org.apache.james.mailbox.store.mail.MessageMapper; -import org.apache.james.mailbox.store.mail.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.Message; Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java (original) +++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java Mon Jun 20 10:07:03 2011 @@ -38,9 +38,9 @@ import org.apache.james.mailbox.jpa.mail import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage; import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage; import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage; +import org.apache.james.mailbox.store.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.AbstractMessageMapper; import org.apache.james.mailbox.store.mail.MessageMapper; -import org.apache.james.mailbox.store.mail.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.Message; import org.apache.openjpa.persistence.ArgumentException; Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java (original) +++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java Mon Jun 20 10:07:03 2011 @@ -46,8 +46,8 @@ import org.apache.james.mailbox.maildir. import org.apache.james.mailbox.maildir.MaildirStore; import org.apache.james.mailbox.maildir.mail.model.MaildirMessage; import org.apache.james.mailbox.store.ResultUtils; +import org.apache.james.mailbox.store.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.AbstractMessageMapper; -import org.apache.james.mailbox.store.mail.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.Message; import org.apache.james.mailbox.store.mail.model.impl.SimpleMessage; Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java (original) +++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java Mon Jun 20 10:07:03 2011 @@ -27,12 +27,15 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import javax.mail.Flags; +import javax.mail.Flags.Flag; + import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageMetaData; import org.apache.james.mailbox.MessageRange; +import org.apache.james.mailbox.store.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.AbstractMessageMapper; -import org.apache.james.mailbox.store.mail.SimpleMessageMetaData; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.Message; import org.apache.james.mailbox.store.mail.model.impl.SimpleMessage; @@ -217,6 +220,11 @@ public class InMemoryMessageMapper exten SimpleMessage<Long> message = new SimpleMessage<Long>(mailbox, original); message.setUid(uid); message.setModSeq(modSeq); + Flags flags = original.createFlags(); + + // Mark message as recent as it is a copy + flags.add(Flag.RECENT); + message.setFlags(flags); return save(mailbox, message); } @@ -242,7 +250,11 @@ public class InMemoryMessageMapper exten * @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.store.mail.model.Message) */ protected MessageMetaData save(Mailbox<Long> mailbox, Message<Long> message) throws MailboxException { - getMembershipByUidForMailbox(mailbox).put(message.getUid(), message); + SimpleMessage<Long> copy = new SimpleMessage<Long>(mailbox, message); + copy.setUid(message.getUid()); + copy.setModSeq(message.getModSeq()); + getMembershipByUidForMailbox(mailbox).put(message.getUid(), copy); + return new SimpleMessageMetaData(message); } Copied: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java (from r1135926, james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java) URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java?p2=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java&p1=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java&r1=1135926&r2=1137573&rev=1137573&view=diff ============================================================================== --- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java (original) +++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java Mon Jun 20 10:07:03 2011 @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.mailbox.store.mail; +package org.apache.james.mailbox.store; import java.util.Date; Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (original) +++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java Mon Jun 20 10:07:03 2011 @@ -107,6 +107,11 @@ public class StoreMailboxManager<Id> imp } } + /** + * Return the {@link AbstractDelegatingMailboxListener} which is used by this {@link MailboxManager} + * + * @return delegatingListener + */ public AbstractDelegatingMailboxListener getDelegationListener() { if (delegatingListener == null) { delegatingListener = new HashMapDelegatingMailboxListener(); @@ -114,14 +119,31 @@ public class StoreMailboxManager<Id> imp return delegatingListener; } + + /** + * Return the {@link MessageSearchIndex} used by this {@link MailboxManager} + * + * @return index + */ public MessageSearchIndex<Id> getMessageSearchIndex() { return index; } + + /** + * Return the {@link MailboxEventDispatcher} used by thei {@link MailboxManager} + * + * @return dispatcher + */ public MailboxEventDispatcher<Id> getEventDispatcher() { return dispatcher; } + /** + * Return the {@link MailboxSessionMapperFactory} used by this {@link MailboxManager} + * + * @return mailboxSessionMapperFactory + */ public MailboxSessionMapperFactory<Id> getMapperFactory() { return mailboxSessionMapperFactory; } @@ -134,12 +156,18 @@ public class StoreMailboxManager<Id> imp * @param delegatingListener */ public void setDelegatingMailboxListener(AbstractDelegatingMailboxListener delegatingListener) { - if(this.delegatingListener != null) - this.delegatingListener.close(); + if (this.delegatingListener != null) + this.delegatingListener.close(); this.delegatingListener = delegatingListener; dispatcher.addMailboxListener(this.delegatingListener); } + /** + * Set the {@link MessageSearchIndex} which should be used by this {@link MailboxManager}. If none is given this implementation will use a {@link SimpleMessageSearchIndex} + * by default + * + * @param index + */ public void setMessageSearchIndex(MessageSearchIndex<Id> index) { this.index = index; } @@ -234,7 +262,9 @@ public class StoreMailboxManager<Id> imp } /** - * Create a Mailbox for the given namespace + * Create a Mailbox for the given namespace. This will by default return a {@link SimpleMailbox}. + * + * If you need to return something more special just override this method * * @param namespaceName * @throws MailboxException @@ -329,67 +359,7 @@ public class StoreMailboxManager<Id> imp // We need to create a copy of the mailbox as maybe we can not refer to the real // mailbox once we remove it - Mailbox<Id> m = new Mailbox<Id>() { - private Id id = mailbox.getMailboxId(); - private String namespace = mailbox.getNamespace(); - private String name = mailbox.getName(); - private String user = mailbox.getUser(); - private long uidVal = mailbox.getUidValidity(); - private long lastUid = mailbox.getLastKnownUid(); - private long lastSeq = mailbox.getHighestKnownModSeq(); - - - public Id getMailboxId() { - return id; - } - - @Override - public String getNamespace() { - return namespace; - } - - @Override - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - @Override - public String getUser() { - return user; - } - - @Override - public void setUser(String user) { - this.user = user; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - - } - - @Override - public long getUidValidity() { - return uidVal; - } - - @Override - public long getLastKnownUid() { - return lastUid; - } - - @Override - public long getHighestKnownModSeq() { - return lastSeq; - } - - }; + SimpleMailbox<Id> m = new SimpleMailbox<Id>(mailbox); mapper.delete(mailbox); return m; } @@ -576,7 +546,4 @@ public class StoreMailboxManager<Id> imp public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException { delegatingListener.addGlobalListener(listener, session); } - - - } Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java (original) +++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java Mon Jun 20 10:07:03 2011 @@ -42,6 +42,7 @@ import org.apache.commons.io.input.TeeIn import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageMetaData; import org.apache.james.mailbox.MessageRange; import org.apache.james.mailbox.MessageResult; @@ -68,14 +69,19 @@ import org.apache.james.mime4j.parser.Mi import com.sun.mail.imap.protocol.MessageSet; /** - * Abstract base class for {@link org.apache.james.mailbox.MessageManager} implementations. This abstract - * class take care of dispatching events to the registered {@link MailboxListener} and so help - * with handling concurrent {@link MailboxSession}'s. So this is a perfect starting point when writing your - * own implementation and don't want to depend on {@link MessageMapper}. + * Base class for {@link org.apache.james.mailbox.MessageManager} implementations. + * + * This base class take care of dispatching events to the registered {@link MailboxListener} and so help + * with handling concurrent {@link MailboxSession}'s. + * + * * */ public class StoreMessageManager<Id> implements org.apache.james.mailbox.MessageManager{ + /** + * The minimal Permanent flags the {@link MessageManager} must support + */ protected final static Flags MINIMAL_PERMANET_FLAGS; static { MINIMAL_PERMANET_FLAGS = new Flags(); @@ -90,9 +96,9 @@ public class StoreMessageManager<Id> imp private final MailboxEventDispatcher<Id> dispatcher; - protected final MessageMapperFactory<Id> mapperFactory; + private final MessageMapperFactory<Id> mapperFactory; - protected final MessageSearchIndex<Id> index; + private final MessageSearchIndex<Id> index; public StoreMessageManager(final MessageMapperFactory<Id> mapperFactory, final MessageSearchIndex<Id> index, final MailboxEventDispatcher<Id> dispatcher, final Mailbox<Id> mailbox) throws MailboxException { this.mailbox = mailbox; @@ -336,6 +342,12 @@ public class StoreMessageManager<Id> imp return new SimpleMessage<Id>(internalDate, size, bodyStartOctet, content, flags, propertyBuilder, getMailboxEntity().getMailboxId()); } + /** + * Add the {@link MailboxListener} + * + * @param listener + * @throws MailboxException + */ public void addListener(MailboxListener listener) throws MailboxException { dispatcher.addMailboxListener(listener); } Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java (original) +++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java Mon Jun 20 10:07:03 2011 @@ -34,7 +34,7 @@ import org.apache.james.mailbox.store.us import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription; /** - * Manages subscriptions. + * Manages subscriptions for Users and Mailboxes. */ public class StoreSubscriptionManager implements SubscriptionManager { @@ -70,7 +70,9 @@ public class StoreSubscriptionManager im } /** - * Create Subscription for the given user and mailbox + * Create Subscription for the given user and mailbox. By default a {@link SimpleSubscription} will get returned. + * + * If you need something more special just override this method * * @param session * @param mailbox Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java (original) +++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java Mon Jun 20 10:07:03 2011 @@ -46,6 +46,8 @@ public class SimpleMailbox<Id> implement this.user = mailbox.getUser(); this.name = mailbox.getName(); this.uidValidity = mailbox.getUidValidity(); + this.lastKnownUid = mailbox.getLastKnownUid(); + this.highestKnownModSeq = mailbox.getHighestKnownModSeq(); } /* Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java (original) +++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java Mon Jun 20 10:07:03 2011 @@ -143,10 +143,6 @@ public class SimpleMessage<Id> extends A seen = flags.contains(Flags.Flag.SEEN); } - public void unsetRecent() { - recent = false; - } - public InputStream getBodyContent() throws IOException { return content.newStream(getBodyStartOctet(), -1); } Modified: james/mailbox/trunk/tool/src/main/java/org/apache/james/mailbox/copier/MailboxCopierImpl.java URL: http://svn.apache.org/viewvc/james/mailbox/trunk/tool/src/main/java/org/apache/james/mailbox/copier/MailboxCopierImpl.java?rev=1137573&r1=1137572&r2=1137573&view=diff ============================================================================== --- james/mailbox/trunk/tool/src/main/java/org/apache/james/mailbox/copier/MailboxCopierImpl.java (original) +++ james/mailbox/trunk/tool/src/main/java/org/apache/james/mailbox/copier/MailboxCopierImpl.java Mon Jun 20 10:07:03 2011 @@ -117,7 +117,6 @@ public class MailboxCopierImpl implement dstMailboxManager.startProcessingRequest(dstMailboxSession); MessageManager dstMessageManager = dstMailboxManager.getMailbox(mailboxPath, dstMailboxSession); - dstMailboxManager.endProcessingRequest(dstMailboxSession); int j=0; Iterator<MessageResult> messageResultIterator = srcMessageManager.getMessages(MessageRange.all(), GROUP, srcMailboxSession); @@ -134,6 +133,7 @@ public class MailboxCopierImpl implement j++; } + dstMailboxManager.endProcessingRequest(dstMailboxSession); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org