Return-Path: X-Original-To: apmail-sling-commits-archive@www.apache.org Delivered-To: apmail-sling-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8684810CEC for ; Thu, 12 Sep 2013 17:25:17 +0000 (UTC) Received: (qmail 58494 invoked by uid 500); 12 Sep 2013 17:19:53 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 57365 invoked by uid 500); 12 Sep 2013 17:19:44 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 56963 invoked by uid 99); 12 Sep 2013 17:19:42 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Sep 2013 17:19:42 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 12 Sep 2013 17:19:39 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 597332388A56; Thu, 12 Sep 2013 17:19:18 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1522668 - in /sling/whiteboard/bdelacretaz: bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java Date: Thu, 12 Sep 2013 17:19:18 -0000 To: commits@sling.apache.org From: bdelacretaz@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130912171918.597332388A56@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: bdelacretaz Date: Thu Sep 12 17:19:17 2013 New Revision: 1522668 URL: http://svn.apache.org/r1522668 Log: SLING-2788 - set thread context class loader for all login variants, more login tests pass now Modified: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java Modified: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java?rev=1522668&r1=1522667&r2=1522668&view=diff ============================================================================== --- sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java (original) +++ sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java Thu Sep 12 17:19:17 2013 @@ -17,6 +17,8 @@ */ package org.apache.sling.oak.server; +import java.util.Map; + import javax.jcr.Credentials; import javax.jcr.RepositoryException; import javax.jcr.Session; @@ -28,22 +30,73 @@ import org.apache.jackrabbit.oak.spi.sec import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard; class JcrRepositoryHacks extends RepositoryImpl { + + // TODO TCCL switching shouldn't be needed? + // LoginModules are not found without this + static abstract class LoginHelper { + Session TCCLLogin() throws RepositoryException { + final Thread thread = Thread.currentThread(); + final ClassLoader loader = thread.getContextClassLoader(); + try { + thread.setContextClassLoader(Oak.class.getClassLoader()); + return doLogin(); + } finally { + thread.setContextClassLoader(loader); + } + + } + + protected abstract Session doLogin() throws RepositoryException; + }; + JcrRepositoryHacks(ContentRepository contentRepository, Whiteboard whiteboard, SecurityProvider securityProvider) { super(contentRepository, whiteboard, securityProvider); } @Override + public Session login() throws RepositoryException { + return new LoginHelper() { + protected Session doLogin() throws RepositoryException { + return JcrRepositoryHacks.super.login(); + } + }.TCCLLogin(); + } + + @Override + public Session login(final Credentials creds, final String workspace, final Map opt) + throws RepositoryException { + return new LoginHelper() { + protected Session doLogin() throws RepositoryException { + return JcrRepositoryHacks.super.login(creds, workspace, opt); + } + }.TCCLLogin(); + } + + @Override + public Session login(final Credentials credentials) throws RepositoryException { + return new LoginHelper() { + protected Session doLogin() throws RepositoryException { + return JcrRepositoryHacks.super.login(credentials); + } + }.TCCLLogin(); + } + + @Override + public Session login(final String workspace) throws RepositoryException { + return new LoginHelper() { + protected Session doLogin() throws RepositoryException { + return JcrRepositoryHacks.super.login(workspace); + } + }.TCCLLogin(); + } + + @Override public Session login(final Credentials credentials, final String workspace) throws RepositoryException { - // TODO: shouldn't be needed - set context class loader to - // avoid class not found exceptions on login modules - final Thread thread = Thread.currentThread(); - final ClassLoader loader = thread.getContextClassLoader(); - try { - thread.setContextClassLoader(Oak.class.getClassLoader()); - return super.login(credentials, workspace); - } finally { - thread.setContextClassLoader(loader); - } + return new LoginHelper() { + protected Session doLogin() throws RepositoryException { + return JcrRepositoryHacks.super.login(credentials, workspace); + } + }.TCCLLogin(); } } \ No newline at end of file Modified: sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java?rev=1522668&r1=1522667&r2=1522668&view=diff ============================================================================== --- sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java (original) +++ sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java Thu Sep 12 17:19:17 2013 @@ -62,8 +62,7 @@ public abstract class SlingRepositoryITB } @Test - @Ignore("Fails on Oak: javax.security.auth.login.LoginException: unable to find LoginModule class: org.apache.jackrabbit.oak.spi.security.authentication.GuestLoginModule") - public void testAdminLogin() throws RepositoryException { + public void testExplicitAdminLogin() throws RepositoryException { final Credentials creds = new SimpleCredentials("admin", "admin".toCharArray()); repository.login(creds).logout(); } @@ -71,7 +70,7 @@ public abstract class SlingRepositoryITB @Test(expected=RepositoryException.class) public void testWrongLogin() throws RepositoryException { final Credentials creds = new SimpleCredentials("badName", "badPAssword".toCharArray()); - repository.login(creds).logout(); + repository.login(creds); } private void assertCreateRetrieveNode(String nodeType) throws RepositoryException {