Author: matthieu
Date: Tue Nov 3 16:46:53 2015
New Revision: 1712328
URL: http://svn.apache.org/viewvc?rev=1712328&view=rev
Log:
JAMES-1626 bootstrap guice-based application with Cassandra IMAP server
Added:
james/project/trunk/server/container/cassandra-guice/src/
james/project/trunk/server/container/cassandra-guice/src/main/
james/project/trunk/server/container/cassandra-guice/src/main/java/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServer.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
- copied, changed from r1712327,
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
- copied, changed from r1712327,
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
- copied, changed from r1712327,
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/SimpleMessageSearchModule.java
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/utils/
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/utils/PropertiesReader.java
james/project/trunk/server/container/cassandra-guice/src/test/
james/project/trunk/server/container/cassandra-guice/src/test/java/
james/project/trunk/server/container/cassandra-guice/src/test/java/org/
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/utils/
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/utils/PropertiesReadTest.java
james/project/trunk/server/container/cassandra-guice/src/test/resources/
james/project/trunk/server/container/cassandra-guice/src/test/resources/cassandra.properties
james/project/trunk/server/container/cassandra-guice/src/test/resources/test.properties
Modified:
james/project/trunk/backends-common/cassandra/pom.xml
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
james/project/trunk/backends-common/pom.xml
james/project/trunk/server/container/cassandra-guice/pom.xml
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
james/project/trunk/server/pom.xml
Modified: james/project/trunk/backends-common/cassandra/pom.xml
URL:
http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/pom.xml?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/pom.xml (original)
+++ james/project/trunk/backends-common/cassandra/pom.xml Tue Nov 3 16:46:53
2015
@@ -140,6 +140,10 @@
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
+ <dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ </dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
Modified:
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
---
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
(original)
+++
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
Tue Nov 3 16:46:53 2015
@@ -21,6 +21,8 @@ package org.apache.james.backends.cassan
import java.util.Optional;
+import javax.inject.Inject;
+
import com.datastax.driver.core.Session;
import com.datastax.driver.core.UserType;
import com.google.common.collect.ImmutableMap;
@@ -31,6 +33,7 @@ import org.apache.james.backends.cassand
public class CassandraTypesProvider {
private final ImmutableMap<String, UserType> userTypes;
+ @Inject
public CassandraTypesProvider(CassandraModule module, Session session) {
userTypes = module.moduleTypes()
.stream()
Modified: james/project/trunk/backends-common/pom.xml
URL:
http://svn.apache.org/viewvc/james/project/trunk/backends-common/pom.xml?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
--- james/project/trunk/backends-common/pom.xml (original)
+++ james/project/trunk/backends-common/pom.xml Tue Nov 3 16:46:53 2015
@@ -45,6 +45,11 @@
<version>16.0</version>
</dependency>
<dependency>
+ <groupId>javax.inject</groupId>
+ <artifactId>javax.inject</artifactId>
+ <version>1</version>
+ </dependency>
+ <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.0.0</version>
Modified: james/project/trunk/server/container/cassandra-guice/pom.xml
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/pom.xml?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
--- james/project/trunk/server/container/cassandra-guice/pom.xml (original)
+++ james/project/trunk/server/container/cassandra-guice/pom.xml Tue Nov 3
16:46:53 2015
@@ -168,11 +168,22 @@
</build>
<dependencies>
<dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-james-backends-cassandra</artifactId>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
<groupId>${project.groupId}</groupId>
<artifactId>apache-james-mailbox-cassandra</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>apache-james-mailbox-cassandra</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>apache-james-mailbox-elasticsearch</artifactId>
</dependency>
<dependency>
@@ -213,6 +224,11 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>james-server-data-cassandra</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>james-server-data-library</artifactId>
</dependency>
<dependency>
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServer.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServer.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServer.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServer.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,39 @@
+/****************************************************************
+ * 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;
+
+import com.google.inject.Guice;
+import com.google.inject.Module;
+
+public class CassandraJamesServer {
+
+ private final Module serverModule;
+
+ public CassandraJamesServer(Module serverModule) {
+ this.serverModule = serverModule;
+ }
+
+ public void start() {
+ Guice.createInjector(serverModule);
+ }
+
+ public void stop() {
+ }
+
+}
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,48 @@
+/****************************************************************
+ * 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;
+
+import org.apache.james.modules.data.CassandraDomainListModule;
+import org.apache.james.modules.data.CassandraRecipientRewriteTableModule;
+import org.apache.james.modules.data.CassandraUsersRepositoryModule;
+import org.apache.james.modules.mailbox.CassandraMailboxModule;
+import org.apache.james.modules.mailbox.CassandraSessionModule;
+import org.apache.james.modules.server.DNSServiceModule;
+import org.apache.james.modules.server.SimpleMessageSearchModule;
+
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
+
+public class CassandraJamesServerMain {
+
+ public static final Module defaultModule = Modules.combine(new
CassandraMailboxModule(),
+ new CassandraSessionModule(),
+ new SimpleMessageSearchModule(),
+ new CassandraUsersRepositoryModule(),
+ new CassandraDomainListModule(),
+ new CassandraRecipientRewriteTableModule(),
+ new DNSServiceModule());
+
+ public static void main(String[] args) throws Exception {
+ CassandraJamesServer server = new CassandraJamesServer(defaultModule);
+ server.start();
+ }
+
+}
Copied:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
(from r1712327,
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java?p2=james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java&p1=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java&r1=1712327&r2=1712328&rev=1712328&view=diff
==============================================================================
---
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
(original)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
Tue Nov 3 16:46:53 2015
@@ -16,39 +16,22 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
+package org.apache.james.modules.data;
-package org.apache.james.backends.cassandra.init;
-
-import java.util.Optional;
-
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UserType;
-import com.google.common.collect.ImmutableMap;
import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.components.CassandraType;
-import org.apache.james.backends.cassandra.utils.Collectors;
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.cassandra.CassandraDomainList;
-public class CassandraTypesProvider {
- private final ImmutableMap<String, UserType> userTypes;
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.Multibinder;
- public CassandraTypesProvider(CassandraModule module, Session session) {
- userTypes = module.moduleTypes()
- .stream()
- .collect(Collectors.toImmutableMap(
- CassandraType::getName,
- type -> getSessionType(session, type)));
- }
-
- private UserType getSessionType(Session session, CassandraType type) {
- return session.getCluster()
- .getMetadata()
- .getKeyspace(session.getLoggedKeyspace())
- .getUserType(type.getName());
- }
+public class CassandraDomainListModule extends AbstractModule {
- public UserType getDefinedUserType(String typeName) {
- return Optional.ofNullable(userTypes.get(typeName))
- .orElseThrow(() -> new RuntimeException("Cassandra UDT " +
typeName + " can not be retrieved"));
+ @Override
+ public void configure() {
+ bind(DomainList.class).to(CassandraDomainList.class);
+ Multibinder<CassandraModule> cassandraDataDefinitions =
Multibinder.newSetBinder(binder(), CassandraModule.class);
+
cassandraDataDefinitions.addBinding().to(org.apache.james.domainlist.cassandra.CassandraDomainListModule.class);
}
}
Copied:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
(from r1712327,
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java?p2=james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java&p1=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java&r1=1712327&r2=1712328&rev=1712328&view=diff
==============================================================================
---
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
(original)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
Tue Nov 3 16:46:53 2015
@@ -16,39 +16,23 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
+package org.apache.james.modules.data;
-package org.apache.james.backends.cassandra.init;
-
-import java.util.Optional;
-
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UserType;
-import com.google.common.collect.ImmutableMap;
import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.components.CassandraType;
-import org.apache.james.backends.cassandra.utils.Collectors;
-
-public class CassandraTypesProvider {
- private final ImmutableMap<String, UserType> userTypes;
-
- public CassandraTypesProvider(CassandraModule module, Session session) {
- userTypes = module.moduleTypes()
- .stream()
- .collect(Collectors.toImmutableMap(
- CassandraType::getName,
- type -> getSessionType(session, type)));
- }
-
- private UserType getSessionType(Session session, CassandraType type) {
- return session.getCluster()
- .getMetadata()
- .getKeyspace(session.getLoggedKeyspace())
- .getUserType(type.getName());
- }
-
- public UserType getDefinedUserType(String typeName) {
- return Optional.ofNullable(userTypes.get(typeName))
- .orElseThrow(() -> new RuntimeException("Cassandra UDT " +
typeName + " can not be retrieved"));
+import org.apache.james.rrt.api.RecipientRewriteTable;
+import org.apache.james.rrt.cassandra.CassandraRRTModule;
+import org.apache.james.rrt.cassandra.CassandraRecipientRewriteTable;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.Multibinder;
+
+public class CassandraRecipientRewriteTableModule extends AbstractModule {
+
+ @Override
+ public void configure() {
+
bind(RecipientRewriteTable.class).to(CassandraRecipientRewriteTable.class);
+ Multibinder<CassandraModule> cassandraDataDefinitions =
Multibinder.newSetBinder(binder(), CassandraModule.class);
+ cassandraDataDefinitions.addBinding().to(CassandraRRTModule.class);
}
}
Copied:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
(from r1712327,
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java?p2=james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java&p1=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java&r1=1712327&r2=1712328&rev=1712328&view=diff
==============================================================================
---
james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
(original)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
Tue Nov 3 16:46:53 2015
@@ -16,39 +16,23 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
+package org.apache.james.modules.data;
-package org.apache.james.backends.cassandra.init;
-
-import java.util.Optional;
-
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UserType;
-import com.google.common.collect.ImmutableMap;
import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.components.CassandraType;
-import org.apache.james.backends.cassandra.utils.Collectors;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.cassandra.CassandraUsersRepository;
-public class CassandraTypesProvider {
- private final ImmutableMap<String, UserType> userTypes;
+import com.google.inject.AbstractModule;
+import com.google.inject.multibindings.Multibinder;
- public CassandraTypesProvider(CassandraModule module, Session session) {
- userTypes = module.moduleTypes()
- .stream()
- .collect(Collectors.toImmutableMap(
- CassandraType::getName,
- type -> getSessionType(session, type)));
- }
+public class CassandraUsersRepositoryModule extends AbstractModule {
- private UserType getSessionType(Session session, CassandraType type) {
- return session.getCluster()
- .getMetadata()
- .getKeyspace(session.getLoggedKeyspace())
- .getUserType(type.getName());
- }
+ @Override
+ public void configure() {
+ bind(UsersRepository.class).to(CassandraUsersRepository.class);
+ Multibinder<CassandraModule> cassandraDataDefinitions =
Multibinder.newSetBinder(binder(), CassandraModule.class);
+
cassandraDataDefinitions.addBinding().to(org.apache.james.user.cassandra.CassandraUsersRepositoryModule.class);
- public UserType getDefinedUserType(String typeName) {
- return Optional.ofNullable(userTypes.get(typeName))
- .orElseThrow(() -> new RuntimeException("Cassandra UDT " +
typeName + " can not be retrieved"));
}
}
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,70 @@
+/****************************************************************
+ * 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.modules.mailbox;
+
+import javax.inject.Singleton;
+
+import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxPathLocker;
+import org.apache.james.mailbox.SubscriptionManager;
+import org.apache.james.mailbox.cassandra.CassandraId;
+import org.apache.james.mailbox.cassandra.CassandraMailboxManager;
+import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
+import org.apache.james.mailbox.cassandra.CassandraSubscriptionManager;
+import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
+import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.Authenticator;
+import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.mail.MessageMapperFactory;
+import org.apache.james.mailbox.store.mail.ModSeqProvider;
+import org.apache.james.mailbox.store.mail.UidProvider;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Named;
+
+public class CassandraMailboxModule extends AbstractModule {
+
+ public static final String MAILBOXMANAGER_NAME = "mailboxmanager";
+
+ @Override
+ protected void configure() {
+ bind(SubscriptionManager.class).to(CassandraSubscriptionManager.class);
+ bind(new
TypeLiteral<MessageMapperFactory<CassandraId>>(){}).to(CassandraMailboxSessionMapperFactory.class);
+
+ bind(MailboxPathLocker.class).to(NoMailboxPathLocker.class);
+ bind(Authenticator.class).to(UserRepositoryAuthenticator.class);
+
+ bind(new TypeLiteral<ModSeqProvider<CassandraId>>(){}).to(new
TypeLiteral<CassandraModSeqProvider>(){});
+ bind(new TypeLiteral<UidProvider<CassandraId>>(){}).to(new
TypeLiteral<CassandraUidProvider>(){});
+ Multibinder<CassandraModule> cassandraDataDefinitions =
Multibinder.newSetBinder(binder(), CassandraModule.class);
+
cassandraDataDefinitions.addBinding().to(org.apache.james.mailbox.cassandra.CassandraMailboxModule.class);
+ }
+
+ @Provides @Named(MAILBOXMANAGER_NAME) @Singleton
+ public MailboxManager provideMailboxManager(CassandraMailboxManager
cassandraMailboxManager) throws MailboxException {
+ cassandraMailboxManager.init();
+ return cassandraMailboxManager;
+ }
+}
\ No newline at end of file
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,75 @@
+/****************************************************************
+ * 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.modules.mailbox;
+
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+import com.google.inject.AbstractModule;
+
+import java.util.Set;
+
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
+import org.apache.james.backends.cassandra.init.ClusterFactory;
+import
org.apache.james.backends.cassandra.init.ClusterWithKeyspaceCreatedFactory;
+import
org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory;
+import org.apache.james.utils.PropertiesReader;
+
+public class CassandraSessionModule extends AbstractModule {
+
+ private final PropertiesReader propertiesReader;
+ private final String keyspace;
+
+ public CassandraSessionModule() {
+ propertiesReader = new PropertiesReader("cassandra.properties");
+ keyspace = propertiesReader.getProperty("cassandra.keyspace");
+ }
+
+ @Override
+ protected void configure() {
+
+ }
+
+ @Provides
+ @Singleton
+ CassandraModule composeDataDefinitions(Set<CassandraModule> modules) {
+ return new CassandraModuleComposite(modules.toArray(new
CassandraModule[0]));
+ }
+
+ @Provides
+ @Singleton
+ Session provideSession(Cluster cluster, CassandraModule cassandraModule) {
+ return new
SessionWithInitializedTablesFactory(cassandraModule).createSession(cluster,
keyspace);
+ }
+
+ @Provides
+ @Singleton
+ Cluster provideCluster() {
+ return
ClusterWithKeyspaceCreatedFactory.clusterWithInitializedKeyspace(
+ ClusterFactory.createClusterForSingleServerWithoutPassWord(
+ propertiesReader.getProperty("cassandra.ip"),
+
Integer.parseInt(propertiesReader.getProperty("cassandra.port"))),
+ keyspace,
+
Integer.parseInt(propertiesReader.getProperty("cassandra.replication.factor")));
+ }
+
+}
\ No newline at end of file
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/DNSServiceModule.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,40 @@
+/****************************************************************
+ * 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.modules.server;
+
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import org.apache.james.dnsservice.api.DNSService;
+import org.apache.james.dnsservice.dnsjava.DNSJavaService;
+
+import com.google.inject.AbstractModule;
+
+public class DNSServiceModule extends AbstractModule {
+
+ @Override
+ protected void configure() {
+
+ }
+
+ @Provides
+ @Singleton
+ private DNSService provideDNSService() {
+ return new DNSJavaService();
+ }
+}
\ No newline at end of file
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/SimpleMessageSearchModule.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/SimpleMessageSearchModule.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/SimpleMessageSearchModule.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/SimpleMessageSearchModule.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,17 @@
+package org.apache.james.modules.server;
+
+import org.apache.james.mailbox.cassandra.CassandraId;
+import org.apache.james.mailbox.store.search.MessageSearchIndex;
+import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.TypeLiteral;
+
+public class SimpleMessageSearchModule extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ bind(new TypeLiteral<MessageSearchIndex<CassandraId>>(){}).to(new
TypeLiteral<SimpleMessageSearchIndex<CassandraId>>(){});
+ }
+
+}
Added:
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/utils/PropertiesReader.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/utils/PropertiesReader.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/utils/PropertiesReader.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/utils/PropertiesReader.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,43 @@
+/****************************************************************
+ * 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.utils;
+
+import com.google.common.base.Throwables;
+
+import java.io.IOException;
+import java.util.Properties;
+
+public class PropertiesReader {
+
+ private final Properties properties;
+
+ public PropertiesReader(String fileName) {
+ properties = new Properties();
+ try {
+ properties.load(ClassLoader.getSystemResourceAsStream(fileName));
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ }
+ }
+
+ public String getProperty(String key) {
+ return properties.getProperty(key);
+ }
+}
Added:
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,83 @@
+/****************************************************************
+ * 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;
+
+import java.util.Properties;
+
+import javax.mail.AuthenticationFailedException;
+import javax.mail.NoSuchProviderException;
+import javax.mail.Session;
+import javax.mail.Store;
+
+import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+import com.google.inject.util.Modules;
+
+public class CassandraJamesServerTest {
+
+ private static final int IMAP_PORT = 1143; // You need to be root
(superuser) to bind to ports under 1024.
+
+ private CassandraJamesServer server;
+
+ @Before
+ public void setup() throws Exception {
+ server = new
CassandraJamesServer(Modules.override(CassandraJamesServerMain.defaultModule)
+ .with(new AbstractModule() {
+
+ @Override
+ protected void configure() {
+ }
+
+ @Provides
+ @Singleton
+ com.datastax.driver.core.Session
provideSession(CassandraModule cassandraModule) {
+ CassandraCluster cassandra =
CassandraCluster.create(cassandraModule);
+ return cassandra.getConf();
+ }
+
+ }));
+ server.start();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ server.stop();
+ }
+
+ @Test (expected = AuthenticationFailedException.class)
+ public void connectShouldThrowWhenNoCrendentials() throws Exception {
+ store().connect();
+ }
+
+ private Store store() throws NoSuchProviderException {
+ Properties properties = new Properties();
+ properties.put("mail.imap.host", "localhost");
+ properties.put("mail.imap.port", String.valueOf(IMAP_PORT));
+ Session session = Session.getDefaultInstance(properties);
+ session.setDebug(true);
+ return session.getStore("imap");
+ }
+}
Added:
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/utils/PropertiesReadTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/utils/PropertiesReadTest.java?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/utils/PropertiesReadTest.java
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/test/java/org/apache/james/utils/PropertiesReadTest.java
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.utils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class PropertiesReadTest {
+
+ @Test
+ public void getPropertyShouldWork() throws Exception {
+ PropertiesReader propertiesReader = new
PropertiesReader("test.properties");
+
assertThat(propertiesReader.getProperty("cassandra.ip")).isEqualTo("127.0.0.1");
+ }
+
+ @Test
+ public void getAbsentPropertyShouldReturnNull() throws Exception {
+ PropertiesReader propertiesReader = new
PropertiesReader("test.properties");
+ assertThat(propertiesReader.getProperty("cassandra.isslow")).isNull();
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void buildingAPropertiesReaderOnNonExistingValuesShouldThrow()
throws Exception {
+ new PropertiesReader("fake.properties");
+ }
+}
Added:
james/project/trunk/server/container/cassandra-guice/src/test/resources/cassandra.properties
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/resources/cassandra.properties?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/test/resources/cassandra.properties
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/test/resources/cassandra.properties
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,6 @@
+# Configuration file for cassandra mailbox
+
+cassandra.ip=127.0.0.1
+cassandra.port=9142
+cassandra.keyspace=apache_james
+cassandra.replication.factor=1
\ No newline at end of file
Added:
james/project/trunk/server/container/cassandra-guice/src/test/resources/test.properties
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/test/resources/test.properties?rev=1712328&view=auto
==============================================================================
---
james/project/trunk/server/container/cassandra-guice/src/test/resources/test.properties
(added)
+++
james/project/trunk/server/container/cassandra-guice/src/test/resources/test.properties
Tue Nov 3 16:46:53 2015
@@ -0,0 +1,6 @@
+# Configuration file for cassandra mailbox
+
+cassandra.ip=127.0.0.1
+cassandra.port=9142
+cassandra.keyspace=apache_james
+cassandra.replication.factor=1
\ No newline at end of file
Modified:
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
---
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
(original)
+++
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
Tue Nov 3 16:46:53 2015
@@ -29,7 +29,6 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.inject.Inject;
-import javax.inject.Named;
import org.apache.james.backends.cassandra.utils.CassandraConstants;
import org.apache.james.backends.cassandra.utils.CassandraUtils;
@@ -46,7 +45,7 @@ public class CassandraDomainList extends
@Inject
@Resource
- public void setSession(@Named("cassandra-session") Session session) {
+ public void setSession(Session session) {
this.session = session;
}
Modified:
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
---
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
(original)
+++
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
Tue Nov 3 16:46:53 2015
@@ -33,7 +33,6 @@ import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.inject.Inject;
-import javax.inject.Named;
import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
@@ -49,7 +48,7 @@ public class CassandraRecipientRewriteTa
@Inject
@Resource
- public void setSession(@Named("cassandra-session") Session session) {
+ public void setSession(Session session) {
this.session = session;
}
Modified:
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
---
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
(original)
+++
james/project/trunk/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
Tue Nov 3 16:46:53 2015
@@ -36,7 +36,6 @@ import java.util.Optional;
import javax.annotation.Resource;
import javax.inject.Inject;
-import javax.inject.Named;
import org.apache.james.backends.cassandra.utils.CassandraConstants;
import org.apache.james.backends.cassandra.utils.CassandraUtils;
@@ -58,11 +57,16 @@ public class CassandraUsersRepository ex
@Inject
@Resource
- public void setSession(@Named("cassandra-session") Session session) {
+ public void setSession(Session session) {
this.session = session;
}
@Override
+ public boolean supportVirtualHosting() {
+ return true;
+ }
+
+ @Override
public User getUserByName(String name){
ResultSet result = session.execute(
select(REALNAME, PASSWORD, ALGORITHM)
Modified: james/project/trunk/server/pom.xml
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1712328&r1=1712327&r2=1712328&view=diff
==============================================================================
--- james/project/trunk/server/pom.xml (original)
+++ james/project/trunk/server/pom.xml Tue Nov 3 16:46:53 2015
@@ -534,7 +534,7 @@
<groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-cassandra</artifactId>
<version>${mailbox.version}</version>
- <scope>test</scope>
+ <type>test-jar</type>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
@@ -545,13 +545,11 @@
<groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-elasticsearch</artifactId>
<version>${mailbox.version}</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-james-mailbox-tika</artifactId>
<version>${mailbox.version}</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
@@ -903,8 +901,6 @@
<version>${mockito-core.version}</version>
<scope>test</scope>
</dependency>
-
-
<dependency>
<groupId>concurrent</groupId>
<artifactId>concurrent</artifactId>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]