In-memory distributed computing platform for real-time stream processing and data storage with SQL capabilities
—
The Hazelcast Core API provides the fundamental interfaces for creating and managing Hazelcast instances, accessing distributed objects, and controlling the instance lifecycle.
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.DistributedObject;
import com.hazelcast.config.Config;
import com.hazelcast.cluster.Cluster;
import com.hazelcast.partition.PartitionService;
public interface HazelcastInstance {
// Instance information
String getName();
Config getConfig();
// Distributed objects access
<K, V> IMap<K, V> getMap(String name);
<E> IQueue<E> getQueue(String name);
<E> IList<E> getList(String name);
<E> ISet<E> getSet(String name);
<K, V> MultiMap<K, V> getMultiMap(String name);
<K, V> ReplicatedMap<K, V> getReplicatedMap(String name);
<E> ITopic<E> getTopic(String name);
<E> ITopic<E> getReliableTopic(String name);
<E> Ringbuffer<E> getRingbuffer(String name);
// Executor services
IExecutorService getExecutorService(String name);
DurableExecutorService getDurableExecutorService(String name);
IScheduledExecutorService getScheduledExecutorService(String name);
// Specialized data structures
FlakeIdGenerator getFlakeIdGenerator(String name);
CardinalityEstimator getCardinalityEstimator(String name);
PNCounter getPNCounter(String name);
// Services
CPSubsystem getCPSubsystem();
SqlService getSql();
JetService getJet();
Cluster getCluster();
PartitionService getPartitionService();
LifecycleService getLifecycleService();
ClientService getClientService();
LoggingService getLoggingService();
SplitBrainProtectionService getSplitBrainProtectionService();
// Cache management
ICacheManager getCacheManager();
// Transaction support
TransactionContext newTransactionContext();
TransactionContext newTransactionContext(TransactionOptions options);
<T> T executeTransaction(TransactionalTask<T> task);
<T> T executeTransaction(TransactionOptions options, TransactionalTask<T> task);
// Distributed object management
Collection<DistributedObject> getDistributedObjects();
<T extends DistributedObject> T getDistributedObject(String serviceName, String name);
UUID addDistributedObjectListener(DistributedObjectListener distributedObjectListener);
boolean removeDistributedObjectListener(UUID registrationId);
// Local endpoint and context
Endpoint getLocalEndpoint();
ConcurrentMap<String, Object> getUserContext();
// XA Transaction support
HazelcastXAResource getXAResource();
// Lifecycle
void shutdown();
}import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.config.Config;
import java.util.Set;
public class Hazelcast {
// Create new instance
public static HazelcastInstance newHazelcastInstance();
public static HazelcastInstance newHazelcastInstance(Config config);
// Get existing instances
public static HazelcastInstance getHazelcastInstanceByName(String instanceName);
public static HazelcastInstance getOrCreateHazelcastInstance(Config config);
public static Set<HazelcastInstance> getAllHazelcastInstances();
// For Jet jobs
public static HazelcastInstance bootstrappedInstance();
// Shutdown operations
public static void shutdownAll();
// Memory management
public static void setOutOfMemoryHandler(OutOfMemoryHandler outOfMemoryHandler);
}import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.config.ClientFailoverConfig;
import java.util.Collection;
public class HazelcastClient {
// Create new client
public static HazelcastInstance newHazelcastClient();
public static HazelcastInstance newHazelcastClient(ClientConfig config);
// Failover client
public static HazelcastInstance newHazelcastFailoverClient();
public static HazelcastInstance newHazelcastFailoverClient(ClientFailoverConfig clientFailoverConfig);
// Get existing clients
public static HazelcastInstance getHazelcastClientByName(String instanceName);
public static HazelcastInstance getOrCreateHazelcastClient(ClientConfig config);
public static Collection<HazelcastInstance> getAllHazelcastClients();
// Shutdown operations
public static void shutdownAll();
public static void shutdown(HazelcastInstance instance);
// Memory management
public static void setOutOfMemoryHandler(OutOfMemoryHandler outOfMemoryHandler);
}import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
// Default configuration
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// Named instance
Config config = new Config();
config.setInstanceName("my-hazelcast-instance");
HazelcastInstance namedHz = Hazelcast.newHazelcastInstance(config);
// Get existing instance
HazelcastInstance existing = Hazelcast.getHazelcastInstanceByName("my-hazelcast-instance");import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
// Default client configuration
HazelcastInstance client = HazelcastClient.newHazelcastClient();
// Custom client configuration
ClientConfig clientConfig = new ClientConfig();
clientConfig.setInstanceName("my-client");
clientConfig.getNetworkConfig().addAddress("192.168.1.100:5701", "192.168.1.101:5701");
HazelcastInstance customClient = HazelcastClient.newHazelcastClient(clientConfig);import com.hazelcast.config.Config;
import com.hazelcast.config.MapConfig;
import com.hazelcast.config.NetworkConfig;
Config config = new Config();
// Instance settings
config.setInstanceName("production-cluster");
config.setClusterName("prod");
// Map configuration
MapConfig mapConfig = new MapConfig("user-sessions");
mapConfig.setBackupCount(2);
mapConfig.setTimeToLiveSeconds(1800); // 30 minutes
config.addMapConfig(mapConfig);
// Network configuration
NetworkConfig networkConfig = config.getNetworkConfig();
networkConfig.setPort(5701);
networkConfig.setPortAutoIncrement(true);
networkConfig.setPortCount(20);
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);import com.hazelcast.core.DistributedObject;
public interface DistributedObject {
String getName();
String getServiceName();
String getPartitionKey();
void destroy();
}// Maps
IMap<String, User> userMap = hz.getMap("users");
IMap<Long, Order> orderMap = hz.getMap("orders");
// Collections
IQueue<Task> taskQueue = hz.getQueue("tasks");
IList<String> messages = hz.getList("messages");
ISet<String> uniqueItems = hz.getSet("unique-items");
// Topics
ITopic<String> notifications = hz.getTopic("notifications");
ITopic<Event> events = hz.getReliableTopic("events");
// Specialized structures
FlakeIdGenerator idGen = hz.getFlakeIdGenerator("user-ids");
CardinalityEstimator estimator = hz.getCardinalityEstimator("page-views");
PNCounter counter = hz.getPNCounter("global-counter");import com.hazelcast.core.LifecycleService;
import com.hazelcast.core.LifecycleListener;
import com.hazelcast.core.LifecycleEvent;
import java.util.UUID;
public interface LifecycleService {
boolean isRunning();
UUID addLifecycleListener(LifecycleListener lifecycleListener);
boolean removeLifecycleListener(UUID registrationId);
void shutdown();
void terminate();
}public interface LifecycleListener {
void stateChanged(LifecycleEvent event);
}
public class LifecycleEvent {
public enum LifecycleState {
STARTING, STARTED, SHUTTING_DOWN, SHUTDOWN, MERGING, MERGED,
CLIENT_CONNECTED, CLIENT_DISCONNECTED
}
public LifecycleState getState();
public HazelcastInstance getSource();
}LifecycleService lifecycle = hz.getLifecycleService();
// Add lifecycle listener
UUID listenerId = lifecycle.addLifecycleListener(new LifecycleListener() {
@Override
public void stateChanged(LifecycleEvent event) {
System.out.println("Lifecycle state changed: " + event.getState());
switch (event.getState()) {
case STARTED:
System.out.println("Instance started successfully");
break;
case SHUTTING_DOWN:
System.out.println("Instance is shutting down");
break;
case SHUTDOWN:
System.out.println("Instance has shut down");
break;
}
}
});
// Check if running
if (lifecycle.isRunning()) {
System.out.println("Instance is running");
}
// Graceful shutdown
lifecycle.shutdown();
// Remove listener
lifecycle.removeLifecycleListener(listenerId);import com.hazelcast.core.HazelcastException;
import com.hazelcast.core.HazelcastInstanceNotActiveException;
import com.hazelcast.core.HazelcastOverloadException;
import com.hazelcast.core.OperationTimeoutException;
import com.hazelcast.core.MemberLeftException;
import com.hazelcast.core.ConsistencyLostException;
// Base exception
public class HazelcastException extends RuntimeException {
public HazelcastException(String message);
public HazelcastException(String message, Throwable cause);
}
// Specific exceptions
public class HazelcastInstanceNotActiveException extends IllegalStateException {}
public class HazelcastOverloadException extends HazelcastException {}
public class OperationTimeoutException extends HazelcastException {}
public class MemberLeftException extends HazelcastException {}
public class ConsistencyLostException extends HazelcastException {}try {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<String, String> map = hz.getMap("test");
String result = map.get("key");
} catch (HazelcastInstanceNotActiveException e) {
System.err.println("Instance is not active: " + e.getMessage());
} catch (OperationTimeoutException e) {
System.err.println("Operation timed out: " + e.getMessage());
} catch (HazelcastException e) {
System.err.println("Hazelcast operation failed: " + e.getMessage());
}import com.hazelcast.core.ExecutionCallback;
import com.hazelcast.core.MultiExecutionCallback;
import java.util.Map;
public interface ExecutionCallback<V> {
void onResponse(V response);
void onFailure(Throwable t);
}
public interface MultiExecutionCallback {
void onResponse(Member member, Object value);
void onComplete(Map<Member, Object> values);
}import com.hazelcast.core.IFunction;
import java.io.Serializable;
public interface IFunction<E, R> extends Serializable {
R apply(E input);
}import com.hazelcast.client.ClientService;
import com.hazelcast.client.Client;
import java.util.Collection;
public interface ClientService {
Collection<Client> getConnectedClients();
void addClientListener(ClientListener clientListener);
void removeClientListener(ClientListener clientListener);
}
public interface Client extends Endpoint {
String getUuid();
String getName();
String getClientType();
InetSocketAddress getSocketAddress();
}
public interface ClientListener {
void clientConnected(Client client);
void clientDisconnected(Client client);
}import com.hazelcast.logging.LoggingService;
import com.hazelcast.logging.LogListener;
import com.hazelcast.logging.LogEvent;
public interface LoggingService {
void addLogListener(Level level, LogListener logListener);
void removeLogListener(LogListener logListener);
}
public interface LogListener {
void log(LogEvent logEvent);
}
public class LogEvent {
public LogRecord getLogRecord();
public Member getMember();
}import com.hazelcast.splitbrainprotection.SplitBrainProtectionService;
import com.hazelcast.splitbrainprotection.SplitBrainProtection;
public interface SplitBrainProtectionService {
SplitBrainProtection getSplitBrainProtection(String splitBrainProtectionName);
}
public interface SplitBrainProtection {
String getName();
boolean isPresent();
int getSize();
}import com.hazelcast.transaction.TransactionContext;
import com.hazelcast.transaction.TransactionOptions;
import com.hazelcast.transaction.TransactionalTask;
import com.hazelcast.transaction.HazelcastXAResource;
public interface TransactionContext {
void beginTransaction();
void commitTransaction();
void rollbackTransaction();
String getTxnId();
TransactionOptions getTransactionOptions();
// Transactional data structures
<K, V> TransactionalMap<K, V> getMap(String name);
<E> TransactionalQueue<E> getQueue(String name);
<E> TransactionalList<E> getList(String name);
<E> TransactionalSet<E> getSet(String name);
<K, V> TransactionalMultiMap<K, V> getMultiMap(String name);
}
public class TransactionOptions {
public static final TransactionOptions DEFAULT = new TransactionOptions();
public TransactionOptions setTimeout(long timeout, TimeUnit timeUnit);
public TransactionOptions setTransactionType(TransactionType transactionType);
public long getTimeoutMillis();
public TransactionType getTransactionType();
}
public interface TransactionalTask<T> extends Serializable {
T execute(TransactionContext context) throws TransactionException;
}
public interface HazelcastXAResource extends XAResource {
void clearContext();
TransactionContext getTransactionContext();
}import com.hazelcast.core.DistributedObjectListener;
import com.hazelcast.core.DistributedObjectEvent;
import com.hazelcast.cluster.Endpoint;
public interface DistributedObjectListener extends EventListener {
void distributedObjectCreated(DistributedObjectEvent event);
void distributedObjectDestroyed(DistributedObjectEvent event);
}
public class DistributedObjectEvent {
public enum EventType { CREATED, DESTROYED }
public String getObjectName();
public String getServiceName();
public EventType getEventType();
public Member getMember();
}
public interface Endpoint {
UUID getUuid();
InetSocketAddress getSocketAddress();
Map<String, String> getAttributes();
}// Use try-with-resources pattern for automatic cleanup
public class HazelcastManager implements AutoCloseable {
private final HazelcastInstance hazelcast;
public HazelcastManager(Config config) {
this.hazelcast = Hazelcast.newHazelcastInstance(config);
}
public HazelcastInstance getInstance() {
return hazelcast;
}
@Override
public void close() {
if (hazelcast != null && hazelcast.getLifecycleService().isRunning()) {
hazelcast.shutdown();
}
}
}
// Usage
try (HazelcastManager manager = new HazelcastManager(config)) {
HazelcastInstance hz = manager.getInstance();
// Use hz for operations
}public HazelcastInstance createResilientInstance(Config config) {
int maxRetries = 3;
int retryDelay = 1000; // ms
for (int i = 0; i < maxRetries; i++) {
try {
return Hazelcast.newHazelcastInstance(config);
} catch (Exception e) {
if (i == maxRetries - 1) {
throw new RuntimeException("Failed to create Hazelcast instance after " + maxRetries + " attempts", e);
}
try {
Thread.sleep(retryDelay);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new RuntimeException("Interrupted while retrying", ie);
}
}
}
throw new RuntimeException("Should not reach here");
}Install with Tessl CLI
npx tessl i tessl/maven-com-hazelcast--hazelcast