I have a question about threads in UIMA.  My application ("Main thread") starts 
an UIMA Collection Processing Engine (CPE), which contains a Collection-Reader 
and several Annotators.   Here is my code for starting the CPE:

public class UimaRunCPE extends Thread {
        
  /**
   * The CPE instance.
   */
  private CollectionProcessingEngine mCPE;

    public void runCPE() throws Exception { 
        
    // parse CPE descriptor
    CpeDescription cpeDesc = UIMAFramework.getXMLParser().parseCpeDescription(
            new XMLInputSource(pathToDescriptor));

    // instantiate CPE
    mCPE = UIMAFramework.produceCollectionProcessingEngine(cpeDesc);

    // Create and register a Status Callback Listener
    mCPE.addStatusCallbackListener(new StatusCallbackListenerImpl());

    // Start Processing
    mCPE.process();
    
    System.out.println("CPE ended\n");
        
   }
}   


As I understand it (I stepped thru it in debug-mode in Eclipse), the CPE works 
like this -
--
1.  all the Annotator.initialize()'s  are done in "Main thread"

2. when mCPE.process() is called,  these threads are created---
        BaseCPMImpl-Thread
        CPMEngine Thread
        Processing Pipeline#1 Thread
        
3. the Collection-Reader runs in its own thread

4. the Annotator.process() methods run in the Processing Pipeline#1 Thread

5. when all Annotators are done, Processing Pipeline#1 Thread and CPMEngine 
Thread go away.  Control goes to 
BaseCPMImpl-Thread.collectionProcessComplete().  When that's done, all 
processing is over.  

My problem is this:  in Main-thread, mCPE.process() returns right away; it does 
not wait around to make sure that the CPE finished OK.  I need a way to do 
that.  It would work if Main-thread could do a join() on BaseCPMImpl-Thread, 
but I don't see any way to do that.

Any ideas?

Reply via email to