[
https://issues.apache.org/jira/browse/UIMA-5597?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marshall Schor closed UIMA-5597.
--------------------------------
Resolution: Fixed
Assignee: Marshall Schor
Fix Version/s: 3.0.1SDK
> 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
> Assignee: Marshall Schor
> Priority: Major
> Fix For: 3.0.1SDK
>
>
> 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
(v7.6.14#76016)