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 ma...@apache.org on 2015/10/29 15:17:52 UTC

svn commit: r1711274 - in /james/project/trunk: mailbox/ mailbox/cassandra/ mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/ mailbox/cassandra/src/main/java/org...

Author: matthieu
Date: Thu Oct 29 14:17:52 2015
New Revision: 1711274

URL: http://svn.apache.org/viewvc?rev=1711274&view=rev
Log:
JAMES-1588 Use cassandra backend

Added:
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java
Removed:
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraConstants.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTypesProvider.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ClusterFactory.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ClusterWithKeyspaceCreatedFactory.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/SessionFactory.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/FunctionRunnerWithRetry.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraClusterSingleton.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTypeProviderTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/FunctionRunnerWithRetryTest.java
Modified:
    james/project/trunk/mailbox/cassandra/pom.xml
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
    james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
    james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
    james/project/trunk/mailbox/hbase/pom.xml
    james/project/trunk/mailbox/pom.xml
    james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml
    james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
    james/project/trunk/mpt/pom.xml
    james/project/trunk/server/app/pom.xml
    james/project/trunk/server/pom.xml

Modified: james/project/trunk/mailbox/cassandra/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/pom.xml (original)
+++ james/project/trunk/mailbox/cassandra/pom.xml Thu Oct 29 14:17:52 2015
@@ -176,6 +176,10 @@
                 </dependency>
                 <dependency>
                     <groupId>${project.groupId}</groupId>
+                    <artifactId>apache-james-backends-cassandra</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>${project.groupId}</groupId>
                     <artifactId>apache-james-mailbox-api</artifactId>
                 </dependency>
                 <dependency>
@@ -195,6 +199,12 @@
                 </dependency>
                 <dependency>
                     <groupId>${project.groupId}</groupId>
+                    <artifactId>apache-james-backends-cassandra</artifactId>
+                    <scope>test</scope>
+                    <type>test-jar</type>
+                </dependency>
+                <dependency>
+                    <groupId>${project.groupId}</groupId>
                     <artifactId>apache-james-mailbox-store</artifactId>
                     <scope>test</scope>
                     <type>test-jar</type>

Added: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java?rev=1711274&view=auto
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java (added)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxModule.java Thu Oct 29 14:17:52 2015
@@ -0,0 +1,191 @@
+/****************************************************************
+ * 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.mailbox.cassandra;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.datastax.driver.core.schemabuilder.SchemaBuilder;
+import org.apache.james.backends.cassandra.components.CassandraIndex;
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.components.CassandraTable;
+import org.apache.james.backends.cassandra.components.CassandraType;
+import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
+import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota;
+import org.apache.james.mailbox.cassandra.table.CassandraDefaultMaxQuota;
+import org.apache.james.mailbox.cassandra.table.CassandraMailboxCountersTable;
+import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
+import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota;
+import org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable;
+import org.apache.james.mailbox.cassandra.table.CassandraMessageTable;
+import org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable;
+import org.apache.james.mailbox.cassandra.table.CassandraSubscriptionTable;
+import static com.datastax.driver.core.DataType.bigint;
+import static com.datastax.driver.core.DataType.blob;
+import static com.datastax.driver.core.DataType.cboolean;
+import static com.datastax.driver.core.DataType.cint;
+import static com.datastax.driver.core.DataType.counter;
+import static com.datastax.driver.core.DataType.set;
+import static com.datastax.driver.core.DataType.text;
+import static com.datastax.driver.core.DataType.timestamp;
+import static com.datastax.driver.core.DataType.timeuuid;
+
+public class CassandraMailboxModule implements CassandraModule {
+
+    private final List<CassandraTable> tables;
+    private final List<CassandraIndex> index;
+    private final List<CassandraType> types;
+
+    public CassandraMailboxModule() {
+        tables = Arrays.asList(
+            new CassandraTable(CassandraMailboxTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraMailboxTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraMailboxTable.ID, timeuuid())
+                    .addUDTColumn(CassandraMailboxTable.MAILBOX_BASE, SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE))
+                    .addColumn(CassandraMailboxTable.NAME, text())
+                    .addColumn(CassandraMailboxTable.PATH, text())
+                    .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint())),
+            new CassandraTable(CassandraMailboxCountersTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraMailboxCountersTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, timeuuid())
+                    .addColumn(CassandraMailboxCountersTable.COUNT, counter())
+                    .addColumn(CassandraMailboxCountersTable.UNSEEN, counter())),
+            new CassandraTable(CassandraMessageUidTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraMessageUidTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid())
+                    .addColumn(CassandraMessageUidTable.NEXT_UID, bigint())),
+            new CassandraTable(CassandraMessageTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraMessageTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraMessageTable.MAILBOX_ID, timeuuid())
+                    .addClusteringColumn(CassandraMessageTable.IMAP_UID, bigint())
+                    .addColumn(CassandraMessageTable.INTERNAL_DATE, timestamp())
+                    .addColumn(CassandraMessageTable.BODY_START_OCTET, cint())
+                    .addColumn(CassandraMessageTable.BODY_OCTECTS, cint())
+                    .addColumn(CassandraMessageTable.TEXTUAL_LINE_COUNT, bigint())
+                    .addColumn(CassandraMessageTable.MOD_SEQ, bigint())
+                    .addColumn(CassandraMessageTable.FULL_CONTENT_OCTETS, cint())
+                    .addColumn(CassandraMessageTable.BODY_CONTENT, blob())
+                    .addColumn(CassandraMessageTable.HEADER_CONTENT, blob())
+                    .addColumn(CassandraMessageTable.Flag.ANSWERED, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.DELETED, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.DRAFT, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.FLAGGED, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.RECENT, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.SEEN, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.USER, cboolean())
+                    .addColumn(CassandraMessageTable.Flag.USER_FLAGS, set(text()))
+                    .addUDTListColumn(CassandraMessageTable.PROPERTIES, SchemaBuilder.frozen(CassandraMessageTable.PROPERTIES))),
+            new CassandraTable(CassandraSubscriptionTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraSubscriptionTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraSubscriptionTable.MAILBOX, text())
+                    .addClusteringColumn(CassandraSubscriptionTable.USER, text())),
+            new CassandraTable(CassandraACLTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraACLTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraACLTable.ID, timeuuid())
+                    .addColumn(CassandraACLTable.ACL, text())
+                    .addColumn(CassandraACLTable.VERSION, bigint())),
+            new CassandraTable(CassandraMessageModseqTable.TABLE_NAME,
+                SchemaBuilder.createTable(CassandraMessageModseqTable.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, timeuuid())
+                    .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint())),
+            new CassandraTable(CassandraCurrentQuota.TABLE_NAME,
+                    SchemaBuilder.createTable(CassandraCurrentQuota.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraCurrentQuota.QUOTA_ROOT, text())
+                    .addColumn(CassandraCurrentQuota.MESSAGE_COUNT, counter())
+                    .addColumn(CassandraCurrentQuota.STORAGE, counter())),
+            new CassandraTable(CassandraMaxQuota.TABLE_NAME,
+                    SchemaBuilder.createTable(CassandraMaxQuota.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraMaxQuota.QUOTA_ROOT, text())
+                    .addColumn(CassandraMaxQuota.MESSAGE_COUNT, bigint())
+                    .addColumn(CassandraMaxQuota.STORAGE, bigint())),
+            new CassandraTable(CassandraDefaultMaxQuota.TABLE_NAME,
+                    SchemaBuilder.createTable(CassandraDefaultMaxQuota.TABLE_NAME)
+                    .ifNotExists()
+                    .addPartitionKey(CassandraDefaultMaxQuota.TYPE, text())
+                    .addColumn(CassandraDefaultMaxQuota.VALUE, bigint())));
+        index = Arrays.asList(
+            new CassandraIndex(
+                SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMailboxTable.TABLE_NAME)
+                    .ifNotExists()
+                    .onTable(CassandraMailboxTable.TABLE_NAME)
+                    .andColumn(CassandraMailboxTable.PATH)),
+            new CassandraIndex(
+                SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMailboxTable.MAILBOX_BASE)
+                    .ifNotExists()
+                    .onTable(CassandraMailboxTable.TABLE_NAME)
+                    .andColumn(CassandraMailboxTable.MAILBOX_BASE)),
+            new CassandraIndex(
+                SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraSubscriptionTable.USER)
+                    .ifNotExists()
+                    .onTable(CassandraSubscriptionTable.TABLE_NAME)
+                    .andColumn(CassandraSubscriptionTable.USER)),
+            new CassandraIndex(
+                SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMessageTable.Flag.RECENT)
+                    .ifNotExists()
+                    .onTable(CassandraMessageTable.TABLE_NAME)
+                    .andColumn(CassandraMessageTable.Flag.RECENT)),
+            new CassandraIndex(
+                SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMessageTable.Flag.SEEN)
+                    .ifNotExists()
+                    .onTable(CassandraMessageTable.TABLE_NAME)
+                    .andColumn(CassandraMessageTable.Flag.SEEN)),
+            new CassandraIndex(
+                SchemaBuilder.createIndex(CassandraIndex.INDEX_PREFIX + CassandraMessageTable.Flag.DELETED)
+                    .ifNotExists()
+                    .onTable(CassandraMessageTable.TABLE_NAME)
+                    .andColumn(CassandraMessageTable.Flag.DELETED)));
+        types = Arrays.asList(
+            new CassandraType(CassandraMailboxTable.MAILBOX_BASE,
+                SchemaBuilder.createType(CassandraMailboxTable.MAILBOX_BASE)
+                    .ifNotExists()
+                    .addColumn(CassandraMailboxTable.MailboxBase.NAMESPACE, text())
+                    .addColumn(CassandraMailboxTable.MailboxBase.USER, text())),
+            new CassandraType(CassandraMessageTable.PROPERTIES,
+                SchemaBuilder.createType(CassandraMessageTable.PROPERTIES)
+                    .ifNotExists()
+                    .addColumn(CassandraMessageTable.Properties.NAMESPACE, text())
+                    .addColumn(CassandraMessageTable.Properties.NAME, text())
+                    .addColumn(CassandraMessageTable.Properties.VALUE, text())));
+    }
+
+    @Override
+    public List<CassandraTable> moduleTables() {
+        return tables;
+    }
+
+    @Override
+    public List<CassandraIndex> moduleIndex() {
+        return index;
+    }
+
+    @Override
+    public List<CassandraType> moduleTypes() {
+        return types;
+    }
+}

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java Thu Oct 29 14:17:52 2015
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.cassandra;
 
+import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.mail.CassandraMailboxMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper;

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java Thu Oct 29 14:17:52 2015
@@ -28,9 +28,10 @@ import static com.datastax.driver.core.q
 import java.io.IOException;
 import java.util.Optional;
 
-import org.apache.james.mailbox.cassandra.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.LightweightTransactionException;
 import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry;
+import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.mailbox.cassandra.mail.utils.SimpleMailboxACLJsonConverter;
 import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
 import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
@@ -86,16 +87,20 @@ public class CassandraACLMapper {
     }
 
     public void updateACL(final MailboxACL.MailboxACLCommand command) throws MailboxException {
-        new FunctionRunnerWithRetry(maxRetry).execute(
-            () -> {
-                codeInjector.inject();
-                ResultSet resultSet = getAclWithVersion()
+        try {
+            new FunctionRunnerWithRetry(maxRetry).execute(
+                () -> {
+                    codeInjector.inject();
+                    ResultSet resultSet = getAclWithVersion()
                         .map((x) -> x.apply(command))
                         .map(this::updateStoredACL)
                         .orElseGet(() -> insertACL(applyCommandOnEmptyACL(command)));
-                return resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
-            }
-        );
+                    return resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
+                }
+            );
+        } catch (LightweightTransactionException e) {
+            throw new MailboxException("Exception during lightweight transaction", e);
+        }
     }
 
     private MailboxACL applyCommandOnEmptyACL(MailboxACL.MailboxACLCommand command) {

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java Thu Oct 29 14:17:52 2015
@@ -36,11 +36,11 @@ import java.util.StringTokenizer;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
 
+import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.CassandraTypesProvider;
-import org.apache.james.mailbox.cassandra.CassandraTypesProvider.TYPE;
+import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
 import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.MailboxBase;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -118,9 +118,9 @@ public class CassandraMailboxMapper impl
 
     @Override
     public List<Mailbox<CassandraId>> list() throws MailboxException {
-        return convertToStream(
-            session.execute(select(FIELDS)
-                .from(TABLE_NAME)))
+        return CassandraUtils.convertToStream(
+            session.execute(
+                select(FIELDS).from(TABLE_NAME)))
             .map(this::mailbox)
             .collect(Collectors.toList());
     }
@@ -172,7 +172,7 @@ public class CassandraMailboxMapper impl
                 .value(ID, mailbox.getMailboxId().asUuid())
                 .value(NAME, mailbox.getName())
                 .value(UIDVALIDITY, mailbox.getUidValidity())
-                .value(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase)
+                .value(MAILBOX_BASE, typesProvider.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE)
                     .newValue()
                     .setString(MailboxBase.NAMESPACE, mailbox.getNamespace())
                     .setString(MailboxBase.USER, mailbox.getUser()))
@@ -184,18 +184,11 @@ public class CassandraMailboxMapper impl
         return new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName());
     }
 
-    private Stream<Row> convertToStream(ResultSet resultSet) {
-        return StreamSupport.stream(resultSet.spliterator(), true);
-    }
-
     private Stream<Row> getMailboxFilteredByNamespaceAndUserStream (String namespace, String user) {
-        return convertToStream(session.execute(
+        return CassandraUtils.convertToStream(session.execute(
             select(FIELDS)
                 .from(TABLE_NAME)
-                .where(eq(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase)
-                    .newValue()
-                    .setString(MailboxBase.NAMESPACE, namespace)
-                    .setString(MailboxBase.USER, user)))));
+                .where(eq(MAILBOX_BASE, typesProvider.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE).newValue().setString(MailboxBase.NAMESPACE, namespace).setString(MailboxBase.USER, user)))));
     }
 
 }

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java Thu Oct 29 14:17:52 2015
@@ -62,21 +62,19 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
 
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 import javax.mail.util.SharedByteArrayInputStream;
 
 import com.google.common.base.Throwables;
+import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
+import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.cassandra.CassandraConstants;
 import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.CassandraTypesProvider;
-import org.apache.james.mailbox.cassandra.CassandraTypesProvider.TYPE;
-import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry;
+import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.mailbox.cassandra.mail.utils.MessageDeletedDuringFlagsUpdateException;
 import org.apache.james.mailbox.cassandra.table.CassandraMailboxCountersTable;
 import org.apache.james.mailbox.cassandra.table.CassandraMessageTable;
@@ -166,7 +164,7 @@ public class CassandraMessageMapper impl
 
     @Override
     public Iterator<Message<CassandraId>> findInMailbox(Mailbox<CassandraId> mailbox, MessageRange set, FetchType ftype, int max) throws MailboxException {
-        return convertToStream(session.execute(buildQuery(mailbox, set)))
+        return CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set)))
             .map(this::message)
             .sorted(Comparator.comparingLong(Message::getUid))
             .iterator();
@@ -174,7 +172,7 @@ public class CassandraMessageMapper impl
 
     @Override
     public List<Long> findRecentMessageUidsInMailbox(Mailbox<CassandraId> mailbox) throws MailboxException {
-        return convertToStream(session.execute(selectAll(mailbox).and((eq(RECENT, true)))))
+        return CassandraUtils.convertToStream(session.execute(selectAll(mailbox).and((eq(RECENT, true)))))
             .map((row) -> row.getLong(IMAP_UID))
             .sorted()
             .collect(Collectors.toList());
@@ -182,7 +180,7 @@ public class CassandraMessageMapper impl
 
     @Override
     public Long findFirstUnseenMessageUid(Mailbox<CassandraId> mailbox) throws MailboxException {
-        return convertToStream(session.execute(selectAll(mailbox).and((eq(SEEN, false)))))
+        return CassandraUtils.convertToStream(session.execute(selectAll(mailbox).and((eq(SEEN, false)))))
             .map((row) -> row.getLong(IMAP_UID))
             .sorted()
             .findFirst()
@@ -191,7 +189,7 @@ public class CassandraMessageMapper impl
 
     @Override
     public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final Mailbox<CassandraId> mailbox, MessageRange set) throws MailboxException {
-        return convertToStream(session.execute(buildQuery(mailbox, set).and(eq(DELETED, true))))
+        return CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set).and(eq(DELETED, true))))
             .map(this::message)
             .peek((message) -> delete(mailbox, message))
             .collect(Collectors.toMap(Message::getUid, SimpleMessageMetaData::new));
@@ -226,7 +224,7 @@ public class CassandraMessageMapper impl
 
     @Override
     public Iterator<UpdatedFlags> updateFlags(Mailbox<CassandraId> mailbox, FlagsUpdateCalculator flagUpdateCalculator, MessageRange set) throws MailboxException {
-        return convertToStream(session.execute(buildQuery(mailbox, set)))
+        return CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set)))
             .map((row) -> updateFlagsOnMessage(mailbox, flagUpdateCalculator, row))
             .filter(Optional::isPresent)
             .map(Optional::get)
@@ -344,7 +342,7 @@ public class CassandraMessageMapper impl
                 .value(BODY_CONTENT, bindMarker())
                 .value(HEADER_CONTENT, bindMarker())
                 .value(PROPERTIES, message.getProperties().stream()
-                    .map(x -> typesProvider.getDefinedUserType(TYPE.Property)
+                    .map(x -> typesProvider.getDefinedUserType(PROPERTIES)
                         .newValue()
                         .setString(Properties.NAMESPACE, x.getNamespace())
                         .setString(Properties.NAME, x.getLocalName())
@@ -406,16 +404,13 @@ public class CassandraMessageMapper impl
         } catch (MessageDeletedDuringFlagsUpdateException e) {
             mailboxSession.getLog().warn(e.getMessage());
             return Optional.empty();
-        } catch (MailboxException e) {
+        } catch (Exception e) {
             throw Throwables.propagate(e);
         }
     }
 
     private Optional<UpdatedFlags> retryMessageFlagsUpdate(Mailbox<CassandraId> mailbox, long uid, FlagsUpdateCalculator flagUpdateCalculator) {
-        return tryMessageFlagsUpdate(flagUpdateCalculator,
-            mailbox,
-            message(Optional.ofNullable(session.execute(selectMessage(mailbox, uid)).one())
-                .orElseThrow(() -> new MessageDeletedDuringFlagsUpdateException(mailbox.getMailboxId(), uid))));
+        return tryMessageFlagsUpdate(flagUpdateCalculator, mailbox, message(Optional.ofNullable(session.execute(selectMessage(mailbox, uid)).one()).orElseThrow(() -> new MessageDeletedDuringFlagsUpdateException(mailbox.getMailboxId(), uid))));
     }
 
     private boolean conditionalSave(Message<CassandraId> message, long oldModSeq) {
@@ -483,8 +478,4 @@ public class CassandraMessageMapper impl
             .and(eq(IMAP_UID, uid));
     }
 
-    private Stream<Row> convertToStream(ResultSet resultSet) {
-        return StreamSupport.stream(resultSet.spliterator(), true);
-    }
-
 }

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java Thu Oct 29 14:17:52 2015
@@ -24,16 +24,17 @@ import static com.datastax.driver.core.q
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
-import static org.apache.james.mailbox.cassandra.CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.MAILBOX_ID;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.NEXT_MODSEQ;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.TABLE_NAME;
 
 import java.util.Optional;
 
+import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.LightweightTransactionException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry;
+import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -71,17 +72,21 @@ public class CassandraModSeqProvider imp
                 return optional.get().getValue();
             }
         }
-        
-        return runner.executeAndRetrieveObject(
-                    () -> {
-                        try {
-                            return tryUpdateModSeq(mailbox, findHighestModSeq(mailboxSession, mailbox))
-                                    .map(ModSeq::getValue);
-                        } catch (Exception exception) {
-                            LOG.error("Can not retrieve next ModSeq", exception);
-                            throw Throwables.propagate(exception);
-                        }
-                    });
+
+        try {
+            return runner.executeAndRetrieveObject(
+                        () -> {
+                            try {
+                                return tryUpdateModSeq(mailbox, findHighestModSeq(mailboxSession, mailbox))
+                                        .map(ModSeq::getValue);
+                            } catch (Exception exception) {
+                                LOG.error("Can not retrieve next ModSeq", exception);
+                                throw Throwables.propagate(exception);
+                            }
+                        });
+        } catch (LightweightTransactionException e) {
+            throw new MailboxException("Error during ModSeq update", e);
+        }
     }
 
     @Override
@@ -120,7 +125,7 @@ public class CassandraModSeqProvider imp
     }
 
     private Optional<ModSeq> transactionalStatementToOptionalModSeq(ModSeq modSeq, BuiltStatement statement) {
-        if(session.execute(statement).one().getBool(LIGHTWEIGHT_TRANSACTION_APPLIED)) {
+        if(session.execute(statement).one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED)) {
             return Optional.of(modSeq);
         }
         return Optional.empty();

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java Thu Oct 29 14:17:52 2015
@@ -26,14 +26,15 @@ import static com.datastax.driver.core.q
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
-import static org.apache.james.mailbox.cassandra.CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED;
+import org.apache.james.backends.cassandra.utils.CassandraConstants;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.NEXT_UID;
 
 import com.datastax.driver.core.querybuilder.BuiltStatement;
 import com.google.common.base.Throwables;
+import org.apache.james.backends.cassandra.utils.LightweightTransactionException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry;
+import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.mail.UidProvider;
@@ -70,16 +71,20 @@ public class CassandraUidProvider implem
             }
         }
 
-        return runner.executeAndRetrieveObject(
-            () -> {
-                try {
-                    return tryUpdateUid(mailbox, findHighestUid(mailbox))
-                        .map(Uid::getValue);
-                } catch (Exception exception) {
-                    LOG.error("Can not retrieve next Uid", exception);
-                    throw Throwables.propagate(exception);
-                }
-            });
+        try {
+            return runner.executeAndRetrieveObject(
+                () -> {
+                    try {
+                        return tryUpdateUid(mailbox, findHighestUid(mailbox))
+                            .map(Uid::getValue);
+                    } catch (Exception exception) {
+                        LOG.error("Can not retrieve next Uid", exception);
+                        throw Throwables.propagate(exception);
+                    }
+                });
+        } catch (LightweightTransactionException e) {
+            throw new MailboxException("Error during Uid update", e);
+        }
     }
 
     @Override
@@ -118,7 +123,7 @@ public class CassandraUidProvider implem
     }
 
     private Optional<Uid> transactionalStatementToOptionalUid(Uid uid, BuiltStatement statement) {
-        if(session.execute(statement).one().getBool(LIGHTWEIGHT_TRANSACTION_APPLIED)) {
+        if(session.execute(statement).one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED)) {
             return Optional.of(uid);
         }
         return Optional.empty();

Modified: james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java (original)
+++ james/project/trunk/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java Thu Oct 29 14:17:52 2015
@@ -29,16 +29,14 @@ import static org.apache.james.mailbox.c
 
 import java.util.List;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import java.util.stream.StreamSupport;
 
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 
 import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
 
@@ -68,7 +66,7 @@ public class CassandraSubscriptionMapper
 
     @Override
     public List<Subscription> findSubscriptionsForUser(String user) {
-        return convertToStream(
+        return CassandraUtils.convertToStream(
             session.execute(select(MAILBOX)
                 .from(TABLE_NAME)
                 .where(eq(USER, user))))
@@ -84,7 +82,7 @@ public class CassandraSubscriptionMapper
     }
 
     public List<SimpleSubscription> list() {
-        return convertToStream(
+        return CassandraUtils.convertToStream(
             session.execute(select(FIELDS)
                 .from(TABLE_NAME)))
             .map((row) -> new SimpleSubscription(row.getString(USER), row.getString(MAILBOX)))
@@ -96,8 +94,4 @@ public class CassandraSubscriptionMapper
         // nothing to do
     }
 
-    private Stream<Row> convertToStream(ResultSet resultSet) {
-        return StreamSupport.stream(resultSet.spliterator(), true);
-    }
-
 }

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java Thu Oct 29 14:17:52 2015
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.mailbox.cassandra;
 
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.AbstractMailboxManagerTest;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
@@ -35,7 +36,7 @@ import org.slf4j.LoggerFactory;
  */
 public class CassandraMailboxManagerTest extends AbstractMailboxManagerTest {
 
-    private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.build();
+    private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.create(new CassandraMailboxModule());
 
     /**
      * Setup the mailboxManager.

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java Thu Oct 29 14:17:52 2015
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
 import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
@@ -40,7 +41,7 @@ import org.slf4j.LoggerFactory;
  * 
  */
 public class CassandraMailboxSessionMapperFactoryTest {
-    private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.build();
+    private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.create(new CassandraMailboxModule());
     private final static Logger LOG = LoggerFactory.getLogger(CassandraMailboxSessionMapperFactoryTest.class);
 
     @Before

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java Thu Oct 29 14:17:52 2015
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.cassandra;
 
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.AbstractSubscriptionManagerTest;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
@@ -29,7 +30,7 @@ import org.apache.james.mailbox.cassandr
  */
 public class CassandraSubscriptionManagerTest extends AbstractSubscriptionManagerTest {
 
-    private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.build();
+    private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule());
     
     @Override
     public SubscriptionManager createSubscriptionManager() {

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java Thu Oct 29 14:17:52 2015
@@ -30,8 +30,9 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.cassandra.CassandraId;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
@@ -55,7 +56,7 @@ public class CassandraACLMapperTest {
 
     @Before
     public void setUp() {
-        cassandra = CassandraClusterSingleton.build();
+        cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule());
         cassandra.ensureAllTables();
         uidValidity = 10;
         mailbox = new SimpleMailbox<>(new MailboxPath("#private", "benwa@linagora.com", "INBOX"), uidValidity);

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java Thu Oct 29 14:17:52 2015
@@ -1,7 +1,8 @@
 package org.apache.james.mailbox.cassandra.mail;
 
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.cassandra.CassandraId;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
@@ -11,7 +12,7 @@ import org.apache.james.mailbox.store.ma
 
 public class CassandraMapperProvider implements MapperProvider<CassandraId> {
 
-    private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.build();
+    private static final CassandraClusterSingleton cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule());
 
     @Override
     public MailboxMapper<CassandraId> createMailboxMapper() throws MailboxException {

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java Thu Oct 29 14:17:52 2015
@@ -27,8 +27,9 @@ import java.util.concurrent.atomic.Atomi
 import java.util.function.LongConsumer;
 import java.util.stream.LongStream;
 
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.cassandra.CassandraId;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -44,7 +45,7 @@ import com.google.common.base.Throwables
  */
 public class CassandraUidAndModSeqProviderTest {
 
-    private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.build();
+    private static final CassandraClusterSingleton CASSANDRA = CassandraClusterSingleton.create(new CassandraMailboxModule());
     private static final int NAMESPACES = 5;
     private static final int USERS = 5;
     private static final int MAILBOX_NO = 5;

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerTest.java Thu Oct 29 14:17:52 2015
@@ -21,7 +21,8 @@ package org.apache.james.mailbox.cassand
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.quota.QuotaRootImpl;
 import org.junit.After;
@@ -37,7 +38,7 @@ public class CassandraCurrentQuotaManage
 
     @Before
     public void setUp() {
-        cassandra = CassandraClusterSingleton.build();
+        cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule());
         cassandra.ensureAllTables();
         currentQuotaManager = new CassandraCurrentQuotaManager(cassandra.getConf());
     }

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java Thu Oct 29 14:17:52 2015
@@ -19,7 +19,8 @@
 
 package org.apache.james.mailbox.cassandra.quota;
 
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.store.quota.GenericMaxQuotaManagerTest;
 import org.junit.After;
@@ -30,7 +31,7 @@ public class CassandraPerUserMaxQuotaMan
 
     @Override
     protected MaxQuotaManager provideMaxQuotaManager() {
-        cassandra = CassandraClusterSingleton.build();
+        cassandra = CassandraClusterSingleton.create(new CassandraMailboxModule());
         cassandra.ensureAllTables();
         return new CassandraPerUserMaxQuotaManager(cassandra.getConf());
     }

Modified: james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java (original)
+++ james/project/trunk/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java Thu Oct 29 14:17:52 2015
@@ -28,7 +28,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.store.user.model.Subscription;
 import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 import org.junit.Before;
@@ -45,7 +46,7 @@ import com.datastax.driver.core.Session;
 public class CassandraSubscriptionMapperTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(CassandraSubscriptionMapperTest.class);
-    private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.build();
+    private static final CassandraClusterSingleton CLUSTER = CassandraClusterSingleton.create(new CassandraMailboxModule());
     private static Session session;
     private static CassandraSubscriptionMapper mapper;
     private static Map<String, List<SimpleSubscription>> subscriptionList;

Modified: james/project/trunk/mailbox/hbase/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/hbase/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/hbase/pom.xml (original)
+++ james/project/trunk/mailbox/hbase/pom.xml Thu Oct 29 14:17:52 2015
@@ -92,6 +92,12 @@
             </exclusions>
         </dependency>
         <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <scope>test</scope>
+            <version>13.0</version>
+        </dependency>
+        <dependency>
             <groupId>org.apache.hbase</groupId>
             <artifactId>hbase</artifactId>
             <type>test-jar</type>

Modified: james/project/trunk/mailbox/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mailbox/pom.xml (original)
+++ james/project/trunk/mailbox/pom.xml Thu Oct 29 14:17:52 2015
@@ -125,6 +125,7 @@
         <jackson-databinding.version>2.3.3</jackson-databinding.version>
         <cassandra-driver-core.version>2.1.5</cassandra-driver-core.version>
         <cassandra-unit.version>2.0.2.2</cassandra-unit.version>
+        <apache-backends-cassandra.version>1.8.3-SNAPSHOT</apache-backends-cassandra.version>
     </properties>
 
     <dependencyManagement>
@@ -283,6 +284,21 @@
             </dependency>
 
             <!--
+
+            -->
+            <dependency>
+                <groupId>org.apache.james</groupId>
+                <artifactId>apache-james-backends-cassandra</artifactId>
+                <version>${apache-backends-cassandra.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.james</groupId>
+                <artifactId>apache-james-backends-cassandra</artifactId>
+                <version>${apache-backends-cassandra.version}</version>
+                <type>test-jar</type>
+            </dependency>
+
+            <!--
                 START Logging
             -->
             <dependency>

Modified: james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml (original)
+++ james/project/trunk/mpt/impl/imap-mailbox/cassandra/pom.xml Thu Oct 29 14:17:52 2015
@@ -150,15 +150,20 @@
 	        <dependencies>
                 <dependency>
                     <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-mailbox-cassandra</artifactId>
+                    <artifactId>apache-james-backends-cassandra</artifactId>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-mailbox-cassandra</artifactId>
+                    <artifactId>apache-james-backends-cassandra</artifactId>
+                    <scope>test</scope>
                     <type>test-jar</type>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.james</groupId>
+                    <artifactId>apache-james-mailbox-cassandra</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.james</groupId>
                     <artifactId>apache-james-mpt-imapmailbox-core</artifactId>
                 </dependency>
                 <dependency>
@@ -215,5 +220,8 @@
             </build>
         </profile>
     </profiles>
+    <build>
+
+    </build>
 </project>
 

Modified: james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java (original)
+++ james/project/trunk/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java Thu Oct 29 14:17:52 2015
@@ -18,14 +18,16 @@
  ****************************************************************/
 package org.apache.james.mpt.imapmailbox.cassandra.host;
 
+import org.apache.james.backends.cassandra.CassandraClusterSingleton;
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.SubscriptionManager;
-import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
 import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
+import org.apache.james.mailbox.cassandra.CassandraMailboxModule;
 import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
-import org.apache.james.mailbox.cassandra.CassandraTypesProvider;
 import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
 import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
@@ -49,17 +51,18 @@ public class CassandraHostSystem extends
     
     private final CassandraMailboxManager mailboxManager;
     private final MockAuthenticator userManager;
+    private final CassandraModule mailboxModule;
     private CassandraClusterSingleton cassandraClusterSingleton;
 
     public CassandraHostSystem() throws Exception {
-        cassandraClusterSingleton = CassandraClusterSingleton.build();
+        mailboxModule = new CassandraMailboxModule();
+        cassandraClusterSingleton = CassandraClusterSingleton.create(mailboxModule);
         userManager = new MockAuthenticator();
-
         com.datastax.driver.core.Session session = cassandraClusterSingleton.getConf();
         CassandraModSeqProvider modSeqProvider = new CassandraModSeqProvider(session);
         CassandraUidProvider uidProvider = new CassandraUidProvider(session);
 
-        CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider, modSeqProvider, session, new CassandraTypesProvider(session));
+        CassandraMailboxSessionMapperFactory mapperFactory = new CassandraMailboxSessionMapperFactory(uidProvider, modSeqProvider, session, new CassandraTypesProvider(mailboxModule, session));
         
         mailboxManager = new CassandraMailboxManager(mapperFactory, userManager, new JVMMailboxPathLocker());
         QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mapperFactory);

Modified: james/project/trunk/mpt/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/mpt/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/mpt/pom.xml (original)
+++ james/project/trunk/mpt/pom.xml Thu Oct 29 14:17:52 2015
@@ -113,6 +113,7 @@
 
         <javax.mail.groupId>javax.mail</javax.mail.groupId>
         <javax.mail.artifactId>mail</javax.mail.artifactId>
+        <backends.version>1.8.3-SNAPSHOT</backends.version>
     </properties>
 
 
@@ -161,6 +162,17 @@
             <!-- Other Apache James sub projects -->
             <dependency>
                 <groupId>org.apache.james</groupId>
+                <artifactId>apache-james-backends-cassandra</artifactId>
+                <version>${backends.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.james</groupId>
+                <artifactId>apache-james-backends-cassandra</artifactId>
+                <type>test-jar</type>
+                <version>${backends.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.james</groupId>
                 <artifactId>apache-james-mailbox-api</artifactId>
                 <version>${james-mailbox.version}</version>
             </dependency>

Modified: james/project/trunk/server/app/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/server/app/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/server/app/pom.xml (original)
+++ james/project/trunk/server/app/pom.xml Thu Oct 29 14:17:52 2015
@@ -378,6 +378,10 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
+            <artifactId>apache-james-backends-cassandra</artifactId>
+        </dependency>
         <!-- Comment jackrabbit dependency to avoid lucene version clash with mailbox-lucene (JAMES-1297)
             <dependency>
             <groupId>org.apache.jackrabbit</groupId>

Modified: james/project/trunk/server/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1711274&r1=1711273&r2=1711274&view=diff
==============================================================================
--- james/project/trunk/server/pom.xml (original)
+++ james/project/trunk/server/pom.xml Thu Oct 29 14:17:52 2015
@@ -176,6 +176,7 @@
         <karaf.tooling.exam.container.version>2.3.0</karaf.tooling.exam.container.version>
         <pax-logging-api.version>1.6.4</pax-logging-api.version>
         <mockito-core.version>1.9.0</mockito-core.version>
+        <backends.version>1.8.3-SNAPSHOT</backends.version>
     </properties>
 
     <dependencyManagement>
@@ -286,6 +287,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.james</groupId>
+                <artifactId>apache-james-backends-cassandra</artifactId>
+                <version>${backends.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.james</groupId>
                 <artifactId>apache-mailet-api</artifactId>
                 <version>${mailet.version}</version>
                 <exclusions>



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