-
Notifications
You must be signed in to change notification settings - Fork 0
Configuration
Hazelcast Locks Server je konfigurován výhradně pomocí proměnných prostředí.
Veškerá konfigurace je načítána ve třídě
org.ceskaexpedice.hazelcast.HazelcastServerNodeStarter.
Pokud není konkrétní proměnná nastavena, použije se její výchozí hodnota.
| Proměnná prostředí | Popis | Výchozí hodnota |
|---|---|---|
| HAZELCAST_CONFIG_FILE | Cesta ke konfiguračnímu XML souboru Hazelcastu | interní default-config.xml |
| HAZELCAST_INSTANCE | Název Hazelcast instance (cluster name) | akubrasync |
| HAZELCAST_USER | Logický identifikátor uživatele / prostředí | dev |
Určuje cestu ke konfiguračnímu souboru Hazelcastu ve formátu XML.
Pokud není proměnná nastavena, server:
- načte interní resource
default-config.xml - uloží ji do dočasného souboru
- použije tuto konfiguraci při startu
Tento mechanismus umožňuje:
- jednoduché lokální spuštění bez konfigurace
- přepsání konfigurace v Dockeru pomocí volume mountu
export HAZELCAST_CONFIG_FILE=/config/hazelcast.xml
Určuje název Hazelcast instance (cluster name).
Tato hodnota musí odpovídat konfiguraci klientů (např. Akubra), jinak se klient ke clusteru nepřipojí.
Výchozí hodnota akubrasync reflektuje primární použití v Akubře.
Doporučení
- lokální vývoj: akubrasync
- produkce: explicitně nastavit (např. kramerius-sync)
Logický identifikátor prostředí nebo uživatele.
Slouží k:
- oddělení prostředí (dev / test / prod)
- jednodušší identifikaci instance v logách a konfiguraci
Nemá bezpečnostní význam (nejde o autentizační mechanismus).
Při startu server:
- načte proměnné prostředí
- aplikuje výchozí hodnoty, pokud nejsou definovány
- vytvoří objekt HazelcastConfiguration
- zajistí existenci Hazelcast server node
Server běží až do obdržení signálu k ukončení procesu (SIGTERM, CTRL+C), na který reaguje korektním shutdownem Hazelcast instance.
Klientské aplikace (např. Akubra):
- načtou tyto proměnné
- musí mít kompatibilní Hazelcast konfiguraci zejména shodný název instance (HAZELCAST_INSTANCE)
Hazelcast Locks Server je z pohledu klientů externí infrastrukturní služba.
Pro demonstraci klientske casti pro praci se zamky uvadime nasledujici kod:
@BeforeAll
static void beforeAll() {
hazelcastConfig = createHazelcastConfig();
HazelcastServerNode.ensureHazelcastNode(hazelcastConfig);
hazelcastClientNode = new HazelcastClientNode();
ensureHazelcastClientNode(hazelcastConfig);
}
@Test
void testSimpleLock() throws TimeoutException {
String result = doWithLock("pid1", hazelcastConfig, hazelcastClientNode, new LockOperation<String>() {
@Override
public String execute() {
return "Inside lock";
}
});
assertEquals("Inside lock", result);
}
private <T> T doWithLock(String lockName, HazelcastConfiguration config, HazelcastClientNode node,
LockOperation<T> operation) throws TimeoutException {
try {
var lock = node.getHzInstance().getLock(lockName);
if (lock.tryLock(config.getWaitTimeSecs(), TimeUnit.SECONDS, config.getLeaseTimeSecs(), TimeUnit.HOURS)) {
try {
return operation.execute();
} finally {
lock.unlock();
}
} else {
throw new TimeoutException("Could not acquire lock " + lockName + " within " + config.getWaitTimeSecs()
+ " " + TimeUnit.SECONDS);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
private static HazelcastConfiguration createHazelcastConfig() {
HazelcastConfiguration hazelcastConfig = new HazelcastConfiguration.Builder()
.hazelcastInstance("akubrasync")
.hazelcastUser("dev")
.waitTimeSecs(120L)
.leaseTimeSecs(300L)
.build();
return hazelcastConfig;
}