You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2009/08/31 20:53:27 UTC

svn commit: r809688 - /incubator/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaSerializer.java

Author: cwiklik
Date: Mon Aug 31 18:53:27 2009
New Revision: 809688

URL: http://svn.apache.org/viewvc?rev=809688&view=rev
Log:
UIMA-1393 Committed Jorn's changes to use ThreadLocal while serilizing and deserializing from xmi

Modified:
    incubator/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaSerializer.java

Modified: incubator/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaSerializer.java
URL: http://svn.apache.org/viewvc/incubator/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaSerializer.java?rev=809688&r1=809687&r2=809688&view=diff
==============================================================================
--- incubator/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaSerializer.java (original)
+++ incubator/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/UimaSerializer.java Mon Aug 31 18:53:27 2009
@@ -27,7 +27,7 @@
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.util.concurrent.ConcurrentHashMap;
+//import java.util.concurrent.ConcurrentHashMap;
 
 import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.parsers.ParserConfigurationException;
@@ -55,9 +55,8 @@
 
 public class UimaSerializer
 {
-  
-  private ConcurrentHashMap xmlReaderMap = new ConcurrentHashMap();
-  private Object mux = new Object();
+  private final ThreadLocal<XMLReader> localXmlReader = new ThreadLocal<XMLReader>();
+
 	/**
 	 * Serializes XCas into CAS
 	 * 
@@ -119,7 +118,6 @@
 
 		if (typeSystem == null)
 			typeSystem = aCAS.getTypeSystem();
-//		XMLSerializer xmlSer = new XMLSerializer(writer, false);
 		XMLSerializer xmlSer = new XMLSerializer(stream, false);
 		if (encoding != null)
 			xmlSer.setOutputProperty(OutputKeys.ENCODING, encoding);
@@ -127,7 +125,6 @@
 		XmiCasSerializer ser = new XmiCasSerializer(typeSystem);
 		
 		ser.serialize(aCAS, xmlSer.getContentHandler());
-		// ser.serialize(aCAS, xmlSer.getContentHandler(),false, otsd);
 	}
 
 	/**
@@ -143,7 +140,7 @@
 			ser.serialize(aCAS, xmlSer.getContentHandler(), null, serSharedData);
 			return writer.toString();
 		}
-		catch( Exception e)
+		catch( SAXException e)
 		{
 			throw e;
 		}
@@ -163,7 +160,7 @@
 			ser.serialize(aCAS, xmlSer.getContentHandler(), null, serSharedData, aMarker);
 			return writer.toString();
 		}
-		catch( Exception e)
+		catch( SAXException e)
 		{
 			throw e;
 		}
@@ -179,22 +176,12 @@
 	throws FactoryConfigurationError, ParserConfigurationException, SAXException, IOException
 	{
 		
-    XMLReader xmlReader = null;
-    //  Create a new instance of a XMLReader if one doesnt exist in the
-    //  global map. Each thread reuses its own instance.
-    synchronized( mux ) {
-      if ( !xmlReaderMap.containsKey(Thread.currentThread().getId())) {
-        xmlReader = XMLReaderFactory.createXMLReader();
-        xmlReaderMap.put(Thread.currentThread().getId(), xmlReader);
-      } else {
-        xmlReader = (XMLReader) xmlReaderMap.get(Thread.currentThread().getId());
-      }
-    }
-    if ( xmlReader == null ) {
-      throw new ParserConfigurationException("XMLReaderMap Doesnt Contain a Reader Object for Key:"+Thread.currentThread().getId());
-    }
+	  if (localXmlReader.get() == null) {
+	        localXmlReader.set(XMLReaderFactory.createXMLReader());
+	  }
+	  XMLReader xmlReader = XMLReaderFactory.createXMLReader(); // localXmlReader.get();
 
-    Reader reader = new StringReader(anXmlStr);
+	  Reader reader = new StringReader(anXmlStr);
     XmiCasDeserializer deser = new XmiCasDeserializer(aCAS.getTypeSystem());
     ContentHandler handler = deser.getXmiCasHandler(aCAS, aLenient, aSharedData, aMergePoint);
     xmlReader.setContentHandler(handler);
@@ -205,18 +192,11 @@
 			boolean aLenient, int aMergePoint, AllowPreexistingFS allow) 
 	throws FactoryConfigurationError, ParserConfigurationException, SAXException, IOException
 	{
-    XMLReader xmlReader = null;
-    synchronized( mux ) {
-      if ( !xmlReaderMap.containsKey(Thread.currentThread().getId())) {
-        xmlReader = XMLReaderFactory.createXMLReader();
-        xmlReaderMap.put(Thread.currentThread().getId(), xmlReader);
-      } else {
-        xmlReader = (XMLReader) xmlReaderMap.get(Thread.currentThread().getId());
-      }
-    }
-    if ( xmlReader == null ) {
-      throw new ParserConfigurationException("XMLReaderMap Doesnt Contain a Reader Object for Key:"+Thread.currentThread().getId());
-    }
+	  
+	  if (localXmlReader.get() == null) {
+	    localXmlReader.set(XMLReaderFactory.createXMLReader());
+	  }
+	  XMLReader xmlReader = localXmlReader.get();
     Reader reader = new StringReader(anXmlStr);
     XmiCasDeserializer deser = new XmiCasDeserializer(aCAS.getTypeSystem());
     ContentHandler handler = deser.getXmiCasHandler(aCAS, aLenient, aSharedData, aMergePoint, allow);
@@ -288,9 +268,5 @@
       }
     }
   }
-  
-  public void reset() {
-    xmlReaderMap.clear();
-  }
 }