You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/06/07 15:22:20 UTC

svn commit: r952214 - in /james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr: AbstractJCRMapper.java GlobalMailboxSessionJCRRepository.java MailboxSessionJCRRepository.java

Author: norman
Date: Mon Jun  7 13:22:19 2010
New Revision: 952214

URL: http://svn.apache.org/viewvc?rev=952214&view=rev
Log:
Move the JCR handling to MailboxSessionJCRRepository, so we are sure only one Session is bound per Request

Modified:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.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/MailboxSessionJCRRepository.java

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java?rev=952214&r1=952213&r2=952214&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java Mon Jun  7 13:22:19 2010
@@ -36,7 +36,6 @@ import org.apache.james.imap.store.trans
 public abstract class AbstractJCRMapper extends AbstractTransactionalMapper implements JCRImapConstants {
     public final static String MAILBOXES_PATH =  "mailboxes";
     public final static String SUBSCRIPTIONS_PATH =  "subscriptions";
-    private final static String JCR_SESSION = "JCR_SESSION";
 
     private final Log logger;
     private final MailboxSessionJCRRepository repository;
@@ -69,12 +68,7 @@ public abstract class AbstractJCRMapper 
      * @return session
      */
     protected Session getSession() throws RepositoryException{
-        Session session = (Session) mSession.getAttributes().get(JCR_SESSION);
-    	if (session == null) {
-    		session = repository.login(mSession);
-    		mSession.getAttributes().put(JCR_SESSION, session);
-    	}
-        return session;
+        return repository.login(mSession);
     }
 
     /**
@@ -118,13 +112,7 @@ public abstract class AbstractJCRMapper 
      * Logout from open JCR Session
      */
     public void endRequest() {
-        Session session = (Session) mSession.getAttributes().remove(JCR_SESSION);
-
-        if (session != null) {
-            if (session.isLive())
-                session.logout();
-            session = null;
-        }
+       repository.logout(mSession);
     }
         
     

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=952214&r1=952213&r2=952214&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 Mon Jun  7 13:22:19 2010
@@ -21,7 +21,6 @@ package org.apache.james.imap.jcr;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
 
 import org.apache.james.imap.mailbox.MailboxSession;
 
@@ -51,8 +50,7 @@ public class GlobalMailboxSessionJCRRepo
      */
     @Override
     public Session login(MailboxSession session) throws RepositoryException {
-        Session jcrSession = getRepository().login(new SimpleCredentials(username, pass), getWorkspace());
-        return jcrSession;
+        return login(session, username, pass);
     }
 
 }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/MailboxSessionJCRRepository.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/MailboxSessionJCRRepository.java?rev=952214&r1=952213&r2=952214&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/MailboxSessionJCRRepository.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/MailboxSessionJCRRepository.java Mon Jun  7 13:22:19 2010
@@ -32,7 +32,7 @@ import org.apache.james.imap.mailbox.Mai
  *
  */
 public class MailboxSessionJCRRepository {
-    
+    private final static String JCR_SESSION = "JCR_SESSION";
     private Repository repository;
     private String workspace;
     
@@ -57,10 +57,40 @@ public class MailboxSessionJCRRepository
         if (password != null) {
             pass = password.toCharArray();
         }
-        return repository.login(new SimpleCredentials(username, pass),
-                workspace);
+        return login(session, username, pass);
     }
 
+
+
+    protected Session login(MailboxSession mSession, String username,
+            char[] pass) throws RepositoryException {
+        Session session = (Session) mSession.getAttributes().get(JCR_SESSION);
+        if (session == null) {
+            session = repository.login(new SimpleCredentials(username, pass),
+                    workspace);
+            mSession.getAttributes().put(JCR_SESSION, session);
+        }
+        return session;
+    }
+    
+    /**
+     * Logout the JCR {@link Session} if one exists
+     * 
+     * @param mSession
+     */
+    public void logout(MailboxSession mSession) {
+        if (mSession == null) return;
+        
+        Session session = (Session) mSession.getAttributes().remove(JCR_SESSION);
+
+        if (session != null) {
+            if (session.isLive())
+                session.logout();
+            session = null;
+        }
+    }
+    
+    
     /**
      * Return the {@link Repository} 
      * 



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