blob: 161b6be8aa76b5f8b7662dfc2eb7b52d3644ba13 [file] [log] [blame]
/*
* 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.camel.component.ignite;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import org.apache.camel.support.DefaultComponent;
import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
/**
* This is a base class of camel-ignite components which correspond to following Apache Ignite functions:
* <ul>
* <li>{@link org.apache.camel.component.ignite.cache.IgniteCacheComponent}: Cache operations.</li>
* <li>{@link org.apache.camel.component.ignite.compute.IgniteComputeComponent}: Cluster computation.</li>
* <li>{@link org.apache.camel.component.ignite.messaging.IgniteMessagingComponent}: Messaging.</li>
* <li>{@link org.apache.camel.component.ignite.events.IgniteEventsComponent}: Eventing.</li>
* <li>{@link org.apache.camel.component.ignite.idgen.IgniteIdGenComponent}: Id Generation.</li>
* <li>{@link org.apache.camel.component.ignite.set.IgniteSetComponent}: Set operations.</li>
* <li>{@link org.apache.camel.component.ignite.queue.IgniteQueueComponent}: Queue operations.</li>
* </ul>
*/
public abstract class AbstractIgniteComponent extends DefaultComponent {
/**
* Modes of managing the underlying {@link Ignite} instance.
*/
public enum IgniteLifecycleMode {
USER_MANAGED, COMPONENT_MANAGED
}
/** Ignite configuration. */
private IgniteConfiguration igniteConfiguration;
/** Resource from where to load configuration. */
private Object configurationResource;
/** Ignite instance. */
private Ignite ignite;
/** How the Ignite lifecycle is managed. */
private IgniteLifecycleMode lifecycleMode = IgniteLifecycleMode.COMPONENT_MANAGED;
@Override
protected void doStart() throws Exception {
super.doStart();
if (lifecycleMode == IgniteLifecycleMode.USER_MANAGED) {
return;
}
// Try to load the configuration from the resource.
if (configurationResource != null) {
if (configurationResource instanceof URL) {
ignite = Ignition.start((URL) configurationResource);
} else if (configurationResource instanceof InputStream) {
ignite = Ignition.start((InputStream) configurationResource);
} else if (configurationResource instanceof String) {
ignite = Ignition.start((String) configurationResource);
} else {
throw new IllegalStateException("An unsupported configuration resource was provided to the Ignite component. " + "Supported types are: URL, InputStream, String.");
}
} else if (igniteConfiguration != null) {
ignite = Ignition.start(igniteConfiguration);
} else {
throw new IllegalStateException("No configuration resource or IgniteConfiguration was provided to the Ignite component.");
}
}
@Override
protected void doStop() throws Exception {
super.doStop();
if (lifecycleMode == IgniteLifecycleMode.USER_MANAGED) {
return;
}
if (ignite != null) {
ignite.close();
}
}
/**
* Returns the {@link Ignite} instance.
*/
public Ignite getIgnite() {
return ignite;
}
/**
* Sets the {@link Ignite} instance.
*/
public void setIgnite(Ignite ignite) {
this.ignite = ignite;
lifecycleMode = IgniteLifecycleMode.USER_MANAGED;
}
/**
* Gets the resource from where to load the configuration. It can be a: {@link URI}, {@link String} (URI)
* or an {@link InputStream}.
*/
public Object getConfigurationResource() {
return configurationResource;
}
/**
* Sets the resource from where to load the configuration. It can be a: {@link URI}, {@link String} (URI)
* or an {@link InputStream}.
*/
public void setConfigurationResource(Object configurationResource) {
this.configurationResource = configurationResource;
}
/**
* Gets the {@link IgniteConfiguration} if the user set it explicitly.
*/
public IgniteConfiguration getIgniteConfiguration() {
return igniteConfiguration;
}
/**
* Allows the user to set a programmatic {@link IgniteConfiguration}.
*/
public void setIgniteConfiguration(IgniteConfiguration igniteConfiguration) {
this.igniteConfiguration = igniteConfiguration;
}
}