Author: rdonkin
Date: Sun Dec 2 15:11:49 2007
New Revision: 600407
URL: http://svn.apache.org/viewvc?rev=600407&view=rev
Log:
Simplify tracking. UID tracker is now a part of the mailbox.
Removed:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/MailboxCache.java
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/MailboxTracker.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidChangeTracker.java
Sun Dec 2 15:11:49 2007
@@ -31,17 +31,19 @@
import javax.mail.MessagingException;
import org.apache.james.mailboxmanager.Constants;
+import org.apache.james.mailboxmanager.MailboxListener;
import org.apache.james.mailboxmanager.MailboxManagerException;
import org.apache.james.mailboxmanager.MessageResult;
import org.apache.james.mailboxmanager.MessageResultUtils;
+import org.apache.james.mailboxmanager.impl.MailboxEventDispatcher;
import org.apache.james.mailboxmanager.impl.MessageFlags;
import org.apache.james.mailboxmanager.mailbox.GeneralMailbox;
-public class UidChangeTracker extends MailboxTracker implements Constants {
+public class UidChangeTracker implements Constants {
-
+ private final MailboxEventDispatcher eventDispatcher;
- private TreeMap cache = new TreeMap();
+ private final TreeMap cache;
private long lastUidAtStart;
@@ -49,11 +51,11 @@
private long lastScannedUid = 0;
- public UidChangeTracker(MailboxCache mailboxCache, String mailboxName,
- long lastUid) {
- super(mailboxCache, mailboxName);
+ public UidChangeTracker(long lastUid) {
this.lastUidAtStart = lastUid;
this.lastUid = lastUid;
+ eventDispatcher = new MailboxEventDispatcher();
+ cache = new TreeMap();
}
public synchronized void expunged(final long[] uidsExpunged) {
@@ -209,6 +211,12 @@
return lastScannedUid;
}
+ public void addMailboxListener(MailboxListener listener) {
+ eventDispatcher.addMailboxListener(listener);
+ }
+ public void removeMailboxListener(MailboxListener listener) {
+ eventDispatcher.removeMailboxListener(listener);
+ }
}
Modified:
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
---
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
(original)
+++
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
Sun Dec 2 15:11:49 2007
@@ -36,7 +36,7 @@
protected MailboxListenerCollector collector;
public void setUp() {
- tracker=new UidChangeTracker(null,"test",1000);
+ tracker=new UidChangeTracker(1000);
collector=new MailboxListenerCollector();
tracker.addMailboxListener(collector);
}
Modified:
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
---
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
(original)
+++
james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
Sun Dec 2 15:11:49 2007
@@ -51,7 +51,7 @@
MailboxRow mr = new MailboxRow("#users.tuser.INBOX", 100);
mr.save();
mr=MailboxRowPeer.retrieveByName("#users.tuser.INBOX");
- ImapMailbox torqueMailbox = new TorqueMailbox(mr, new
UidChangeTracker(null,"#users.tuser.INBOX",100),
+ ImapMailbox torqueMailbox = new TorqueMailbox(mr,
new WriterPreferenceReadWriteLock(),null, 1);
torqueMailbox.addListener(new MailboxListenerCollector());
assertEquals(0,torqueMailbox.getMessageCount());
Modified:
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
---
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
(original)
+++
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
Sun Dec 2 15:11:49 2007
@@ -43,7 +43,6 @@
import org.apache.james.mailboxmanager.SearchParameters;
import org.apache.james.mailboxmanager.UnsupportedCriteriaException;
import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
-import org.apache.james.mailboxmanager.impl.MailboxEventDispatcher;
import org.apache.james.mailboxmanager.mailbox.AbstractGeneralMailbox;
import org.apache.james.mailboxmanager.mailbox.ImapMailbox;
import org.apache.james.mailboxmanager.torque.om.MailboxRow;
@@ -77,22 +76,19 @@
private UidChangeTracker tracker;
- private MailboxEventDispatcher eventDispatcher = new
MailboxEventDispatcher();
-
private UidToKeyConverter uidToKeyConverter;
private final ReadWriteLock lock;
private final long sessionId;
-
- TorqueMailbox(final MailboxRow mailboxRow, final UidChangeTracker tracker,
final ReadWriteLock lock,
+
+ TorqueMailbox(final MailboxRow mailboxRow, final ReadWriteLock lock,
final Log log, final long sessionId) {
setLog(log);
this.sessionId = sessionId;
this.mailboxRow = mailboxRow;
- this.tracker = tracker;
+ this.tracker = new UidChangeTracker(mailboxRow.getLastUid());
this.lock = lock;
- tracker.addMailboxListener(getEventDispatcher());
getUidToKeyConverter().setUidValidity(mailboxRow.getUidValidity());
}
@@ -113,7 +109,7 @@
public synchronized String getName() throws MailboxManagerException {
checkAccess();
- return getUidChangeTracker().getMailboxName();
+ return mailboxRow.getName();
}
public int getMessageCount() throws MailboxManagerException {
@@ -179,7 +175,6 @@
}
} else {
// mailboxRow==null
- getUidChangeTracker().mailboxNotFound();
throw new MailboxManagerException("Mailbox has been deleted");
}
} catch (InterruptedException e) {
@@ -583,19 +578,15 @@
}
public void addListener(MailboxListener listener) throws
MailboxManagerException {
- getEventDispatcher().addMailboxListener(listener);
checkAccess();
+ tracker.addMailboxListener(listener);
}
public void removeListener(MailboxListener mailboxListener) {
- if (!open || getEventDispatcher().size() == 0) {
+ if (!open) {
throw new RuntimeException("mailbox not open");
}
- getEventDispatcher().removeMailboxListener(mailboxListener);
- if (getEventDispatcher().size() == 0) {
- open = false;
- getUidChangeTracker().removeMailboxListener(getEventDispatcher());
- }
+ tracker.removeMailboxListener(mailboxListener);
}
public long getUidValidity() throws MailboxManagerException {
@@ -627,7 +618,6 @@
getUidChangeTracker().foundLastUid(mailboxRow.getLastUid());
return getUidChangeTracker().getLastUid() + 1;
} else {
- getUidChangeTracker().mailboxNotFound();
throw new MailboxManagerException("Mailbox has been
deleted");
}
} catch (NoRowsException e) {
@@ -649,19 +639,7 @@
private void checkAccess() throws MailboxManagerException {
if (!open) {
throw new RuntimeException("mailbox is closed");
- } else if (getEventDispatcher().size() == 0) {
- throw new RuntimeException("mailbox has not been opened");
- } else if (getUidChangeTracker().isExisting()) {
- throw new MailboxManagerException("Mailbox is not existing");
- }
- }
-
-
- protected MailboxEventDispatcher getEventDispatcher() {
- if (eventDispatcher == null) {
- eventDispatcher = new MailboxEventDispatcher();
}
- return eventDispatcher;
}
protected UidChangeTracker getUidChangeTracker() {
Modified:
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=600407&r1=600406&r2=600407&view=diff
==============================================================================
---
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
(original)
+++
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
Sun Dec 2 15:11:49 2007
@@ -20,8 +20,10 @@
package org.apache.james.mailboxmanager.torque;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Random;
import javax.mail.internet.MimeMessage;
@@ -44,8 +46,6 @@
import org.apache.james.mailboxmanager.manager.MailboxManager;
import org.apache.james.mailboxmanager.torque.om.MailboxRow;
import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
-import org.apache.james.mailboxmanager.tracking.MailboxCache;
-import org.apache.james.mailboxmanager.tracking.UidChangeTracker;
import org.apache.james.mailboxmanager.wrapper.ImapMailboxSessionWrapper;
import org.apache.james.services.User;
import org.apache.torque.TorqueException;
@@ -59,15 +59,16 @@
private static final char SQL_WILDCARD_CHAR = '%';
private final static Random random = new Random();
- private MailboxCache mailboxCache;
protected Log log = LogFactory.getLog(TorqueMailboxManager.class);
private final ReadWriteLock lock;
+ private final Map managers;
+
public TorqueMailboxManager() {
this.lock = new WriterPreferenceReadWriteLock();
- mailboxCache = new MailboxCache();
+ managers = new HashMap();
}
public MailboxSession getMailboxSession(String mailboxName,
@@ -99,34 +100,29 @@
}
}
-
-
public ImapMailboxSession getImapMailboxSession(String mailboxName)
throws MailboxManagerException {
try {
- synchronized (getMailboxCache()) {
+ synchronized (managers) {
MailboxRow mailboxRow = MailboxRowPeer
.retrieveByName(mailboxName);
if (mailboxRow != null) {
- UidChangeTracker tracker = (UidChangeTracker)
getMailboxCache()
- .getMailboxTracker(mailboxName,
- UidChangeTracker.class);
- if (tracker == null) {
- tracker = new UidChangeTracker(getMailboxCache(),
- mailboxName, mailboxRow.getLastUid());
- getMailboxCache().add(mailboxName, tracker);
- }
getLog().info("created ImapMailboxSession "+mailboxName);
- final ImapMailbox torqueMailbox = new TorqueMailbox(
- mailboxRow, tracker, lock,
getLog(), random.nextLong());
+
+ ImapMailbox torqueMailbox = (ImapMailbox)
managers.get(mailboxName);
+ if (torqueMailbox == null) {
+ torqueMailbox = new TorqueMailbox(
+ mailboxRow, lock, getLog(),
random.nextLong());
+ managers.put(mailboxName, torqueMailbox);
+ }
+
final ImapMailboxSessionWrapper wrapper
= new ImapMailboxSessionWrapper(torqueMailbox);
return wrapper;
} else {
getLog().info("Mailbox '" + mailboxName + "' not found.");
- getMailboxCache().notFound(mailboxName);
throw new MailboxNotFoundException(mailboxName);
}
}
@@ -135,15 +131,10 @@
}
}
- private MailboxCache getMailboxCache() {
- return mailboxCache;
- }
-
-
public void createMailbox(String namespaceName)
throws MailboxManagerException {
getLog().info("createMailbox "+namespaceName);
- synchronized (getMailboxCache()) {
+ synchronized (managers) {
MailboxRow mr = new MailboxRow();
mr.setName(namespaceName);
mr.setLastUid(0);
@@ -159,7 +150,7 @@
public void deleteMailbox(String mailboxName)
throws MailboxManagerException {
getLog().info("deleteMailbox "+mailboxName);
- synchronized (getMailboxCache()) {
+ synchronized (managers) {
try {
// TODO put this into a serilizable transaction
MailboxRow mr = MailboxRowPeer.retrieveByName(mailboxName);
@@ -167,7 +158,7 @@
throw new MailboxManagerException("Mailbox not found");
}
MailboxRowPeer.doDelete(mr);
- getMailboxCache().notFound(mailboxName);
+ managers.remove(mailboxName);
} catch (TorqueException e) {
throw new MailboxManagerException(e);
}
@@ -178,7 +169,7 @@
throws MailboxManagerException {
try {
getLog().info("renameMailbox "+from+" to "+to);
- synchronized (getMailboxCache()) {
+ synchronized (managers) {
// TODO put this into a serilizable transaction
MailboxRow mr = MailboxRowPeer.retrieveByName(from);
if (mr == null) {
@@ -201,7 +192,6 @@
sub.setName(to + sub.getName().substring(from.length()));
sub.save();
getLog().info("renameMailbox sub-mailbox "+subOrigName+"
to "+subNewName);
- getMailboxCache().renamed(subOrigName,subNewName);
}
}
} catch (Exception e) {
@@ -269,10 +259,10 @@
CountHelper countHelper=new CountHelper();
int count;
try {
- synchronized (getMailboxCache()) {
+ synchronized (managers) {
count = countHelper.count(c);
if (count == 0) {
- getMailboxCache().notFound(mailboxName);
+ managers.remove(mailboxName);
return false;
} else {
if (count == 1) {
@@ -289,13 +279,14 @@
}
public void close() {
+ managers.clear();
}
public void deleteEverything() throws MailboxManagerException {
try {
MailboxRowPeer.doDelete(new
Criteria().and(MailboxRowPeer.MAILBOX_ID,
new Integer(-1), Criteria.GREATER_THAN));
- mailboxCache = new MailboxCache();
+ managers.clear();
} catch (TorqueException e) {
throw new MailboxManagerException(e);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]