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: [email protected]
For additional commands, e-mail: [email protected]