[jboss-svn-commits] JBL Code SVN: r31357 - labs/jbossesb/branches/JBESB_4_7_CP/product/rosetta/src/org/jboss/internal/soa/esb/util.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Feb 2 05:35:25 EST 2010
Author: kevin.conner at jboss.com
Date: 2010-02-02 05:35:25 -0500 (Tue, 02 Feb 2010)
New Revision: 31357
Modified:
labs/jbossesb/branches/JBESB_4_7_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/XMLHelper.java
Log:
Reuse DocumentBuilder: JBESB-3162
Modified: labs/jbossesb/branches/JBESB_4_7_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/XMLHelper.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_7_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/XMLHelper.java 2010-02-02 06:18:25 UTC (rev 31356)
+++ labs/jbossesb/branches/JBESB_4_7_CP/product/rosetta/src/org/jboss/internal/soa/esb/util/XMLHelper.java 2010-02-02 10:35:25 UTC (rev 31357)
@@ -31,6 +31,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.util.concurrent.atomic.AtomicReference;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
@@ -94,6 +95,10 @@
*/
private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY ;
/**
+ * The Document builder for document creation (not parsing).
+ */
+ private static final AtomicReference<DocumentBuilder> DOCUMENT_BUILDER = new AtomicReference<DocumentBuilder>();
+ /**
* The event writer creator for DOM documents.
*/
private static final EventWriterCreator EVENT_WRITER_CREATOR ;
@@ -600,8 +605,7 @@
public static Document createDocument(XMLEventReader reader)
throws ParserConfigurationException, XMLStreamException
{
- final DocumentBuilder builder = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder() ;
- final Document doc = builder.newDocument() ;
+ final Document doc = getNewDocument() ;
final XMLEventWriter writer = EVENT_WRITER_CREATOR.createXMLEventWriter(doc);
XMLHelper.copyXMLEventStream(reader, writer) ;
return doc;
@@ -619,6 +623,46 @@
final XMLEventReader reader = EVENT_READER_CREATOR.createXMLEventReader(node);
XMLHelper.copyXMLEventStream(reader, writer, omitDoc) ;
}
+
+ /**
+ * Create a new document.
+ * @return the new document
+ * @throws ParserConfigurationException for errors during creation
+ */
+ private static Document getNewDocument()
+ throws ParserConfigurationException
+ {
+ final DocumentBuilder builder = getCreationDocumentBuilder() ;
+ synchronized(builder)
+ {
+ // synchronized as it is not guaranteed to be thread safe
+ return builder.newDocument() ;
+ }
+ }
+
+ /**
+ * Get the document builder for creation
+ * @return The document builder
+ * @throws ParserConfigurationException for errors during creation
+ */
+ private static DocumentBuilder getCreationDocumentBuilder()
+ throws ParserConfigurationException
+ {
+ final DocumentBuilder current = DOCUMENT_BUILDER.get() ;
+ if (current != null)
+ {
+ return current ;
+ }
+ final DocumentBuilder newBuilder = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder() ;
+ if (DOCUMENT_BUILDER.compareAndSet(null, newBuilder))
+ {
+ return newBuilder ;
+ }
+ else
+ {
+ return DOCUMENT_BUILDER.get() ;
+ }
+ }
static
{
More information about the jboss-svn-commits
mailing list