Hello, Usually this is because the dependencies are not quite right between your NAR and the NAR where the controller service is. Your processor project needs a dependency on the API of the controller service, and your NAR needs a NAR dependency on the NAR where the controller service implementation is.
The following show examples of how the dependencies work: https://cwiki.apache.org/confluence/display/NIFI/Maven+Projects+for+Extensions#MavenProjectsforExtensions-LinkingProcessorsandControllerServices https://github.com/bbende/nifi-dependency-example The typical way to get a reference to the controller service in your processor is like this: final DBCPService dbcpService = context.getProperty(DBCP_SERVICE).asControllerService(DBCPService.class); Let us know if it is still not working after verifying the dependencies. Thanks, Bryan On Thu, Sep 22, 2016 at 11:38 AM, Mathias Tiberghien < [email protected]> wrote: > Hi, > > I’m working on version 0.6.1 of Nifi (I’m not allowed to upgrade in this > project) and I have to build a Custom Nifi Processor that read a specific > Excel file and Write the data to Sql. > > The process is working fine but I’m facing problem to configure the DBCP > Controller Service Property (as I have to connect to a sql database, I want > to use a connection from a Controller Service). > > Looking on PutSQL Processor source code I’ve devine a ProperptyDescriptor > as below: > > > > public static final PropertyDescriptor *ConnectionPool *= new > PropertyDescriptor.Builder() > .name("Connection Pool") > .description("JDBC Connection to Database") > .identifiesControllerService(DBCPService.class) > .required(true) > .build(); > > > > The Property appears correctly in my Custom Processor on Nifi but when I > drop down the Combobox, the list remains empty. I can create a DBCP > Controller Service trough the Combobox and it appears in the list of my > services, but not in the combobox (I only see the service id) > > > > Did I missed something in the dependencies of my project (see Pom.xml > attached) > > > > I also tried this: > > String connection = "ExistingDBCPControllerServiceName"; > ControllerServiceLookup lookup = context.getControllerServiceLookup(); > Set<String> identifiers = lookup.getControllerServiceIdentifier > s(ControllerService.class); > if(identifiers.size()==0)log.error("No identifiers found for > ControllerService"); > Iterator<String> it = identifiers.iterator(); > ControllerService service = null; > boolean found = false; > while(it.hasNext()) > { > > String id = it.next(); > String name = lookup.getControllerServiceName(id); > service = lookup.getControllerService(id); > log.warn(String.*format*("Service id: %s, name: %s, class: %s",id,name > ,service.getClass())); > if(name.equals(connection)) > { > found=true; > } > if(found)break; > } > > > > Usting the ControllerServiceLookup and get a known ControllerService. > > When I display the service class, it does not appear as DBCPService but as > a com.sun.Proxy$Proxy89 class and I cannot cast the service to a DBCPService > > > > If I use the code below: > > try > { > m = service.getClass().getMethod("getConnection",null); > Connection conn = (Connection) m.invoke(service,null); > //Cod > } > catch (NoSuchMethodException ex) > { > log.error("Method getConnection not found: "+ex.getMessage()); > } > > > > I can retrieve the Connection from the Proxy > > > > I’m not familiar coding in java (I’m a C# developer) but it seems that > some dependency is missing and that my processor can’t parse processor > proxy correctly > > > > I’d be very grateful if you have any clue on this. > > > > Thanks for your answer, > > > > Mathias > > > > *Mathias TIBERGHIEN* > > CTO > > Cell. : +33(0)6 27 58 13 68 > > [image: 64] > > 87 Bd Chanzy > > 93100 Montreuil > > France > > > > Tel : +33(0)1 42 87 16 57 > > *www.code192.com <http://www.code192.com>* > > > > > ------------------------------ > [image: Avast logo] > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > > L'absence de virus dans ce courrier électronique a été vérifiée par le > logiciel antivirus Avast. > www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > >
