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/08 19:17:35 UTC

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

Author: norman
Date: Mon Mar  8 18:17:34 2010
New Revision: 920430

URL: http://svn.apache.org/viewvc?rev=920430&view=rev
Log:
reorganize code to share some more stuff between implementations

Added:
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
      - copied, changed from r918155, james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPATransactionalMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java
      - copied, changed from r918136, james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/AbstractTransactionalMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java
      - copied, changed from r920375, james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/NonTransactionalMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
      - copied, changed from r918136, james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/TransactionalMapper.java
Removed:
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPATransactionalMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/AbstractTransactionalMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/NonTransactionalMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/TransactionalMapper.java
Modified:
    james/imap/trunk/jcr/pom.xml
    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/user/JCRSubscriptionMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/user/JPASubscriptionMapper.java
    james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirTransactionalMapper.java
    james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java
    james/imap/trunk/parent/pom.xml
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java

Modified: james/imap/trunk/jcr/pom.xml
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/pom.xml?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/jcr/pom.xml (original)
+++ james/imap/trunk/jcr/pom.xml Mon Mar  8 18:17:34 2010
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>apache-james-imap-parent</artifactId>
     <groupId>org.apache.james</groupId>
-    <version>0.1-SNAPSHOT</version>
+    <version>0.1-M2-SNAPSHOT</version>
     <relativePath>../parent/pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>

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=920430&r1=920429&r2=920430&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 Mon Mar  8 18:17:34 2010
@@ -28,8 +28,8 @@
 import org.apache.james.imap.mailbox.MailboxNotFoundException;
 import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.store.mail.MailboxMapper;
-import org.apache.james.imap.store.mail.NonTransactionalMapper;
 import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.transaction.NonTransactionalMapper;
 
 /**
  * JCR implementation of a MailboxMapper

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=920430&r1=920429&r2=920430&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 Mon Mar  8 18:17:34 2010
@@ -29,7 +29,11 @@
 
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.jcr.user.model.JCRSubscription;
+import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.mailbox.SubscriptionException;
+import org.apache.james.imap.store.transaction.AbstractTransactionalMapper;
+import org.apache.james.imap.store.transaction.NonTransactionalMapper;
 import org.apache.james.imap.store.user.SubscriptionMapper;
 import org.apache.james.imap.store.user.model.Subscription;
 
@@ -38,7 +42,7 @@
  * support transactions. So very call on a method ends in a "real" action
   *
  */
-public class JCRSubscriptionMapper implements SubscriptionMapper{
+public class JCRSubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper{
 
 	private final Session session;
 	private final static String PATH = "subscriptions";
@@ -47,20 +51,6 @@
 		this.session = session;
 	}
 	
-	/**
-	 * Transactions are not supported by most JCR implementations. So do nothing
-	 */
-	public void begin() throws SubscriptionException {
-		// Nothing todo
-		
-	}
-
-	/**
-	 * Transactions are not supported by most JCR implementations. So do nothing
-	 */
-	public void commit() throws SubscriptionException {
-		// Nothing todo
-	}
 
 	/*
 	 * (non-Javadoc)
@@ -140,4 +130,5 @@
 		}		
 	}
 
+
 }

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java Mon Mar  8 18:17:34 2010
@@ -25,8 +25,8 @@
 import org.apache.james.imap.store.StoreMailboxManager;
 import org.apache.james.imap.store.Subscriber;
 import org.apache.james.imap.store.mail.MailboxMapper;
-import org.apache.james.imap.store.mail.TransactionalMapper;
 import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 
 public abstract class JPAMailboxManager extends StoreMailboxManager {
 

Copied: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java (from r918155, james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPATransactionalMapper.java)
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java?p2=james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java&p1=james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPATransactionalMapper.java&r1=918155&r2=920430&rev=920430&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPATransactionalMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java Mon Mar  8 18:17:34 2010
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imap.jpa.mail;
+package org.apache.james.imap.jpa;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityTransaction;
 import javax.persistence.PersistenceException;
 
 import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.mailbox.MailboxException;
 import org.apache.james.imap.mailbox.StorageException;
-import org.apache.james.imap.store.mail.AbstractTransactionalMapper;
+import org.apache.james.imap.store.transaction.AbstractTransactionalMapper;
 
 /**
  * JPA implementation of TransactionMapper  
@@ -38,11 +39,12 @@
         this.entityManager = entityManager;
     }
 
+
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.store.mail.AbstractTransactionalMapper#begin()
+     * @see org.apache.james.imap.store.transaction.AbstractTransactionalMapper#begin()
      */
-    protected void begin() throws StorageException {
+    protected void begin() throws MailboxException {
         try {
             entityManager.getTransaction().begin();
         } catch (PersistenceException e) {
@@ -50,23 +52,24 @@
         }
     }
     
+
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.store.mail.AbstractTransactionalMapper#commit()
+     * @see org.apache.james.imap.store.transaction.AbstractTransactionalMapper#commit()
      */
-    protected void commit() throws StorageException {
+    protected void commit() throws MailboxException {
         try {
             entityManager.getTransaction().commit();
         } catch (PersistenceException e) {
             throw new StorageException(HumanReadableText.COMMIT_TRANSACTION_FAILED, e);
         }
     }
-    
+
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.store.mail.AbstractTransactionalMapper#rollback()
+     * @see org.apache.james.imap.store.transaction.AbstractTransactionalMapper#rollback()
      */
-    protected void rollback() throws StorageException {
+    protected void rollback() throws MailboxException {
         EntityTransaction transaction = entityManager.getTransaction();
         // check if we have a transaction to rollback
         if (transaction.isActive()) {

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java Mon Mar  8 18:17:34 2010
@@ -26,6 +26,7 @@
 import javax.persistence.PersistenceException;
 
 import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.jpa.JPATransactionalMapper;
 import org.apache.james.imap.jpa.mail.model.JPAMailbox;
 import org.apache.james.imap.mailbox.MailboxNotFoundException;
 import org.apache.james.imap.mailbox.StorageException;

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java Mon Mar  8 18:17:34 2010
@@ -24,6 +24,7 @@
 import javax.persistence.PersistenceException;
 
 import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.jpa.JPATransactionalMapper;
 import org.apache.james.imap.mailbox.MessageRange;
 import org.apache.james.imap.mailbox.SearchQuery;
 import org.apache.james.imap.mailbox.StorageException;

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/user/JPASubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/user/JPASubscriptionMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/user/JPASubscriptionMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/user/JPASubscriptionMapper.java Mon Mar  8 18:17:34 2010
@@ -25,6 +25,7 @@
 import javax.persistence.PersistenceException;
 
 import org.apache.james.imap.api.display.HumanReadableText;
+import org.apache.james.imap.jpa.JPATransactionalMapper;
 import org.apache.james.imap.mailbox.SubscriptionException;
 import org.apache.james.imap.store.user.SubscriptionMapper;
 import org.apache.james.imap.store.user.model.Subscription;
@@ -32,36 +33,12 @@
 /**
  * Maps data access logic to JPA operations.
  */
-public class JPASubscriptionMapper implements SubscriptionMapper {
-    private final EntityManager entityManager;
+public class JPASubscriptionMapper extends JPATransactionalMapper implements SubscriptionMapper {
 
     public JPASubscriptionMapper(final EntityManager entityManager) {
-        super();
-        this.entityManager = entityManager;
+        super(entityManager);
     }
 
-    /**
-     * @throws SubscriptionException 
-     * @see org.apache.james.imap.store.user.SubscriptionMapper#begin()
-     */
-    public void begin() throws SubscriptionException {
-        try {
-            entityManager.getTransaction().begin();
-        } catch (PersistenceException e) {
-            throw new SubscriptionException(HumanReadableText.START_TRANSACTION_FAILED, e);
-        }
-    }
-
-    /**
-     * @throws SubscriptionException
-     */
-    public void commit() throws SubscriptionException {
-        try {
-            entityManager.getTransaction().commit();
-        } catch (PersistenceException e) {
-            throw new SubscriptionException(HumanReadableText.COMMIT_TRANSACTION_FAILED, e);
-        }
-    }
 
     /**
      * @throws SubscriptionException 

Modified: james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirTransactionalMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirTransactionalMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirTransactionalMapper.java (original)
+++ james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirTransactionalMapper.java Mon Mar  8 18:17:34 2010
@@ -23,7 +23,7 @@
 
 import org.apache.commons.transaction.file.TxFileResourceManager;
 import org.apache.james.imap.mailbox.StorageException;
-import org.apache.james.imap.store.mail.AbstractTransactionalMapper;
+import org.apache.james.imap.store.transaction.AbstractTransactionalMapper;
 
 /**
  * TransactionManager which supports Transactions for Maildir

Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java Mon Mar  8 18:17:34 2010
@@ -25,6 +25,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.james.imap.mailbox.MailboxException;
 import org.apache.james.imap.store.StoreSubscriptionManager;
 import org.apache.james.imap.store.user.SubscriptionMapper;
 import org.apache.james.imap.store.user.model.Subscription;
@@ -52,12 +53,6 @@
         return new InMemorySubscription(mailbox, user);
     }
 
-    public void begin() {
-    }
-
-    public void commit() {
-    }
-
     public synchronized void delete(Subscription subscription) {
         final String user = subscription.getUser();
         final List<Subscription> subscriptions = subscriptionsByUser.get(user);
@@ -169,4 +164,8 @@
         }
         
     }
+
+    public void execute(Transaction transaction) throws MailboxException {
+        transaction.run();
+    }
 }

Modified: james/imap/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/james/imap/trunk/parent/pom.xml?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/parent/pom.xml (original)
+++ james/imap/trunk/parent/pom.xml Mon Mar  8 18:17:34 2010
@@ -244,6 +244,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.james</groupId>
+        <artifactId>apache-james-imap-jcr</artifactId>
+        <version>${pom.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.james</groupId>
         <artifactId>apache-james-imap-memory</artifactId>
         <version>${pom.version}</version>
       </dependency>

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java Mon Mar  8 18:17:34 2010
@@ -50,11 +50,11 @@
 import org.apache.james.imap.mailbox.util.UidChangeTracker;
 import org.apache.james.imap.mailbox.util.UidRange;
 import org.apache.james.imap.store.mail.MessageMapper;
-import org.apache.james.imap.store.mail.TransactionalMapper;
 import org.apache.james.imap.store.mail.model.Header;
 import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 import org.apache.james.imap.store.mail.model.PropertyBuilder;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.descriptor.MaximalBodyDescriptor;
 import org.apache.james.mime4j.parser.MimeTokenStream;

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java Mon Mar  8 18:17:34 2010
@@ -46,8 +46,8 @@
 import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
 import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
 import org.apache.james.imap.store.mail.MailboxMapper;
-import org.apache.james.imap.store.mail.TransactionalMapper;
 import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 
 public abstract class StoreMailboxManager extends AbstractLogEnabled implements MailboxManager {
     public static final String USER_NAMESPACE_PREFIX = "#mail";

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java Mon Mar  8 18:17:34 2010
@@ -22,7 +22,9 @@
 import java.util.HashSet;
 import java.util.List;
 
+import org.apache.james.imap.mailbox.MailboxException;
 import org.apache.james.imap.mailbox.SubscriptionException;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 import org.apache.james.imap.store.user.SubscriptionMapper;
 import org.apache.james.imap.store.user.model.Subscription;
 
@@ -41,14 +43,23 @@
     
     public void subscribe(final String user, final String mailbox) throws SubscriptionException {
         final SubscriptionMapper mapper = createMapper();
-        mapper.begin();
+        try {
+            mapper.execute(new TransactionalMapper.Transaction() {
 
-        final Subscription subscription = mapper.findFindMailboxSubscriptionForUser(user, mailbox);
-        if (subscription == null) {
-            final Subscription newSubscription = createSubscription(user, mailbox);
-            mapper.save(newSubscription);
-            mapper.commit();
+                public void run() throws MailboxException {
+                    final Subscription subscription = mapper.findFindMailboxSubscriptionForUser(user, mailbox);
+                    if (subscription == null) {
+                        final Subscription newSubscription = createSubscription(user, mailbox);
+                        mapper.save(newSubscription);
+                    }
+                }
+                
+            });
+        } catch (MailboxException e) {
+            throw (SubscriptionException) e;
         }
+
+
     }
 
     protected abstract Subscription createSubscription(final String user, final String mailbox);
@@ -65,12 +76,21 @@
 
     public void unsubscribe(final String user, final String mailbox) throws SubscriptionException {
         final SubscriptionMapper mapper = createMapper();
-        mapper.begin();
+        try {
+            mapper.execute(new TransactionalMapper.Transaction() {
 
-        final Subscription subscription = mapper.findFindMailboxSubscriptionForUser(user, mailbox);
-        if (subscription != null) {
-            mapper.delete(subscription);
-            mapper.commit();
+                public void run() throws MailboxException {
+                    final Subscription subscription = mapper.findFindMailboxSubscriptionForUser(user, mailbox);
+                    if (subscription != null) {
+                        mapper.delete(subscription);
+                    }
+                }
+
+            });
+        } catch (MailboxException e) {
+            throw (SubscriptionException) e;
         }
+
+        
     }
 }

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java Mon Mar  8 18:17:34 2010
@@ -23,6 +23,7 @@
 import org.apache.james.imap.mailbox.MailboxNotFoundException;
 import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 
 public interface MailboxMapper extends TransactionalMapper{
     

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java Mon Mar  8 18:17:34 2010
@@ -24,6 +24,7 @@
 import org.apache.james.imap.mailbox.SearchQuery;
 import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 
 /**
  * Maps messages in a mailbox.

Copied: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java (from r918136, james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/AbstractTransactionalMapper.java)
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java?p2=james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java&p1=james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/AbstractTransactionalMapper.java&r1=918136&r2=920430&rev=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/AbstractTransactionalMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java Mon Mar  8 18:17:34 2010
@@ -17,10 +17,9 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.store.mail;
+package org.apache.james.imap.store.transaction;
 
 import org.apache.james.imap.mailbox.MailboxException;
-import org.apache.james.imap.mailbox.StorageException;
 
 /**
  *
@@ -31,7 +30,7 @@
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.store.mail.TransactionalMapper#execute(org.apache.james.imap.store.mail.TransactionalMapper.Transaction)
+     * @see org.apache.james.imap.store.transaction.TransactionalMapper#execute(org.apache.james.imap.store.transaction.TransactionalMapper.Transaction)
      */
     public final void execute(Transaction transaction) throws MailboxException {
         begin();
@@ -50,14 +49,14 @@
      * 
      * @throws StorageException
      */
-    protected abstract void begin() throws StorageException;
+    protected abstract void begin() throws MailboxException;
 
     /**
      * Commit transaction
      * 
      * @throws StorageException
      */
-    protected abstract void commit() throws StorageException;
+    protected abstract void commit() throws MailboxException;
     
     
     /**
@@ -65,7 +64,7 @@
      * 
      * @throws StorageException
      */
-    protected abstract void rollback() throws StorageException;
+    protected abstract void rollback() throws MailboxException;
 
 
 }

Copied: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java (from r920375, james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/NonTransactionalMapper.java)
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java?p2=james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java&p1=james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/NonTransactionalMapper.java&r1=920375&r2=920430&rev=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/NonTransactionalMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/NonTransactionalMapper.java Mon Mar  8 18:17:34 2010
@@ -16,24 +16,44 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imap.store.mail;
+package org.apache.james.imap.store.transaction;
 
 import org.apache.james.imap.mailbox.MailboxException;
 
 /**
  * Mapper which not do any real transaction handling. It just execute the execute() method
- *  of the Transaction object without any special handling.
+ * of the Transaction object without any special handling.
  *  
- *  This class is mostly usefull for Mapper implementations which not support Transactions
+ * This class is mostly useful for Mapper implementations which not support Transactions
  *
  */
-public class NonTransactionalMapper implements TransactionalMapper {
+public class NonTransactionalMapper extends AbstractTransactionalMapper {
 
-	/**
-	 * Just execute the Transaction object without any transaction support.
-	 */
-	public void execute(Transaction transaction) throws MailboxException {
-		transaction.run();
-	}
+
+    /**
+     * Do nothing because we don't support transaction
+     */
+    protected void begin() throws MailboxException {
+        // do nothing
+        
+    }
+
+
+    /**
+     * Do nothing because we don't support transaction
+     */
+    protected void commit() throws MailboxException {
+        // do nothing
+        
+    }
+
+
+    /**
+     * Do nothing because we don't support transaction
+     */
+    protected void rollback() throws MailboxException {
+        // do nothing
+        
+    }
 
 }

Copied: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java (from r918136, james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/TransactionalMapper.java)
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java?p2=james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java&p1=james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/TransactionalMapper.java&r1=918136&r2=920430&rev=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/TransactionalMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java Mon Mar  8 18:17:34 2010
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.store.mail;
+package org.apache.james.imap.store.transaction;
 
 import org.apache.james.imap.mailbox.MailboxException;
 

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java?rev=920430&r1=920429&r2=920430&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java Mon Mar  8 18:17:34 2010
@@ -21,28 +21,16 @@
 import java.util.List;
 
 import org.apache.james.imap.mailbox.SubscriptionException;
+import org.apache.james.imap.store.transaction.TransactionalMapper;
 import org.apache.james.imap.store.user.model.Subscription;
 
 /**
  * 
  *
  */
-public interface SubscriptionMapper {
-
-	/**
-	 * Begin transaction 
-	 * 
-	 * @throws SubscriptionException
-	 */
-    public abstract void begin() throws SubscriptionException;
-
-    /**
-     * Commit transaction
-     * 
-     * @throws SubscriptionException
-     */
-    public abstract void commit() throws SubscriptionException;
+public interface SubscriptionMapper extends TransactionalMapper{
 
+	
     /**
      * Finds any subscriptions for a given user to the given mailbox.
      * @param user not null



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