You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2018/06/13 19:54:34 UTC
svn commit: r1833475 -
/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/UimaServiceProcessor.java
Author: burn
Date: Wed Jun 13 19:54:34 2018
New Revision: 1833475
URL: http://svn.apache.org/viewvc?rev=1833475&view=rev
Log:
UIMA-5795 Expect a serialized CAS only when the JpType is specified
Modified:
uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/UimaServiceProcessor.java
Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/UimaServiceProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/UimaServiceProcessor.java?rev=1833475&r1=1833474&r2=1833475&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/UimaServiceProcessor.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/processor/uima/UimaServiceProcessor.java Wed Jun 13 19:54:34 2018
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -56,19 +56,18 @@ import org.apache.uima.util.Level;
import org.apache.uima.util.Logger;
import org.apache.uima.util.XMLInputSource;
-public class UimaServiceProcessor implements IServiceProcessor {
+public class UimaServiceProcessor implements IServiceProcessor {
public static final String IMPORT_BY_NAME_PREFIX = "*importByName:";
Logger logger = UIMAFramework.getLogger(UimaServiceProcessor.class);
// Map to store DuccUimaSerializer instances. Each has affinity to a thread
- private Map<Long, UimaSerializer> serializerMap =
- new HashMap<>();
+ private Map<Long, UimaSerializer> serializerMap;
private IServiceResultSerializer resultSerializer;
// stores AE instance pinned to a thread
- private ThreadLocal<AnalysisEngine> threadLocal =
+ private ThreadLocal<AnalysisEngine> threadLocal =
new ThreadLocal<> ();
private ReentrantLock initStateLock = new ReentrantLock();
private boolean sendInitializingState = true;
- private ResourceManager rm =
+ private ResourceManager rm =
UIMAFramework.newDefaultResourceManager();;
private CasPool casPool = null;
private int scaleout=1;
@@ -79,7 +78,7 @@ public class UimaServiceProcessor implem
private ServiceConfiguration serviceConfiguration;
private IServiceMonitor monitor;
private AtomicInteger numberOfInitializedThreads = new AtomicInteger();
-
+
static {
// try to get platform MBean Server (Java 1.5 only)
try {
@@ -89,8 +88,8 @@ public class UimaServiceProcessor implem
} catch (Exception e) {
platformMBeanServer = null;
}
- }
-
+ }
+
public UimaServiceProcessor(String analysisEngineDescriptor) {
this(analysisEngineDescriptor, new UimaResultDefaultSerializer(), new ServiceConfiguration());
}
@@ -103,8 +102,11 @@ public class UimaServiceProcessor implem
this.serviceConfiguration = serviceConfiguration;
// start a thread which will collect AE initialization state
launchStateInitializationCollector();
+ if (serviceConfiguration.getJpType() != null) {
+ serializerMap = new HashMap<>();
+ }
}
-
+
private void launchStateInitializationCollector() {
monitor =
new RemoteStateObserver(serviceConfiguration, logger);
@@ -120,7 +122,7 @@ public class UimaServiceProcessor implem
public void initialize() {
if ( logger.isLoggable(Level.FINE)) {
logger.log(Level.FINE, "Process Thread:"+ Thread.currentThread().getName()+" Initializing AE");
-
+
}
try {
// multiple threads may call this method. Send initializing state once
@@ -130,7 +132,7 @@ public class UimaServiceProcessor implem
monitor.onStateChange(IServiceState.State.Initializing.toString(), new Properties());
}
} catch( Exception e) {
-
+
} finally {
initStateLock.unlock();
}
@@ -141,35 +143,37 @@ public class UimaServiceProcessor implem
paramsMap.put(AnalysisEngine.PARAM_MBEAN_SERVER, platformMBeanServer);
try {
-
- XMLInputSource is =
+
+ XMLInputSource is =
UimaUtils.getXMLInputSource(analysisEngineDescriptor);
String aed = is.getURL().toString();
ResourceSpecifier rSpecifier =
UimaUtils.getResourceSpecifier(aed);
-
+
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(rSpecifier,
paramsMap);
// pin AE instance to this thread
threadLocal.set(ae);
-
+
synchronized(UimaServiceProcessor.class) {
if ( casPool == null ) {
initializeCasPool(ae.getAnalysisEngineMetaData());
}
}
-
+
// every process thread has its own uima deserializer
- serializerMap.put(Thread.currentThread().getId(), new UimaSerializer());
+ if (serviceConfiguration.getJpType() != null) {
+ serializerMap.put(Thread.currentThread().getId(), new UimaSerializer());
+ }
} catch (Exception e) {
monitor.onStateChange(IServiceState.State.FailedInitialization.toString(), new Properties());
throw new RuntimeException(e);
- }
+ }
if ( logger.isLoggable(Level.INFO)) {
logger.log(Level.INFO, "Process Thread:"+ Thread.currentThread().getName()+" Done Initializing AE");
-
+
}
if ( numberOfInitializedThreads.incrementAndGet() == scaleout ) {
monitor.onStateChange(IServiceState.State.Running.toString(), new Properties());
@@ -185,49 +189,54 @@ public class UimaServiceProcessor implem
}
private UimaSerializer getUimaSerializer() {
-
return serializerMap.get(Thread.currentThread().getId());
}
+
@Override
public IProcessResult process(String serializedTask) {
AnalysisEngine ae = null;
CAS cas = casPool.getCas();
IProcessResult result;
-
+
try {
- // deserialize the task into the CAS
- getUimaSerializer().deserializeCasFromXmi(serializedTask, cas);
+ // DUCC JP services are given a serialized CAS ... others just the doc-text for a CAS
+ if (serviceConfiguration.getJpType() != null) {
+ getUimaSerializer().deserializeCasFromXmi(serializedTask, cas);
+ } else {
+ cas.setDocumentText(serializedTask);
+ cas.setDocumentLanguage("en");
+ }
// check out AE instance pinned to this thread
ae = threadLocal.get();
// get AE metrics before calling process(). Needed for
// computing a delta
- List<PerformanceMetrics> beforeAnalysis =
+ List<PerformanceMetrics> beforeAnalysis =
UimaMetricsGenerator.get(ae);
-
+
// *****************************************************
// PROCESS
// *****************************************************
ae.process(cas);
-
+
// *****************************************************
- // No exception in process() , fetch metrics
+ // No exception in process() , fetch metrics
// *****************************************************
- List<PerformanceMetrics> afterAnalysis =
+ List<PerformanceMetrics> afterAnalysis =
UimaMetricsGenerator.get(ae);
// get the delta
- List<PerformanceMetrics> casMetrics =
+ List<PerformanceMetrics> casMetrics =
UimaMetricsGenerator.getDelta( afterAnalysis, beforeAnalysis);
// StringBuilder sb = new StringBuilder("{");
-//
+//
// for (AnalysisEnginePerformanceMetrics metrics : casMetrics) {
// sb.append(resultSerializer.serialize(metrics)).append("}");
// }
// sb.append("}");
-
+
return new UimaProcessResult(resultSerializer.serialize(casMetrics));
} catch( Exception e ) {
logger.log(Level.WARNING,"",e);
@@ -235,14 +244,14 @@ public class UimaServiceProcessor implem
return result;
}
finally {
-
+
if (cas != null) {
casPool.releaseCas(cas);
}
}
}
-
+
public void setErrorHandler(IServiceErrorHandler errorHandler) {
}
@@ -257,7 +266,7 @@ public class UimaServiceProcessor implem
}
} catch( Exception e) {
logger.log(Level.WARNING, "stop", e);
- }
+ }
}
/*
// Build just an AE from parts and return the filename