Author: sseifert Date: Fri Oct 2 23:31:40 2015 New Revision: 1706505 URL: http://svn.apache.org/viewvc?rev=1706505&view=rev Log: SLING-5088 control SlingRepository resources via activate/deactivate methods; make sure all oak ExecutorServices are shutdown properly
Added: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java (with props) sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java (with props) sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java - copied, changed from r1706454, sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/RepositoryWrapper.java Removed: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/RepositoryWrapper.java Modified: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockResourceResolverAdapter.java sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/package-info.java sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverAdapter.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepositoryTest.java Modified: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockResourceResolverAdapter.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockResourceResolverAdapter.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockResourceResolverAdapter.java (original) +++ sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockResourceResolverAdapter.java Fri Oct 2 23:31:40 2015 @@ -18,10 +18,7 @@ */ package org.apache.sling.testing.mock.sling.jackrabbit; -import javax.jcr.RepositoryException; - import org.apache.sling.api.resource.ResourceResolverFactory; -import org.apache.sling.commons.testing.jcr.RepositoryProvider; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter; @@ -37,12 +34,7 @@ public class JackrabbitMockResourceResol @Override public SlingRepository newSlingRepository() { - try { - return RepositoryProvider.instance().getRepository(); - } - catch (RepositoryException ex) { - throw new RuntimeException("Unable to get jackrabbit SlingRepository instance.", ex); - } + return new JackrabbitMockSlingRepository(); } } Added: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java?rev=1706505&view=auto ============================================================================== --- sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java (added) +++ sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java Fri Oct 2 23:31:40 2015 @@ -0,0 +1,105 @@ +/* + * 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.sling.testing.mock.sling.jackrabbit; + +import javax.jcr.Credentials; +import javax.jcr.LoginException; +import javax.jcr.NoSuchWorkspaceException; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.Value; + +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Service; +import org.apache.sling.commons.testing.jcr.RepositoryProvider; +import org.apache.sling.jcr.api.SlingRepository; +import org.osgi.service.component.ComponentContext; + +@Component +@Service(SlingRepository.class) +public final class JackrabbitMockSlingRepository implements SlingRepository { + + private SlingRepository delegate; + + @Activate + protected void activate(ComponentContext componentContext) { + try { + this.delegate = RepositoryProvider.instance().getRepository(); + } + catch (RepositoryException ex) { + throw new RuntimeException("Unable to get jackrabbit SlingRepository instance.", ex); + } + } + + public String getDefaultWorkspace() { + return delegate.getDefaultWorkspace(); + } + + @SuppressWarnings("deprecation") + public Session loginAdministrative(String workspace) throws LoginException, RepositoryException { + return delegate.loginAdministrative(workspace); + } + + public Session loginService(String subServiceName, String workspace) throws LoginException, RepositoryException { + return delegate.loginService(subServiceName, workspace); + } + + public String[] getDescriptorKeys() { + return delegate.getDescriptorKeys(); + } + + public boolean isStandardDescriptor(String key) { + return delegate.isStandardDescriptor(key); + } + + public boolean isSingleValueDescriptor(String key) { + return delegate.isSingleValueDescriptor(key); + } + + public Value getDescriptorValue(String key) { + return delegate.getDescriptorValue(key); + } + + public Value[] getDescriptorValues(String key) { + return delegate.getDescriptorValues(key); + } + + public String getDescriptor(String key) { + return delegate.getDescriptor(key); + } + + public Session login(Credentials credentials, String workspaceName) throws LoginException, + NoSuchWorkspaceException, RepositoryException { + return delegate.login(credentials, workspaceName); + } + + public Session login(Credentials credentials) throws LoginException, RepositoryException { + return delegate.login(credentials); + } + + public Session login(String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { + return delegate.login(workspaceName); + } + + public Session login() throws LoginException, RepositoryException { + return delegate.login(); + } + +} Propchange: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Fri Oct 2 23:31:40 2015 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/JackrabbitMockSlingRepository.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/package-info.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/package-info.java (original) +++ sling/trunk/testing/mocks/sling-mock-jackrabbit/src/main/java/org/apache/sling/testing/mock/sling/jackrabbit/package-info.java Fri Oct 2 23:31:40 2015 @@ -19,5 +19,5 @@ /** * Sling Mock Jackrabbit-based Resource Resolver */ -@aQute.bnd.annotation.Version("0.1") +@aQute.bnd.annotation.Version("1.0") package org.apache.sling.testing.mock.sling.jackrabbit; Added: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java?rev=1706505&view=auto ============================================================================== --- sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java (added) +++ sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java Fri Oct 2 23:31:40 2015 @@ -0,0 +1,60 @@ +/* + * 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.sling.testing.mock.sling.oak; + +import static java.util.Collections.singleton; +import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME; +import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.createIndexDefinition; + +import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer; +import org.apache.jackrabbit.oak.spi.state.NodeBuilder; + +/** + * Adds some default indexes useful for by sling resource-jcr mapping. + * This is only a small subset of what is defined by default in the org.apache.sling.jcr.oak.server bundle. + */ +final class ExtraSlingContent implements RepositoryInitializer { + + @Override + public void initialize(NodeBuilder root) { + if (root.hasChildNode(INDEX_DEFINITIONS_NAME)) { + NodeBuilder index = root.child(INDEX_DEFINITIONS_NAME); + + // jcr: + property(index, "jcrLanguage", "jcr:language"); + property(index, "jcrLockOwner", "jcr:lockOwner"); + + // sling: + property(index, "slingAlias", "sling:alias"); + property(index, "slingResource", "sling:resource"); + property(index, "slingResourceType", "sling:resourceType"); + property(index, "slingVanityPath", "sling:vanityPath"); + } + } + + /** + * A convenience method to create a non-unique property index. + */ + private static void property(NodeBuilder index, String indexName, String propertyName) { + if (!index.hasChildNode(indexName)) { + createIndexDefinition(index, indexName, true, false, singleton(propertyName), null); + } + } + +} Propchange: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Fri Oct 2 23:31:40 2015 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/ExtraSlingContent.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java (original) +++ sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockResourceResolverAdapter.java Fri Oct 2 23:31:40 2015 @@ -18,15 +18,6 @@ */ package org.apache.sling.testing.mock.sling.oak; -import static java.util.Collections.singleton; -import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME; -import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.createIndexDefinition; - -import javax.jcr.Repository; - -import org.apache.jackrabbit.oak.jcr.Jcr; -import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer; -import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter; @@ -43,44 +34,7 @@ public class OakMockResourceResolverAdap @Override public SlingRepository newSlingRepository() { - Repository repository = new Jcr() - .with(new ExtraSlingContent()) - .createRepository(); - return new RepositoryWrapper(repository); - } - - /** - * Adds some default indexes useful for by sling resource-jcr mapping. - * This is only a small subset of what is defined by default in the org.apache.sling.jcr.oak.server bundle. - */ - private static final class ExtraSlingContent implements RepositoryInitializer { - - @Override - public void initialize(NodeBuilder root) { - if (root.hasChildNode(INDEX_DEFINITIONS_NAME)) { - NodeBuilder index = root.child(INDEX_DEFINITIONS_NAME); - - // jcr: - property(index, "jcrLanguage", "jcr:language"); - property(index, "jcrLockOwner", "jcr:lockOwner"); - - // sling: - property(index, "slingAlias", "sling:alias"); - property(index, "slingResource", "sling:resource"); - property(index, "slingResourceType", "sling:resourceType"); - property(index, "slingVanityPath", "sling:vanityPath"); - } - } - - /** - * A convenience method to create a non-unique property index. - */ - private static void property(NodeBuilder index, String indexName, String propertyName) { - if (!index.hasChildNode(indexName)) { - createIndexDefinition(index, indexName, true, false, singleton(propertyName), null); - } - } - + return new OakMockSlingRepository(); } } Copied: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java (from r1706454, sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/RepositoryWrapper.java) URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java?p2=sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java&p1=sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/RepositoryWrapper.java&r1=1706454&r2=1706505&rev=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/RepositoryWrapper.java (original) +++ sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/OakMockSlingRepository.java Fri Oct 2 23:31:40 2015 @@ -18,6 +18,9 @@ */ package org.apache.sling.testing.mock.sling.oak; +import java.lang.reflect.Field; +import java.util.concurrent.ExecutorService; + import javax.jcr.Credentials; import javax.jcr.LoginException; import javax.jcr.NoSuchWorkspaceException; @@ -27,25 +30,66 @@ import javax.jcr.Session; import javax.jcr.SimpleCredentials; import javax.jcr.Value; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Service; +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; - -public final class RepositoryWrapper implements SlingRepository { +import org.osgi.service.component.ComponentContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Component +@Service(SlingRepository.class) +public final class OakMockSlingRepository implements SlingRepository { private static final String ADMIN_NAME = "admin"; private static final String ADMIN_PASSWORD = "admin"; - protected final Repository wrapped; + private Oak oak; + private Repository repository; + + 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()); + this.repository = jcr.createRepository(); + } - public RepositoryWrapper(Repository r) { - wrapped = r; + @Deactivate + protected void deactivate(ComponentContext componentContext) { + // shutdown OAK JCR repository + ((JackrabbitRepository)repository).shutdown(); + + // shutdown further OAK executor services via reflection + shutdownExecutorService("executor"); + shutdownExecutorService("scheduledExecutor"); + } + + 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 (ReflectiveOperationException ex) { + log.error("Memory leak: Unable to shutdown executor service from field '" + fieldName + "' in " + this.oak, ex); + } } + public String getDescriptor(String key) { - return wrapped.getDescriptor(key); + return repository.getDescriptor(key); } public String[] getDescriptorKeys() { - return wrapped.getDescriptorKeys(); + return repository.getDescriptorKeys(); } public String getDefaultWorkspace() { @@ -53,22 +97,22 @@ public final class RepositoryWrapper imp } public Session login() throws LoginException, RepositoryException { - return wrapped.login(); + return repository.login(); } public Session login(Credentials credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - return wrapped.login(credentials, (workspaceName == null ? getDefaultWorkspace() : workspaceName)); + return repository.login(credentials, (workspaceName == null ? getDefaultWorkspace() : workspaceName)); } public Session login(Credentials credentials) throws LoginException, RepositoryException { - return wrapped.login(credentials); + return repository.login(credentials); } public Session login(String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - return wrapped.login((workspaceName == null ? getDefaultWorkspace() : workspaceName)); + return repository.login((workspaceName == null ? getDefaultWorkspace() : workspaceName)); } public Session loginAdministrative(String workspaceName) @@ -84,19 +128,19 @@ public final class RepositoryWrapper imp } public Value getDescriptorValue(String key) { - return wrapped.getDescriptorValue(key); + return repository.getDescriptorValue(key); } public Value[] getDescriptorValues(String key) { - return wrapped.getDescriptorValues(key); + return repository.getDescriptorValues(key); } public boolean isSingleValueDescriptor(String key) { - return wrapped.isSingleValueDescriptor(key); + return repository.isSingleValueDescriptor(key); } public boolean isStandardDescriptor(String key) { - return wrapped.isStandardDescriptor(key); + return repository.isStandardDescriptor(key); } -} \ No newline at end of file +} Modified: sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java (original) +++ sling/trunk/testing/mocks/sling-mock-oak/src/main/java/org/apache/sling/testing/mock/sling/oak/package-info.java Fri Oct 2 23:31:40 2015 @@ -19,5 +19,5 @@ /** * Sling Mock Jackrabbit Oak-based Resource Resolver */ -@aQute.bnd.annotation.Version("0.1") +@aQute.bnd.annotation.Version("1.0") package org.apache.sling.testing.mock.sling.oak; Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverAdapter.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverAdapter.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverAdapter.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrResourceResolverAdapter.java Fri Oct 2 23:31:40 2015 @@ -18,11 +18,8 @@ */ package org.apache.sling.testing.mock.sling; -import javax.jcr.Repository; - import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.jcr.api.SlingRepository; -import org.apache.sling.testing.mock.jcr.MockJcr; import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter; /** @@ -37,8 +34,7 @@ class MockJcrResourceResolverAdapter imp @Override public SlingRepository newSlingRepository() { - Repository repository = MockJcr.newRepository(); - return new MockJcrSlingRepository(repository); + return new MockJcrSlingRepository(); } } Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java Fri Oct 2 23:31:40 2015 @@ -26,18 +26,25 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Service; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.testing.mock.jcr.MockJcr; +import org.osgi.service.component.ComponentContext; /** * Mock {@link SlingRepository} implementation. */ -class MockJcrSlingRepository implements SlingRepository { - - private final Repository delegate; - - public MockJcrSlingRepository(final Repository delegate) { - this.delegate = delegate; +@Component +@Service(SlingRepository.class) +public final class MockJcrSlingRepository implements SlingRepository { + + private Repository repository; + + @Activate + protected void activate(ComponentContext componentContext) { + repository = MockJcr.newRepository(); } @Override @@ -59,54 +66,54 @@ class MockJcrSlingRepository implements // delegated methods @Override public String[] getDescriptorKeys() { - return this.delegate.getDescriptorKeys(); + return this.repository.getDescriptorKeys(); } @Override public boolean isStandardDescriptor(final String key) { - return this.delegate.isStandardDescriptor(key); + return this.repository.isStandardDescriptor(key); } @Override public boolean isSingleValueDescriptor(final String key) { - return this.delegate.isSingleValueDescriptor(key); + return this.repository.isSingleValueDescriptor(key); } @Override public Value getDescriptorValue(final String key) { - return this.delegate.getDescriptorValue(key); + return this.repository.getDescriptorValue(key); } @Override public Value[] getDescriptorValues(final String key) { - return this.delegate.getDescriptorValues(key); + return this.repository.getDescriptorValues(key); } @Override public String getDescriptor(final String key) { - return this.delegate.getDescriptor(key); + return this.repository.getDescriptor(key); } @Override public Session login(final Credentials credentials, final String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - return this.delegate.login(credentials, workspaceName); + return this.repository.login(credentials, workspaceName); } @Override public Session login(final Credentials credentials) throws LoginException, RepositoryException { - return this.delegate.login(credentials); + return this.repository.login(credentials); } @Override public Session login(final String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - return this.delegate.login(workspaceName); + return this.repository.login(workspaceName); } @Override public Session login() throws LoginException, RepositoryException { - return this.delegate.login(); + return this.repository.login(); } } Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java Fri Oct 2 23:31:40 2015 @@ -60,12 +60,12 @@ class ResourceResolverFactoryInitializer BundleContext bundleContext, NodeTypeMode nodeTypeMode) { if (slingRepository != null) { + // register sling repository as OSGi service + registerServiceIfNotPresent(bundleContext, SlingRepository.class, slingRepository); + // register JCR node types found in classpath registerJcrNodeTypes(slingRepository, nodeTypeMode); - // register sling repository as OSGi service - bundleContext.registerService(SlingRepository.class.getName(), slingRepository, null); - // initialize JCR resource provider factory ensureJcrResourceProviderFactoryDependencies(bundleContext); initializeJcrResourceProviderFactory(bundleContext); Modified: sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepositoryTest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepositoryTest.java?rev=1706505&r1=1706504&r2=1706505&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepositoryTest.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepositoryTest.java Fri Oct 2 23:31:40 2015 @@ -25,18 +25,23 @@ import javax.jcr.Session; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.testing.mock.jcr.MockJcr; +import org.apache.sling.testing.mock.osgi.junit.OsgiContext; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; public class MockJcrSlingRepositoryTest { + @Rule + public OsgiContext context = new OsgiContext(); + private SlingRepository repository; @Before public void setUp() { - this.repository = new MockJcrSlingRepository(MockJcr.newRepository()); + this.repository = context.registerInjectActivateService(new MockJcrSlingRepository()); } - + @SuppressWarnings("deprecation") @Test public void testLoginAdministrative() throws RepositoryException {