Hello all:
I declared a external resource and deployed the analysis engine with 5
replicated instances on UIMA-AS 2.4.1 snapshot that I compiled from the svn
repo for uima-as (trunk). Deployment seems to go fine at first, but then about
10-20 seconds after the deployment says it's ready for work, the threads start
to die. The following error message appears in the log file 5 times.
org.apache.uima.UIMARuntimeException: The method CasManager.defineCasPool() was
called twice by the same Analysis Engine (PrimitiveAEService).
at
org.apache.uima.resource.impl.CasManager_impl.defineCasPool(CasManager_impl.java:183)
at
org.apache.uima.resource.impl.CasManager_impl.defineCasPool(CasManager_impl.java:153)
at
org.apache.uima.aae.EECasManager_impl.defineCasPool(EECasManager_impl.java:56)
at
org.apache.uima.aae.AsynchAECasManager_impl.initialize(AsynchAECasManager_impl.java:97)
at
org.apache.uima.aae.AsynchAECasManager_impl.initialize(AsynchAECasManager_impl.java:81)
at
org.apache.uima.aae.AsynchAECasManager_impl.initialize(AsynchAECasManager_impl.java:77)
at
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.postInitialize(PrimitiveAnalysisEngineController_impl.java:303)
at
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.initializeAnalysisEngine(PrimitiveAnalysisEngineController_impl.java:211)
at
org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFactory.java:114)
at java.lang.Thread.run(Thread.java:722)
11:40:25.256 - 23:
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.postInitialize:
WARNING: Service:
/usr/local/share/applications/uima-as/pear/MgrsRegularExpressionAnnotator
Runtime Exception
11:40:25.256 - 23:
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.postInitialize:
WARNING:
org.apache.uima.aae.error.AsynchAEException:
org.apache.uima.UIMARuntimeException: The method CasManager.defineCasPool() was
called twice by the same
Analysis Engine (PrimitiveAEService).
at
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.postInitialize(PrimitiveAnalysisEngineController_impl.java:333)
at
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.initializeAnalysisEngine(PrimitiveAnalysisEngineController_impl.java:211)
at
org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFactory.java:114)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.uima.UIMARuntimeException: The method
CasManager.defineCasPool() was called twice by the same Analysis Engine
(PrimitiveAEService).
at
org.apache.uima.resource.impl.CasManager_impl.defineCasPool(CasManager_impl.java:183)
at
org.apache.uima.resource.impl.CasManager_impl.defineCasPool(CasManager_impl.java:153)
at
org.apache.uima.aae.EECasManager_impl.defineCasPool(EECasManager_impl.java:56)
at
org.apache.uima.aae.AsynchAECasManager_impl.initialize(AsynchAECasManager_impl.java:97)
at
org.apache.uima.aae.AsynchAECasManager_impl.initialize(AsynchAECasManager_impl.java:81)
at
org.apache.uima.aae.AsynchAECasManager_impl.initialize(AsynchAECasManager_impl.java:77)
at
org.apache.uima.aae.controller.PrimitiveAnalysisEngineController_impl.postInitialize(PrimitiveAnalysisEngineController_impl.java:303)
... 3 more
I am getting the external resource with:
public void initialize(UimaContext aContext) throws
ResourceInitializationException {
...
//External Resources
try {
map = (StringMapResource)
aContext.getResourceObject(exResourceGridZoes);
} catch (ResourceAccessException e) {
aContext.getLogger().log(Level.INFO, "Valid makers file not
accessible.");
throw new ResourceInitializationException();
}
...
};
and the analysis engine descriptor has the following:
<externalResourceDependencies>
<externalResourceDependency>
<key>ValidGridZones</key>
<description>A list of valid grid zones.</description>
<interfaceName>uima.resources.implementations.StringMapResource_Impl</interfaceName>
<optional>false</optional>
</externalResourceDependency>
</externalResourceDependencies>
<resourceManagerConfiguration>
<externalResources>
<externalResource>
<name>ValidGridZonesFile</name>
<description>A two-column text file that lists all valid grid zones and
whether the the zone is a normal one or a split one.</description>
<fileResourceSpecifier>
<fileUrl>file:uima/resources/file/gridzones</fileUrl>
</fileResourceSpecifier>
<implementationName>uima.resources.implementations.StringMapResource_Impl</implementationName>
</externalResource>
</externalResources>
<externalResourceBindings>
<externalResourceBinding>
<key>ValidGridZones</key>
<resourceName>ValidMakersFile</resourceName>
</externalResourceBinding>
</externalResourceBindings>
</resourceManagerConfiguration>
I am using the StringMapResource code that was in the examples, modified to use
a ConcurrentHashMap instead of a regular Hashmap. According to logging
outputs, I believe that the initialize() methods for all 5 instances of the
analysis engine finished. I believe that the StringMapResource_Impl is
thread-safe and the errors goes away if I do not get the external resource. Am
I doing something wrong in terms of the getting the external resource? Thanks.