Author: cwiklik Date: Fri Sep 23 15:42:22 2011 New Revision: 1174844 URL: http://svn.apache.org/viewvc?rev=1174844&view=rev Log: UIMA-2180 modified to use DOM parser when doing deep copy of AnalysisEngineManagement instance. Added sanity checks to guard against NPE.
Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java?rev=1174844&r1=1174843&r2=1174844&view=diff ============================================================================== --- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java (original) +++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/PrimitiveAnalysisEngineController_impl.java Fri Sep 23 15:42:22 2011 @@ -23,24 +23,21 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; +import java.util.Map.Entry; import java.util.Timer; import java.util.TimerTask; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Semaphore; import org.apache.uima.UIMAFramework; import org.apache.uima.aae.AsynchAECasManager; import org.apache.uima.aae.InProcessCache; +import org.apache.uima.aae.InProcessCache.CacheEntry; import org.apache.uima.aae.UIMAEE_Constants; import org.apache.uima.aae.UimaClassFactory; -import org.apache.uima.aae.InProcessCache.CacheEntry; import org.apache.uima.aae.controller.LocalCache.CasStateEntry; import org.apache.uima.aae.error.AsynchAEException; import org.apache.uima.aae.error.ErrorContext; import org.apache.uima.aae.error.ErrorHandler; -import org.apache.uima.aae.error.ServiceShutdownException; import org.apache.uima.aae.jmx.JmxManagement; import org.apache.uima.aae.jmx.PrimitiveServiceInfo; import org.apache.uima.aae.jmx.ServicePerformance; @@ -51,24 +48,20 @@ import org.apache.uima.aae.monitor.stati import org.apache.uima.aae.spi.transport.UimaMessage; import org.apache.uima.aae.spi.transport.UimaTransport; import org.apache.uima.analysis_engine.AnalysisEngine; -import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.analysis_engine.AnalysisEngineManagement; import org.apache.uima.analysis_engine.CasIterator; -import org.apache.uima.analysis_engine.impl.AnalysisEngineManagementImpl; import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData; import org.apache.uima.cas.CAS; import org.apache.uima.cas.impl.CASImpl; import org.apache.uima.cas.impl.OutOfTypeSystemData; import org.apache.uima.resource.ResourceInitializationException; -import org.apache.uima.resource.ResourceProcessException; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.resource.metadata.ConfigurationParameter; import org.apache.uima.resource.metadata.impl.ConfigurationParameter_impl; -import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.Level; -import org.apache.xmlbeans.impl.common.XmlStreamUtils; import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; public class PrimitiveAnalysisEngineController_impl extends BaseAnalysisEngineController implements PrimitiveAnalysisEngineController { @@ -102,7 +95,7 @@ public class PrimitiveAnalysisEngineCont static private Object threadDumpMonitor = new Object(); static private Long lastDump = Long.valueOf(0); - private XStream xstream = new XStream(); + private XStream xstream = new XStream(new DomDriver()); public PrimitiveAnalysisEngineController_impl(String anEndpointName, String anAnalysisEngineDescriptor, AsynchAECasManager aCasManager, @@ -179,7 +172,6 @@ public class PrimitiveAnalysisEngineCont sharedInitSemaphore.acquire(); // Parse the descriptor in the calling thread. rSpecifier = UimaClassFactory.produceResourceSpecifier(super.aeDescriptor); - AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(rSpecifier, paramsMap); // Call to produceAnalysisEngine() may take a long time to complete. While this // method was executing, the service may have been stopped. Before continuing @@ -546,8 +538,9 @@ public class PrimitiveAnalysisEngineCont AnalysisEngineManagement rootAem = ae.getManagementInterface(); beforeAnalysisManagementObjects.add(deepCopy(rootAem)); - getLeafManagementObjects(rootAem, beforeAnalysisManagementObjects, true); - + if ( rootAem.getComponents().size() > 0 ) { + getLeafManagementObjects(rootAem, beforeAnalysisManagementObjects, true); + } CasIterator casIterator = ae.processAndOutputNewCASes(aCAS); if ( stackDumpTimer != null ) { @@ -803,13 +796,15 @@ public class PrimitiveAnalysisEngineCont AnalysisEngineManagement aem = ae.getManagementInterface(); // Add the top level AnalysisEngineManagement instance. afterAnalysisManagementObjects.add(aem); - // Flatten the hierarchy by recursively (if this AE is an aggregate) extracting - // primitive AE's AnalysisEngineManagement instance and placing it in - // afterAnalysisManagementObjects List. - getLeafManagementObjects(aem, afterAnalysisManagementObjects, false); + if ( aem.getComponents().size() > 0) { + // Flatten the hierarchy by recursively (if this AE is an aggregate) extracting + // primitive AE's AnalysisEngineManagement instance and placing it in + // afterAnalysisManagementObjects List. + getLeafManagementObjects(aem, afterAnalysisManagementObjects, false); + } // Create a List to hold per CAS analysisTime and total number of CASes processed - // by each AE. This list will be serialized and send to the client + // by each AE. This list will be serialized and sent to the client List<AnalysisEnginePerformanceMetrics> performanceList = new ArrayList<AnalysisEnginePerformanceMetrics>(); // Diff the before process() performance metrics with post process performance @@ -827,7 +822,7 @@ public class PrimitiveAnalysisEngineCont } } } - // Save this CAS per component performance metrics + // Save this component performance metrics parentCasStateEntry.getAEPerformanceList().addAll(performanceList); if (!anEndpoint.isRemote()) {