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 ju...@apache.org on 2012/09/04 18:48:27 UTC
svn commit: r1380738 - in /jackrabbit/oak/trunk:
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/
oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/
Author: jukka
Date: Tue Sep 4 16:48:27 2012
New Revision: 1380738
URL: http://svn.apache.org/viewvc?rev=1380738&view=rev
Log:
OAK-256: JAAS Authentication failing in OSGi env due to classloading issue
Force the thread context class loader to come from oak-core when doing a Repository.login() call.
Added:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
- copied, changed from r1380251, jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java
jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java?rev=1380738&r1=1380737&r2=1380738&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java Tue Sep 4 16:48:27 2012
@@ -25,7 +25,6 @@ import java.util.concurrent.ScheduledExe
import javax.jcr.Repository;
import org.apache.jackrabbit.oak.api.ContentRepository;
-import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -70,7 +69,7 @@ public class Activator implements Bundle
ContentRepository repository = (ContentRepository) service;
services.put(reference, context.registerService(
Repository.class.getName(),
- new RepositoryImpl(repository, executor),
+ new OsgiRepository(repository, executor),
new Properties()));
return service;
} else {
Copied: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java (from r1380251, jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java?p2=jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java&p1=jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java&r1=1380251&r2=1380738&rev=1380738&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java Tue Sep 4 16:48:27 2012
@@ -6,7 +6,7 @@
* (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
+ * 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,
@@ -14,34 +14,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.oak.sling;
+package org.apache.jackrabbit.oak.jcr.osgi;
import java.util.concurrent.ScheduledExecutorService;
+import javax.jcr.Credentials;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
-import org.apache.sling.jcr.api.SlingRepository;
-public class SlingRepositoryImpl
- extends RepositoryImpl implements SlingRepository {
+/**
+ * Workaround to a JAAS class loading issue in OSGi environments.
+ *
+ * @see <a href="https://issues.apache.org/jira/browse/OAK-256">OAK-256</a>
+ */
+public class OsgiRepository extends RepositoryImpl {
- public SlingRepositoryImpl(
+ public OsgiRepository(
ContentRepository repository, ScheduledExecutorService executor) {
super(repository, executor);
}
@Override
- public String getDefaultWorkspace() {
- return "default";
- }
-
- @Override
- public Session loginAdministrative(String workspace)
+ public Session login(Credentials credentials, String workspace)
throws RepositoryException {
- return login(workspace);
+ Thread thread = Thread.currentThread();
+ ClassLoader loader = thread.getContextClassLoader();
+ try {
+ thread.setContextClassLoader(
+ ContentRepositoryImpl.class.getClassLoader());
+ return super.login(credentials, workspace);
+ } finally {
+ thread.setContextClassLoader(loader);
+ }
}
}
Modified: jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java?rev=1380738&r1=1380737&r2=1380738&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-sling/src/main/java/org/apache/jackrabbit/oak/sling/SlingRepositoryImpl.java Tue Sep 4 16:48:27 2012
@@ -22,11 +22,11 @@ import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.apache.jackrabbit.oak.api.ContentRepository;
-import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
+import org.apache.jackrabbit.oak.jcr.osgi.OsgiRepository;
import org.apache.sling.jcr.api.SlingRepository;
public class SlingRepositoryImpl
- extends RepositoryImpl implements SlingRepository {
+ extends OsgiRepository implements SlingRepository {
public SlingRepositoryImpl(
ContentRepository repository, ScheduledExecutorService executor) {