Matt,
I setup DistributedMapCacheServer controller service and trying to run 
following script. Am I doing correct? 
I have couple of issues:
1. How do I make org.apache.nifi.distributed.cache.* package available  for 
ExecuteScript?  
2. When I try : cache.get("1",null,null), getting following error 
Failed to process session due to 
org.apache.nifi.processor.exception.ProcessException: 
javax.script.ScriptException: javax.script.ScriptException: 
groovy.lang.MissingMethodException: No signature of method: 
com.sun.proxy.$Proxy129.get() is applicable for argument types: 
(java.lang.String, null, null) values: [1, null, null]
Possible solutions: grep(), wait(), any(), getAt(java.lang.String), dump(), 
find(): org.apache.nifi.processor.exception.ProcessException: 
javax.script.ScriptException: javax.script.ScriptException: 
groovy.lang.MissingMethodException: No signature of method: 
com.sun.proxy.$Proxy129.get() is applicable for argument types: 
(java.lang.String, null, null) values: [1, null, null]
Possible solutions: grep(), wait(), any(), getAt(java.lang.String), dump(), 
find()


 

import org.apache.nifi.controller.ControllerService
import org.apache.nifi.distributed.cache.client.Deserializer;
import org.apache.nifi.distributed.cache.client.Serializer;
import 
org.apache.nifi.distributed.cache.client.exception.DeserializationException;
import 
org.apache.nifi.distributed.cache.client.exception.SerializationException;

static class StringSerializer implements Serializer<String> {

    @Override
    public void serialize(final String value, final OutputStream out) throws 
SerializationException, IOException {
        out.write(value.getBytes(StandardCharsets.UTF_8));
    }
}

static class CacheValueDeserializer implements Deserializer<byte[]> {

    @Override
    public byte[] deserialize(final byte[] input) throws 
DeserializationException, IOException {
        if (input == null || input.length == 0) {
            return null;
        }
        return input;
    }
}

private final Serializer<String> keySerializer = new StringSerializer();
private final Deserializer<byte[]> valueDeserializer = new 
CacheValueDeserializer();

def lookup = context.controllerServiceLookup
def cacheServerName = distributedMapCacheServerName.value

def cacheServerId = 
lookup.getControllerServiceIdentifiers(ControllerService).find {
    cs -> lookup.getControllerServiceName(cs) == cacheServerName
}

def cache = lookup.getControllerService(cacheServerId)

//log.error cache.get("1",keySerializer,valueDeserializer)
log.error cache.get("1",null,null)

 Thanks 
Sumo




> On Jul 13, 2016, at 6:13 PM, Matt Burgess <mattyb...@gmail.com> wrote:
> 
> Sumo,
> 
> I have some example code at
> http://funnifi.blogspot.com/2016/04/inspecting-your-nifi.html.
> Although it's not expressly for ExecuteScript it should be pretty
> usable as-is.
> 
> Also you might be able to use the technique outlined in my other post:
> http://funnifi.blogspot.com/2016/04/sql-in-nifi-with-executescript.html.
> With this you would get a reference to the ControllerService for the
> DistributedMapCacheClient (although you likely won't be able to refer
> to the DistributedMapCacheClient class), but using dynamic method
> invocation (as outlined in the blog post) you can call its methods to
> get and put values.
> 
> Regards,
> Matt
> 
> On Wed, Jul 13, 2016 at 8:26 PM, Sumanth Chinthagunta <xmlk...@gmail.com> 
> wrote:
>> looking for example script ( for ExecuteScript processor)  that uses 
>> DistributedMapCacheClient to put/get key/value pair.
>> 
>> Thanks
>> -Sumo

Reply via email to