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 bt...@apache.org on 2017/02/23 10:00:38 UTC

[1/2] james-project git commit: JAMES-1891 Make Spring also use embedded ActiveMQ

Repository: james-project
Updated Branches:
  refs/heads/master e25335842 -> 7ac76b489


JAMES-1891 Make Spring also use embedded ActiveMQ


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7ac76b48
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7ac76b48
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7ac76b48

Branch: refs/heads/master
Commit: 7ac76b48988c1f1c48332f2a8eaf391895fa6234
Parents: 27d91f0
Author: Matthieu Baechler <ma...@gmail.com>
Authored: Mon Dec 26 18:06:59 2016 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Feb 23 17:00:00 2017 +0700

----------------------------------------------------------------------
 .../james/JamesCapabilitiesServerTest.java      |   3 +
 .../modules/server/ActiveMQQueueModule.java     |   5 +
 .../james/modules/server/EmbeddedActiveMQ.java  | 105 ------------------
 .../org/apache/james/MemoryJmapTestRule.java    |   5 +-
 .../james/mailets/TemporaryJamesServer.java     |   3 +
 .../cassandra/cucumber/CassandraStepdefs.java   |   5 +-
 .../jmap/memory/cucumber/MemoryStepdefs.java    |   5 +-
 server/queue/queue-activemq/pom.xml             |   7 +-
 .../activemq/ActiveMQMailQueueFactory.java      |   6 +-
 .../james/queue/activemq/EmbeddedActiveMQ.java  | 107 +++++++++++++++++++
 .../META-INF/spring/activemq-queue-context.xml  |  71 ++----------
 11 files changed, 149 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
index 150308d..4fc103f 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
@@ -24,6 +24,8 @@ import static org.mockito.Mockito.when;
 
 import java.util.EnumSet;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
@@ -64,6 +66,7 @@ public class JamesCapabilitiesServerTest {
         
         return new GuiceJamesServerImpl()
             .combineWith(CassandraJamesServerMain.cassandraServerModule)
+            .overrideWith((binder) -> binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class))
             .overrideWith(new TestElasticSearchModule(embeddedElasticSearch),
                 new TestFilesystemModule(temporaryFolder),
                 new TestJMAPServerModule(GetMessageListMethod.DEFAULT_MAXIMUM_LIMIT),

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
index 1dae37f..1fe7018 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
@@ -21,7 +21,10 @@ package org.apache.james.modules.server;
 
 import javax.jms.ConnectionFactory;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.apache.james.queue.activemq.ActiveMQMailQueueFactory;
+import org.apache.james.queue.activemq.EmbeddedActiveMQ;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,6 +40,8 @@ public class ActiveMQQueueModule extends AbstractModule {
     
     @Override
     protected void configure() {
+        bind(PersistenceAdapter.class).to(KahaDBPersistenceAdapter.class);
+        bind(KahaDBPersistenceAdapter.class).in(Scopes.SINGLETON);
         bind(EmbeddedActiveMQ.class).in(Scopes.SINGLETON);
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
deleted file mode 100644
index 51d72db..0000000
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************
- * 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 javax.annotation.PreDestroy;
-import javax.jms.ConnectionFactory;
-
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.ActiveMQPrefetchPolicy;
-import org.apache.activemq.blob.BlobTransferPolicy;
-import org.apache.activemq.broker.BrokerPlugin;
-import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.jmx.ManagementContext;
-import org.apache.activemq.plugin.StatisticsBrokerPlugin;
-import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.queue.activemq.FileSystemBlobTransferPolicy;
-
-import com.google.common.base.Throwables;
-import com.google.inject.Inject;
-
-public class EmbeddedActiveMQ {
-
-    private final ActiveMQConnectionFactory activeMQConnectionFactory;
-    private BrokerService brokerService;
-
-    @Inject private EmbeddedActiveMQ(FileSystem fileSystem) {
-        try {
-            launchEmbeddedBroker(fileSystem);
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-        activeMQConnectionFactory = createActiveMQConnectionFactory(createBlobTransferPolicy(fileSystem));
-    }
-
-    public ConnectionFactory getConnectionFactory() {
-        return activeMQConnectionFactory;
-    }
-
-    @PreDestroy
-    public void stop() throws Exception {
-        brokerService.stop();
-    }
-
-    private ActiveMQConnectionFactory createActiveMQConnectionFactory(BlobTransferPolicy blobTransferPolicy) {
-        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://james?create=false");
-        connectionFactory.setBlobTransferPolicy(blobTransferPolicy);
-        connectionFactory.setPrefetchPolicy(createActiveMQPrefetchPolicy());
-        return connectionFactory;
-    }
-
-    private ActiveMQPrefetchPolicy createActiveMQPrefetchPolicy() {
-        ActiveMQPrefetchPolicy prefetchPolicy = new ActiveMQPrefetchPolicy();
-        prefetchPolicy.setQueuePrefetch(0);
-        prefetchPolicy.setTopicPrefetch(0);
-        return prefetchPolicy;
-    }
-
-    private BlobTransferPolicy createBlobTransferPolicy(FileSystem fileSystem) {
-        FileSystemBlobTransferPolicy blobTransferPolicy = new FileSystemBlobTransferPolicy();
-        blobTransferPolicy.setDefaultUploadUrl("file://var/store/activemq/blob-transfer");
-        blobTransferPolicy.setFileSystem(fileSystem);
-        return blobTransferPolicy;
-    }
-
-    private void launchEmbeddedBroker(FileSystem fileSystem) throws Exception {
-        brokerService = new BrokerService();
-        brokerService.setBrokerName("james");
-        brokerService.setUseJmx(false);
-        brokerService.setPersistent(true);
-        brokerService.setDataDirectoryFile(fileSystem.getFile("file://var/store/activemq/brokers"));
-        brokerService.setUseShutdownHook(false);
-        brokerService.setSchedulerSupport(false);
-        brokerService.setBrokerId("broker");
-        String[] uris = {"tcp://localhost:0"};
-        brokerService.setTransportConnectorURIs(uris);
-        ManagementContext managementContext = new ManagementContext();
-        managementContext.setCreateConnector(false);
-        brokerService.setManagementContext(managementContext);
-        brokerService.setPersistenceAdapter(new KahaDBPersistenceAdapter());
-        BrokerPlugin[] brokerPlugins = {new StatisticsBrokerPlugin()};
-        brokerService.setPlugins(brokerPlugins);
-        String[] transportConnectorsURIs = {"tcp://localhost:0"};
-        brokerService.setTransportConnectorURIs(transportConnectorsURIs);
-        brokerService.start();
-        System.out.println("Started : " + brokerService.isStarted());
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapTestRule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapTestRule.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapTestRule.java
index fb87792..6d48111 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapTestRule.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapTestRule.java
@@ -19,6 +19,8 @@
 
 package org.apache.james;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
 import org.apache.james.modules.TestFilesystemModule;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.rules.TemporaryFolder;
@@ -36,7 +38,8 @@ public class MemoryJmapTestRule implements TestRule {
         return new JmapJamesServer()
                 .combineWith(MemoryJamesServerMain.inMemoryServerModule)
                 .overrideWith(new TestFilesystemModule(temporaryFolder),
-                        new TestJMAPServerModule(LIMIT_TO_3_MESSAGES));
+                        new TestJMAPServerModule(LIMIT_TO_3_MESSAGES))
+                .overrideWith((binder) -> binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
index 146e4ba..9f7919e 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/TemporaryJamesServer.java
@@ -26,6 +26,8 @@ import java.io.OutputStream;
 import java.nio.file.Paths;
 import java.util.Arrays;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.JmapJamesServer;
@@ -52,6 +54,7 @@ public class TemporaryJamesServer {
 
         jamesServer = new JmapJamesServer()
             .combineWith(MemoryJamesServerMain.inMemoryServerModule)
+            .overrideWith((binder) -> binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class))
             .overrideWith(ImmutableList.<Module>builder().addAll(Arrays.asList(additionalModules))
                 .add(new TestJMAPServerModule(LIMIT_TO_3_MESSAGES))
                 .add(new TemporaryFilesystemModule(temporaryFolder))

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CassandraStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CassandraStepdefs.java b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CassandraStepdefs.java
index 79f5cfd..915f40c 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CassandraStepdefs.java
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CassandraStepdefs.java
@@ -23,6 +23,8 @@ import java.util.Arrays;
 
 import javax.inject.Inject;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
 import org.apache.james.CassandraJamesServerMain;
 import org.apache.james.JmapJamesServer;
 import org.apache.james.backends.cassandra.EmbeddedCassandra;
@@ -59,7 +61,8 @@ public class CassandraStepdefs {
         mainStepdefs.messageIdFactory = new CassandraMessageId.Factory();
         mainStepdefs.jmapServer = new JmapJamesServer()
                 .combineWith(CassandraJamesServerMain.cassandraServerModule)
-                .overrideWith(new CassandraJmapServerModule(temporaryFolder, embeddedElasticSearch, cassandra));
+                .overrideWith(new CassandraJmapServerModule(temporaryFolder, embeddedElasticSearch, cassandra))
+                .overrideWith((binder) -> binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class));
         mainStepdefs.awaitMethod = () -> embeddedElasticSearch.awaitForElasticSearch();
         mainStepdefs.init();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryStepdefs.java b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryStepdefs.java
index fda8164..fc13c55 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryStepdefs.java
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryStepdefs.java
@@ -21,6 +21,8 @@ package org.apache.james.jmap.memory.cucumber;
 
 import javax.inject.Inject;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
 import org.apache.james.JmapJamesServer;
 import org.apache.james.MemoryJamesServerMain;
 import org.apache.james.jmap.methods.integration.cucumber.MainStepdefs;
@@ -52,7 +54,8 @@ public class MemoryStepdefs {
         mainStepdefs.jmapServer = new JmapJamesServer()
                 .combineWith(MemoryJamesServerMain.inMemoryServerModule)
                 .overrideWith(new MemoryJmapServerModule(temporaryFolder),
-                		(binder) -> binder.bind(MessageId.Factory.class).toInstance(mainStepdefs.messageIdFactory));
+                		(binder) -> binder.bind(MessageId.Factory.class).toInstance(mainStepdefs.messageIdFactory))
+                .overrideWith((binder) -> binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class));
         mainStepdefs.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/queue/queue-activemq/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/pom.xml b/server/queue/queue-activemq/pom.xml
index a6c164c..978e5bf 100644
--- a/server/queue/queue-activemq/pom.xml
+++ b/server/queue/queue-activemq/pom.xml
@@ -61,7 +61,12 @@
           <groupId>org.apache.activemq</groupId>
           <artifactId>activemq-kahadb-store</artifactId>
           <version>${activemq.version}</version>
-	</dependency>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.activemq</groupId>
+          <artifactId>activemq-spring</artifactId>
+          <version>${activemq.version}</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jms</artifactId>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
index 430222e..9646a29 100644
--- a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
+++ b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
@@ -35,11 +35,15 @@ public class ActiveMQMailQueueFactory extends JMSMailQueueFactory {
 
     private boolean useBlob = true;
 
-    @Inject
     public ActiveMQMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, MetricFactory metricFactory) {
         super(connectionFactory, mailQueueItemDecoratorFactory, metricFactory);
     }
 
+    @Inject
+    public ActiveMQMailQueueFactory(EmbeddedActiveMQ embeddedActiveMQ, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, MetricFactory metricFactory) {
+        this(embeddedActiveMQ.getConnectionFactory(), mailQueueItemDecoratorFactory, metricFactory);
+    }
+
     public void setUseBlobMessages(boolean useBlob) {
         this.useBlob = useBlob;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/EmbeddedActiveMQ.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/EmbeddedActiveMQ.java b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/EmbeddedActiveMQ.java
new file mode 100644
index 0000000..f62108a
--- /dev/null
+++ b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/EmbeddedActiveMQ.java
@@ -0,0 +1,107 @@
+/****************************************************************
+ * 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.queue.activemq;
+
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.jms.ConnectionFactory;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.ActiveMQPrefetchPolicy;
+import org.apache.activemq.blob.BlobTransferPolicy;
+import org.apache.activemq.broker.BrokerPlugin;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.jmx.ManagementContext;
+import org.apache.activemq.plugin.StatisticsBrokerPlugin;
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.james.filesystem.api.FileSystem;
+
+import com.google.common.base.Throwables;
+
+public class EmbeddedActiveMQ {
+
+    private final ActiveMQConnectionFactory activeMQConnectionFactory;
+    private final PersistenceAdapter persistenceAdapter;
+    private BrokerService brokerService;
+
+    @Inject
+        private EmbeddedActiveMQ(FileSystem fileSystem, PersistenceAdapter persistenceAdapter) {
+        this.persistenceAdapter = persistenceAdapter;
+        try {
+            launchEmbeddedBroker(fileSystem);
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
+        activeMQConnectionFactory = createActiveMQConnectionFactory(createBlobTransferPolicy(fileSystem));
+    }
+
+    public ConnectionFactory getConnectionFactory() {
+        return activeMQConnectionFactory;
+    }
+
+    @PreDestroy
+    public void stop() throws Exception {
+        brokerService.stop();
+    }
+
+    private ActiveMQConnectionFactory createActiveMQConnectionFactory(BlobTransferPolicy blobTransferPolicy) {
+        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://james?create=false");
+        connectionFactory.setBlobTransferPolicy(blobTransferPolicy);
+        connectionFactory.setPrefetchPolicy(createActiveMQPrefetchPolicy());
+        return connectionFactory;
+    }
+
+    private ActiveMQPrefetchPolicy createActiveMQPrefetchPolicy() {
+        ActiveMQPrefetchPolicy prefetchPolicy = new ActiveMQPrefetchPolicy();
+        prefetchPolicy.setQueuePrefetch(0);
+        prefetchPolicy.setTopicPrefetch(0);
+        return prefetchPolicy;
+    }
+
+    private BlobTransferPolicy createBlobTransferPolicy(FileSystem fileSystem) {
+        FileSystemBlobTransferPolicy blobTransferPolicy = new FileSystemBlobTransferPolicy();
+        blobTransferPolicy.setDefaultUploadUrl("file://var/store/activemq/blob-transfer");
+        blobTransferPolicy.setFileSystem(fileSystem);
+        return blobTransferPolicy;
+    }
+
+    private void launchEmbeddedBroker(FileSystem fileSystem) throws Exception {
+        brokerService = new BrokerService();
+        brokerService.setBrokerName("james");
+        brokerService.setUseJmx(false);
+        brokerService.setPersistent(true);
+        brokerService.setDataDirectoryFile(fileSystem.getFile("file://var/store/activemq/brokers"));
+        brokerService.setUseShutdownHook(false);
+        brokerService.setSchedulerSupport(false);
+        brokerService.setBrokerId("broker");
+        String[] uris = {"tcp://localhost:0"};
+        brokerService.setTransportConnectorURIs(uris);
+        ManagementContext managementContext = new ManagementContext();
+        managementContext.setCreateConnector(false);
+        brokerService.setManagementContext(managementContext);
+        brokerService.setPersistenceAdapter(persistenceAdapter);
+        BrokerPlugin[] brokerPlugins = {new StatisticsBrokerPlugin()};
+        brokerService.setPlugins(brokerPlugins);
+        String[] transportConnectorsURIs = {"tcp://localhost:0"};
+        brokerService.setTransportConnectorURIs(transportConnectorsURIs);
+        brokerService.start();
+        System.out.println("Started : " + brokerService.isStarted());
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
index 3903250..5f5f086 100644
--- a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
+++ b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
@@ -17,77 +17,22 @@
 
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:amq="http://activemq.apache.org/schema/core"
-       xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
-         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-         http://activemq.apache.org/schema/core
-         http://activemq.apache.org/schema/core/activemq-core.xsd
-         http://www.springframework.org/schema/util
-         http://www.springframework.org/schema/util/spring-util-3.0.xsd">
+         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
     <!-- James Mail Queue Factory -->
-    <bean id="mailqueuefactory" class="org.apache.james.queue.activemq.ActiveMQMailQueueFactory" depends-on="broker">
-        <constructor-arg index="0" ref="jmsConnectionFactory"/>
+    <bean id="mailqueuefactory" class="org.apache.james.queue.activemq.ActiveMQMailQueueFactory">
+        <constructor-arg index="0" ref="embeddedActiveMQ"/>
         <constructor-arg index="1" ref="rawMailQueueItemDecoratorFactory"/>
         <constructor-arg index="2" ref="metricFactory"/>
     </bean>
 
-    <!-- 
-      ActiveMQ Broker, Connections, Blob
-     -->
-    <amq:broker useJmx="true" persistent="true" brokerName="james"
-                dataDirectory="filesystem=file://var/store/activemq/brokers"
-                useShutdownHook="false" schedulerSupport="false" id="broker">
-        <amq:destinationPolicy>
-            <amq:policyMap>
-                <amq:policyEntries>
-                    <!-- Support priority handling of messages -->
-                    <!-- http://activemq.apache.org/how-can-i-support-priority-queues.html -->
-                    <amq:policyEntry queue=">" prioritizedMessages="true"/>
-                </amq:policyEntries>
-            </amq:policyMap>
-        </amq:destinationPolicy>
-        <amq:managementContext>
-            <amq:managementContext createConnector="false"/>
-        </amq:managementContext>
-        <amq:persistenceAdapter>
-            <amq:kahaDB/>
-        </amq:persistenceAdapter>
-        <amq:plugins>
-            <amq:statisticsBrokerPlugin/>
-        </amq:plugins>
-        <amq:transportConnectors>
-            <amq:transportConnector uri="tcp://localhost:0"/>
-        </amq:transportConnectors>
-    </amq:broker>
+    <bean id="rawMailQueueItemDecoratorFactory" class="org.apache.james.queue.api.RawMailQueueItemDecoratorFactory"/>
 
-    <amq:connectionFactory id="amqConnectionFactory" brokerURL="vm://james?create=false">
-        <amq:prefetchPolicy>
-            <!-- Disable prefetch so slow consuming can not block other threads -->
-            <!-- See JAMES-1253 -->
-            <amq:prefetchPolicy queuePrefetch="0" topicPrefetch="0"/>
-        </amq:prefetchPolicy>
-        <property name="blobTransferPolicy" ref="blobTransferPolicy"/>
-    </amq:connectionFactory>
-
-    <bean id="blobTransferPolicy" class="org.apache.james.queue.activemq.FileSystemBlobTransferPolicy"
-          autowire="byName">
-        <property name="defaultUploadUrl" value="file://var/store/activemq/blob-transfer"/>
-    </bean>
-
-    <bean id="jmsConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
-        <property name="targetConnectionFactory" ref="amqConnectionFactory"/>
-        <property name="sessionCacheSize" value="10"/>
-        <property name="cacheConsumers" value="false"/>
-        <property name="cacheProducers" value="true"/>
-    </bean>
-
-    <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
-        <property name="connectionFactory" ref="jmsConnectionFactory"/>
-    </bean>
-
-    <bean id="rawMailQueueItemDecoratorFactory" class="org.apache.james.queue.api.RawMailQueueItemDecoratorFactory">
+    <bean id="embeddedActiveMQ" class="org.apache.james.queue.activemq.EmbeddedActiveMQ">
+        <constructor-arg index="0" ref="filesystem"/>
+        <constructor-arg index="1" ref="persistenceAdapter"/>
     </bean>
 
+    <bean id="persistenceAdapter" class="org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter"/>
 </beans>


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


[2/2] james-project git commit: JAMES-1891 upgrade activemq and switch persistence engine

Posted by bt...@apache.org.
JAMES-1891 upgrade activemq and switch persistence engine

Version 5.10 of ActiveMQ is the last one to support java-6


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/27d91f0f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/27d91f0f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/27d91f0f

Branch: refs/heads/master
Commit: 27d91f0f18721ad6af5fdc589458d97eae9fb81d
Parents: e253358
Author: Matthieu Baechler <ma...@gmail.com>
Authored: Fri Dec 16 23:15:26 2016 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Feb 23 17:00:00 2017 +0700

----------------------------------------------------------------------
 .../org/apache/james/modules/server/EmbeddedActiveMQ.java     | 4 ++--
 server/pom.xml                                                | 4 ++--
 server/queue/queue-activemq/pom.xml                           | 7 ++++++-
 .../main/resources/META-INF/spring/activemq-queue-context.xml | 2 +-
 server/queue/queue-jms/pom.xml                                | 2 +-
 5 files changed, 12 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
index 2c38535..51d72db 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
@@ -29,7 +29,7 @@ import org.apache.activemq.broker.BrokerPlugin;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.jmx.ManagementContext;
 import org.apache.activemq.plugin.StatisticsBrokerPlugin;
-import org.apache.activemq.store.amq.AMQPersistenceAdapter;
+import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.queue.activemq.FileSystemBlobTransferPolicy;
 
@@ -94,7 +94,7 @@ public class EmbeddedActiveMQ {
         ManagementContext managementContext = new ManagementContext();
         managementContext.setCreateConnector(false);
         brokerService.setManagementContext(managementContext);
-        brokerService.setPersistenceAdapter(new AMQPersistenceAdapter());
+        brokerService.setPersistenceAdapter(new KahaDBPersistenceAdapter());
         BrokerPlugin[] brokerPlugins = {new StatisticsBrokerPlugin()};
         brokerService.setPlugins(brokerPlugins);
         String[] transportConnectorsURIs = {"tcp://localhost:0"};

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index 3259d60..7080631 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -123,7 +123,7 @@
     <properties>
         <productName>Apache-James Mail Server</productName>
 
-        <activemq.version>5.7.0</activemq.version>
+        <activemq.version>5.10.2</activemq.version>
         <apache-mime4j.version>0.8.0</apache-mime4j.version>
         <camel.version>2.13.4</camel.version>
         <derby.version>10.9.1.0</derby.version>
@@ -1304,7 +1304,7 @@
 
             <dependency>
                 <groupId>org.apache.activemq</groupId>
-                <artifactId>activemq-core</artifactId>
+                <artifactId>activemq-broker</artifactId>
                 <version>${activemq.version}</version>
                 <exclusions>
                     <exclusion>

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/queue/queue-activemq/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/pom.xml b/server/queue/queue-activemq/pom.xml
index 9f8c0fe..a6c164c 100644
--- a/server/queue/queue-activemq/pom.xml
+++ b/server/queue/queue-activemq/pom.xml
@@ -55,9 +55,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-core</artifactId>
+            <artifactId>activemq-broker</artifactId>
         </dependency>
         <dependency>
+          <groupId>org.apache.activemq</groupId>
+          <artifactId>activemq-kahadb-store</artifactId>
+          <version>${activemq.version}</version>
+	</dependency>
+        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jms</artifactId>
             <scope>compile</scope>

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
index 4e8ca76..3903250 100644
--- a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
+++ b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
@@ -52,7 +52,7 @@
             <amq:managementContext createConnector="false"/>
         </amq:managementContext>
         <amq:persistenceAdapter>
-            <amq:amqPersistenceAdapter/>
+            <amq:kahaDB/>
         </amq:persistenceAdapter>
         <amq:plugins>
             <amq:statisticsBrokerPlugin/>

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/queue/queue-jms/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/pom.xml b/server/queue/queue-jms/pom.xml
index 8e1850c..c7e651a 100644
--- a/server/queue/queue-jms/pom.xml
+++ b/server/queue/queue-jms/pom.xml
@@ -95,7 +95,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.activemq</groupId>
-            <artifactId>activemq-core</artifactId>
+            <artifactId>activemq-broker</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>


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