You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/03/02 10:15:04 UTC
svn commit: r513673 - in
/incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi:
servicedesc/EndpointReferenceBuilder.java util/DOMUtil.java
Author: gnodet
Date: Fri Mar 2 01:15:03 2007
New Revision: 513673
URL: http://svn.apache.org/viewvc?view=rev&rev=513673
Log:
SM-860: EndpointReferenceBuilder.getReference() should cache its DocumentBuilderFactory instance
Modified:
incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointReferenceBuilder.java
incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/util/DOMUtil.java
Modified: incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointReferenceBuilder.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointReferenceBuilder.java?view=diff&rev=513673&r1=513672&r2=513673
==============================================================================
--- incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointReferenceBuilder.java (original)
+++ incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointReferenceBuilder.java Fri Mar 2 01:15:03 2007
@@ -17,24 +17,23 @@
package org.apache.servicemix.jbi.servicedesc;
import javax.jbi.servicedesc.ServiceEndpoint;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.jbi.util.DOMUtil;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
public class EndpointReferenceBuilder {
+ private static final Log log = LogFactory.getLog(EndpointReferenceBuilder.class);
public static final String JBI_NAMESPACE = "http://java.sun.com/jbi/end-point-reference";
public static final String XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/";
public static DocumentFragment getReference(ServiceEndpoint endpoint) {
try {
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- dbf.setNamespaceAware(true);
- DocumentBuilder db = dbf.newDocumentBuilder();
- Document doc = db.newDocument();
+ Document doc = DOMUtil.newDocument();
DocumentFragment fragment = doc.createDocumentFragment();
Element epr = doc.createElementNS(JBI_NAMESPACE, "jbi:end-point-reference");
epr.setAttributeNS(XMLNS_NAMESPACE,"xmlns:sns", endpoint.getServiceName().getNamespaceURI());
@@ -43,6 +42,7 @@
fragment.appendChild(epr);
return fragment;
} catch (Exception e) {
+ log.warn("Unable to create reference for ServiceEndpoint " + endpoint, e);
return null;
}
}
Modified: incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/util/DOMUtil.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/util/DOMUtil.java?view=diff&rev=513673&r1=513672&r2=513673
==============================================================================
--- incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/util/DOMUtil.java (original)
+++ incubator/servicemix/branches/servicemix-3.1/core/servicemix-core/src/main/java/org/apache/servicemix/jbi/util/DOMUtil.java Fri Mar 2 01:15:03 2007
@@ -25,7 +25,13 @@
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import edu.emory.mathcs.backport.java.util.Queue;
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentLinkedQueue;
+
import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
@@ -207,5 +213,36 @@
return new QName(el.getNamespaceURI(), el.getLocalName());
}
}
-
+
+ private static DocumentBuilderFactory dbf = null;
+ private static Queue builders = new ConcurrentLinkedQueue();
+
+ public static DocumentBuilder getBuilder() throws ParserConfigurationException {
+ DocumentBuilder builder = (DocumentBuilder) builders.poll();
+ if (builder == null) {
+ if (dbf == null) {
+ dbf = DocumentBuilderFactory.newInstance();
+ dbf.setNamespaceAware(true);
+ }
+ builder = dbf.newDocumentBuilder();
+ }
+ return builder;
+ }
+
+ public static void releaseBuilder(DocumentBuilder builder) {
+ builders.add(builder);
+ }
+
+ /**
+ * Return a new document, ready to populate.
+ * @return
+ * @throws ParserConfigurationException
+ */
+ public static Document newDocument() throws ParserConfigurationException {
+ DocumentBuilder builder = getBuilder();
+ Document doc = builder.newDocument();
+ releaseBuilder(builder);
+ return doc;
+ }
+
}