CDAP Common provides core common utilities and abstractions for the CDAP (Cask Data Application Platform) ecosystem including exception handling, service management, configuration, HTTP utilities, metadata management, security abstractions, discovery services, and various utility classes that are shared across CDAP components.
—
Centralized configuration system with hierarchical property management, secure configuration handling, and comprehensive constants for all CDAP settings.
Main configuration classes for managing CDAP settings and properties.
/**
* Main configuration class for CDAP
*/
public class CConfiguration extends Configuration {
public static CConfiguration create();
public static CConfiguration create(Configuration baseConf);
public String get(String name);
public String get(String name, String defaultValue);
public int getInt(String name, int defaultValue);
public long getLong(String name, long defaultValue);
public boolean getBoolean(String name, boolean defaultValue);
public void set(String name, String value);
public void setInt(String name, int value);
public void setLong(String name, long value);
public void setBoolean(String name, boolean value);
}
/**
* Secure configuration management for sensitive data
*/
public class SConfiguration extends Configuration {
public static SConfiguration create();
public static SConfiguration create(Configuration baseConf);
public String get(String name);
public String get(String name, String defaultValue);
public void set(String name, String value);
}Usage Examples:
import io.cdap.cdap.common.conf.CConfiguration;
import io.cdap.cdap.common.conf.SConfiguration;
// Create and use CConfiguration
CConfiguration cConf = CConfiguration.create();
// Read configuration values
String appFabricHost = cConf.get(Constants.AppFabric.SERVER_ADDRESS, "localhost");
int appFabricPort = cConf.getInt(Constants.AppFabric.SERVER_PORT, 11015);
boolean sslEnabled = cConf.getBoolean(Constants.Security.SSL.EXTERNAL_ENABLED, false);
// Set configuration values
cConf.set("custom.property", "custom-value");
cConf.setInt("custom.port", 8080);
// Secure configuration for sensitive data
SConfiguration sConf = SConfiguration.create();
sConf.set("database.password", "secret-password");
String dbPassword = sConf.get("database.password");Central location for all CDAP configuration constants organized by functional area.
/**
* Central location for all CDAP configuration constants
*/
public final class Constants {
/**
* Service names and configurations
*/
public static final class Service {
public static final String MASTER_SERVICES = "master.services";
public static final String APP_FABRIC_HTTP = "app.fabric.http";
public static final String DATASET_MANAGER = "dataset.service";
public static final String METRICS = "metrics";
public static final String METRICS_PROCESSOR = "metrics.processor";
public static final String LOGSAVER = "log.saver";
public static final String TRANSACTION = "transaction";
public static final String STREAMS = "streams";
}
/**
* Security-related constants
*/
public static final class Security {
public static final String ENABLED = "security.enabled";
public static final String AUTHORIZATION_ENABLED = "security.authorization.enabled";
public static final class SSL {
public static final String EXTERNAL_ENABLED = "security.server.ssl.enabled";
public static final String EXTERNAL_KEYSTORE_PATH = "security.server.ssl.keystore.path";
public static final String EXTERNAL_KEYSTORE_PASSWORD = "security.server.ssl.keystore.password";
public static final String EXTERNAL_KEYSTORE_TYPE = "security.server.ssl.keystore.type";
}
public static final class Authentication {
public static final String HANDLERCLASSNAME = "security.authentication.handlerClassName";
public static final String LOGINMODULE = "security.authentication.loginmodule.className";
}
public static final class Authorization {
public static final String EXTENSION_JAR_PATH = "security.authorization.extension.jar.path";
public static final String EXTENSION_EXTRA_CLASSPATH = "security.authorization.extension.extra.classpath";
}
}
/**
* Metrics configuration constants
*/
public static final class Metrics {
public static final String ADDRESS = "metrics.bind.address";
public static final String PORT = "metrics.bind.port";
public static final String RETENTION_SECONDS = "metrics.retention.seconds";
public static final String NUM_INSTANCES = "metrics.num.instances";
public static final String NUM_CORES = "metrics.num.cores";
public static final String MEMORY_MB = "metrics.memory.mb";
}
/**
* Dataset-related constants
*/
public static final class Dataset {
public static final String MANAGER_ADDRESS = "dataset.service.bind.address";
public static final String MANAGER_PORT = "dataset.service.bind.port";
public static final String EXECUTOR_ADDRESS = "dataset.executor.bind.address";
public static final String EXECUTOR_PORT = "dataset.executor.bind.port";
}
/**
* API versioning constants
*/
public static final class Gateway {
public static final String API_VERSION_3_TOKEN = "v3";
public static final String API_VERSION_3 = "/" + API_VERSION_3_TOKEN;
public static final String INTERNAL_API_VERSION_3_TOKEN = "v3Internal";
public static final String INTERNAL_API_VERSION_3 = "/" + INTERNAL_API_VERSION_3_TOKEN;
}
/**
* Router configuration
*/
public static final class Router {
public static final String ADDRESS = "router.bind.address";
public static final String BIND_PORT = "router.bind.port";
public static final String SERVER_BOSS_THREADS = "router.server.boss.threads";
public static final String SERVER_WORKER_THREADS = "router.server.worker.threads";
}
/**
* Logging configuration
*/
public static final class Logging {
public static final String COMPONENT_NAME = "component.name";
public static final String KAFKA_TOPIC = "kafka.topic";
}
/**
* Messaging system configuration
*/
public static final class MessagingSystem {
public static final String HTTP_SERVER_BIND_ADDRESS = "messaging.bind.address";
public static final String HTTP_SERVER_BIND_PORT = "messaging.bind.port";
public static final String CONTAINER_VIRTUAL_CORES = "messaging.container.virtual.cores";
public static final String CONTAINER_MEMORY_MB = "messaging.container.memory.mb";
}
}Base interfaces for configuration management and property storage.
/**
* Base configuration interface
*/
public interface Configuration {
String get(String name);
String get(String name, String defaultValue);
void set(String name, String value);
Iterable<Map.Entry<String, String>> iterator();
}
/**
* Interface for configurable components
*/
public interface Configurable {
void configure(Configuration conf);
}
/**
* Property storage abstraction
*/
public interface PropertyStore<T> {
T get(String key);
void put(String key, T value);
void remove(String key);
boolean exists(String key);
}
/**
* Interface for property change notifications
*/
public interface PropertyChangeListener {
void onPropertyChange(String key, String oldValue, String newValue);
}Advanced Usage Examples:
import io.cdap.cdap.common.conf.*;
// ZooKeeper configuration helper
public class ZooKeeperConfig {
public static String getZkQuorum(CConfiguration cConf) {
return Constants.Zookeeper.getZkQuorum(cConf);
}
public static String getZkNamespace(CConfiguration cConf) {
return cConf.get(Constants.Zookeeper.CFG_SESSION_TIMEOUT_MILLIS, "default");
}
}
// Custom configurable component
public class MyService implements Configurable {
private String bindAddress;
private int bindPort;
@Override
public void configure(Configuration conf) {
this.bindAddress = conf.get("my.service.bind.address", "localhost");
this.bindPort = conf.getInt("my.service.bind.port", 8080);
}
public void start() {
// Start service with configured address and port
System.out.println("Starting service on " + bindAddress + ":" + bindPort);
}
}
// Property change monitoring
public class ConfigMonitor implements PropertyChangeListener {
@Override
public void onPropertyChange(String key, String oldValue, String newValue) {
System.out.println("Configuration changed: " + key + " = " + newValue);
// React to specific configuration changes
if (Constants.Security.ENABLED.equals(key)) {
// Reconfigure security settings
reconfigureSecurity(Boolean.parseBoolean(newValue));
}
}
private void reconfigureSecurity(boolean enabled) {
// Update security configuration
}
}
// Using property store
public class ConfigCache {
private final PropertyStore<String> cache;
public ConfigCache(PropertyStore<String> cache) {
this.cache = cache;
}
public String getCachedProperty(String key, CConfiguration cConf) {
if (cache.exists(key)) {
return cache.get(key);
}
String value = cConf.get(key);
cache.put(key, value);
return value;
}
}Install with Tessl CLI
npx tessl i tessl/maven-io-cdap-cdap--cdap-common