Return-Path: Delivered-To: apmail-incubator-cxf-commits-archive@locus.apache.org Received: (qmail 75896 invoked from network); 20 Mar 2008 16:15:54 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 20 Mar 2008 16:15:54 -0000 Received: (qmail 19208 invoked by uid 500); 20 Mar 2008 16:15:52 -0000 Delivered-To: apmail-incubator-cxf-commits-archive@incubator.apache.org Received: (qmail 19169 invoked by uid 500); 20 Mar 2008 16:15:52 -0000 Mailing-List: contact cxf-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cxf-dev@incubator.apache.org Delivered-To: mailing list cxf-commits@incubator.apache.org Received: (qmail 19160 invoked by uid 99); 20 Mar 2008 16:15:52 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Mar 2008 09:15:52 -0700 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.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 20 Mar 2008 16:15:11 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A8C261A9832; Thu, 20 Mar 2008 09:15:27 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r639341 - /incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/TunedDocumentLoader.java Date: Thu, 20 Mar 2008 16:15:27 -0000 To: cxf-commits@incubator.apache.org From: bimargulies@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080320161527.A8C261A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: bimargulies Date: Thu Mar 20 09:15:26 2008 New Revision: 639341 URL: http://svn.apache.org/viewvc?rev=639341&view=rev Log: Stop making DocumentBuilderFactory and DocumentBuilder objects all the time. Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/TunedDocumentLoader.java Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/TunedDocumentLoader.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/TunedDocumentLoader.java?rev=639341&r1=639340&r2=639341&view=diff ============================================================================== --- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/TunedDocumentLoader.java (original) +++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/TunedDocumentLoader.java Thu Mar 20 09:15:26 2008 @@ -19,6 +19,7 @@ package org.apache.cxf.bus.spring; +import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -35,17 +36,26 @@ import com.ctc.wstx.sax.WstxSAXParserFactory; -import org.apache.cxf.helpers.XMLUtils; import org.springframework.beans.factory.xml.DefaultDocumentLoader; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; - - /** * A Spring DocumentLoader that uses WoodStox when we are not validating to speed up the process. */ class TunedDocumentLoader extends DefaultDocumentLoader { + // DocumentBuilderFactories are somewhat expensive but not thread-safe. + // We only use this builder with WoodStox, we respect Spring's desire to make new factories + // when we aren't doing the optimization. + private static DocumentBuilder documentBuilder; + static { + try { + documentBuilder = + DocumentBuilderFactory.newInstance().newDocumentBuilder(); + } catch (ParserConfigurationException e) { + throw new RuntimeException(e); + } + } private TransformerFactory transformerFactory; TunedDocumentLoader() { @@ -66,7 +76,11 @@ reader.setEntityResolver(entityResolver); reader.setErrorHandler(errorHandler); SAXSource saxSource = new SAXSource(reader, inputSource); - Document document = XMLUtils.newDocument(); + Document document; + // collisions are quite unlikely here, but making documentBuilderFactory objects is expensive. + synchronized (documentBuilder) { + document = documentBuilder.newDocument(); + } DOMResult domResult = new DOMResult(document, inputSource.getSystemId()); transformerFactory.newTransformer().transform(saxSource, domResult); return document;