Author: justin Date: Tue Feb 9 21:20:39 2010 New Revision: 908232 URL: http://svn.apache.org/viewvc?rev=908232&view=rev Log: SLING-1363 - adding SessionConfigurer interface
Added: sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SessionConfigurer.java Modified: sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SlingRepository.java sling/trunk/bundles/jcr/base/pom.xml sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java Added: sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SessionConfigurer.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SessionConfigurer.java?rev=908232&view=auto ============================================================================== --- sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SessionConfigurer.java (added) +++ sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SessionConfigurer.java Tue Feb 9 21:20:39 2010 @@ -0,0 +1,35 @@ +/* + * 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.jcr.api; + +import javax.jcr.Session; + +/** + * Service interface which allows for the JCR Sessions produced by + * SlingRepository instances to be configured programmatically. + */ +public interface SessionConfigurer { + + static final String SERVICE_NAME = "org.apache.sling.jcr.api.SessionConfigurer"; + + /** + * Configure the Session instance as necessary. + * + * @param session the JCR Session + */ + void configure(Session session); +} Modified: sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SlingRepository.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SlingRepository.java?rev=908232&r1=908231&r2=908232&view=diff ============================================================================== --- sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SlingRepository.java (original) +++ sling/trunk/bundles/jcr/api/src/main/java/org/apache/sling/jcr/api/SlingRepository.java Tue Feb 9 21:20:39 2010 @@ -34,6 +34,12 @@ * Implementations of this interface will generally provide configurability of * the default workspace name as well as the access details for the * administrative session. + * <p> + * Implementations of SlingRepository are expected to invoke any available + * implementations of the {...@link SessionConfigurer} interface <b>before</b> + * returning <b>any</b> {...@link Session} to callers. This includes the methods + * defined in the {...@link Repository} interface. + * */ public interface SlingRepository extends Repository { Modified: sling/trunk/bundles/jcr/base/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/base/pom.xml?rev=908232&r1=908231&r2=908232&view=diff ============================================================================== --- sling/trunk/bundles/jcr/base/pom.xml (original) +++ sling/trunk/bundles/jcr/base/pom.xml Tue Feb 9 21:20:39 2010 @@ -7,9 +7,9 @@ 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 @@ -90,7 +90,7 @@ <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.jcr.api</artifactId> - <version>2.0.6</version> + <version>2.0.7-SNAPSHOT</version> </dependency> <dependency> <groupId>javax.jcr</groupId> Modified: sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java?rev=908232&r1=908231&r2=908232&view=diff ============================================================================== --- sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java (original) +++ sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository.java Tue Feb 9 21:20:39 2010 @@ -30,6 +30,7 @@ import javax.jcr.Workspace; import org.apache.jackrabbit.api.JackrabbitWorkspace; +import org.apache.sling.jcr.api.SessionConfigurer; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.jcr.base.internal.loader.Loader; import org.apache.sling.jcr.base.util.RepositoryAccessor; @@ -39,6 +40,7 @@ import org.osgi.framework.SynchronousBundleListener; import org.osgi.service.component.ComponentContext; import org.osgi.service.log.LogService; +import org.osgi.util.tracker.ServiceTracker; /** * The <code>AbstractSlingRepository</code> is an abstract implementation of @@ -131,6 +133,8 @@ // the background thread constantly checking the repository private Thread repositoryPinger; + private ServiceTracker sessionConfigurerTracker; + protected AbstractSlingRepository() { } @@ -215,6 +219,13 @@ setDefaultWorkspace(defaultWorkspace); } + Object[] postProcessors = sessionConfigurerTracker.getServices(); + if (postProcessors != null) { + for (int i = 0; i < postProcessors.length; i++) { + ((SessionConfigurer) postProcessors[i]).configure(session); + } + } + return session; } catch (NoSuchWorkspaceException nswe) { @@ -236,7 +247,7 @@ throw new RepositoryException(re.getMessage(), re); } } - + /** * @param anonUser the user name of the anon user. * @return a Credentials implementation that represents the anon user. @@ -245,7 +256,7 @@ // NB: this method is overridden in the Jackrabbit Service bundle to avoid using the anon password. SLING-1282 return new SimpleCredentials(anonUser, anonPass); } - + /** * @param adminUser the name of the administrative user. * @return a Credentials implementation that represents the administrative user. @@ -254,7 +265,7 @@ // NB: this method is overridden in the Jackrabbit Service bundle to avoid using the admin password. SLING-1282 return new SimpleCredentials(adminUser, adminPass); } - + /* @@ -575,6 +586,9 @@ "activate: Unexpected problem starting repository", t); } + this.sessionConfigurerTracker = new ServiceTracker(componentContext.getBundleContext(), SessionConfigurer.SERVICE_NAME, null); + this.sessionConfigurerTracker.open(); + // launch the background repository checker now startRepositoryPinger(); } @@ -585,6 +599,7 @@ * @param componentContext */ protected void deactivate(ComponentContext componentContext) { + this.sessionConfigurerTracker.close(); componentContext.getBundleContext().removeBundleListener(this);