Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 6168 invoked from network); 13 Jan 2010 10:22:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 13 Jan 2010 10:22:25 -0000 Received: (qmail 84222 invoked by uid 500); 13 Jan 2010 10:22:25 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 84157 invoked by uid 500); 13 Jan 2010 10:22:24 -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 84148 invoked by uid 99); 13 Jan 2010 10:22:24 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Jan 2010 10:22:24 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.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; Wed, 13 Jan 2010 10:22:23 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 26F932388980; Wed, 13 Jan 2010 10:22:03 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r898699 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Date: Wed, 13 Jan 2010 10:22:03 -0000 To: commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100113102203.26F932388980@eris.apache.org> Author: jukka Date: Wed Jan 13 10:22:02 2010 New Revision: 898699 URL: http://svn.apache.org/viewvc?rev=898699&view=rev Log: JCR-2465: Background threads should use jackrabbit classloader as thread context classloader Patch by Carsten Ziegeler. Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=898699&r1=898698&r2=898699&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Wed Jan 13 10:22:02 2010 @@ -34,21 +34,23 @@ import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import javax.jcr.AccessDeniedException; import javax.jcr.Credentials; import javax.jcr.LoginException; import javax.jcr.NamespaceRegistry; import javax.jcr.NoSuchWorkspaceException; +import javax.jcr.PropertyType; +import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; import javax.jcr.Value; import javax.jcr.ValueFactory; -import javax.jcr.Repository; -import javax.jcr.PropertyType; import javax.jcr.observation.Event; import javax.jcr.observation.ObservationManager; import javax.security.auth.Subject; @@ -104,10 +106,10 @@ import org.apache.jackrabbit.core.version.InternalVersionManager; import org.apache.jackrabbit.core.version.InternalVersionManagerImpl; import org.apache.jackrabbit.core.xml.ClonedInputSource; -import org.apache.jackrabbit.value.ValueFactoryImpl; import org.apache.jackrabbit.spi.commons.name.NameConstants; import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver; import org.apache.jackrabbit.spi.commons.namespace.RegistryNamespaceResolver; +import org.apache.jackrabbit.value.ValueFactoryImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.InputSource; @@ -267,8 +269,30 @@ * or another error occurs. */ protected RepositoryImpl(RepositoryConfig repConfig) throws RepositoryException { + // we should use the jackrabbit classloader for all background threads + // from the pool + final ClassLoader poolClassLoader = this.getClass().getClassLoader(); ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor( Runtime.getRuntime().availableProcessors() * 2, + new ThreadFactory() { + + final AtomicInteger threadNumber = new AtomicInteger(1); + + /** + * @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable) + */ + public Thread newThread(Runnable r) { + final Thread t = new Thread(null, r, + "jackrabbit-pool-" + threadNumber.getAndIncrement(), + 0); + if (t.isDaemon()) + t.setDaemon(false); + if (t.getPriority() != Thread.NORM_PRIORITY) + t.setPriority(Thread.NORM_PRIORITY); + t.setContextClassLoader(poolClassLoader); + return t; + } + }, new ThreadPoolExecutor.CallerRunsPolicy()); this.executor = executor; @@ -282,7 +306,7 @@ boolean succeeded = false; try { this.repConfig = repConfig; - + // setup file systems repStore = repConfig.getFileSystem(); String fsRootPath = "/meta";