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
         Assigned To: 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.

Reply via email to