[ 
https://issues.apache.org/jira/browse/NIFI-3404?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16019259#comment-16019259
 ] 

ASF GitHub Bot commented on NIFI-3404:
--------------------------------------

Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/1830#discussion_r117685550
  
    --- Diff: 
nifi-nar-bundles/nifi-standard-services/nifi-lookup-services-bundle/nifi-lookup-services/src/main/java/org/apache/nifi/lookup/DatabaseLookupService.java
 ---
    @@ -0,0 +1,203 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +package org.apache.nifi.lookup;
    +
    +import java.util.ArrayList;
    +import java.util.Collections;
    +import java.util.HashMap;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Optional;
    +import java.util.Set;
    +import javax.sql.DataSource;
    +
    +import org.apache.commons.configuration2.Configuration;
    +import org.apache.commons.configuration2.DatabaseConfiguration;
    +import org.apache.commons.configuration2.ex.ConfigurationException;
    +import org.apache.commons.configuration2.builder.BasicConfigurationBuilder;
    +import org.apache.commons.configuration2.builder.fluent.Parameters;
    +import 
org.apache.commons.configuration2.builder.fluent.DatabaseBuilderParameters;
    +import org.apache.commons.lang3.StringUtils;
    +
    +import org.apache.nifi.annotation.documentation.CapabilityDescription;
    +import org.apache.nifi.annotation.documentation.Tags;
    +import org.apache.nifi.annotation.lifecycle.OnEnabled;
    +import org.apache.nifi.components.PropertyDescriptor;
    +import org.apache.nifi.controller.AbstractControllerService;
    +import org.apache.nifi.controller.ControllerServiceInitializationContext;
    +import org.apache.nifi.controller.ConfigurationContext;
    +import org.apache.nifi.dbcp.DBCPService;
    +import org.apache.nifi.processor.util.StandardValidators;
    +import org.apache.nifi.reporting.InitializationException;
    +
    +@Tags({"lookup", "cache", "enrich", "join", "jdbc", "database", "key", 
"value"})
    +@CapabilityDescription("A reloadable properties file-based lookup service")
    +public class DatabaseLookupService extends AbstractControllerService 
implements StringLookupService {
    +
    +    static final PropertyDescriptor CONNECTION_POOL = new 
PropertyDescriptor.Builder()
    +        .name("connection-pool")
    +        .displayName("Connection Pool")
    +        .description("Specifices the JDBC connection pool used to connect 
to the database.")
    +        .identifiesControllerService(DBCPService.class)
    +        .required(true)
    +        .build();
    +
    +    static final PropertyDescriptor LOOKUP_TABLE_NAME = new 
PropertyDescriptor.Builder()
    +        .name("lookup-table-name")
    +        .displayName("Lookup Table Name")
    +        .description("Lookup table name.")
    +        .required(true)
    +        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
    +        .expressionLanguageSupported(true)
    +        .build();
    +
    +    static final PropertyDescriptor LOOKUP_KEY_COLUMN =
    +        new PropertyDescriptor.Builder()
    +            .name("lookup-key-column")
    +            .displayName("Lookup Key Column")
    +            .description("Lookup key column.")
    +            .required(true)
    +            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
    +            .expressionLanguageSupported(true)
    +            .build();
    +
    +    static final PropertyDescriptor LOOKUP_VALUE_COLUMN =
    +        new PropertyDescriptor.Builder()
    +            .name("lookup-value-column")
    +            .displayName("Lookup Value Column")
    +            .description("Lookup value column.")
    +            .required(true)
    +            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
    +            .expressionLanguageSupported(true)
    +            .build();
    +
    +    static final PropertyDescriptor LOOKUP_NAME_COLUMN =
    +        new PropertyDescriptor.Builder()
    +            .name("lookup-name-column")
    +            .displayName("Lookup Name Column")
    +            .description("Lookup name column.")
    +            .required(false)
    +            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
    +            .expressionLanguageSupported(true)
    +            .build();
    +
    +    static final PropertyDescriptor LOOKUP_NAME =
    +        new PropertyDescriptor.Builder()
    +            .name("lookup-name")
    +            .displayName("Lookup Name")
    +            .description("Lookup name.")
    +            .required(false)
    +            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
    +            .expressionLanguageSupported(true)
    +            .build();
    +
    +    private List<PropertyDescriptor> properties;
    +
    +    private volatile BasicConfigurationBuilder<DatabaseConfiguration> 
builder;
    +
    +    private Configuration getConfiguration() {
    +        try {
    +            if (builder != null) {
    +                return builder.getConfiguration();
    +            }
    +        } catch (final ConfigurationException e) {
    +            getLogger().error(e.getMessage(), e);
    +        }
    +        return null;
    +    }
    +
    +    @Override
    +    protected List<PropertyDescriptor> getSupportedPropertyDescriptors() {
    +        return properties;
    +    }
    +
    +    @Override
    +    protected void init(final ControllerServiceInitializationContext 
context) throws InitializationException {
    +        super.init(context);
    +        final List<PropertyDescriptor> properties = new 
ArrayList<>(super.getSupportedPropertyDescriptors());
    +        properties.add(CONNECTION_POOL);
    +        properties.add(LOOKUP_TABLE_NAME);
    +        properties.add(LOOKUP_KEY_COLUMN);
    +        properties.add(LOOKUP_VALUE_COLUMN);
    +        properties.add(LOOKUP_NAME_COLUMN);
    +        properties.add(LOOKUP_NAME);
    +        this.properties = Collections.unmodifiableList(properties);
    +    }
    +
    +    @OnEnabled
    +    public void onEnabled(final ConfigurationContext context) throws 
InitializationException {
    +        final DBCPService databaseService = 
context.getProperty(CONNECTION_POOL).asControllerService(DBCPService.class);
    +        final DataSource dataSource = databaseService.getDataSource();
    --- End diff --
    
    As discussed at #1450, I think we'd better to avoid exposing DataSource 
from DBCPService. Wrapping Connection to be a DataSource can be done here 
without requiring DBCPService change. Thought?


> Add lookup processor for enrichments/joins to reference data
> ------------------------------------------------------------
>
>                 Key: NIFI-3404
>                 URL: https://issues.apache.org/jira/browse/NIFI-3404
>             Project: Apache NiFi
>          Issue Type: Improvement
>            Reporter: Joey Frazee
>            Assignee: Joey Frazee
>
> NiFi doesn't currently have an easy, concise way of doing enrichment, joining 
> against reference data sets or performing attribute lookups against external 
> data sources.
> Since enrichments and joins are basic streaming use cases, and since 
> attributes and EL are often used to parameterize processor properties, there 
> is a need for an easy way to do enrichments, joins and lookups without having 
> to write code or create a lengthy data flow.
> There's been some discussion of this on the mailing list [1] and I've started 
> work on a LookupAttribute [2] processor that delegates the work to controller 
> services.
> 1. 
> https://lists.apache.org/thread.html/74321ff0e9e0b7339e43ad53b36119315dc5094991605edfb12b34d0@%3Cdev.nifi.apache.org%3E
> 2. https://github.com/jfrazee/nifi-lookup-service



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to