I frequently run UIMA-AS with scaled up AEs in the same jvm with no
problems. The UIMA-AS calls defineCasPool() once
when all AEs are instantiated.

The uima-core code that throws the exception is in
CasManager_impl.defineCasPool()

 private synchronized void defineCasPool(UimaContext aRequestorContext,
String aRequestorContextName, int aMinimumSize,
          Properties aPerformanceTuningSettings) throws
ResourceInitializationException {
 *   int poolSize = getCasPoolSize(aRequestorContextName, aMinimumSize);*
    *if (poolSize > 0) {*
      CasPool pool = (CasPool)
mRequestorToCasPoolMap.get(aRequestorContextName);
      if (pool == null) {
        // this requestor hasn't requested a CAS before
        pool = new CasPool(poolSize, this, aPerformanceTuningSettings);
        populateCasToCasPoolAndUimaContextMaps(pool, aRequestorContext);
        mRequestorToCasPoolMap.put(aRequestorContextName, pool);
        //register with JMX
        registerCasPoolMBean(aRequestorContextName, pool);

      } else {
      *  throw new
UIMARuntimeException(UIMARuntimeException.DEFINE_CAS_POOL_CALLED_TWICE,*
*                new Object[] { aRequestorContextName });*
      }
    }
  }

So it looks like something else is calling this method before UIMA-AS does.
You may need to run UIMA-AS in a debugger
to determine what is happening. Just set a break point in defineCasPool and
back trace the call.

Jerry C


On Wed, Jun 5, 2013 at 9:27 PM, GATE User <gateu...@ymail.com> wrote:

> Here's some additional information:
>
> I recent got the error after commenting out the part of the initialize
> code that gets the external resource, so it might not be connected to that
> after all.  I am also running this the broker and delegates in VirtualBox
> VMs.  Thanks in advance.
>
>
> ________________________________
>  From: GATE User <gateu...@ymail.com>
> To: "user@uima.apache.org" <user@uima.apache.org>
> Sent: Wednesday, June 5, 2013 1:10 PM
> Subject: Error when deploying 5 instances of AE with External Resource,
> UIMA-AS 2.4.1 Snapshot
>
>
> 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.
>

Reply via email to