[
https://issues.apache.org/jira/browse/UIMA-386?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marshall Schor reopened UIMA-386:
---------------------------------
The current support will fail for multiple CASes running from a pool because
only one set of generators is in place for the whole pool, and CASes might need
different sets. I'm working on a fix.
> Switching to use correct class loader
> -------------------------------------
>
> Key: UIMA-386
> URL: https://issues.apache.org/jira/browse/UIMA-386
> Project: UIMA
> Issue Type: Improvement
> Components: Core Java Framework
> Affects Versions: 2.1
> Reporter: Marshall Schor
> Assignee: Marshall Schor
> Fix For: 2.2
>
>
> The current design presumes one classloader is used for all components in an
> application. This shows up in the implementation when using JCas - the class
> loader used to load the JCas cover classes is set up in the CAS, and there is
> only one there. This works, unless the analysis engine component is loaded
> by a different class loader. This causes strange class-cast exceptions,
> where the source and target classes look to be identical (what's happening is
> that the classes are named the same, including having the same package names,
> but are loaded with different class loaders). A fix is needed that insures
> the class loader used for JCas can be switched when an analysis engine
> component is run. This should be time-efficient because the flow controller
> could be under a different class loader than the delegates it's controlling,
> so the class loader could be switching back and forth twice per delegate
> dispatch.
> A proposed approach is to add an internal method to the CAS,
> useClassLoader(xxx), which will be called by the framework just before the
> processCas call, passing in the class loader that was used to load the
> analysis engine class. The framework will check to see if this is the
> current in-use class loader, and if it is, do nothing. If it isn't, if the
> JCas is instantiated, it will call a new JCas method, switchClassLoader(xxx).
> This method will (a) reset the cache JCas uses to reduce object creation for
> JCas objects, and do what's needed to load or switch to the right set of
> iterator generators. Where possible, re-loading will be avoided, to make the
> switch fast.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.