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/08/18 17:20:07 UTC
svn commit: r986733 - in /james/imap/trunk:
jcr/src/main/java/org/apache/james/imap/jcr/
jpa/src/main/java/org/apache/james/imap/jpa/
maildir/src/main/java/org/apache/james/imap/maildir/mail/
maildir/src/main/java/org/apache/james/imap/maildir/user/ me...
Author: norman
Date: Wed Aug 18 15:20:07 2010
New Revision: 986733
URL: http://svn.apache.org/viewvc?rev=986733&view=rev
Log:
Allow to return a value when execute Transactions
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMailboxMapper.java
james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMessageMapper.java
james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/user/MaildirSubscriptionMapper.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxSessionMapperFactory.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMailboxMapper.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/user/InMemorySubscriptionMapper.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/StoreMessageManager.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/transaction/AbstractTransactionalMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
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=986733&r1=986732&r2=986733&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 Wed Aug 18 15:20:07 2010
@@ -61,9 +61,9 @@ public class JCRMailboxManager extends S
protected void doCreateMailbox(MailboxPath path, MailboxSession session) throws MailboxException {
final Mailbox<String> mailbox = new org.apache.james.imap.jcr.mail.model.JCRMailbox(path, randomUidValidity(), logger);
final JCRMailboxMapper mapper = (JCRMailboxMapper) mapperFactory.getMailboxMapper(session);
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
mapper.save(mailbox);
}
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=986733&r1=986732&r2=986733&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 Wed Aug 18 15:20:07 2010
@@ -43,9 +43,9 @@ public abstract class JPAMailboxManager
protected void doCreateMailbox(MailboxPath path, MailboxSession session) throws MailboxException {
final Mailbox<Long> mailbox = new JPAMailbox(path, randomUidValidity());
final MailboxMapper<Long> mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
- mapper.execute(new TransactionalMapper.Transaction(){
+ mapper.execute(new TransactionalMapper.VoidTransaction(){
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
mapper.save(mailbox);
}
@@ -60,9 +60,9 @@ public abstract class JPAMailboxManager
*/
public void deleteEverything(MailboxSession mailboxSession) throws MailboxException {
final MailboxMapper<Long> mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
mapper.deleteAll();
}
Modified: james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMailboxMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMailboxMapper.java (original)
+++ james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMailboxMapper.java Wed Aug 18 15:20:07 2010
@@ -215,9 +215,9 @@ public class MaildirMailboxMapper implem
* (non-Javadoc)
* @see org.apache.james.imap.store.transaction.TransactionalMapper#execute(org.apache.james.imap.store.transaction.TransactionalMapper.Transaction)
*/
- public void execute(Transaction transaction) throws MailboxException {
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
// no transactions used
- transaction.run();
+ return transaction.run();
}
/**
Modified: james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMessageMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMessageMapper.java (original)
+++ james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/mail/MaildirMessageMapper.java Wed Aug 18 15:20:07 2010
@@ -448,9 +448,9 @@ public class MaildirMessageMapper implem
* (non-Javadoc)
* @see org.apache.james.imap.store.transaction.TransactionalMapper#execute(org.apache.james.imap.store.transaction.TransactionalMapper.Transaction)
*/
- public void execute(Transaction transaction) throws MailboxException {
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
// no transactions used
- transaction.run();
+ return transaction.run();
}
/**
Modified: james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/user/MaildirSubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/user/MaildirSubscriptionMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/user/MaildirSubscriptionMapper.java (original)
+++ james/imap/trunk/maildir/src/main/java/org/apache/james/imap/maildir/user/MaildirSubscriptionMapper.java Wed Aug 18 15:20:07 2010
@@ -123,8 +123,8 @@ public class MaildirSubscriptionMapper i
* (non-Javadoc)
* @see org.apache.james.imap.store.transaction.TransactionalMapper#execute(org.apache.james.imap.store.transaction.TransactionalMapper.Transaction)
*/
- public void execute(Transaction transaction) throws MailboxException {
- transaction.run();
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
+ return transaction.run();
}
/**
Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxSessionMapperFactory.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxSessionMapperFactory.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxSessionMapperFactory.java Wed Aug 18 15:20:07 2010
@@ -64,9 +64,9 @@ public class InMemoryMailboxSessionMappe
public void deleteAll() throws MailboxException {
final MailboxMapper<Long> mapper = mailboxMapper;
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
mapper.deleteAll();
}
Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMailboxMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMailboxMapper.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMailboxMapper.java Wed Aug 18 15:20:07 2010
@@ -119,8 +119,8 @@ public class InMemoryMailboxMapper imple
* (non-Javadoc)
* @see org.apache.james.imap.store.transaction.TransactionalMapper#execute(org.apache.james.imap.store.transaction.TransactionalMapper.Transaction)
*/
- public void execute(Transaction transaction) throws MailboxException {
- transaction.run();
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
+ return transaction.run();
}
/**
Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java Wed Aug 18 15:20:07 2010
@@ -183,8 +183,8 @@ public class InMemoryMessageMapper imple
/**
* There is no really Transaction handling here.. Just run it
*/
- public void execute(Transaction transaction) throws MailboxException {
- transaction.run();
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
+ return transaction.run();
}
public void deleteAll() {
Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/user/InMemorySubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/user/InMemorySubscriptionMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/user/InMemorySubscriptionMapper.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/user/InMemorySubscriptionMapper.java Wed Aug 18 15:20:07 2010
@@ -104,8 +104,8 @@ public class InMemorySubscriptionMapper
* (non-Javadoc)
* @see org.apache.james.imap.store.transaction.TransactionalMapper#execute(org.apache.james.imap.store.transaction.TransactionalMapper.Transaction)
*/
- public void execute(Transaction transaction) throws MailboxException {
- transaction.run();
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
+ return transaction.run();
}
public void deleteAll() {
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=986733&r1=986732&r2=986733&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 Wed Aug 18 15:20:07 2010
@@ -143,9 +143,9 @@ public abstract class StoreMailboxManage
session.getLog().info("deleteMailbox " + mailboxPath);
final MailboxMapper<Id> mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
Mailbox<Id> mailbox = mapper.findMailboxByPath(mailboxPath);
if (mailbox == null) {
throw new MailboxNotFoundException("Mailbox not found");
@@ -172,9 +172,9 @@ public abstract class StoreMailboxManage
}
final MailboxMapper<Id> mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
// TODO put this into a serilizable transaction
final Mailbox<Id> mailbox = mapper.findMailboxByPath(from);
if (mailbox == null) {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java Wed Aug 18 15:20:07 2010
@@ -243,14 +243,12 @@ public abstract class StoreMessageManage
flags.add(Flags.Flag.RECENT);
}
final MailboxMembership<Id> message = createMessage(internalDate, size, bodyStartOctet, tmpMsgIn.newStream(0, -1), flags, headers, propertyBuilder);
- final List<Long> uids = new ArrayList<Long>();
- messageMapper.execute(new TransactionalMapper.Transaction() {
+ long uid = messageMapper.execute(new TransactionalMapper.Transaction<Long>() {
- public void run() throws MailboxException {
- uids.add(messageMapper.save(mailbox, message));
+ public Long run() throws MailboxException {
+ return messageMapper.save(mailbox, message);
}
});
- long uid = uids.get(0);
dispatcher.added(uid, mailboxSession.getSessionId(), new StoreMailboxPath<Id>(getMailboxEntity()));
return uid;
} catch (IOException e) {
@@ -375,12 +373,12 @@ public abstract class StoreMessageManage
* @throws MailboxException
*/
protected List<Long> recent(final boolean reset, MailboxSession mailboxSession) throws MailboxException {
- final List<Long> results = new ArrayList<Long>();
- messageMapper.execute(new TransactionalMapper.Transaction() {
+ return messageMapper.execute(new TransactionalMapper.Transaction<List<Long>>() {
- public void run() throws MailboxException {
+ public List<Long> run() throws MailboxException {
final List<MailboxMembership<Id>> members = messageMapper.findRecentMessagesInMailbox(mailbox, -1);
+ final List<Long> results = new ArrayList<Long>();
for (MailboxMembership<Id> member:members) {
results.add(member.getUid());
@@ -391,11 +389,11 @@ public abstract class StoreMessageManage
messageMapper.save(mailbox, member);
}
}
+ return results;
}
- });;
+ });
- return results;
}
@@ -404,16 +402,19 @@ public abstract class StoreMessageManage
* @see org.apache.james.imap.mailbox.Mailbox#expunge(org.apache.james.imap.mailbox.MessageRange, org.apache.james.imap.mailbox.MailboxSession)
*/
public Iterator<Long> expunge(final MessageRange set, MailboxSession mailboxSession) throws MailboxException {
- final Collection<Long> uids = new TreeSet<Long>();
- messageMapper.execute(new TransactionalMapper.Transaction() {
+ Collection<Long> uids = messageMapper.execute(new TransactionalMapper.Transaction<Collection<Long>>() {
+
+ public Collection<Long> run() throws MailboxException {
+ final Collection<Long> uids = new TreeSet<Long>();
- public void run() throws MailboxException {
final List<MailboxMembership<Id>> members = messageMapper.findMarkedForDeletionInMailbox(mailbox, set);
for (MailboxMembership<Id> message:members) {
uids.add(message.getUid());
messageMapper.delete(mailbox, message);
+
}
+ return uids;
}
});
@@ -433,9 +434,9 @@ public abstract class StoreMessageManage
final MessageRange set, MailboxSession mailboxSession) throws MailboxException {
final SortedMap<Long, Flags> newFlagsByUid = new TreeMap<Long, Flags>();
final Map<Long, Flags> originalFlagsByUid = new HashMap<Long, Flags>(INITIAL_SIZE_FLAGS);
- messageMapper.execute(new TransactionalMapper.Transaction(){
+ messageMapper.execute(new TransactionalMapper.VoidTransaction(){
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
final List<MailboxMembership<Id>> members = messageMapper.findInMailbox(mailbox, set);
for (final MailboxMembership<Id> member:members) {
originalFlagsByUid.put(member.getUid(), member.createFlags());
@@ -499,16 +500,19 @@ public abstract class StoreMessageManage
private void copy(final List<MailboxMembership<Id>> originalRows, final MailboxSession session) throws MailboxException {
try {
final List<MailboxMembership<Id>> copiedRows = new ArrayList<MailboxMembership<Id>>();
-
for (final MailboxMembership<Id> originalMessage:originalRows) {
- messageMapper.execute(new TransactionalMapper.Transaction() {
+ copiedRows.addAll(messageMapper.execute(new TransactionalMapper.Transaction<List<MailboxMembership<Id>>>() {
+
+ public List<MailboxMembership<Id>> run() throws MailboxException {
+ final List<MailboxMembership<Id>> copiedRows = new ArrayList<MailboxMembership<Id>>();
- public void run() throws MailboxException {
final MailboxMembership<Id> newRow = messageMapper.copy(mailbox, originalMessage);
+
copiedRows.add(newRow);
+ return copiedRows;
}
- });
+ }));
}
// Wait until commit before issuing events
for (MailboxMembership<Id> newMember:copiedRows) {
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=986733&r1=986732&r2=986733&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 Wed Aug 18 15:20:07 2010
@@ -49,9 +49,9 @@ public abstract class StoreSubscriptionM
public void subscribe(final MailboxSession session, final String mailbox) throws SubscriptionException {
final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session);
try {
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
final Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox);
if (subscription == null) {
final Subscription newSubscription = createSubscription(session, mailbox);
@@ -95,9 +95,9 @@ public abstract class StoreSubscriptionM
public void unsubscribe(final MailboxSession session, final String mailbox) throws SubscriptionException {
final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session);
try {
- mapper.execute(new TransactionalMapper.Transaction() {
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
- public void run() throws MailboxException {
+ public void runVoid() throws MailboxException {
final Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser().getUserName(), mailbox);
if (subscription != null) {
mapper.delete(subscription);
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/AbstractTransactionalMapper.java Wed Aug 18 15:20:07 2010
@@ -32,11 +32,12 @@ public abstract class AbstractTransactio
* (non-Javadoc)
* @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 {
+ public final <T> T execute(Transaction<T> transaction) throws MailboxException {
begin();
try {
- transaction.run();
+ T value = transaction.run();
commit();
+ return value;
} catch (MailboxException e) {
rollback();
throw e;
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java?rev=986733&r1=986732&r2=986733&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java Wed Aug 18 15:20:07 2010
@@ -38,19 +38,29 @@ public interface TransactionalMapper {
* @param transaction
* @throws MailboxException
*/
- public void execute(Transaction transaction) throws MailboxException;
+ public <T> T execute(Transaction<T> transaction) throws MailboxException;
/**
* Unit of work executed in a Transaction
*
*/
- public interface Transaction {
+ public interface Transaction<T> {
/**
- * Run unit of work in a Transaction
+ * Run unit of work in a Transaction and return a value
*
* @throws MailboxException
*/
- public void run() throws MailboxException;
+ public T run() throws MailboxException;
+ }
+
+ public abstract class VoidTransaction implements Transaction<Void> {
+
+ public final Void run() throws MailboxException {
+ runVoid();
+ return null;
+ }
+ public abstract void runVoid() throws MailboxException;
+
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org