Author: norman
Date: Wed Oct  5 13:28:07 2011
New Revision: 1179215

URL: http://svn.apache.org/viewvc?rev=1179215&view=rev
Log:
Add new MailboxSessionIdGenerator interface and an implementation which use 
Random under the hood. This allows to have a distributed id generator if 
needed. This also fixes the problem with generated MailboxSession ids that 
returned 0L before. See MAILBOX-149

Added:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
   (with props)
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
   (with props)
Modified:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java?rev=1179215&r1=1179214&r2=1179215&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
 Wed Oct  5 13:28:07 2011
@@ -32,6 +32,11 @@ import org.slf4j.Logger;
 public interface MailboxSession {
 
 
+    /**
+     * Id which will be used for a System session
+     */
+    public final static long SYSTEM_SESSION_ID = 0L;
+
     public static enum SessionType {
         /**
          * Session was created via the System

Added: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java?rev=1179215&view=auto
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
 (added)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
 Wed Oct  5 13:28:07 2011
@@ -0,0 +1,39 @@
+/****************************************************************
+ * 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;
+
+
+/**
+ * Generator for id's which should used for new {@link MailboxSession} 
instances
+ * 
+ *
+ */
+public interface MailboxSessionIdGenerator {
+
+    /**
+     * Return the next id to use for a {@link MailboxSession}. The id must be 
unique
+     * while the server is running and can be any long except {@link 
MailboxSession#SYSTEM_SESSION_ID}.
+     * 
+     * The returned ids can be in any specific order.
+     * 
+     * @return id
+     */
+    long nextId();
+}

Propchange: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java?rev=1179215&view=auto
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
 (added)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
 Wed Oct  5 13:28:07 2011
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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;
+
+import java.util.Random;
+
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSessionIdGenerator;
+
+
+/**
+ * {@link MailboxSessionIdGenerator} which use a {@link Random} to generate 
the next Id to use
+ * 
+ *
+ */
+public class RandomMailboxSessionIdGenerator implements 
MailboxSessionIdGenerator {
+    private final static Random RANDOM = new Random();
+
+    @Override
+    public long nextId() {
+        long id;
+        while ((id = RANDOM.nextLong()) == MailboxSession.SYSTEM_SESSION_ID) {
+            // loop till the id is not 0L
+            //
+            // See also MAILBOX-149
+        }
+        return id;
+    }
+
+}

Propchange: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=1179215&r1=1179214&r2=1179215&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
 Wed Oct  5 13:28:07 2011
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.MailboxP
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxQuery;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSessionIdGenerator;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.RequestAware;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
@@ -82,6 +83,8 @@ public class StoreMailboxManager<Id> imp
 
     private MessageSearchIndex<Id> index;
 
+    private MailboxSessionIdGenerator idGenerator;
+
     
     public StoreMailboxManager(MailboxSessionMapperFactory<Id> 
mailboxSessionMapperFactory, final Authenticator authenticator, final 
MailboxPathLocker locker) {
         this.authenticator = authenticator;
@@ -93,6 +96,10 @@ public class StoreMailboxManager<Id> imp
         this(mailboxSessionMapperFactory, authenticator, new 
JVMMailboxPathLocker());
     }
    
+    public void setMailboxSessionIdGenerator(MailboxSessionIdGenerator 
idGenerator) {
+        this.idGenerator = idGenerator;
+    }
+    
     public void setCopyBatchSize(int copyBatchSize) {
         this.copyBatchSize = copyBatchSize;
     }
@@ -113,6 +120,10 @@ public class StoreMailboxManager<Id> imp
         if (index instanceof ListeningMessageSearchIndex) {
             addGlobalListener((ListeningMessageSearchIndex) index, null);
         }
+        
+        if (idGenerator == null) {
+            idGenerator = new RandomMailboxSessionIdGenerator();
+        }
     }
     
     /**
@@ -216,7 +227,7 @@ public class StoreMailboxManager<Id> imp
      * @return id
      */
     protected long randomId() {
-        return RANDOM.nextLong();
+        return idGenerator.nextId();
     }
     
     /*



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to