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/03/16 11:08:45 UTC

svn commit: r923658 - in /james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr: ./ mail/ user/

Author: norman
Date: Tue Mar 16 10:08:45 2010
New Revision: 923658

URL: http://svn.apache.org/viewvc?rev=923658&view=rev
Log:
some pending changes I had on my local workstation (IMAP-93)

Added:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java
Removed:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
Modified:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.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

Added: 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=923658&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java (added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/AbstractJCRMapper.java Tue Mar 16 10:08:45 2010
@@ -0,0 +1,78 @@
+/****************************************************************
+ * 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.imap.jcr;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.store.transaction.AbstractTransactionalMapper;
+
+
+
+/**
+ * Abstract Mapper base class for Level 1 Implementations of JCR. So no real transaction management is used. 
+ * 
+ *
+ */
+public abstract class AbstractJCRMapper extends AbstractTransactionalMapper implements JCRImapConstants{
+
+    private final Session session;
+
+    public AbstractJCRMapper(final Session session) {
+        this.session = session;
+    }
+    
+    protected Session getSession() {
+        return session;
+    }
+
+    public void destroy() {
+    }
+
+    /**
+     * Begin is not supported by level 1 JCR implementations, so just do nothing
+     */
+    protected void begin() throws MailboxException {        
+    }
+
+    /**
+     * Just call save on the underlying JCR Session, because level 1 JCR implementation does not offer Transactions
+     */
+    protected void commit() throws MailboxException {
+        try {
+            if (session.hasPendingChanges()) {
+                session.save();
+            }
+        } catch (RepositoryException e) {
+            throw new MailboxException(HumanReadableText.SAVE_FAILED, e);
+        }
+
+    }
+
+    /**
+     * Rollback is not supported by level 1 JCR implementations, so just do nothing
+     */
+    protected void rollback() throws MailboxException {
+        // no rollback supported by level 1 jcr
+    }
+    
+    
+}

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java?rev=923658&r1=923657&r2=923658&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java Tue Mar 16 10:08:45 2010
@@ -100,24 +100,17 @@ public class JCRMailbox extends StoreMai
     @Override
     protected MessageMapper createMessageMapper(MailboxSession session) throws MailboxException {
         PasswordAwareUser user = (PasswordAwareUser)getMailboxSession().getUser();
-       
+
+        JCRMessageMapper messageMapper = new JCRMessageMapper(getSession(user), getMailboxUUID(), log);
         
-        JCRMessageMapper messageMapper = (JCRMessageMapper) session.getAttributes().get(MESSAGE_MAPPER);
-        if (messageMapper == null) {
-            messageMapper = new JCRMessageMapper(getSession(user), getMailboxUUID(), log);
-            session.getAttributes().put(MESSAGE_MAPPER, messageMapper);
-        }
         return messageMapper;
-     
+
     }
 
     protected JCRMailboxMapper createMailboxMapper(MailboxSession session) throws MailboxException {
-        JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(MAILBOX_MAPPER);
-        if (mapper == null) {
-            PasswordAwareUser user = (PasswordAwareUser)getMailboxSession().getUser();
-            mapper = new JCRMailboxMapper(getSession(user), log);
-            session.getAttributes().put(MAILBOX_MAPPER, mapper);
-        }
+
+        PasswordAwareUser user = (PasswordAwareUser) getMailboxSession().getUser();
+        JCRMailboxMapper mapper = new JCRMailboxMapper(getSession(user), log);
         return mapper;
 
     }
@@ -170,10 +163,6 @@ public class JCRMailbox extends StoreMai
 
     @Override
     protected void onLogout(MailboxSession session) {
-        
-        JCRMessageMapper mapper =  (JCRMessageMapper) session.getAttributes().get(MESSAGE_MAPPER);
-        if (mapper != null) {
-            mapper.destroy();
-        }
+     
     }
 }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java?rev=923658&r1=923657&r2=923658&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java Tue Mar 16 10:08:45 2010
@@ -71,11 +71,7 @@ public class JCRMailboxManager extends S
     @Override
     protected MailboxMapper createMailboxMapper(MailboxSession session) throws MailboxException {
 
-        JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(JCRMailbox.MAILBOX_MAPPER);
-        if (mapper == null) {
-            mapper = new JCRMailboxMapper(getSession(session), logger);
-            session.getAttributes().put(JCRMailbox.MAILBOX_MAPPER, mapper);
-        }
+        JCRMailboxMapper mapper = new JCRMailboxMapper(getSession(session), getLog());
         return mapper;
 
     }
@@ -145,9 +141,6 @@ public class JCRMailboxManager extends S
 
     @Override
     protected void onLogout(MailboxSession session) {
-        JCRMailboxMapper mapper = (JCRMailboxMapper) session.getAttributes().get(JCRMailbox.MAILBOX_MAPPER);
-        if (mapper != null) {
-            mapper.destroy();
-        }
+        
     }
 }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java?rev=923658&r1=923657&r2=923658&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java Tue Mar 16 10:08:45 2010
@@ -60,13 +60,8 @@ public class JCRSubscriptionManager exte
     protected SubscriptionMapper createMapper(MailboxSession session) throws SubscriptionException {
         PasswordAwareUser pUser = (PasswordAwareUser) session.getUser();
         
-        // check if we have already a mapper for the session
-        JCRSubscriptionMapper mapper = (JCRSubscriptionMapper) session.getAttributes().get(MAPPER);
-        if (mapper == null) {
-            // no mapper found so create one an store it
-            mapper = new JCRSubscriptionMapper(getSession(pUser), logger);
-            session.getAttributes().put(MAPPER, mapper);
-        }
+        JCRSubscriptionMapper mapper = new JCRSubscriptionMapper(getSession(pUser), logger);
+
         return mapper;
     }
 
@@ -110,9 +105,6 @@ public class JCRSubscriptionManager exte
 
     @Override
     protected void onLogout(MailboxSession session) {
-        JCRSubscriptionMapper mapper = (JCRSubscriptionMapper) session.getAttributes().get(MAPPER);
-        if (mapper != null) {
-            mapper.destroy();
-        }
+        
     }
 }

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=923658&r1=923657&r2=923658&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 Tue Mar 16 10:08:45 2010
@@ -33,7 +33,7 @@ import javax.jcr.query.QueryResult;
 import org.apache.commons.logging.Log;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.jcr.JCRMapper;
+import org.apache.james.imap.jcr.AbstractJCRMapper;
 import org.apache.james.imap.jcr.JCRUtils;
 import org.apache.james.imap.jcr.mail.model.JCRMailbox;
 import org.apache.james.imap.mailbox.MailboxNotFoundException;
@@ -46,7 +46,7 @@ import org.apache.james.imap.store.mail.
  * 
  * 
  */
-public class JCRMailboxMapper extends JCRMapper implements MailboxMapper {
+public class JCRMailboxMapper extends AbstractJCRMapper implements MailboxMapper {
 
     public final String PATH = PROPERTY_PREFIX + "mailboxes";
     private Log logger;
@@ -66,8 +66,6 @@ public class JCRMailboxMapper extends JC
     public long countMailboxesWithName(String name) throws StorageException {
        
         try {
-            getSession().refresh(true);
-
         	QueryManager manager = getSession().getWorkspace().getQueryManager();
         	String queryString =  "//" + PATH + "//element(*)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "']";
         	QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -98,10 +96,7 @@ public class JCRMailboxMapper extends JC
      */
     public void delete(Mailbox mailbox) throws StorageException {
         try {
-            getSession().refresh(true);
-
         	getSession().getNodeByUUID(((JCRMailbox) mailbox).getUUID()).remove();
-            getSession().save();
         } catch (PathNotFoundException e) {
             // mailbox does not exists..
         } catch (RepositoryException e) {
@@ -117,10 +112,7 @@ public class JCRMailboxMapper extends JC
      */
     public void deleteAll() throws StorageException {
         try {
-            getSession().refresh(true);
-
             getSession().getRootNode().getNode(PATH).remove();
-            getSession().save();
 
         } catch (PathNotFoundException e) {
             // nothing todo
@@ -140,8 +132,6 @@ public class JCRMailboxMapper extends JC
      */
     public boolean existsMailboxStartingWith(String mailboxName) throws StorageException {
         try {
-            getSession().refresh(true);
-
         	QueryManager manager = getSession().getWorkspace().getQueryManager();
         	String queryString = "//" + PATH + "//element(*)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'" +mailboxName+"%')]";
         	QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -163,8 +153,6 @@ public class JCRMailboxMapper extends JC
 
     public Mailbox findMailboxByUUID(String uuid) throws StorageException, MailboxNotFoundException {
     	try {
-            getSession().refresh(true);
-
             return new JCRMailbox(getSession().getNodeByUUID(uuid),logger);
         } catch (PathNotFoundException e) {
             throw new MailboxNotFoundException(uuid);
@@ -182,8 +170,6 @@ public class JCRMailboxMapper extends JC
      */
     public Mailbox findMailboxByName(String name) throws StorageException, MailboxNotFoundException {
         try {
-            getSession().refresh(true);
-
         	QueryManager manager = getSession().getWorkspace().getQueryManager();
         	String queryString = "//" + PATH + "//element(*)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "']";
         	QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -210,8 +196,6 @@ public class JCRMailboxMapper extends JC
     public List<Mailbox> findMailboxWithNameLike(String name) throws StorageException {
         List<Mailbox> mailboxList = new ArrayList<Mailbox>();
         try {       
-            getSession().refresh(true);
-
         	QueryManager manager = getSession().getWorkspace().getQueryManager();
         	String queryString = "//" + PATH + "//element(*)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'%" + name + "%')]";
         	QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -238,8 +222,6 @@ public class JCRMailboxMapper extends JC
         
         String nodePath = JCRUtils.createPath(PATH,mailbox.getName());
         try {
-            getSession().refresh(true);
-
             createPathIfNotExists();
             JCRMailbox jcrMailbox = (JCRMailbox)mailbox;
             
@@ -254,7 +236,6 @@ public class JCRMailboxMapper extends JC
             
             jcrMailbox.merge(node);
 
-            getSession().save();
         } catch (RepositoryException e) {
         	e.printStackTrace();
             throw new StorageException(HumanReadableText.SAVE_FAILED, e);
@@ -265,21 +246,11 @@ public class JCRMailboxMapper extends JC
 
         JCRMailbox mailbox = (JCRMailbox) findMailboxByUUID(uuid);
         mailbox.consumeUid();
-        try {
-            getSession().refresh(true);
-
-            getSession().save();
-        } catch (PathNotFoundException e) {
-            throw new MailboxNotFoundException(uuid);
-        } catch (RepositoryException e) {
-            throw new StorageException(HumanReadableText.SAVE_FAILED, e);
-        }
         return mailbox;
 
     }
     
     protected void createPathIfNotExists() throws RepositoryException, PathNotFoundException {
-        getSession().refresh(true);
 
         if (getSession().getRootNode().hasNode(JCRUtils.createPath(PATH)) == false) {
             getSession().getRootNode().addNode(JCRUtils.createPath(PATH));

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=923658&r1=923657&r2=923658&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 Tue Mar 16 10:08:45 2010
@@ -33,7 +33,7 @@ import javax.jcr.query.QueryResult;
 import org.apache.commons.logging.Log;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.jcr.JCRMapper;
+import org.apache.james.imap.jcr.AbstractJCRMapper;
 import org.apache.james.imap.jcr.JCRUtils;
 import org.apache.james.imap.jcr.mail.model.JCRMailboxMembership;
 import org.apache.james.imap.mailbox.MessageRange;
@@ -45,7 +45,7 @@ import org.apache.james.imap.mailbox.Sea
 import org.apache.james.imap.store.mail.MessageMapper;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 
-public class JCRMessageMapper extends JCRMapper implements MessageMapper {
+public class JCRMessageMapper extends AbstractJCRMapper implements MessageMapper {
 
     private final static String PATH = PROPERTY_PREFIX + "mailboxMemberships";
     private final Log logger;
@@ -66,8 +66,6 @@ public class JCRMessageMapper extends JC
     public long countMessagesInMailbox() throws StorageException {
         
         try {
-            getSession().refresh(true);
-
             String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -99,8 +97,6 @@ public class JCRMessageMapper extends JC
     public long countUnseenMessagesInMailbox() throws StorageException {
         
         try {
-            getSession().refresh(true);
-
             String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.SEEN_PROPERTY +"='false']";
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -133,10 +129,8 @@ public class JCRMessageMapper extends JC
         JCRMailboxMembership membership = (JCRMailboxMembership) message;
         if (membership.isPersistent()) {
             try {
-                getSession().refresh(true);
 
                 getSession().getNodeByUUID(membership.getUUID()).remove();
-                getSession().save();
             } catch (RepositoryException e) {
                 e.printStackTrace();
                 throw new StorageException(HumanReadableText.DELETED_FAILED, e);
@@ -183,8 +177,6 @@ public class JCRMessageMapper extends JC
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "]";
 
-        getSession().refresh(true);
-
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -199,8 +191,6 @@ public class JCRMessageMapper extends JC
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + "=" + uid + "]";
 
-        getSession().refresh(true);
-
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -214,9 +204,6 @@ public class JCRMessageMapper extends JC
     private List<MailboxMembership> findMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + JCRMailboxMembership.UID_PROPERTY + "<=" + to + "]";
-       
-        getSession().refresh(true);
-
         
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -232,10 +219,7 @@ public class JCRMessageMapper extends JC
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"']";
-        
-        getSession().refresh(true);
-
-        
+ 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -251,10 +235,7 @@ public class JCRMessageMapper extends JC
     private List<MailboxMembership> findDeletedMessagesInMailboxAfterUID(String uuid, long uid) throws RepositoryException {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + uid + "] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
-        
-        getSession().refresh(true);
-
-        
+ 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -268,9 +249,6 @@ public class JCRMessageMapper extends JC
     private List<MailboxMembership> findDeletedMessagesInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + "=" + uid + "] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
-
-        getSession().refresh(true);
-
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -286,8 +264,6 @@ public class JCRMessageMapper extends JC
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY + "='" + uuid + "'] AND [@" + JCRMailboxMembership.UID_PROPERTY + ">=" + from + "] AND [@" + JCRMailboxMembership.UID_PROPERTY + "<=" + to + "] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
        
-        getSession().refresh(true);
-
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -303,8 +279,6 @@ public class JCRMessageMapper extends JC
         List<MailboxMembership> list = new ArrayList<MailboxMembership>();
         String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.DELETED_PROPERTY+ "='true']";
         
-        getSession().refresh(true);
-
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -364,8 +338,6 @@ public class JCRMessageMapper extends JC
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
             String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.RECENT_PROPERTY +"='true']";
             
-            getSession().refresh(true);
-
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
             
@@ -391,8 +363,6 @@ public class JCRMessageMapper extends JC
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
             String queryString = "//" + PATH + "//element(*)[@" + JCRMailboxMembership.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] AND [@" + JCRMailboxMembership.SEEN_PROPERTY +"='false'] order by @" + JCRMailboxMembership.UID_PROPERTY + " ASC";
           
-            getSession().refresh(true);
-
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
             
@@ -417,8 +387,6 @@ public class JCRMessageMapper extends JC
     public void save(MailboxMembership message) throws StorageException {
         JCRMailboxMembership membership = (JCRMailboxMembership) message;
         try {
-            getSession().refresh(true);
-
             createPathIfNotExists();
             Node messageNode;
 
@@ -431,9 +399,6 @@ public class JCRMessageMapper extends JC
             }
             
             membership.merge(messageNode);
-
-            getSession().save();
-
        
         } catch (RepositoryException e) {
             e.printStackTrace();
@@ -453,9 +418,6 @@ public class JCRMessageMapper extends JC
         try {
             List<MailboxMembership> list = new ArrayList<MailboxMembership>();
             final String xpathQuery = formulateXPath(uuid, query);
-           
-            getSession().refresh(true);
-
             
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(xpathQuery, Query.XPATH).execute();
@@ -507,8 +469,6 @@ public class JCRMessageMapper extends JC
     
 
     protected void createPathIfNotExists() throws RepositoryException, PathNotFoundException {
-        getSession().refresh(true);
-
         if (getSession().getRootNode().hasNode(JCRUtils.createPath(PATH)) == false) {
             getSession().getRootNode().addNode(JCRUtils.createPath(PATH));
         }

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=923658&r1=923657&r2=923658&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 Tue Mar 16 10:08:45 2010
@@ -32,7 +32,7 @@ import javax.jcr.query.QueryResult;
 
 import org.apache.commons.logging.Log;
 import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.jcr.JCRMapper;
+import org.apache.james.imap.jcr.AbstractJCRMapper;
 import org.apache.james.imap.jcr.JCRUtils;
 import org.apache.james.imap.jcr.Persistent;
 import org.apache.james.imap.jcr.user.model.JCRSubscription;
@@ -46,7 +46,7 @@ import org.apache.james.imap.store.user.
  * ends in a "real" action
  * 
  */
-public class JCRSubscriptionMapper extends JCRMapper implements SubscriptionMapper {
+public class JCRSubscriptionMapper extends AbstractJCRMapper implements SubscriptionMapper {
 
     private final Log log;
     private final static String PATH = PROPERTY_PREFIX + "subscriptions";
@@ -71,7 +71,6 @@ public class JCRSubscriptionMapper exten
 
                 Node node = ((Persistent) subscription).getNode();
                 node.remove();
-                getSession().save();
             } catch (PathNotFoundException e) {
                 // do nothing
             } catch (RepositoryException e) {
@@ -145,18 +144,22 @@ public class JCRSubscriptionMapper exten
         String nodename = JCRUtils.createPath(PATH, username, mailbox);
         try {
             createPathIfNotExists(PATH);
+            
+            // just a hack for now
+            createPathIfNotExists(JCRUtils.createPath(PATH,username));
+            
             Node node;
-            JCRSubscription sub = (JCRSubscription) subscription;
-            if (sub.isPersistent() == false) {
-                 node = getSession().getRootNode().getNode(nodename);
-               
+            JCRSubscription sub = (JCRSubscription) findFindMailboxSubscriptionForUser(username, mailbox);
+            
+            // its a new subscription
+            if (sub == null) {
+                node = getSession().getRootNode().addNode(nodename);
             } else {
                 node = sub.getNode();
             }
             // Copy new properties to the node
-            sub.merge(node);
+            ((JCRSubscription)subscription).merge(node);
 
-            getSession().save();
         } catch (RepositoryException e) {
             e.printStackTrace();
             throw new SubscriptionException(HumanReadableText.SAVE_FAILED, e);



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