Skip to content

Configuration

ppodsednik edited this page Feb 25, 2026 · 7 revisions

Konfigurace

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.

Přehled konfiguračních proměnných

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

HAZELCAST_CONFIG_FILE

Určuje cestu ke konfiguračnímu souboru Hazelcastu ve formátu XML.

Pokud není proměnná nastavena, server:

  1. načte interní resource default-config.xml
  2. uloží ji do dočasného souboru
  3. 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

Příklad

export HAZELCAST_CONFIG_FILE=/config/hazelcast.xml

HAZELCAST_INSTANCE

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)

HAZELCAST_USER

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).

Chovani pri startu

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.

Vztah ke klientum

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.

Java client

Pro demonstraci klientske casti pro pramci 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;
    }

Clone this wiki locally