
io.fluo.api.client.FluoFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fluo-api Show documentation
Show all versions of fluo-api Show documentation
This module contains all API code. External dependencies should be limited. Any changes to
public methods should be avoided. While the API module does not have compile time dependency
on fluo-core, you must include fluo-core as a run-time dependency.
The newest version!
/*
* Copyright 2014 Fluo authors (see AUTHORS)
*
* Licensed 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 io.fluo.api.client;
import java.lang.reflect.InvocationTargetException;
import io.fluo.api.config.FluoConfiguration;
import io.fluo.api.exceptions.FluoException;
import io.fluo.api.mini.MiniFluo;
import org.apache.commons.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Factory for creating {@link FluoClient}, {@link FluoAdmin}, and {@link MiniFluo}. All factory
* methods take a configuration object which can be built using {@link FluoConfiguration}.
*/
public class FluoFactory {
private static final Logger log = LoggerFactory.getLogger(FluoFactory.class);
/**
* Creates a {@link FluoClient} for reading and writing data to Fluo. {@link FluoClient#close()}
* should be called when you are finished using it. Configuration (see {@link FluoConfiguration})
* should contain properties with client.* prefix. Please review all client.* properties but many
* have a default. At a minimum, configuration should contain the following properties that have
* no default: io.fluo.client.accumulo.user, io.fluo.client.accumulo.password,
* io.fluo.client.accumulo.instance
*/
public static FluoClient newClient(Configuration configuration) {
FluoConfiguration config = new FluoConfiguration(configuration);
return buildClassWithConfig(config.getClientClass(), config);
}
/**
* Creates a {@link FluoAdmin} client for administering Fluo. Configuration (see
* {@link FluoConfiguration}) should contain properties with client.* and admin.* prefix. Please
* review all properties but many have a default. At a minimum, configuration should contain the
* following properties that have no default: io.fluo.client.accumulo.user,
* io.fluo.client.accumulo.password, io.fluo.client.accumulo.instance,
* io.fluo.admin.accumulo.table, io.fluo.admin.accumulo.classpath
*/
public static FluoAdmin newAdmin(Configuration configuration) {
FluoConfiguration config = new FluoConfiguration(configuration);
return buildClassWithConfig(config.getAdminClass(), config);
}
/**
* Creates a {@link MiniFluo} using the provided configuration. Configuration (see
* {@link FluoConfiguration}) should either contain the property io.fluo.mini.start.accumulo (set
* to true) to indicate that MiniFluo should start its own Accumulo instance or it should contain
* the following properties if it is connecting to an existing instance:
* io.fluo.client.accumulo.user, io.fluo.client.accumulo.password,
* io.fluo.client.accumulo.instance, io.fluo.admin.accumulo.table
*/
public static MiniFluo newMiniFluo(Configuration configuration) {
FluoConfiguration config = new FluoConfiguration(configuration);
return buildClassWithConfig(config.getMiniClass(), config);
}
@SuppressWarnings("unchecked")
private static T buildClassWithConfig(String clazz, Configuration config) {
try {
return (T) Class.forName(clazz).getDeclaredConstructor(FluoConfiguration.class)
.newInstance(config);
} catch (ClassNotFoundException e) {
String msg =
"Could not find " + clazz
+ " class which could be caused by fluo-core jar not being on the classpath.";
log.error(msg);
throw new FluoException(msg, e);
} catch (InvocationTargetException e) {
String msg = "Failed to construct " + clazz + " class due to exception";
log.error(msg, e);
throw new FluoException(msg, e);
} catch (Exception e) {
log.error("Could not instantiate class - " + clazz);
throw new FluoException(e);
}
}
@SuppressWarnings({"unchecked", "unused"})
private static T buildClass(String clazz) {
try {
return (T) Class.forName(clazz).newInstance();
} catch (ClassNotFoundException e) {
String msg =
"Could not find " + clazz
+ " class which could be caused by fluo-core jar not being on the classpath.";
log.error(msg);
throw new FluoException(msg, e);
} catch (Exception e) {
log.error("Could not instantiate class - " + clazz);
throw new FluoException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy