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-2.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock-oak.git
commit 1b5ccb9aa47a829266fd4ee287c5972cf0b949fe Author: Stefan Seifert <[email protected]> AuthorDate: Tue Feb 23 01:49:03 2016 +0000 SLING-5547 Update sling-mock-oak to Sling API 2.11 and Oak 1.3.15 git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock-oak@1731777 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/oak/OakMockResourceResolverAdapter.java | 11 +---- .../mock/sling/oak/OakMockSlingRepository.java | 51 +++++++++++----------- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java index 91e984d..cefb70b 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java @@ -18,13 +18,9 @@ */ package org.apache.sling.testing.mock.sling.oak; -import java.util.concurrent.Executor; - -import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor; import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter; -import org.osgi.framework.BundleContext; /** * Resource resolver type adapter for Jackrabbit Oak repository. @@ -32,15 +28,12 @@ import org.osgi.framework.BundleContext; public class OakMockResourceResolverAdapter implements ResourceResolverTypeAdapter { @Override - public ResourceResolverFactory newResourceResolverFactory(BundleContext bundleContext) { + public ResourceResolverFactory newResourceResolverFactory() { return null; } @Override - public SlingRepository newSlingRepository(BundleContext bundleContext) { - if (bundleContext.getServiceReference(Executor.class) == null) { - bundleContext.registerService(Executor.class, new WhiteboardExecutor(), null); - } + public SlingRepository newSlingRepository() { return new OakMockSlingRepository(); } 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 ff14d11..cd6133a 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 @@ -18,8 +18,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,9 +40,8 @@ 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; @Component @Service(SlingRepository.class) @@ -49,15 +50,28 @@ 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 static final Logger log = LoggerFactory.getLogger(OakMockSlingRepository.class); + private ExecutorService executor; + private ScheduledExecutorService scheduledExecutor; @Activate - protected void activate(ComponentContext componentContext) { - this.oak = new Oak(); - Jcr jcr = new Jcr(oak).with(new ExtraSlingContent()); + protected void activate(BundleContext bundleContext) { + executor = Executors.newSingleThreadExecutor(); + scheduledExecutor = Executors.newSingleThreadScheduledExecutor(); + + if (bundleContext.getServiceReference(Executor.class) == null) { + bundleContext.registerService(Executor.class, 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(); } @@ -66,24 +80,11 @@ public final class OakMockSlingRepository implements SlingRepository { // shutdown OAK JCR repository ((JackrabbitRepository)repository).shutdown(); - // shutdown further OAK executor services via reflection - shutdownExecutorService("executor"); - shutdownExecutorService("scheduledExecutor"); + // shutdown executors + executor.shutdownNow(); + scheduledExecutor.shutdownNow(); } - private void shutdownExecutorService(String fieldName) { - try { - Field executorField = Oak.class.getDeclaredField(fieldName); - executorField.setAccessible(true); - ExecutorService executor = (ExecutorService)executorField.get(this.oak); - executor.shutdownNow(); - } - catch (Throwable ex) { - log.error("Potential Memory leak: Unable to shutdown executor service from field '" + fieldName + "' in " + this.oak, ex); - } - } - - public String getDescriptor(String key) { return repository.getDescriptor(key); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
