You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@uima.apache.org by Manuel Fiorelli <ma...@gmail.com> on 2017/10/04 15:37:57 UTC

How to have client, service and broker co-located using UIMA-AS

Hi everybody

Within the documentation of UIMA-AS, specifically within the section
Terminology (
https://uima.apache.org/d/uima-as-2.9.0/uima_async_scaleout.html#ugr.async.ov.terminology),
the description of Queue Broker says:

<cite>
Queue brokers manage one or more named queues. The brokers are identified
using a URL, representing where they are on the network. When the queue
broker is co-located with the AS client and service, CASes are passed by
reference, avoiding serialization / deserialization.
</cite>

Unfortunately, I could not find in the documentation how to place broker,
client and service in the same JVM (co-location).

After some web searches, experiments and exploration of the source code of
UIMA-AS, I found that the solution may require the use of the URL
"vm://localhost?broker.persistent=false" for the broker.

In my sample program, I deploy a service (an asynchronous aggregate AE) and
then create an asynchronous client using the URL above, but then I receive
the following NullPointerException:

<cite>
ott 04, 2017 5:29:28 PM
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
replyToClient
AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
ott 04, 2017 5:29:28 PM
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
replyToClient
AVVERTENZA:
java.lang.NullPointerException
    at
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.sendVMMessage(AggregateAnalysisEngineController_impl.java:2393)
    at
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.sendReplyToCollocatedClient(AggregateAnalysisEngineController_impl.java:2287)
    at
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.replyToClient(AggregateAnalysisEngineController_impl.java:2344)
    at
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862)
    at
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.executeFlowStep(AggregateAnalysisEngineController_impl.java:2489)
    at
org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.process(AggregateAnalysisEngineController_impl.java:1271)
    at
org.apache.uima.aae.handler.HandlerBase.invokeProcess(HandlerBase.java:118)
    at
org.apache.uima.aae.handler.input.ProcessResponseHandler.cancelTimerAndProcess(ProcessResponseHandler.java:117)
    at
org.apache.uima.aae.handler.input.ProcessResponseHandler.handleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
    at
org.apache.uima.aae.handler.input.ProcessResponseHandler.handle(ProcessResponseHandler.java:767)
    at
org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase.java:149)
    at
org.apache.uima.aae.handler.input.ProcessRequestHandler_impl.handle(ProcessRequestHandler_impl.java:1113)
    at
org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.onMessage(UimaVmMessageListener.java:107)
    at
org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher$1.run(UimaVmMessageDispatcher.java:70)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFactory.java:132)
    at java.lang.Thread.run(Thread.java:745)
</cite>

The exception above does not happen when I use a remote broker, so I
suspect that I am doing something wrong with my attempt to place all parts
in the same JVM.

Does anyone knows how to achieve my goal?

Thanks in advance,
Manuel Fiorelli

Re: How to have client, service and broker co-located using UIMA-AS

Posted by Manuel Fiorelli <ma...@gmail.com>.
Hi Jaroslaw,

thank you for the detailed answer on the state of UIMA-AS and its future
evolution.

My initial quest for co-located components passing CASes by reference was
motivated by some experiments with UIMA-AS suggesting that I was not able
to outperform a pipeline executed with uimaFIT. Fortunately, I've just
discovered that my deployment descriptor contained a wrong configuration
seemingly preventing parallelism. After correcting that error, I was able
to outperform uimaFIT.

In the end, the presence of the queue broker and the associated
serialization/deserialization costs did not prevent me to take advantage of
UIMA-AS.

Regards,
Manuel

2017-10-05 19:55 GMT+02:00 Jaroslaw Cwiklik <cw...@apache.org>:

> Manuel, the current uima-as code requires a broker between a client and a
> service even if all are colocated in the same process. This implies CAS
> serialization/deserialization between endpoints. I am refactoring uima-as
> code as part of JIRA  https://issues.apache.org/jira/browse/UIMA-5280.
> Once
> the changes are complete the client and a service will use java queue
> messaging, passing CASes by reference. Don't have ETA yet. This has been an
> ongoing effort. Most of the new code is in place to support the JIRA plus a
> few other enhancements. Testing and debugging will take some time.
> Jerry
>
> On Thu, Oct 5, 2017 at 11:30 AM, Manuel Fiorelli <
> manuel.fiorelli@gmail.com>
> wrote:
>
> > Hi Jaroslaw,
> >
> > I applied your suggestions to my program, and indeed it seems to work
> > without the need of an external broker.
> >
> > However, it seems to me that timings are more or less the same with the
> > co-located and the remote (still on the same machine) broker.
> >
> > In both cases client and services are launched by the same process.
> >
> > So my question is: "Is my program passing the CASes by reference?"
> > Additionally, "Is this optimization enabled whenever client and service
> are
> > co-located irrespective of the position of the broker?"
> >
> > Regards,
> > Manuel
> >
> > 2017-10-04 22:23 GMT+02:00 Manuel Fiorelli <ma...@gmail.com>:
> >
> > > Hi Jaroslaw
> > >
> > > Thank you for your answer. Tomorrow, I will apply your suggestions and
> > > tell you what happens.
> > >
> > > Il 4 ott 2017 19:50, "Jaroslaw Cwiklik" <cw...@apache.org> ha
> scritto:
> > >
> > >> Manuel, small correction. Towards the end replace this
> > >>
> > >> client.sendCAS(cas);
> > >>
> > >> with
> > >>
> > >> client.sendAndReceiveCAS(cas);
> > >>
> > >> Simpler, synchronous msg exchange between client and a service.
> > >>
> > >> Jerry Cwiklik
> > >>
> > >> On Wed, Oct 4, 2017 at 1:00 PM, Jaroslaw Cwiklik <cw...@apache.org>
> > >> wrote:
> > >>
> > >> > Hi Manuel, you *can* colocate broker, client and a service in the
> same
> > >> > process. Here is the code to get this done. Sorry did not test this.
> > You
> > >> > need to create a deployment descriptor (xml file) to be able to
> > deploy a
> > >> > service.
> > >> >
> > >> > // Deploy in-process broker
> > >> > String uri = "tcp://"localhost:61616";
> > >> > BrokerService broker =
> > >> >      BrokerFactory.createBroker(new URI("broker:()/localhost?
> > >> > persistent=false"));
> > >> > TransportConnector tcpConnector = broker.addConnector(uri);
> > >> > broker.start();
> > >> > //------------------
> > >> >
> > >> > UimaAsynchronousEngine client =
> > >> > new BaseUIMAAsynchronousEngine_impl();
> > >> >
> > >> > Map<String,String> appCtx = new HashMap();
> > >> > appCtx.put(UimaAsynchronousEngine.DD2SpringXsltFilePath,
> > >> >            $UIMA_HOME+"/bin/dd2spring.xsl");
> > >> > appCtx.put(UimaAsynchronousEngine.SaxonClasspath,
> > >> >            "file:"+$UIMA_HOME+"/saxon/saxon8.jar");
> > >> >
> > >> > String aDeploymentDescriptorPath =
> > >> >   <path to dd.xml>
> > >> >
> > >> > // deploy in-process service
> > >> > String serviceId =
> > >> >   client.deploy(aDeploymentDescriptorPath, appCtx);
> > >> >
> > >> > String endpoint = <queue name>; // from the deployment descriptor
> > >> >
> > >> > appCtx.put(UimaAsynchronousEngine.ServerUri, uri);
> > >> > appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);
> > >> >
> > >> > // connect client with an in-process service
> > >> > client.initialize(appCtx);
> > >> >
> > >> > CAS cas = client.getCAS();
> > >> > cas.setDocumentText("Some Text");
> > >> > client.sendCAS(cas);
> > >> >
> > >> > client.stop();
> > >> >
> > >> >
> > >> >
> > >> > On Wed, Oct 4, 2017 at 11:37 AM, Manuel Fiorelli <
> > >> > manuel.fiorelli@gmail.com> wrote:
> > >> >
> > >> >> Hi everybody
> > >> >>
> > >> >> Within the documentation of UIMA-AS, specifically within the
> section
> > >> >> Terminology (
> > >> >> https://uima.apache.org/d/uima-as-2.9.0/uima_async_scaleout.
> > >> >> html#ugr.async.ov.terminology),
> > >> >> the description of Queue Broker says:
> > >> >>
> > >> >> <cite>
> > >> >> Queue brokers manage one or more named queues. The brokers are
> > >> identified
> > >> >> using a URL, representing where they are on the network. When the
> > queue
> > >> >> broker is co-located with the AS client and service, CASes are
> passed
> > >> by
> > >> >> reference, avoiding serialization / deserialization.
> > >> >> </cite>
> > >> >>
> > >> >> Unfortunately, I could not find in the documentation how to place
> > >> broker,
> > >> >> client and service in the same JVM (co-location).
> > >> >>
> > >> >> After some web searches, experiments and exploration of the source
> > >> code of
> > >> >> UIMA-AS, I found that the solution may require the use of the URL
> > >> >> "vm://localhost?broker.persistent=false" for the broker.
> > >> >>
> > >> >> In my sample program, I deploy a service (an asynchronous aggregate
> > AE)
> > >> >> and
> > >> >> then create an asynchronous client using the URL above, but then I
> > >> receive
> > >> >> the following NullPointerException:
> > >> >>
> > >> >> <cite>
> > >> >> ott 04, 2017 5:29:28 PM
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> > ler_impl
> > >> >> replyToClient
> > >> >> AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
> > >> >> ott 04, 2017 5:29:28 PM
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> > ler_impl
> > >> >> replyToClient
> > >> >> AVVERTENZA:
> > >> >> java.lang.NullPointerException
> > >> >>     at
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> > >> >> ller_impl.sendVMMessage(AggregateAnalysisEngineController_im
> > >> pl.java:2393)
> > >> >>     at
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> > >> >> ller_impl.sendReplyToCollocatedClient(AggregateAnalysisEngin
> > >> >> eController_impl.java:2287)
> > >> >>     at
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> > >> >> ller_impl.replyToClient(AggregateAnalysisEngineController_im
> > >> pl.java:2344)
> > >> >>     at
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> > >> >> ller_impl.finalStep(AggregateAnalysisEngineControl
> > ler_impl.java:1862)
> > >> >>     at
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> > >> >> ller_impl.executeFlowStep(AggregateAnalysisEngineController_
> > >> >> impl.java:2489)
> > >> >>     at
> > >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> > >> >> ller_impl.process(AggregateAnalysisEngineControl
> ler_impl.java:1271)
> > >> >>     at
> > >> >> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle
> > >> >> rBase.java:118)
> > >> >>     at
> > >> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.can
> > >> >> celTimerAndProcess(ProcessResponseHandler.java:117)
> > >> >>     at
> > >> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
> > >> >> dleProcessResponseWithCASReference(ProcessResponseHandler.
> java:485)
> > >> >>     at
> > >> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
> > >> >> dle(ProcessResponseHandler.java:767)
> > >> >>     at
> > >> >> org.apache.uima.aae.handler.HandlerBase.delegate(
> > HandlerBase.java:149)
> > >> >>     at
> > >> >> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl
> > >> >> .handle(ProcessRequestHandler_impl.java:1113)
> > >> >>     at
> > >> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o
> > >> >> nMessage(UimaVmMessageListener.java:107)
> > >> >>     at
> > >> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher
> > >> >> $1.run(UimaVmMessageDispatcher.java:70)
> > >> >>     at
> > >> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
> > >> >> Executor.java:1142)
> > >> >>     at
> > >> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
> > >> >> lExecutor.java:617)
> > >> >>     at
> > >> >> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa
> > >> >> ctory.java:132)
> > >> >>     at java.lang.Thread.run(Thread.java:745)
> > >> >> </cite>
> > >> >>
> > >> >> The exception above does not happen when I use a remote broker, so
> I
> > >> >> suspect that I am doing something wrong with my attempt to place
> all
> > >> parts
> > >> >> in the same JVM.
> > >> >>
> > >> >> Does anyone knows how to achieve my goal?
> > >> >>
> > >> >> Thanks in advance,
> > >> >> Manuel Fiorelli
> > >> >>
> > >> >
> > >> >
> > >>
> > >
> >
> >
> > --
> > Manuel Fiorelli
> >
>



-- 
Manuel Fiorelli

Re: How to have client, service and broker co-located using UIMA-AS

Posted by Jaroslaw Cwiklik <cw...@apache.org>.
Manuel, the current uima-as code requires a broker between a client and a
service even if all are colocated in the same process. This implies CAS
serialization/deserialization between endpoints. I am refactoring uima-as
code as part of JIRA  https://issues.apache.org/jira/browse/UIMA-5280. Once
the changes are complete the client and a service will use java queue
messaging, passing CASes by reference. Don't have ETA yet. This has been an
ongoing effort. Most of the new code is in place to support the JIRA plus a
few other enhancements. Testing and debugging will take some time.
Jerry

On Thu, Oct 5, 2017 at 11:30 AM, Manuel Fiorelli <ma...@gmail.com>
wrote:

> Hi Jaroslaw,
>
> I applied your suggestions to my program, and indeed it seems to work
> without the need of an external broker.
>
> However, it seems to me that timings are more or less the same with the
> co-located and the remote (still on the same machine) broker.
>
> In both cases client and services are launched by the same process.
>
> So my question is: "Is my program passing the CASes by reference?"
> Additionally, "Is this optimization enabled whenever client and service are
> co-located irrespective of the position of the broker?"
>
> Regards,
> Manuel
>
> 2017-10-04 22:23 GMT+02:00 Manuel Fiorelli <ma...@gmail.com>:
>
> > Hi Jaroslaw
> >
> > Thank you for your answer. Tomorrow, I will apply your suggestions and
> > tell you what happens.
> >
> > Il 4 ott 2017 19:50, "Jaroslaw Cwiklik" <cw...@apache.org> ha scritto:
> >
> >> Manuel, small correction. Towards the end replace this
> >>
> >> client.sendCAS(cas);
> >>
> >> with
> >>
> >> client.sendAndReceiveCAS(cas);
> >>
> >> Simpler, synchronous msg exchange between client and a service.
> >>
> >> Jerry Cwiklik
> >>
> >> On Wed, Oct 4, 2017 at 1:00 PM, Jaroslaw Cwiklik <cw...@apache.org>
> >> wrote:
> >>
> >> > Hi Manuel, you *can* colocate broker, client and a service in the same
> >> > process. Here is the code to get this done. Sorry did not test this.
> You
> >> > need to create a deployment descriptor (xml file) to be able to
> deploy a
> >> > service.
> >> >
> >> > // Deploy in-process broker
> >> > String uri = "tcp://"localhost:61616";
> >> > BrokerService broker =
> >> >      BrokerFactory.createBroker(new URI("broker:()/localhost?
> >> > persistent=false"));
> >> > TransportConnector tcpConnector = broker.addConnector(uri);
> >> > broker.start();
> >> > //------------------
> >> >
> >> > UimaAsynchronousEngine client =
> >> > new BaseUIMAAsynchronousEngine_impl();
> >> >
> >> > Map<String,String> appCtx = new HashMap();
> >> > appCtx.put(UimaAsynchronousEngine.DD2SpringXsltFilePath,
> >> >            $UIMA_HOME+"/bin/dd2spring.xsl");
> >> > appCtx.put(UimaAsynchronousEngine.SaxonClasspath,
> >> >            "file:"+$UIMA_HOME+"/saxon/saxon8.jar");
> >> >
> >> > String aDeploymentDescriptorPath =
> >> >   <path to dd.xml>
> >> >
> >> > // deploy in-process service
> >> > String serviceId =
> >> >   client.deploy(aDeploymentDescriptorPath, appCtx);
> >> >
> >> > String endpoint = <queue name>; // from the deployment descriptor
> >> >
> >> > appCtx.put(UimaAsynchronousEngine.ServerUri, uri);
> >> > appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);
> >> >
> >> > // connect client with an in-process service
> >> > client.initialize(appCtx);
> >> >
> >> > CAS cas = client.getCAS();
> >> > cas.setDocumentText("Some Text");
> >> > client.sendCAS(cas);
> >> >
> >> > client.stop();
> >> >
> >> >
> >> >
> >> > On Wed, Oct 4, 2017 at 11:37 AM, Manuel Fiorelli <
> >> > manuel.fiorelli@gmail.com> wrote:
> >> >
> >> >> Hi everybody
> >> >>
> >> >> Within the documentation of UIMA-AS, specifically within the section
> >> >> Terminology (
> >> >> https://uima.apache.org/d/uima-as-2.9.0/uima_async_scaleout.
> >> >> html#ugr.async.ov.terminology),
> >> >> the description of Queue Broker says:
> >> >>
> >> >> <cite>
> >> >> Queue brokers manage one or more named queues. The brokers are
> >> identified
> >> >> using a URL, representing where they are on the network. When the
> queue
> >> >> broker is co-located with the AS client and service, CASes are passed
> >> by
> >> >> reference, avoiding serialization / deserialization.
> >> >> </cite>
> >> >>
> >> >> Unfortunately, I could not find in the documentation how to place
> >> broker,
> >> >> client and service in the same JVM (co-location).
> >> >>
> >> >> After some web searches, experiments and exploration of the source
> >> code of
> >> >> UIMA-AS, I found that the solution may require the use of the URL
> >> >> "vm://localhost?broker.persistent=false" for the broker.
> >> >>
> >> >> In my sample program, I deploy a service (an asynchronous aggregate
> AE)
> >> >> and
> >> >> then create an asynchronous client using the URL above, but then I
> >> receive
> >> >> the following NullPointerException:
> >> >>
> >> >> <cite>
> >> >> ott 04, 2017 5:29:28 PM
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl
> >> >> replyToClient
> >> >> AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
> >> >> ott 04, 2017 5:29:28 PM
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl
> >> >> replyToClient
> >> >> AVVERTENZA:
> >> >> java.lang.NullPointerException
> >> >>     at
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> >> ller_impl.sendVMMessage(AggregateAnalysisEngineController_im
> >> pl.java:2393)
> >> >>     at
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> >> ller_impl.sendReplyToCollocatedClient(AggregateAnalysisEngin
> >> >> eController_impl.java:2287)
> >> >>     at
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> >> ller_impl.replyToClient(AggregateAnalysisEngineController_im
> >> pl.java:2344)
> >> >>     at
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> >> ller_impl.finalStep(AggregateAnalysisEngineControl
> ler_impl.java:1862)
> >> >>     at
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> >> ller_impl.executeFlowStep(AggregateAnalysisEngineController_
> >> >> impl.java:2489)
> >> >>     at
> >> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> >> ller_impl.process(AggregateAnalysisEngineController_impl.java:1271)
> >> >>     at
> >> >> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle
> >> >> rBase.java:118)
> >> >>     at
> >> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.can
> >> >> celTimerAndProcess(ProcessResponseHandler.java:117)
> >> >>     at
> >> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
> >> >> dleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
> >> >>     at
> >> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
> >> >> dle(ProcessResponseHandler.java:767)
> >> >>     at
> >> >> org.apache.uima.aae.handler.HandlerBase.delegate(
> HandlerBase.java:149)
> >> >>     at
> >> >> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl
> >> >> .handle(ProcessRequestHandler_impl.java:1113)
> >> >>     at
> >> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o
> >> >> nMessage(UimaVmMessageListener.java:107)
> >> >>     at
> >> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher
> >> >> $1.run(UimaVmMessageDispatcher.java:70)
> >> >>     at
> >> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
> >> >> Executor.java:1142)
> >> >>     at
> >> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
> >> >> lExecutor.java:617)
> >> >>     at
> >> >> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa
> >> >> ctory.java:132)
> >> >>     at java.lang.Thread.run(Thread.java:745)
> >> >> </cite>
> >> >>
> >> >> The exception above does not happen when I use a remote broker, so I
> >> >> suspect that I am doing something wrong with my attempt to place all
> >> parts
> >> >> in the same JVM.
> >> >>
> >> >> Does anyone knows how to achieve my goal?
> >> >>
> >> >> Thanks in advance,
> >> >> Manuel Fiorelli
> >> >>
> >> >
> >> >
> >>
> >
>
>
> --
> Manuel Fiorelli
>

Re: How to have client, service and broker co-located using UIMA-AS

Posted by Manuel Fiorelli <ma...@gmail.com>.
Hi Jaroslaw,

I applied your suggestions to my program, and indeed it seems to work
without the need of an external broker.

However, it seems to me that timings are more or less the same with the
co-located and the remote (still on the same machine) broker.

In both cases client and services are launched by the same process.

So my question is: "Is my program passing the CASes by reference?"
Additionally, "Is this optimization enabled whenever client and service are
co-located irrespective of the position of the broker?"

Regards,
Manuel

2017-10-04 22:23 GMT+02:00 Manuel Fiorelli <ma...@gmail.com>:

> Hi Jaroslaw
>
> Thank you for your answer. Tomorrow, I will apply your suggestions and
> tell you what happens.
>
> Il 4 ott 2017 19:50, "Jaroslaw Cwiklik" <cw...@apache.org> ha scritto:
>
>> Manuel, small correction. Towards the end replace this
>>
>> client.sendCAS(cas);
>>
>> with
>>
>> client.sendAndReceiveCAS(cas);
>>
>> Simpler, synchronous msg exchange between client and a service.
>>
>> Jerry Cwiklik
>>
>> On Wed, Oct 4, 2017 at 1:00 PM, Jaroslaw Cwiklik <cw...@apache.org>
>> wrote:
>>
>> > Hi Manuel, you *can* colocate broker, client and a service in the same
>> > process. Here is the code to get this done. Sorry did not test this. You
>> > need to create a deployment descriptor (xml file) to be able to deploy a
>> > service.
>> >
>> > // Deploy in-process broker
>> > String uri = "tcp://"localhost:61616";
>> > BrokerService broker =
>> >      BrokerFactory.createBroker(new URI("broker:()/localhost?
>> > persistent=false"));
>> > TransportConnector tcpConnector = broker.addConnector(uri);
>> > broker.start();
>> > //------------------
>> >
>> > UimaAsynchronousEngine client =
>> > new BaseUIMAAsynchronousEngine_impl();
>> >
>> > Map<String,String> appCtx = new HashMap();
>> > appCtx.put(UimaAsynchronousEngine.DD2SpringXsltFilePath,
>> >            $UIMA_HOME+"/bin/dd2spring.xsl");
>> > appCtx.put(UimaAsynchronousEngine.SaxonClasspath,
>> >            "file:"+$UIMA_HOME+"/saxon/saxon8.jar");
>> >
>> > String aDeploymentDescriptorPath =
>> >   <path to dd.xml>
>> >
>> > // deploy in-process service
>> > String serviceId =
>> >   client.deploy(aDeploymentDescriptorPath, appCtx);
>> >
>> > String endpoint = <queue name>; // from the deployment descriptor
>> >
>> > appCtx.put(UimaAsynchronousEngine.ServerUri, uri);
>> > appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);
>> >
>> > // connect client with an in-process service
>> > client.initialize(appCtx);
>> >
>> > CAS cas = client.getCAS();
>> > cas.setDocumentText("Some Text");
>> > client.sendCAS(cas);
>> >
>> > client.stop();
>> >
>> >
>> >
>> > On Wed, Oct 4, 2017 at 11:37 AM, Manuel Fiorelli <
>> > manuel.fiorelli@gmail.com> wrote:
>> >
>> >> Hi everybody
>> >>
>> >> Within the documentation of UIMA-AS, specifically within the section
>> >> Terminology (
>> >> https://uima.apache.org/d/uima-as-2.9.0/uima_async_scaleout.
>> >> html#ugr.async.ov.terminology),
>> >> the description of Queue Broker says:
>> >>
>> >> <cite>
>> >> Queue brokers manage one or more named queues. The brokers are
>> identified
>> >> using a URL, representing where they are on the network. When the queue
>> >> broker is co-located with the AS client and service, CASes are passed
>> by
>> >> reference, avoiding serialization / deserialization.
>> >> </cite>
>> >>
>> >> Unfortunately, I could not find in the documentation how to place
>> broker,
>> >> client and service in the same JVM (co-location).
>> >>
>> >> After some web searches, experiments and exploration of the source
>> code of
>> >> UIMA-AS, I found that the solution may require the use of the URL
>> >> "vm://localhost?broker.persistent=false" for the broker.
>> >>
>> >> In my sample program, I deploy a service (an asynchronous aggregate AE)
>> >> and
>> >> then create an asynchronous client using the URL above, but then I
>> receive
>> >> the following NullPointerException:
>> >>
>> >> <cite>
>> >> ott 04, 2017 5:29:28 PM
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
>> >> replyToClient
>> >> AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
>> >> ott 04, 2017 5:29:28 PM
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
>> >> replyToClient
>> >> AVVERTENZA:
>> >> java.lang.NullPointerException
>> >>     at
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> >> ller_impl.sendVMMessage(AggregateAnalysisEngineController_im
>> pl.java:2393)
>> >>     at
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> >> ller_impl.sendReplyToCollocatedClient(AggregateAnalysisEngin
>> >> eController_impl.java:2287)
>> >>     at
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> >> ller_impl.replyToClient(AggregateAnalysisEngineController_im
>> pl.java:2344)
>> >>     at
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> >> ller_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862)
>> >>     at
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> >> ller_impl.executeFlowStep(AggregateAnalysisEngineController_
>> >> impl.java:2489)
>> >>     at
>> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> >> ller_impl.process(AggregateAnalysisEngineController_impl.java:1271)
>> >>     at
>> >> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle
>> >> rBase.java:118)
>> >>     at
>> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.can
>> >> celTimerAndProcess(ProcessResponseHandler.java:117)
>> >>     at
>> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
>> >> dleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
>> >>     at
>> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
>> >> dle(ProcessResponseHandler.java:767)
>> >>     at
>> >> org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase.java:149)
>> >>     at
>> >> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl
>> >> .handle(ProcessRequestHandler_impl.java:1113)
>> >>     at
>> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o
>> >> nMessage(UimaVmMessageListener.java:107)
>> >>     at
>> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher
>> >> $1.run(UimaVmMessageDispatcher.java:70)
>> >>     at
>> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>> >> Executor.java:1142)
>> >>     at
>> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
>> >> lExecutor.java:617)
>> >>     at
>> >> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa
>> >> ctory.java:132)
>> >>     at java.lang.Thread.run(Thread.java:745)
>> >> </cite>
>> >>
>> >> The exception above does not happen when I use a remote broker, so I
>> >> suspect that I am doing something wrong with my attempt to place all
>> parts
>> >> in the same JVM.
>> >>
>> >> Does anyone knows how to achieve my goal?
>> >>
>> >> Thanks in advance,
>> >> Manuel Fiorelli
>> >>
>> >
>> >
>>
>


-- 
Manuel Fiorelli

Re: How to have client, service and broker co-located using UIMA-AS

Posted by Manuel Fiorelli <ma...@gmail.com>.
Hi Jaroslaw

Thank you for your answer. Tomorrow, I will apply your suggestions and tell
you what happens.

Il 4 ott 2017 19:50, "Jaroslaw Cwiklik" <cw...@apache.org> ha scritto:

> Manuel, small correction. Towards the end replace this
>
> client.sendCAS(cas);
>
> with
>
> client.sendAndReceiveCAS(cas);
>
> Simpler, synchronous msg exchange between client and a service.
>
> Jerry Cwiklik
>
> On Wed, Oct 4, 2017 at 1:00 PM, Jaroslaw Cwiklik <cw...@apache.org>
> wrote:
>
> > Hi Manuel, you *can* colocate broker, client and a service in the same
> > process. Here is the code to get this done. Sorry did not test this. You
> > need to create a deployment descriptor (xml file) to be able to deploy a
> > service.
> >
> > // Deploy in-process broker
> > String uri = "tcp://"localhost:61616";
> > BrokerService broker =
> >      BrokerFactory.createBroker(new URI("broker:()/localhost?
> > persistent=false"));
> > TransportConnector tcpConnector = broker.addConnector(uri);
> > broker.start();
> > //------------------
> >
> > UimaAsynchronousEngine client =
> > new BaseUIMAAsynchronousEngine_impl();
> >
> > Map<String,String> appCtx = new HashMap();
> > appCtx.put(UimaAsynchronousEngine.DD2SpringXsltFilePath,
> >            $UIMA_HOME+"/bin/dd2spring.xsl");
> > appCtx.put(UimaAsynchronousEngine.SaxonClasspath,
> >            "file:"+$UIMA_HOME+"/saxon/saxon8.jar");
> >
> > String aDeploymentDescriptorPath =
> >   <path to dd.xml>
> >
> > // deploy in-process service
> > String serviceId =
> >   client.deploy(aDeploymentDescriptorPath, appCtx);
> >
> > String endpoint = <queue name>; // from the deployment descriptor
> >
> > appCtx.put(UimaAsynchronousEngine.ServerUri, uri);
> > appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);
> >
> > // connect client with an in-process service
> > client.initialize(appCtx);
> >
> > CAS cas = client.getCAS();
> > cas.setDocumentText("Some Text");
> > client.sendCAS(cas);
> >
> > client.stop();
> >
> >
> >
> > On Wed, Oct 4, 2017 at 11:37 AM, Manuel Fiorelli <
> > manuel.fiorelli@gmail.com> wrote:
> >
> >> Hi everybody
> >>
> >> Within the documentation of UIMA-AS, specifically within the section
> >> Terminology (
> >> https://uima.apache.org/d/uima-as-2.9.0/uima_async_scaleout.
> >> html#ugr.async.ov.terminology),
> >> the description of Queue Broker says:
> >>
> >> <cite>
> >> Queue brokers manage one or more named queues. The brokers are
> identified
> >> using a URL, representing where they are on the network. When the queue
> >> broker is co-located with the AS client and service, CASes are passed by
> >> reference, avoiding serialization / deserialization.
> >> </cite>
> >>
> >> Unfortunately, I could not find in the documentation how to place
> broker,
> >> client and service in the same JVM (co-location).
> >>
> >> After some web searches, experiments and exploration of the source code
> of
> >> UIMA-AS, I found that the solution may require the use of the URL
> >> "vm://localhost?broker.persistent=false" for the broker.
> >>
> >> In my sample program, I deploy a service (an asynchronous aggregate AE)
> >> and
> >> then create an asynchronous client using the URL above, but then I
> receive
> >> the following NullPointerException:
> >>
> >> <cite>
> >> ott 04, 2017 5:29:28 PM
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
> >> replyToClient
> >> AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
> >> ott 04, 2017 5:29:28 PM
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
> >> replyToClient
> >> AVVERTENZA:
> >> java.lang.NullPointerException
> >>     at
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> ller_impl.sendVMMessage(AggregateAnalysisEngineControl
> ler_impl.java:2393)
> >>     at
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> ller_impl.sendReplyToCollocatedClient(AggregateAnalysisEngin
> >> eController_impl.java:2287)
> >>     at
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> ller_impl.replyToClient(AggregateAnalysisEngineControl
> ler_impl.java:2344)
> >>     at
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> ller_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862)
> >>     at
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> ller_impl.executeFlowStep(AggregateAnalysisEngineController_
> >> impl.java:2489)
> >>     at
> >> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
> >> ller_impl.process(AggregateAnalysisEngineController_impl.java:1271)
> >>     at
> >> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle
> >> rBase.java:118)
> >>     at
> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.can
> >> celTimerAndProcess(ProcessResponseHandler.java:117)
> >>     at
> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
> >> dleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
> >>     at
> >> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
> >> dle(ProcessResponseHandler.java:767)
> >>     at
> >> org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase.java:149)
> >>     at
> >> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl
> >> .handle(ProcessRequestHandler_impl.java:1113)
> >>     at
> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o
> >> nMessage(UimaVmMessageListener.java:107)
> >>     at
> >> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher
> >> $1.run(UimaVmMessageDispatcher.java:70)
> >>     at
> >> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
> >> Executor.java:1142)
> >>     at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
> >> lExecutor.java:617)
> >>     at
> >> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa
> >> ctory.java:132)
> >>     at java.lang.Thread.run(Thread.java:745)
> >> </cite>
> >>
> >> The exception above does not happen when I use a remote broker, so I
> >> suspect that I am doing something wrong with my attempt to place all
> parts
> >> in the same JVM.
> >>
> >> Does anyone knows how to achieve my goal?
> >>
> >> Thanks in advance,
> >> Manuel Fiorelli
> >>
> >
> >
>

Re: How to have client, service and broker co-located using UIMA-AS

Posted by Jaroslaw Cwiklik <cw...@apache.org>.
Manuel, small correction. Towards the end replace this

client.sendCAS(cas);

with

client.sendAndReceiveCAS(cas);

Simpler, synchronous msg exchange between client and a service.

Jerry Cwiklik

On Wed, Oct 4, 2017 at 1:00 PM, Jaroslaw Cwiklik <cw...@apache.org> wrote:

> Hi Manuel, you *can* colocate broker, client and a service in the same
> process. Here is the code to get this done. Sorry did not test this. You
> need to create a deployment descriptor (xml file) to be able to deploy a
> service.
>
> // Deploy in-process broker
> String uri = "tcp://"localhost:61616";
> BrokerService broker =
>      BrokerFactory.createBroker(new URI("broker:()/localhost?
> persistent=false"));
> TransportConnector tcpConnector = broker.addConnector(uri);
> broker.start();
> //------------------
>
> UimaAsynchronousEngine client =
> new BaseUIMAAsynchronousEngine_impl();
>
> Map<String,String> appCtx = new HashMap();
> appCtx.put(UimaAsynchronousEngine.DD2SpringXsltFilePath,
>            $UIMA_HOME+"/bin/dd2spring.xsl");
> appCtx.put(UimaAsynchronousEngine.SaxonClasspath,
>            "file:"+$UIMA_HOME+"/saxon/saxon8.jar");
>
> String aDeploymentDescriptorPath =
>   <path to dd.xml>
>
> // deploy in-process service
> String serviceId =
>   client.deploy(aDeploymentDescriptorPath, appCtx);
>
> String endpoint = <queue name>; // from the deployment descriptor
>
> appCtx.put(UimaAsynchronousEngine.ServerUri, uri);
> appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);
>
> // connect client with an in-process service
> client.initialize(appCtx);
>
> CAS cas = client.getCAS();
> cas.setDocumentText("Some Text");
> client.sendCAS(cas);
>
> client.stop();
>
>
>
> On Wed, Oct 4, 2017 at 11:37 AM, Manuel Fiorelli <
> manuel.fiorelli@gmail.com> wrote:
>
>> Hi everybody
>>
>> Within the documentation of UIMA-AS, specifically within the section
>> Terminology (
>> https://uima.apache.org/d/uima-as-2.9.0/uima_async_scaleout.
>> html#ugr.async.ov.terminology),
>> the description of Queue Broker says:
>>
>> <cite>
>> Queue brokers manage one or more named queues. The brokers are identified
>> using a URL, representing where they are on the network. When the queue
>> broker is co-located with the AS client and service, CASes are passed by
>> reference, avoiding serialization / deserialization.
>> </cite>
>>
>> Unfortunately, I could not find in the documentation how to place broker,
>> client and service in the same JVM (co-location).
>>
>> After some web searches, experiments and exploration of the source code of
>> UIMA-AS, I found that the solution may require the use of the URL
>> "vm://localhost?broker.persistent=false" for the broker.
>>
>> In my sample program, I deploy a service (an asynchronous aggregate AE)
>> and
>> then create an asynchronous client using the URL above, but then I receive
>> the following NullPointerException:
>>
>> <cite>
>> ott 04, 2017 5:29:28 PM
>> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
>> replyToClient
>> AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
>> ott 04, 2017 5:29:28 PM
>> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
>> replyToClient
>> AVVERTENZA:
>> java.lang.NullPointerException
>>     at
>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> ller_impl.sendVMMessage(AggregateAnalysisEngineController_impl.java:2393)
>>     at
>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> ller_impl.sendReplyToCollocatedClient(AggregateAnalysisEngin
>> eController_impl.java:2287)
>>     at
>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> ller_impl.replyToClient(AggregateAnalysisEngineController_impl.java:2344)
>>     at
>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> ller_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862)
>>     at
>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> ller_impl.executeFlowStep(AggregateAnalysisEngineController_
>> impl.java:2489)
>>     at
>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>> ller_impl.process(AggregateAnalysisEngineController_impl.java:1271)
>>     at
>> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle
>> rBase.java:118)
>>     at
>> org.apache.uima.aae.handler.input.ProcessResponseHandler.can
>> celTimerAndProcess(ProcessResponseHandler.java:117)
>>     at
>> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
>> dleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
>>     at
>> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
>> dle(ProcessResponseHandler.java:767)
>>     at
>> org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase.java:149)
>>     at
>> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl
>> .handle(ProcessRequestHandler_impl.java:1113)
>>     at
>> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o
>> nMessage(UimaVmMessageListener.java:107)
>>     at
>> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher
>> $1.run(UimaVmMessageDispatcher.java:70)
>>     at
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>> Executor.java:1142)
>>     at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
>> lExecutor.java:617)
>>     at
>> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa
>> ctory.java:132)
>>     at java.lang.Thread.run(Thread.java:745)
>> </cite>
>>
>> The exception above does not happen when I use a remote broker, so I
>> suspect that I am doing something wrong with my attempt to place all parts
>> in the same JVM.
>>
>> Does anyone knows how to achieve my goal?
>>
>> Thanks in advance,
>> Manuel Fiorelli
>>
>
>

Re: How to have client, service and broker co-located using UIMA-AS

Posted by Jaroslaw Cwiklik <cw...@apache.org>.
Hi Manuel, you *can* colocate broker, client and a service in the same
process. Here is the code to get this done. Sorry did not test this. You
need to create a deployment descriptor (xml file) to be able to deploy a
service.

// Deploy in-process broker
String uri = "tcp://"localhost:61616";
BrokerService broker =
     BrokerFactory.createBroker(new
URI("broker:()/localhost?persistent=false"));
TransportConnector tcpConnector = broker.addConnector(uri);
broker.start();
//------------------

UimaAsynchronousEngine client =
new BaseUIMAAsynchronousEngine_impl();

Map<String,String> appCtx = new HashMap();
appCtx.put(UimaAsynchronousEngine.DD2SpringXsltFilePath,
           $UIMA_HOME+"/bin/dd2spring.xsl");
appCtx.put(UimaAsynchronousEngine.SaxonClasspath,
           "file:"+$UIMA_HOME+"/saxon/saxon8.jar");

String aDeploymentDescriptorPath =
  <path to dd.xml>

// deploy in-process service
String serviceId =
  client.deploy(aDeploymentDescriptorPath, appCtx);

String endpoint = <queue name>; // from the deployment descriptor

appCtx.put(UimaAsynchronousEngine.ServerUri, uri);
appCtx.put(UimaAsynchronousEngine.ENDPOINT, endpoint);

// connect client with an in-process service
client.initialize(appCtx);

CAS cas = client.getCAS();
cas.setDocumentText("Some Text");
client.sendCAS(cas);

client.stop();



On Wed, Oct 4, 2017 at 11:37 AM, Manuel Fiorelli <ma...@gmail.com>
wrote:

> Hi everybody
>
> Within the documentation of UIMA-AS, specifically within the section
> Terminology (
> https://uima.apache.org/d/uima-as-2.9.0/uima_async_
> scaleout.html#ugr.async.ov.terminology),
> the description of Queue Broker says:
>
> <cite>
> Queue brokers manage one or more named queues. The brokers are identified
> using a URL, representing where they are on the network. When the queue
> broker is co-located with the AS client and service, CASes are passed by
> reference, avoiding serialization / deserialization.
> </cite>
>
> Unfortunately, I could not find in the documentation how to place broker,
> client and service in the same JVM (co-location).
>
> After some web searches, experiments and exploration of the source code of
> UIMA-AS, I found that the solution may require the use of the URL
> "vm://localhost?broker.persistent=false" for the broker.
>
> In my sample program, I deploy a service (an asynchronous aggregate AE) and
> then create an asynchronous client using the URL above, but then I receive
> the following NullPointerException:
>
> <cite>
> ott 04, 2017 5:29:28 PM
> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
> replyToClient
> AVVERTENZA: Service: Top Level Aggregate Service Runtime Exception
> ott 04, 2017 5:29:28 PM
> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl
> replyToClient
> AVVERTENZA:
> java.lang.NullPointerException
>     at
> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl.sendVMMessage(AggregateAnalysisEngineController_impl.java:2393)
>     at
> org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.
> sendReplyToCollocatedClient(AggregateAnalysisEngineControl
> ler_impl.java:2287)
>     at
> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl.replyToClient(AggregateAnalysisEngineController_impl.java:2344)
>     at
> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862)
>     at
> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl.executeFlowStep(AggregateAnalysisEngineController_impl.java:2489)
>     at
> org.apache.uima.aae.controller.AggregateAnalysisEngineControl
> ler_impl.process(AggregateAnalysisEngineController_impl.java:1271)
>     at
> org.apache.uima.aae.handler.HandlerBase.invokeProcess(
> HandlerBase.java:118)
>     at
> org.apache.uima.aae.handler.input.ProcessResponseHandler.
> cancelTimerAndProcess(ProcessResponseHandler.java:117)
>     at
> org.apache.uima.aae.handler.input.ProcessResponseHandler.
> handleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
>     at
> org.apache.uima.aae.handler.input.ProcessResponseHandler.
> handle(ProcessResponseHandler.java:767)
>     at
> org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase.java:149)
>     at
> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl.handle(
> ProcessRequestHandler_impl.java:1113)
>     at
> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.onMessage(
> UimaVmMessageListener.java:107)
>     at
> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher$1.run(
> UimaVmMessageDispatcher.java:70)
>     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1142)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:617)
>     at
> org.apache.uima.aae.UimaAsThreadFactory$1.run(
> UimaAsThreadFactory.java:132)
>     at java.lang.Thread.run(Thread.java:745)
> </cite>
>
> The exception above does not happen when I use a remote broker, so I
> suspect that I am doing something wrong with my attempt to place all parts
> in the same JVM.
>
> Does anyone knows how to achieve my goal?
>
> Thanks in advance,
> Manuel Fiorelli
>