Not exactly sure how to debug this. The UIMA-AS does not touch contents of a CAS directly. Are there any other errors in the log besides NPE? The UIMA-AS uses uima-sdk to serialize CASes. Since you are getting null from getView(N), this view must have been deleted somehow.
-jerry On Mon, Feb 13, 2017 at 11:43 AM, nelson rivera <nelsonriver...@gmail.com> wrote: > I was able to check your email just today. The agregegate is async, > but only process one input CAS at the same time,default numberOfCASes. > I read your possible explanation but i have no idea that another > thread can modificate the cas, because the last annotator's execution > is correct and only missing that the framework uima-as serializes the > cas. > > This is the configuration of deploy of the aggregate: > > <?xml version="1.0" encoding="UTF-8"?> > <analysisEngineDeploymentDescription > xmlns="http://uima.apache.org/resourceSpecifier"> > > <name>XClusterAnalyzerAE Deploy Descriptor</name> > <description>Deploys XClusterAnalyzerAE</description> > > <deployment protocol="jms" provider="activemq"> > > <service> > <inputQueue endpoint="XClusterAnalyzerAggregate" > brokerURL="${defaultBrokerURL}"/> > <topDescriptor> > <import location="./XClusterAnalyzerAggregate.xml"/> > </topDescriptor> > <!-- remoteReplyQueueScaleout for remote delegate--> > <analysisEngine inputQueueScaleout="2" > internalReplyQueueScaleout="3"> > <delegates> > <analysisEngine key="FileSystemMultiplerCas"> > <casMultiplier poolSize="10"/> > </analysisEngine> > <analysisEngine key="XFileFormatDetector"> > <scaleout numberOfInstances="2"/> > <asyncAggregateErrorConfiguration> > <processCasErrors maxRetries="0" > continueOnRetryFailure="true"/> > </asyncAggregateErrorConfiguration> > </analysisEngine> > <analysisEngine key="XDataFileExtractor"> > <scaleout numberOfInstances="2"/> > <asyncAggregateErrorConfiguration> > <processCasErrors maxRetries="0" > continueOnRetryFailure="true"/> > </asyncAggregateErrorConfiguration> > </analysisEngine> > <remoteAnalysisEngine key="XLanguageDetector"> > <inputQueue endpoint="XLanguageDetector" > brokerURL="${defaultBrokerURL}"/> > <serializer method="xmi"/> > <asyncAggregateErrorConfiguration> > <processCasErrors maxRetries="0" > continueOnRetryFailure="true"/> > </asyncAggregateErrorConfiguration> > </remoteAnalysisEngine> > <analysisEngine key="XTokenizer"> > <scaleout numberOfInstances="2"/> > <asyncAggregateErrorConfiguration> > <processCasErrors maxRetries="0" > continueOnRetryFailure="true"/> > </asyncAggregateErrorConfiguration> > </analysisEngine> > <analysisEngine key="XBoTModeler"> > <scaleout numberOfInstances="3"/> > <asyncAggregateErrorConfiguration> > <processCasErrors maxRetries="0" > continueOnRetryFailure="true"/> > </asyncAggregateErrorConfiguration> > </analysisEngine> > <analysisEngine key="MergerInViewCasMultipler"> > <casMultiplier poolSize="1"/> > </analysisEngine> > <analysisEngine key="XClusterAnalyzer"> > <scaleout numberOfInstances="1"/> > <asyncAggregateErrorConfiguration> > <processCasErrors maxRetries="0" > continueOnRetryFailure="true"/> > </asyncAggregateErrorConfiguration> > </analysisEngine> > </delegates> > </analysisEngine> > </service> > </deployment> > > </analysisEngineDeploymentDescription> > > 2017-02-10 16:43 GMT-05:00, Jaroslaw Cwiklik <uim...@gmail.com>: > > Just a bit more evidence. The caller of the gerSofaAddr() > > > > public void writeViewsCommons() throws Exception { > > // Get indexes for each SofaFS in the CAS > > int numViews = cas.getBaseSofaCount(); > > > > for (int sofaNum = 1; sofaNum <= numViews; sofaNum++) { > > FSIndexRepositoryImpl loopIR = (FSIndexRepositoryImpl) > > cas.getBaseCAS().getSofaIndexRepository(sofaNum); > > final int sofaAddr = getSofaAddr(sofaNum); > > > > Not an expert of this code, but it smells like another thread is > changing a > > CAS which is being serialized. > > > > -jerry > > > > On Fri, Feb 10, 2017 at 4:31 PM, Jaroslaw Cwiklik <uim...@gmail.com> > wrote: > > > >> Is this a primitive (single-threaded) aggregate or async > >> (multi-threaded)? > >> If async, try to simplify and run primitive aggregate with scaleout=1. > >> > >> The CAS does not seem to be null in this case. The caller of the > >> getSerializedCas() > >> checks for null. > >> > >> The code dies here: > >> Caused by: java.lang.NullPointerException > >> at org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ > >> er.getSofaAddr(CasSerializerSupport.java:454) > >> > >> public int getSofaAddr(int sofaNum) { > >> if (sofaNum != 1 || cas.isInitialSofaCreated()) { //skip if > initial > >> view && no Sofa yet > >> // all > >> non-initial-views must have a sofa > >> * return ((CASImpl)cas.getView(sofaNum)).getSofaRef();* > >> } > >> return 0; > >> } > >> > >> Looks to me that getView(sofaNum) is returning null. Is it possible that > >> two threads are operating on the same CAS maybe? One removing a view > >> while > >> another trying to serialize. Have no idea what else could it be. > >> > >> -jerry > >> > >> > >> > >> On Fri, Feb 10, 2017 at 8:45 AM, nelson rivera < > nelsonriver...@gmail.com> > >> wrote: > >> > >>> Hi, The first thing I did was these tests,i made a simple test case > >>> that create a Cas with 17 views and then serialize using > >>> XmiCasSerializer.serialize(newJCas.getCas(), fis) and serializes > >>> correctly. > >>> Also i made other test, initialize the same AE but of local way with > >>> UIMA API and process the same input documents and the processing is > >>> correct and then serialize the CAS, without problem. > >>> > >>> The error is with AE deployed in uima-as and consuming it. > >>> > >>> 2017-02-09 17:30 GMT-05:00, Marshall Schor <m...@schor.com>: > >>> > one thing that would help track this down is a small isolated test > >>> > case. > >>> > > >>> > Do you think uima-as is needed? I'm wondering if a simple test case > >>> which > >>> > generated 17 views and then tried to serialize would show the > >>> > failure... > >>> > > >>> > If you could supply a small test case that showed the failure so we > >>> could > >>> > reproduce it, that would enable a rapid resolution. > >>> > > >>> > -Marshall > >>> > > >>> > > >>> > On 2/9/2017 3:58 PM, Marshall Schor wrote: > >>> >> The line throwing the null pointer exception is : > >>> >> > >>> >> cas.getView(sofaNum).getSofaRef() > >>> >> > >>> >> So the NPE is either the cas is null, or the getView(sofaNum) is > >>> returning > >>> >> null. > >>> >> > >>> >> I'm not sure what the best way is to debug this... > >>> >> > >>> >> -Marshall > >>> >> > >>> >> > >>> >> > >>> >> > >>> >> On 2/9/2017 12:42 PM, nelson rivera wrote: > >>> >>> I have a aggregate service uima-as, at the end of aggregate the cas > >>> >>> to > >>> >>> return is composed of as many views as the number of input files, > >>> >>> each > >>> >>> view with annotations of processing. > >>> >>> With a number of input documents less than 15 the processing is > >>> >>> successful always, > >>> >>> but if the number of documents is greater than 15, i get a > >>> >>> NullPointerException at the aggregate service trying to serialize > >>> >>> the > >>> >>> cas, not in the processing of AE aggregate. > >>> >>> the logs of aggregate service: > >>> >>> > >>> >>> 11:51:38.815 - 42: > >>> >>> cu.datys.xinetica.uima.core.MergerInViewCasMultipler.hasNext(285): > >>> >>> INFO: HasNext false > >>> >>> 11:51:38.875 - 44: > >>> >>> org.apache.uima.uimacpp.UimacppAnalysisComponent.log(396): INFO: : > >>> >>> XClusterAnalyzer::process --- OK > >>> >>> 11:51:39.145 - 45: > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.replyToClient: > >>> >>> WARNING: Service: XClusterAnalyzerAggregate Runtime Exception > >>> >>> 11:51:39.145 - 45: > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.replyToClient: > >>> >>> WARNING: > >>> >>> org.apache.uima.aae.error.AsynchAEException: > >>> >>> org.apache.uima.UIMARuntimeException > >>> >>> at > >>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.getSer > >>> ializedCas(JmsOutputChannel.java:1265) > >>> >>> at > >>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.sendRe > >>> ply(JmsOutputChannel.java:800) > >>> >>> at > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.sendReplyToRemoteClient(AggregateAnalysisEngineCon > >>> troller_impl.java:2173) > >>> >>> at > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.replyToClient(AggregateAnalysisEngineControl > ler_impl.java:2342) > >>> >>> at > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862) > >>> >>> at > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.executeFlowStep(AggregateAnalysisEngineController_ > >>> impl.java:2489) > >>> >>> at > >>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro > >>> ller_impl.process(AggregateAnalysisEngineController_impl.java:1271) > >>> >>> at > >>> >>> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle > >>> rBase.java:118) > >>> >>> at > >>> >>> org.apache.uima.aae.handler.input.ProcessResponseHandler.can > >>> celTimerAndProcess(ProcessResponseHandler.java:117) > >>> >>> at > >>> >>> org.apache.uima.aae.handler.input.ProcessResponseHandler.han > >>> dleProcessResponseWithCASReference(ProcessResponseHandler.java:485) > >>> >>> at > >>> >>> org.apache.uima.aae.handler.input.ProcessResponseHandler.han > >>> dle(ProcessResponseHandler.java:767) > >>> >>> at > >>> >>> org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase > >>> .java:149) > >>> >>> at > >>> >>> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl > >>> .handle(ProcessRequestHandler_impl.java:1113) > >>> >>> at > >>> >>> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o > >>> nMessage(UimaVmMessageListener.java:107) > >>> >>> at > >>> >>> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher > >>> $1.run(UimaVmMessageDispatcher.java:70) > >>> >>> at > >>> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool > >>> Executor.java:1145) > >>> >>> at > >>> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo > >>> lExecutor.java:615) > >>> >>> at > >>> >>> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa > >>> ctory.java:132) > >>> >>> at java.lang.Thread.run(Thread.java:745) > >>> >>> Caused by: org.apache.uima.UIMARuntimeException > >>> >>> at > >>> >>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSe > >>> rializer.java:420) > >>> >>> at > >>> >>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSe > >>> rializer.java:385) > >>> >>> at > >>> >>> org.apache.uima.aae.UimaSerializer.serializeCasToXmi(UimaSer > >>> ializer.java:145) > >>> >>> at > >>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.serial > >>> izeCAS(JmsOutputChannel.java:251) > >>> >>> at > >>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.getSer > >>> ializedCas(JmsOutputChannel.java:1250) > >>> >>> ... 18 more > >>> >>> Caused by: java.lang.NullPointerException > >>> >>> at > >>> >>> org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ > >>> er.getSofaAddr(CasSerializerSupport.java:454) > >>> >>> at > >>> >>> org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ > >>> er.writeViewsCommons(CasSerializerSupport.java:465) > >>> >>> at > >>> >>> org.apache.uima.cas.impl.XmiCasSerializer$XmiDocSerializer. > >>> writeViews(XmiCasSerializer.java:572) > >>> >>> at > >>> >>> org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ > >>> er.serialize(CasSerializerSupport.java:441) > >>> >>> at > >>> >>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSe > >>> rializer.java:415) > >>> >>> ... 22 more > >>> >>> > >>> >> > >>> > > >>> > > >>> > >> > >> > > >