Author: norman
Date: Fri May 14 10:30:02 2010
New Revision: 944194

URL: http://svn.apache.org/viewvc?rev=944194&view=rev
Log:
* Add javadocs
* Some more small layout fixes for JCR to allow better scalling when you have 
more the 10000 users

Modified:
    
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java
    
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/GlobalMailboxSessionJCRRepository.java
    
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/Persistent.java
    
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
    
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
    
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
    
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAUidConsumer.java
    
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MailboxSessionEntityManagerFactory.java

Modified: 
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java
 (original)
+++ 
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/AbstractStressTest.java
 Fri May 14 10:30:02 2010
@@ -36,7 +36,8 @@ import org.junit.Test;
 
 public abstract class AbstractStressTest {
 
-    private final static int APPEND_OPERATIONS = 1000;
+    private final static int APPEND_OPERATIONS = 500;
+    
     
     protected abstract StoreMailboxManager<?> getMailboxManager();
     

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/GlobalMailboxSessionJCRRepository.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/GlobalMailboxSessionJCRRepository.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/GlobalMailboxSessionJCRRepository.java
 (original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/GlobalMailboxSessionJCRRepository.java
 Fri May 14 10:30:02 2010
@@ -47,6 +47,9 @@ public class GlobalMailboxSessionJCRRepo
         }
     }
 
+    /**
+     * Login in the {...@link Repository} with the global configured user and 
password
+     */
     @Override
     public Session login(MailboxSession session) throws RepositoryException {
         Session jcrSession = (Session) 
session.getAttributes().get(JCR_SESSION);

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
 (original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRImapConstants.java
 Fri May 14 10:30:02 2010
@@ -24,13 +24,6 @@ package org.apache.james.imap.jcr;
  */
 public interface JCRImapConstants {
 
-    /**
-     * Node path scaling
-     */
-    public final static int MAX_SCALING = -1;
-
-    public final static int MIN_SCALING = 0;
-
     
        /**
         * Delimiter for Nodes

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java 
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRUtils.java 
Fri May 14 10:30:02 2010
@@ -55,14 +55,27 @@ public class JCRUtils implements JCRImap
                 }
                 session = repository.login(new SimpleCredentials(username, 
pass), workspace);
             }
-            // Register the custom node types defined in the CND file
-            InputStream is = Thread.currentThread().getContextClassLoader()
-                                  
.getResourceAsStream("org/apache/james/imap/jcr/imap.cnd");
-            CndImporter.registerNodeTypes(new InputStreamReader(is), session);
+            registerCnd(session);
             session.logout();
         } catch (Exception e) {
             throw new RuntimeException("Unable to register cnd file", e);
         }    
     }
     
+    /**
+     * Register the imap CND file 
+     * 
+     * @param session
+     */
+    public static void registerCnd(Session session) {
+        // Register the custom node types defined in the CND file
+        InputStream is = Thread.currentThread().getContextClassLoader()
+                              
.getResourceAsStream("org/apache/james/imap/jcr/imap.cnd");
+        try {
+            CndImporter.registerNodeTypes(new InputStreamReader(is), session);
+        } catch (Exception e) {
+            throw new RuntimeException("Unable to register cnd file", e);
+        }
+    }
+    
 }

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/Persistent.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/Persistent.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/Persistent.java 
(original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/Persistent.java 
Fri May 14 10:30:02 2010
@@ -23,6 +23,7 @@ import java.io.IOException;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
+
 public interface Persistent {
 
        /**

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
 (original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
 Fri May 14 10:30:02 2010
@@ -243,8 +243,18 @@ public class JCRMailboxMapper extends Ab
                         //split the name so we can construct a nice node tree
                         final String nameParts[] = name.split("\\" 
+String.valueOf(delimiter),3);
                         
-                        for (int i = 0; i < nameParts.length; i++) {           
               
-                           node = JcrUtils.getOrAddNode(node, nameParts[i], 
"imap:mailbox");    
+                        // this loop will create a structure like:
+                        // /mailboxes/u/user/INBOX
+                        //
+                        // This is needed to minimize the child nodes a bit
+                        for (int i = 0; i < nameParts.length; i++) {
+                           String part = nameParts[i];
+                           if (i == 1) {
+                               node = JcrUtils.getOrAddNode(node, 
String.valueOf(part.charAt(0)), "imap:mailbox");   
+
+                           } 
+                           node = JcrUtils.getOrAddNode(node, part, 
"imap:mailbox");   
+                           
                         }
                         jcrMailbox.merge(node);
 

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
 (original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
 Fri May 14 10:30:02 2010
@@ -48,6 +48,10 @@ import org.apache.james.imap.mailbox.Sea
 import org.apache.james.imap.store.mail.MessageMapper;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 
+/**
+ * JCR implementation of a {...@link MessageMapper}
+ *
+ */
 public class JCRMessageMapper extends AbstractJCRMapper implements 
MessageMapper<String> {
 
     private final String uuid;
@@ -402,7 +406,7 @@ public class JCRMessageMapper extends Ab
                 Calendar cal = Calendar.getInstance();
                 cal.setTime(date);
                 final String year = String.valueOf(cal.get(Calendar.YEAR));
-                final String month = String.valueOf(cal.get(Calendar.MONTH 
+1));
+                final String month = String.valueOf(cal.get(Calendar.MONTH) 
+1);
                 final String day = 
String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
                
                 Node dayNode = null;
@@ -420,13 +424,13 @@ public class JCRMessageMapper extends Ab
                         @Override
                         protected Object run(Node mailboxNode) throws 
RepositoryException {
 
-                            Node yearNode = 
JcrUtils.getOrAddFolder(mailboxNode, String.valueOf(year));
+                            Node yearNode = 
JcrUtils.getOrAddFolder(mailboxNode, year);
                             yearNode.addMixin(JcrConstants.MIX_LOCKABLE);
 
-                            Node monthNode = JcrUtils.getOrAddFolder(yearNode, 
String.valueOf(month));
+                            Node monthNode = JcrUtils.getOrAddFolder(yearNode, 
month);
                             monthNode.addMixin(JcrConstants.MIX_LOCKABLE);
 
-                            Node dayNode = JcrUtils.getOrAddFolder(monthNode, 
String.valueOf(day));
+                            Node dayNode = JcrUtils.getOrAddFolder(monthNode, 
day);
                             dayNode.addMixin(JcrConstants.MIX_LOCKABLE);
                             // save the folders for now
                             getSession().save();

Modified: 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
 (original)
+++ 
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java
 Fri May 14 10:30:02 2010
@@ -151,7 +151,12 @@ public class JCRSubscriptionMapper exten
             if (sub == null) {
                 Node subscriptionsNode = 
JcrUtils.getOrAddNode(getSession().getRootNode(), SUBSCRIPTIONS_PATH);
                 
-                Node userNode = JcrUtils.getOrAddNode(subscriptionsNode, 
username);
+                // this loop will create a structure like:
+                // /mailboxes/u/user/INBOX
+                //
+                // This is needed to minimize the child nodes a bit
+                Node userNode = JcrUtils.getOrAddNode(subscriptionsNode, 
String.valueOf(username.charAt(0)));
+                userNode = JcrUtils.getOrAddNode(userNode, 
String.valueOf(username));
                 node = JcrUtils.getOrAddNode(userNode, mailbox, 
"imap:subscription");
             } else {
                 node = sub.getNode();

Modified: 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAUidConsumer.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAUidConsumer.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAUidConsumer.java
 (original)
+++ 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAUidConsumer.java
 Fri May 14 10:30:02 2010
@@ -26,11 +26,16 @@ import org.apache.james.imap.mailbox.Mai
 import org.apache.james.imap.store.UidConsumer;
 import org.apache.james.imap.store.mail.model.Mailbox;
 
+/**
+ * Take care of consume/reserve the next uid for a {...@link Mailbox}. This is 
done by using database locks
+ * 
+ *
+ */
 public class JPAUidConsumer implements UidConsumer<Long>{
 
-    private MailboxSessionEntityManagerFactory factory;
+    private final MailboxSessionEntityManagerFactory factory;
 
-    public JPAUidConsumer(MailboxSessionEntityManagerFactory factory) {
+    public JPAUidConsumer(final MailboxSessionEntityManagerFactory factory) {
         this.factory = factory;
     }
     

Modified: 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MailboxSessionEntityManagerFactory.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MailboxSessionEntityManagerFactory.java?rev=944194&r1=944193&r2=944194&view=diff
==============================================================================
--- 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MailboxSessionEntityManagerFactory.java
 (original)
+++ 
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MailboxSessionEntityManagerFactory.java
 Fri May 14 10:30:02 2010
@@ -31,9 +31,9 @@ import org.apache.james.imap.mailbox.Mai
 public class MailboxSessionEntityManagerFactory {
 
     protected final static String ENTITYMANAGER ="ENTITYMANAGER";
-    private EntityManagerFactory factory;
+    private final EntityManagerFactory factory;
     
-    public MailboxSessionEntityManagerFactory(EntityManagerFactory factory) {
+    public MailboxSessionEntityManagerFactory(final EntityManagerFactory 
factory) {
         this.factory = factory;
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to