diff --git a/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml b/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml
index 2ecc34bb01..17e1d62dbc 100644
--- a/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml
+++ b/config/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml
@@ -90,6 +90,8 @@
+
+
diff --git a/config/alfresco/subsystems/ActivitiesFeed/default/activities-jobs.properties b/config/alfresco/subsystems/ActivitiesFeed/default/activities-jobs.properties
index c18bd217e0..6081aabf53 100644
--- a/config/alfresco/subsystems/ActivitiesFeed/default/activities-jobs.properties
+++ b/config/alfresco/subsystems/ActivitiesFeed/default/activities-jobs.properties
@@ -21,6 +21,8 @@ activities.feed.generator.startDelayMins=${system.cronJob.startDelayMinutes}
activities.feed.generator.cronExpression=0/30 * * * * ?
activities.feed.generator.maxItemsPerCycle=100
activities.feed.generator.enabled=true
+activities.feed.generator.batchSize=1000
+activities.feed.generator.numThreads=4
# activities feed cleaner
activities.feed.cleaner.startDelayMins=${system.cronJob.startDelayMinutes}
diff --git a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java
index d157bac9b3..39f586c9e9 100644
--- a/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java
+++ b/source/java/org/alfresco/repo/activities/feed/AbstractFeedGenerator.java
@@ -122,6 +122,11 @@ public abstract class AbstractFeedGenerator implements FeedGenerator
this.sysAdminParams = sysAdminParams;
}
+ public TransactionService getTransactionService()
+ {
+ return transactionService;
+ }
+
public void setTransactionService(TransactionService transactionService)
{
this.transactionService = transactionService;
diff --git a/source/java/org/alfresco/repo/activities/feed/local/LocalFeedGenerator.java b/source/java/org/alfresco/repo/activities/feed/local/LocalFeedGenerator.java
index cb43b4dd6c..cd01f38fa7 100644
--- a/source/java/org/alfresco/repo/activities/feed/local/LocalFeedGenerator.java
+++ b/source/java/org/alfresco/repo/activities/feed/local/LocalFeedGenerator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2005-2011 Alfresco Software Limited.
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -18,14 +18,21 @@
*/
package org.alfresco.repo.activities.feed.local;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
import org.alfresco.repo.activities.feed.AbstractFeedGenerator;
-import org.alfresco.repo.activities.feed.FeedGridJob;
import org.alfresco.repo.activities.feed.FeedTaskProcessor;
import org.alfresco.repo.activities.feed.JobSettings;
+import org.alfresco.repo.activities.feed.RepoCtx;
+import org.alfresco.repo.batch.BatchProcessWorkProvider;
+import org.alfresco.repo.batch.BatchProcessor;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+import org.alfresco.repo.transaction.RetryingTransactionHelper;
+import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -37,12 +44,25 @@ public class LocalFeedGenerator extends AbstractFeedGenerator
private static Log logger = LogFactory.getLog(LocalFeedGenerator.class);
private FeedTaskProcessor feedTaskProcessor;
+
+ private int batchSize = 1000;
+ private int numThreads = 4;
public void setFeedTaskProcessor(FeedTaskProcessor feedTaskProcessor)
{
this.feedTaskProcessor = feedTaskProcessor;
}
+ public void setBatchSize(int batchSize)
+ {
+ this.batchSize = batchSize;
+ }
+
+ public void setNumThreads(int numThreads)
+ {
+ this.numThreads = numThreads;
+ }
+
@Override
public int getEstimatedGridSize()
{
@@ -56,59 +76,124 @@ public class LocalFeedGenerator extends AbstractFeedGenerator
protected boolean generate() throws Exception
{
- Long maxSequence = getPostDaoService().getMaxActivitySeq();
- Integer maxNodeHash = getPostDaoService().getMaxNodeHash();
-
- String gridName = "local";
-
- if ((maxSequence != null) && (maxNodeHash != null))
+ final Long maxSequence = getPostDaoService().getMaxActivitySeq();
+ final Long minSequence = getPostDaoService().getMinActivitySeq();
+ final Integer maxNodeHash = getPostDaoService().getMaxNodeHash();
+
+ if ((maxSequence == null) || (minSequence == null) || (maxNodeHash == null))
{
- if (logger.isDebugEnabled())
- {
- logger.debug(">>> Execute job cycle: " + gridName + " (maxSeq: " + maxSequence + ")");
- }
-
- long startTime = System.currentTimeMillis();
-
- // TODO ... or push this upto to job scheduler ... ?
- AuthenticationUtil.runAs(new RunAsWork