From commits-return-4088-apmail-jackrabbit-commits-archive=jackrabbit.apache.org@jackrabbit.apache.org Sat Jun 02 20:32:20 2007 Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 74340 invoked from network); 2 Jun 2007 20:32:20 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 2 Jun 2007 20:32:20 -0000 Received: (qmail 79124 invoked by uid 500); 2 Jun 2007 20:32:24 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 79084 invoked by uid 500); 2 Jun 2007 20:32:23 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 79075 invoked by uid 99); 2 Jun 2007 20:32:23 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 02 Jun 2007 13:32:23 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 02 Jun 2007 13:32:18 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 99CFE1A981A; Sat, 2 Jun 2007 13:31:58 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r543779 - in /jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons: repository/JNDIRepository.java repository/JNDIRepositoryFactory.java servlet/JNDIRepositoryServlet.java Date: Sat, 02 Jun 2007 20:31:58 -0000 To: commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070602203158.99CFE1A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jukka Date: Sat Jun 2 13:31:57 2007 New Revision: 543779 URL: http://svn.apache.org/viewvc?view=rev&rev=543779 Log: JCR-956: Changed the JNDI repository proxy to use lazy loading only for the lookup within a JNDI context, not for instantiating the JNDI context itself. Otherwise clients in different threads or in different class loaders (for example when accessing the repository proxy from another webapp) may end up using separate JNDI contexts. Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/servlet/JNDIRepositoryServlet.java Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java?view=diff&rev=543779&r1=543778&r2=543779 ============================================================================== --- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java (original) +++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java Sat Jun 2 13:31:57 2007 @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.commons.repository; -import java.util.Hashtable; +import javax.naming.Context; /** * Proxy for a repository bound in JNDI. The configured repository is @@ -30,11 +30,11 @@ /** * Creates a proxy for a repository in the given JNDI location. * - * @param environment JNDI environment settings + * @param context JNDI context * @param name JNDI name of the proxied repository */ - public JNDIRepository(Hashtable environment, String name) { - super(new JNDIRepositoryFactory(environment, name)); + public JNDIRepository(Context context, String name) { + super(new JNDIRepositoryFactory(context, name)); } } Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java?view=diff&rev=543779&r1=543778&r2=543779 ============================================================================== --- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java (original) +++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java Sat Jun 2 13:31:57 2007 @@ -16,11 +16,9 @@ */ package org.apache.jackrabbit.commons.repository; -import java.util.Hashtable; - import javax.jcr.Repository; import javax.jcr.RepositoryException; -import javax.naming.InitialContext; +import javax.naming.Context; import javax.naming.NamingException; /** @@ -29,9 +27,9 @@ public class JNDIRepositoryFactory implements RepositoryFactory { /** - * JNDI environment settings. + * JNDI context from which to look up the repository. */ - private final Hashtable environment; + private final Context context; /** * JNDI name of the repository. @@ -41,11 +39,11 @@ /** * Creates a factory for looking up a repository from JNDI. * - * @param environment JNDI environment settings + * @param context JNDI context * @param name JNDI name of the repository */ - public JNDIRepositoryFactory(Hashtable environment, String name) { - this.environment = environment; + public JNDIRepositoryFactory(Context context, String name) { + this.context = context; this.name = name; } @@ -57,7 +55,7 @@ */ public Repository getRepository() throws RepositoryException { try { - Object repository = new InitialContext(environment).lookup(name); + Object repository = context.lookup(name); if (repository instanceof Repository) { return (Repository) repository; } else if (repository == null) { Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/servlet/JNDIRepositoryServlet.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/servlet/JNDIRepositoryServlet.java?view=diff&rev=543779&r1=543778&r2=543779 ============================================================================== --- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/servlet/JNDIRepositoryServlet.java (original) +++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/servlet/JNDIRepositoryServlet.java Sat Jun 2 13:31:57 2007 @@ -21,6 +21,8 @@ import javax.jcr.Repository; import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.servlet.ServletException; import org.apache.jackrabbit.commons.repository.JNDIRepository; @@ -63,19 +65,25 @@ * * @return JNDI repository proxy */ - protected Repository getRepository() { - String location = Repository.class.getName().replace('.', '/'); - Hashtable environment = new Hashtable(); - Enumeration names = getInitParameterNames(); - while (names.hasMoreElements()) { - String name = (String) names.nextElement(); - if (name.equals("location")) { - location = getInitParameter(name); - } else if (!name.equals(Repository.class.getName())) { - environment.put(name, getInitParameter(name)); + protected Repository getRepository() throws ServletException { + try { + String location = Repository.class.getName().replace('.', '/'); + Hashtable environment = new Hashtable(); + Enumeration names = getInitParameterNames(); + while (names.hasMoreElements()) { + String name = (String) names.nextElement(); + if (name.equals("location")) { + location = getInitParameter(name); + } else if (!name.equals(Repository.class.getName())) { + environment.put(name, getInitParameter(name)); + } } + return new JNDIRepository( + new InitialContext(environment), location); + } catch (NamingException e) { + throw new ServletException( + "Repository not found: Invalid JNDI context", e); } - return new JNDIRepository(environment, location); } }