You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2014/05/13 14:01:27 UTC

svn commit: r1594205 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java

Author: mduerig
Date: Tue May 13 12:01:26 2014
New Revision: 1594205

URL: http://svn.apache.org/r1594205
Log:
OAK-1815: Don't create default (Scheduled)Executor when respective instance is supplied
Create executor service instances only when needed

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1594205&r1=1594204&r2=1594205&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Tue May 13 12:01:26 2014
@@ -129,9 +129,9 @@ public class Oak {
 
     private SecurityProvider securityProvider;
 
-    private ScheduledExecutorService scheduledExecutor = defaultScheduledExecutor();
+    private ScheduledExecutorService scheduledExecutor;
 
-    private Executor executor = defaultExecutorService();
+    private Executor executor;
 
     /**
      * Default {@code ScheduledExecutorService} used for scheduling background tasks.
@@ -187,6 +187,20 @@ public class Oak {
         return executor;
     }
 
+    private synchronized ScheduledExecutorService getScheduledExecutor() {
+        if (scheduledExecutor == null) {
+            scheduledExecutor = defaultScheduledExecutor();
+        }
+        return scheduledExecutor;
+    }
+
+    private synchronized Executor getExecutor() {
+        if (executor == null) {
+            executor = defaultExecutorService();
+        }
+        return executor;
+    }
+
     private MBeanServer mbeanServer;
 
     private String defaultWorkspaceName = DEFAULT_WORKSPACE_NAME;
@@ -216,7 +230,7 @@ public class Oak {
 
             final Closer observerSubscription = Closer.create();
             Future<?> future = null;
-            if (scheduledExecutor != null && type == Runnable.class) {
+            if (type == Runnable.class) {
                 Runnable runnable = (Runnable) service;
                 Long period = getValue(properties, "scheduler.period", Long.class);
                 if (period != null) {
@@ -224,10 +238,10 @@ public class Oak {
                             properties, "scheduler.concurrent",
                             Boolean.class, Boolean.FALSE);
                     if (concurrent) {
-                        future = scheduledExecutor.scheduleAtFixedRate(
+                        future = getScheduledExecutor().scheduleAtFixedRate(
                                 runnable, period, period, TimeUnit.SECONDS);
                     } else {
-                        future = scheduledExecutor.scheduleWithFixedDelay(
+                        future = getScheduledExecutor().scheduleWithFixedDelay(
                                 runnable, period, period, TimeUnit.SECONDS);
                     }
                 }
@@ -492,7 +506,7 @@ public class Oak {
     }
 
     public ContentRepository createContentRepository() {
-        whiteboard.register(Executor.class, executor, Collections.emptyMap());
+        whiteboard.register(Executor.class, getExecutor(), Collections.emptyMap());
 
         IndexEditorProvider indexEditors = CompositeIndexEditorProvider.compose(indexEditorProviders);
         OakInitializer.initialize(store, new CompositeInitializer(initializers), indexEditors);
@@ -513,7 +527,8 @@ public class Oak {
 
             PropertyIndexAsyncReindex asyncPI = new PropertyIndexAsyncReindex(
                     new AsyncIndexUpdate("async-reindex", store, indexEditors,
-                            true), executor);
+                            true), getExecutor()
+            );
             registerMBean(whiteboard, PropertyIndexAsyncReindexMBean.class,
                     asyncPI, PropertyIndexAsyncReindexMBean.TYPE, name);
         }