[ 
https://issues.apache.org/jira/browse/UIMA-5597?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16187402#comment-16187402
 ] 

Marshall Schor edited comment on UIMA-5597 at 10/1/17 3:09 PM:
---------------------------------------------------------------

If DKPro does its own type system commit calls instead of using the CAS 
creation operation do this, then the call has to include the jcas class loader 
(typically obtained from a CASImpl via getJCasClassLoader()).  I see from the 
stack traces that DKPro probably doesn't do this.  The first stack trace is 
when the TypeSystemImpl class is loaded and the static initializers are run (It 
internally creates one static singleton instance, of the base type system, 
before any user types are defined), the 2nd one is a normal commit called 
during cas creation. 


was (Author: schor):
If DKPro does its own type system commit calls instead of using the CAS 
creation operation do this, then the call has to include the jcas class loader 
(typically obtained from a CASImpl via getJCasClassLoader()).  Just something 
to check...

> 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)

Reply via email to