You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Richard Eckart de Castilho (JIRA)" <de...@uima.apache.org> on 2017/09/30 17:07:00 UTC

[jira] [Created] (UIMA-5597) uv3: FsGenerators may end up all being null

Richard Eckart de Castilho created UIMA-5597:
------------------------------------------------

             Summary: 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.

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)