Hi Alaa, I have no idea what is causing your error using caspool. Ctakes and uima both suffer from a lack of descriptive error output.
Here is something that was used a while ago for testing. The trick is that the cas pool is just used for storage of reusable cas objects. The Java ExecutorService handles the actual thread maintenance. caspool is like jcaspool. public class ParallelXcasDeserializer { static private final Logger LOGGER = Logger.getLogger( "ParallelXcasDeserializer" ); static private final int PROCESS_COUNT = 10; static private final CasPool CAS_POOL = createCasPool( PROCESS_COUNT ); static private CasPool createCasPool( final int processCount ) { try { final AnalysisEngineDescription fastPipelineDesc = ClinicalPipelineFactory.getFastPipeline(); final AnalysisEngine fastPipeline = AnalysisEngineFactory.createEngine( fastPipelineDesc ); return new CasPool( processCount, fastPipeline ); } catch ( UIMAException | MalformedURLException multE ) { LOGGER.error( multE.getMessage() ); } return null; } static private final class XCasDeserializer implements Runnable { private final String _xcasFilePath; private XCasDeserializer( final String xcasFilePath ) { _xcasFilePath = xcasFilePath; } @Override public void run() { final CAS cas = CAS_POOL.getCas(); try ( InputStream xCasStream = new FileInputStream( _xcasFilePath ) ) { XCASDeserializer.deserialize( xCasStream, cas ); final JCas jCas = cas.getJCas(); OntologyConceptUtil.getCuis( jCas ).forEach( LOGGER::info ); } catch ( IOException | SAXException | CASException multE ) { LOGGER.error( multE.getMessage() ); } CAS_POOL.releaseCas( cas ); } } public static void main( final String... args ) { if ( CAS_POOL == null ) { LOGGER.error( "Couldn't create CAS Pool, exiting" ); System.exit( 1 ); } final Path inputDir = Paths.get( args[ 0 ] ); final ExecutorService executor = Executors.newFixedThreadPool( PROCESS_COUNT ); try ( DirectoryStream<Path> filePaths = Files.newDirectoryStream( inputDir ) ) { for ( Path filePath : filePaths ) { executor.execute( new XCasDeserializer( filePath.toString() ) ); } } catch ( IOException ioE ) { LOGGER.error( ioE.getMessage() ); } executor.shutdown(); } } -----Original Message----- From: Alaa al Barari [mailto:alaa.albar...@gmail.com] Sent: Thursday, February 16, 2017 7:33 AM To: dev@ctakes.apache.org Subject: jcasPool problem Hi, anyone used jcasPool before ? is it working with you ? any ideas, insights .... I have this issue : aggregateBuilder = Pipeline.getAggregateBuilder(); pipeline = aggregateBuilder.createAggregate(); jCasPool = new JCasPool(10, pipeline); then JCas jcas = jCasPool.getJCas(0); jcas.setDocumentText(text); pipeline.process(jcas); but it throws the following exception when calling second block of code twice : Info: Annotator processing failed. Severe: org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator processing failed. at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:391) at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:296) at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas(ASB_impl.java:567) at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.<init>(ASB_impl.java:409) at org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl.java:342) at org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:267) at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267) at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:280) at com.whatever.getCode(Manager.java:217) at com.whatever.analyzeText(Manager.java:122) at com.whatever.analyzeCode(GenericResource.java:56) at sun.reflect.GeneratedMethodAccessor220.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:125) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:91) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:346) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:341) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:224) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:198) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:946) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:323) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:208) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:274) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException at com.mysql.jdbc.ResultSetImpl.checkColumnBounds(ResultSetImpl.java:766) at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5241) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5163) at org.apache.ctakes.dictionary.lookup2.concept.JdbcConceptFactory.getStringCodesWithDesc(JdbcConceptFactory.java:409) at org.apache.ctakes.dictionary.lookup2.concept.JdbcConceptFactory.createConcept(JdbcConceptFactory.java:294) at org.apache.ctakes.dictionary.lookup2.concept.AbstractConceptFactory.createConcepts(AbstractConceptFactory.java:37) at org.apache.ctakes.dictionary.lookup2.concept.UmlsJdbcConceptFactory.createConcepts(UmlsJdbcConceptFactory.java:55) at org.apache.ctakes.dictionary.lookup2.ae.AbstractJCasTermAnnotator.process(AbstractJCasTermAnnotator.java:179) at org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48) at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:375)