Author: rdonkin
Date: Mon Nov 19 13:00:51 2007
New Revision: 596445
URL: http://svn.apache.org/viewvc?rev=596445&view=rev
Log:
Initialise number cache lazily.
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java?rev=596445&r1=596444&r2=596445&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java
Mon Nov 19 13:00:51 2007
@@ -52,6 +52,8 @@
private MailboxEventDispatcher eventDispatcher = new
MailboxEventDispatcher();
+ private boolean startingNumberCache = false;
+
public NumberStableSessionWrapper() {
}
@@ -67,18 +69,22 @@
public void init() throws MailboxManagerException {
mailbox.addListener(eventDispatcher);
- getNumberCache();
eventDispatcher.addMailboxListener(this);
}
protected UidToMsnBidiMap getNumberCache() throws MailboxManagerException {
- if (numberCache == null) {
+ if (numberCache == null && mailbox != null) {
+ startingNumberCache = true;
+ try {
MessageResult[] mr = mailbox.getMessages(GeneralMessageSetImpl
.all(), MessageResult.UID);
numberCache = new UidToMsnBidiMap();
for (int i = 0; i < mr.length; i++) {
numberCache.add(mr[i].getUid());
}
+ } finally {
+ startingNumberCache = false;
+ }
}
return numberCache;
}
@@ -112,6 +118,8 @@
protected MessageResult addMsnResult(MessageResult mr, int result)
throws MailboxManagerException {
+ // added events dispatched before the cache has been started
+ // should be ignored
if (mr != null) {
if ((result & MessageResult.MSN) > 0) {
// TODO copy the MessageResult because it could be another
class
@@ -162,7 +170,12 @@
public void added(MessageResult result) {
try {
- getNumberCache().add(result.getUid());
+ // added events dispatched before the cache has been started
+ // should be ignored
+ if (!startingNumberCache && numberCache != null)
+ {
+ getNumberCache().add(result.getUid());
+ }
} catch (MailboxManagerException e) {
getLog().error("This should not happen",e);
}
Modified:
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java?rev=596445&r1=596444&r2=596445&view=diff
==============================================================================
---
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
(original)
+++
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapperTest.java
Mon Nov 19 13:00:51 2007
@@ -19,16 +19,11 @@
package org.apache.james.mailboxmanager.wrapper;
-import org.apache.james.mailboxmanager.GeneralMessageSet;
import org.apache.james.mailboxmanager.MailboxListener;
import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.MessageResult;
-import org.apache.james.mailboxmanager.impl.MessageResultImpl;
import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
-import org.jmock.core.Constraint;
-import org.jmock.core.constraint.IsInstanceOf;
public class SessionMailboxWrapperTest extends MockObjectTestCase {
@@ -40,13 +35,7 @@
final MailboxListener listenerObject =
sessionMailboxWrapper.getListenerObject();
generalMailboxMock.expects(once()).method("addListener").with(same(listenerObject));
-
- Constraint[] getMessagesArgs={new
IsInstanceOf(GeneralMessageSet.class),new IsInstanceOf(Integer.class)};
-
- MessageResult[] result={new MessageResultImpl()};
-
-
generalMailboxMock.expects(once()).method("getMessages").with(getMessagesArgs).after("addListener").will(returnValue(result));
-
generalMailboxMock.expects(once()).method("removeListener").with(same(listenerObject)).after("getMessages");
+
generalMailboxMock.expects(once()).method("removeListener").with(same(listenerObject));
sessionMailboxWrapper.setMailbox((GeneralMailbox) generalMailboxMock
.proxy());
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]