Great. that is exactly what I needed.

> On Sep 28, 2015, at 2:42 PM, Mark Payne <marka...@hotmail.com> wrote:
> 
> Sumo,
> 
> Generally, the approach that we take is to perform that type of operation in 
> a method that has the @OnScheduled annotation.
> 
> Then you do it only once when the Processor is scheduled.
> 
> If you want to ensure that it happens only one time for the lifecycle of the 
> JVM, you could use a boolean to keep track of whether or
> not the action has been performed. For example:
> 
> private volatile boolean expensiveActionPerformed = false;
> 
> @OnScheduled
> public void doExpensiveSetup(final ProcessContext context) {
>    if (!expensiveActionPerformed) {
> 
>        // do expensive action
> 
>        expensiveActionPerformed = true;
>    }
> }
> 
> 
> Thanks
> -Mark
> 
> 
>> On Sep 28, 2015, at 5:38 PM, Sumanth Chinthagunta <xmlk...@gmail.com> wrote:
>> 
>> Thanks Mark for pointing me to GetTwitter example. I will try to follow this 
>> pattern. 
>> PropertyDescriptor is only available in onTrigger method via ProcessContext. 
>> I needed to get hold of Service from  initialize method using 
>> ProcessorInitializationContexts as documented in the Developer guide. this 
>> helps me to do expensive Service calls once not doing every time onTrigger 
>> method is invoked. 
>> 
>> Thanks 
>> Sumo
>> 
>> 
>>> On Sep 28, 2015, at 5:32 AM, Mark Payne <marka...@hotmail.com> wrote:
>>> 
>>> Sumo,
>>> 
>>> The preferred mechanism for obtaining a Controller Service is to do so via 
>>> a PropertyDescriptor. You would
>>> specify that the property represents a Controller Service by using the 
>>> identifiesControllerService(Class) method.
>>> This is discussed in the "Interacting with a Controller Service" section of 
>>> the Developer's Guide [1].
>>> 
>>> In terms of communicating with some asynchronous process, generally the 
>>> best solution is to use a queue and
>>> then read from that queue in the onTrigger method. You will not be able to 
>>> call the onTrigger method properly
>>> yourself, as it is designed to be called by the framework at the 
>>> appropriate time. I would recommend using
>>> a BlockingQueue with a small capacity, as you do not want your Java Heap to 
>>> fill up with objects from this
>>> Processor if the Processor is stopped for a while. You can look at how this 
>>> is done in the GetTwitter processor,
>>> if you would like to have an example to look at.
>>> 
>>> Let us know if you have any more questions, or if anything is still not 
>>> clear!
>>> 
>>> Thanks
>>> -Mark
>>> 
>>> 
>>> [1] 
>>> http://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#interacting-with-controller-service
>>> 
>>> 
>>> 
>>>> On Sep 27, 2015, at 3:53 PM, Sumanth Chinthagunta <xmlk...@gmail.com> 
>>>> wrote:
>>>> 
>>>> 
>>>> Hi All,
>>>> I am new to NiFi and   I'm stuck with couple issues:  
>>>> 
>>>> 1. Unable to get hold of ControllerService  from Processor’s init method. 
>>>>    I wanted to pre-set some dependencies in my Processor during init phase 
>>>> instead of  querying them repeatedly in onTrigger method. 
>>>>    I am getting null for service and not sure what I have to pass for 
>>>> 'serviceIdentifier’ . I couldn't find documentation or examples on how to 
>>>> give Identifier to a service.  
>>>> 
>>>> 
>>>>    final VertxServiceInterface vertxService = (VertxServiceInterface) 
>>>> context.getControllerServiceLookup().getControllerService("VertxService”)
>>>> 
>>>>    
>>>> https://github.com/xmlking/nifi-websocket/blob/master/src/main/java/com/crossbusiness/nifi/processors/PutEventBus.java#L55
>>>>  
>>>> <https://github.com/xmlking/nifi-websocket/blob/master/src/main/java/com/crossbusiness/nifi/processors/PutEventBus.java#L55>
>>>> 
>>>> 2. for my usecase I get data published to a topic from EventBus with 
>>>> following code. 
>>>> 
>>>>    EventBus eb = vertx.eventBus();
>>>> 
>>>>    eb.consumer("news.uk.sport", message -> {
>>>>            System.out.println("I have received a message: " + 
>>>> message.body());
>>>>    });
>>>>    
>>>>    I am working on a date ingest processor (push based) that needs to 
>>>> listen for new messages on a topic and send them to flow as FlowFile. 
>>>>    In my case data source is EvenBus that expose emit messages via 
>>>> callback API. 
>>>>    I am looking for ideas on how to call Processor’s onTrigger method when 
>>>> the above callback is evoked. 
>>>>    Should I have to use my own intermediate queue and poll it in onTrigger 
>>>> method? 
>>>>    is there a better way to trigger the  onTrigger method programmatically 
>>>> ? 
>>>> 
>>>> Thanks 
>>>> Sumo
>>> 
>> 
> 

Reply via email to