/* * 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.processors.ignite; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.ignite.Ignite; import org.apache.ignite.Ignition; import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.processor.AbstractProcessor; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.Relationship; import org.apache.nifi.processor.util.StandardValidators; /** * Base class for Ignite processors */ public abstract class AbstractIgniteProcessor extends AbstractProcessor { /** * Ignite spring configuration file */ public static final PropertyDescriptor IGNITE_CONFIGURATION_FILE = new PropertyDescriptor.Builder() .displayName("Ignite Spring Properties Xml File") .name("ignite-spring-properties-xml-file") .description("Ignite spring configuration file, <path>/<ignite-configuration>.xml. If the " + "configuration file is not provided, default Ignite configuration " + "configuration is used which binds to 127.0.0.1:47500..47509") .required(false) .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) .build(); /** * Success relation */ public static final Relationship REL_SUCCESS = new Relationship.Builder().name("success") .description("All FlowFiles that are written to Ignite cache are routed to this relationship").build(); /** * Failure relation */ public static final Relationship REL_FAILURE = new Relationship.Builder().name("failure") .description("All FlowFiles that cannot be written to Ignite cache are routed to this relationship").build(); /** * The ignite instance */ private transient Ignite ignite; /** * Get ignite instance * @return ignite instance */ protected Ignite getIgnite() { return ignite; } /** * Close ignite instance */ public void closeIgnite() { if (ignite != null) { getLogger().info("Closing ignite client"); ignite.close(); ignite = null; } } /** * Initialize ignite instance * @param context process context */ public void initializeIgnite(ProcessContext context) { if ( getIgnite() != null ) { getLogger().info("Ignite already initialized"); return; } synchronized(Ignition.class) { List<Ignite> grids = Ignition.allGrids(); if ( grids.size() == 1 ) { getLogger().info("Ignite grid already available"); ignite = grids.get(0); return; } Ignition.setClientMode(true); String configuration = context.getProperty(IGNITE_CONFIGURATION_FILE).getValue(); getLogger().info("Initializing ignite with configuration {} ", new Object[] { configuration }); if ( StringUtils.isEmpty(configuration) ) { ignite = Ignition.start(); } else { ignite = Ignition.start(configuration); } } } }