Some other things to consider: The way Ruta is using uimaFIT in the failing case results in multiple analysis engines created with different resource managers, but the CAS from one is (I think - didn't check this...) sent through the AE of another.
When multiple AEs are used this way with a common CAS, then the type system, type priorities and indexes definition associated with this common CAS are used. So it makes sense to share these parts of the Resource Manager. And, if the intent is to have JCas cover classes produced by one of the AEs usable by the other AEs, then there should not be extra UIMA Class loaders, and class loader switching. This is because one of the things that class loader switching does is to swap in/ out different JCasHashMaps. These are maps that associated already created JCas instances with specific Cas Feature Structures. This could be important, if the JCas instance was carrying along extra information (not in the CAS) that you wanted shared with other class-loading-contexts (e.g., an "outer" AE, or an "application"). -Marshall
