This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.sling-mock-oak-1.0.2 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock-oak.git
commit e9eedb0a26897cb5c222ba9789eafd0efe3319ca Author: Stefan Seifert <[email protected]> AuthorDate: Mon Mar 27 07:33:50 2017 +0000 SLING-6714 sling-mock-oak 1.x: Register ExecutorService separately git-svn-id: https://svn.apache.org/repos/asf/sling/branches/testing/mocks/sling-mock-oak-1.x@1788836 13f79535-47bb-0310-9956-ffa450edef68 --- .../mock/sling/oak/OakMockSlingRepository.java | 45 ++++++++++++++++------ 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java index 1bee5d8..f786e6c 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java @@ -19,7 +19,10 @@ package org.apache.sling.testing.mock.sling.oak; import java.lang.reflect.Field; +import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; import javax.jcr.Credentials; import javax.jcr.LoginException; @@ -38,6 +41,7 @@ import org.apache.jackrabbit.api.JackrabbitRepository; import org.apache.jackrabbit.oak.Oak; import org.apache.jackrabbit.oak.jcr.Jcr; import org.apache.sling.jcr.api.SlingRepository; +import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,41 +53,58 @@ public final class OakMockSlingRepository implements SlingRepository { private static final String ADMIN_NAME = "admin"; private static final String ADMIN_PASSWORD = "admin"; - private Oak oak; private Repository repository; + private ExecutorService executor; + private ScheduledExecutorService scheduledExecutor; private static final Logger log = LoggerFactory.getLogger(OakMockSlingRepository.class); @Activate protected void activate(ComponentContext componentContext) { - this.oak = new Oak(); - Jcr jcr = new Jcr(oak).with(new ExtraSlingContent()); + executor = Executors.newSingleThreadExecutor(); + scheduledExecutor = Executors.newSingleThreadScheduledExecutor(); + + BundleContext bundleContext = componentContext.getBundleContext(); + if (bundleContext.getServiceReference(Executor.class.getName()) == null) { + bundleContext.registerService(Executor.class.getName(), executor, null); + } + + Oak oak = new Oak() + .with(executor) + .with(scheduledExecutor); + + Jcr jcr = new Jcr(oak) + .with(new ExtraSlingContent()) + .with(executor) + .with(scheduledExecutor); + this.repository = jcr.createRepository(); } @Deactivate protected void deactivate(ComponentContext componentContext) { + // shutdown executors + // force immediate shutdown for all executors without waiting for tasks for completion - we're only in unit tests! + executor.shutdownNow(); + scheduledExecutor.shutdownNow(); + shutdownExecutorService(repository, "scheduledExecutor"); + // shutdown OAK JCR repository ((JackrabbitRepository)repository).shutdown(); - - // shutdown further OAK executor services via reflection - shutdownExecutorService("executor"); - shutdownExecutorService("scheduledExecutor"); } - private void shutdownExecutorService(String fieldName) { + private void shutdownExecutorService(Object instance, String fieldName) { try { - Field executorField = Oak.class.getDeclaredField(fieldName); + Field executorField = instance.getClass().getDeclaredField(fieldName); executorField.setAccessible(true); - ExecutorService executor = (ExecutorService)executorField.get(this.oak); + ExecutorService executor = (ExecutorService)executorField.get(instance); executor.shutdownNow(); } catch (Throwable ex) { - log.error("Potential Memory leak: Unable to shutdown executor service from field '" + fieldName + "' in " + this.oak, ex); + log.error("Potential Memory leak: Unable to shutdown executor service from field '" + fieldName + "' in " + instance, ex); } } - public String getDescriptor(String key) { return repository.getDescriptor(key); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
