[ https://issues.apache.org/jira/browse/UIMA-5597?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16188183#comment-16188183 ]
Marshall Schor commented on UIMA-5597: -------------------------------------- Richard, please try again with trunk. I put in a fix that separately tracks loading for pear instances vs non-pear instances, which fixed the problem shown in the CasMultiplierTest.testIteratePipelineOnText test. (That test now has another problem, probably related to why it was ignored). > uv3: FsGenerators may end up all being null > ------------------------------------------- > > Key: UIMA-5597 > URL: https://issues.apache.org/jira/browse/UIMA-5597 > Project: UIMA > Issue Type: Bug > Components: Core Java Framework > Affects Versions: 3.0.0SDK-beta > Reporter: Richard Eckart de Castilho > > There appears to be a problem with the initialization of the FS generators > when many classloaders are involved. uimaFIT configures all component with > dedicated resource managers and these are all configured with a parent > classloader, causing many UimaClassLoaders to be around in uimaFIT-based > setups. > {noformat} > java.lang.IllegalStateException: > org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator > processing failed. > at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:163) > at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:1) > at > de.tudarmstadt.ukp.dkpro.core.testing.AssertAnnotations.assertTransformedText(AssertAnnotations.java:897) > at > de.tudarmstadt.ukp.dkpro.core.textnormalizer.transformation.RegexBasedTokenTransformerTest.test(RegexBasedTokenTransformerTest.java:45) > ... > Caused by: org.apache.uima.analysis_engine.AnalysisEngineProcessException: > Annotator processing failed. > at > org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:395) > at > org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:297) > at > org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas(ASB_impl.java:570) > at > org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.<init>(ASB_impl.java:412) > at > org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl.java:344) > at > org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:271) > at > org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:269) > at > org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:284) > at org.apache.uima.fit.pipeline.JCasIterator.next(JCasIterator.java:142) > ... 26 more > Caused by: java.lang.NullPointerException > at > org.apache.uima.cas.impl.CASImpl.createFsFromGenerator(CASImpl.java:1168) > at > org.apache.uima.cas.impl.CASImpl.createFSAnnotCheck(CASImpl.java:1124) > at org.apache.uima.cas.impl.CASImpl.createFS(CASImpl.java:1105) > at org.apache.uima.cas.impl.CASImpl.createAnnotation(CASImpl.java:3919) > at > org.apache.uima.cas.impl.CASImpl.createDocumentAnnotationNoRemoveNoIndex(CASImpl.java:4001) > at > org.apache.uima.cas.impl.CASImpl.createDocumentAnnotationNoRemove(CASImpl.java:3994) > at > org.apache.uima.cas.impl.CASImpl.getDocumentAnnotation(CASImpl.java:4061) > at > org.apache.uima.cas.impl.CASImpl.setDocumentLanguage(CASImpl.java:4202) > at > org.apache.uima.jcas.impl.JCasImpl.setDocumentLanguage(JCasImpl.java:825) > at > de.tudarmstadt.ukp.dkpro.core.api.transform.JCasTransformer_ImplBase.beforeProcess(JCasTransformer_ImplBase.java:81) > at > de.tudarmstadt.ukp.dkpro.core.api.transform.JCasTransformerChangeBased_ImplBase.beforeProcess(JCasTransformerChangeBased_ImplBase.java:57) > at > de.tudarmstadt.ukp.dkpro.core.api.transform.JCasTransformer_ImplBase.process(JCasTransformer_ImplBase.java:127) > at > org.apache.uima.analysis_component.JCasMultiplier_ImplBase.process(JCasMultiplier_ImplBase.java:58) > at > org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:379) > ... 34 more > {noformat} > Usually, this seems to work well in UIMA v2 and UIMA v3. However, presently > CAS multipliers seem to be a problem in UIMA v3. > I tried to debug this to some degree based on a unit test in DKPro Core and > ended up in the following code in > `FSClassRegistry.getGeneratorsForClassLoader(...)`: > {noformat} > // skip entering a generator in the result if > // in a pear setup, and this cl is not the cl that loaded the JCas > class. > // See method comment for why. > if (!isPear || jcci.isPearOverride(cl)) { > r[ti.getCode()] = (FsGenerator3) jcci.generator; > } > {noformat} > In this particular unit test, the code is called 3 times. > The first two times when the CAS that is to be passed to the pipeline > components is created by the uimaFIT JCasIterator. These first two times > appear ok - the feature generators array is filled. > {noformat} > 1) cl := sun.misc.Launcher$AppClassLoader > isPear := false > jcci.isPearOverride(cl) := true > FSClassRegistry.getGeneratorsForClassLoader(ClassLoader, boolean, > TypeSystemImpl) line: 879 > TypeSystemImpl.getGeneratorsForClassLoader(ClassLoader, boolean) line: > 2630 > TypeSystemImpl.commit(ClassLoader) line: 1378 > TypeSystemImpl.commit() line: 1313 > TypeSystemImpl.<clinit>() line: 2484 > CASFactory.createTypeSystem() line: 126 > CASImpl.<init>(TypeSystemImpl, int) line: 885 > CASImpl.<init>() line: 908 > CASFactory.createCAS() line: 48 > CasCreationUtils.doCreateCas(TypeSystem, TypeSystemDescription, > TypePriorities, FsIndexDescription[], Properties, ResourceManager) line: 604 > > CasCreationUtils.createCas(Collection<MetaDataObject>, Properties, > ResourceManager) line: 292 > JCasIterator.<init>(CollectionReader, AnalysisEngine...) line: 90 > JCasIterable.iterator() line: 79 > JCasIterable.iterator() line: 1 > AssertAnnotations.assertTransformedText(String, String, String, > AnalysisEngineDescription...) line: 897 > RegexBasedTokenTransformerTest.test() line: 45 > {noformat} > {noformat} > 2) cl := org.apache.uima.internal.util.UIMAClassLoader@50378a4 > isPear := false > jcci.isPearOverride(cl) := false > FSClassRegistry.getGeneratorsForClassLoader(ClassLoader, boolean, > TypeSystemImpl) line: 879 > TypeSystemImpl.getGeneratorsForClassLoader(ClassLoader, boolean) line: > 2630 > TypeSystemImpl.commit(ClassLoader) line: 1378 > CASImpl.commitTypeSystem() line: 1529 > CasCreationUtils.doCreateCas(TypeSystem, TypeSystemDescription, > TypePriorities, FsIndexDescription[], Properties, ResourceManager) line: 613 > > CasCreationUtils.createCas(Collection<MetaDataObject>, Properties, > ResourceManager) line: 292 > JCasIterator.<init>(CollectionReader, AnalysisEngine...) line: 90 > JCasIterable.iterator() line: 79 > JCasIterable.iterator() line: 1 > AssertAnnotations.assertTransformedText(String, String, String, > AnalysisEngineDescription...) line: 897 > RegexBasedTokenTransformerTest.test() line: 45 > {noformat} > The third time in the FlowController. This time `isPear` is `true` causing > the FS generators array to be all null. Mind, I'm not using PEARs, I only set > the parent classloader for the resource managers, no custom classpath URLs. > {noformat} > 3) cl = org.apache.uima.internal.util.UIMAClassLoader@4b2bac3f > isPear := true > jcci.isPearOverride(cl) := false > FSClassRegistry.getGeneratorsForClassLoader(ClassLoader, boolean, > TypeSystemImpl) line: 891 > TypeSystemImpl.getGeneratorsForClassLoader(ClassLoader, boolean) line: > 2630 > CASImpl$SharedViewData.switchClassLoader(ClassLoader) line: 724 > CASImpl.switchClassLoaderLockCasCL(ClassLoader) line: 3568 > FlowControllerContainer.computeFlow(CAS) line: 226 > ASB_impl$AggregateCasIterator.<init>(ASB_impl, CAS) line: 406 > ASB_impl.process(CAS) line: 344 > AggregateAnalysisEngine_impl.processAndOutputNewCASes(CAS) line: 271 > AggregateAnalysisEngine_impl(AnalysisEngineImplBase).process(CAS) line: > 269 > AggregateAnalysisEngine_impl(AnalysisEngineImplBase).process(JCas) > line: 284 > JCasIterator.next() line: 142 > JCasIterator.next() line: 1 > AssertAnnotations.assertTransformedText(String, String, String, > AnalysisEngineDescription...) line: 897 > RegexBasedTokenTransformerTest.test() line: 45 > {noformat} -- This message was sent by Atlassian JIRA (v6.4.14#64029)