removed memory leak where XmlUtil held strong static

references on transactor threads.
This commit is contained in:
hns 2002-06-07 18:31:54 +00:00
parent 11ba081196
commit 61fd1966c1

View file

@ -2,7 +2,7 @@ package helma.objectmodel.dom;
import java.io.InputStream; import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.WeakHashMap;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
@ -22,22 +22,23 @@ import helma.objectmodel.TransientNode;
public class XmlUtil { public class XmlUtil {
private static final DocumentBuilderFactory domBuilderFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); private static final DocumentBuilderFactory domBuilderFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
private static final HashMap domBuilders = new HashMap(); private static final WeakHashMap domBuilders = new WeakHashMap();
private static synchronized DocumentBuilder getDocumentBuilder() { private static synchronized DocumentBuilder getDocumentBuilder() {
if ( domBuilders.containsKey (Thread.currentThread()) ) { DocumentBuilder domBuilder = (DocumentBuilder) domBuilders.get (Thread.currentThread());
return (DocumentBuilder)domBuilders.get (Thread.currentThread()); if (domBuilder != null) {
} else { return domBuilder;
try { } else {
DocumentBuilder d = domBuilderFactory.newDocumentBuilder(); try {
domBuilders.put (Thread.currentThread(),d); domBuilder = domBuilderFactory.newDocumentBuilder();
return d; domBuilders.put (Thread.currentThread(), domBuilder);
} catch ( ParserConfigurationException e ) { return domBuilder;
} catch ( ParserConfigurationException e ) {
throw new RuntimeException ("Cannot build parser: "+e.toString()); throw new RuntimeException ("Cannot build parser: "+e.toString());
} }
} }
} }
public static Document newDocument() { public static Document newDocument() {
DocumentBuilder d = getDocumentBuilder(); DocumentBuilder d = getDocumentBuilder();
return d.newDocument(); return d.newDocument();