
com.fluxtion.server.plugin.cache.JsonFileCache Maven / Gradle / Ivy
/*
* SPDX-FileCopyrightText: © 2025 Gregory Higgins
* SPDX-License-Identifier: AGPL-3.0-only
*/
package com.fluxtion.server.plugin.cache;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fluxtion.agrona.concurrent.Agent;
import com.fluxtion.runtime.annotations.runtime.ServiceRegistered;
import com.fluxtion.runtime.lifecycle.Lifecycle;
import com.fluxtion.server.dispatch.EventFlowManager;
import com.fluxtion.server.dispatch.EventFlowService;
import com.fluxtion.server.service.admin.AdminCommandRegistry;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j2;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
@Data
@Log4j2
public class JsonFileCache implements Cache, Agent, Lifecycle, EventFlowService {
private String fileName;
private final AtomicBoolean updated = new AtomicBoolean(false);
@Setter(AccessLevel.NONE)
private final ObjectMapper mapper = new ObjectMapper();
private Map cacheMap = new ConcurrentHashMap<>();
private static final TypedData TYPED_DATA_NULL = new TypedData();
private File file;
private File redoLogFile;
private String serviceName;
private AdminCommandRegistry registry;
@SneakyThrows
@Override
public void init() {
log.info("init");
file = new File(fileName);
if (file.exists() && file.length() > 0) {
log.info("opened cache file:{}", fileName);
cacheMap = mapper.readValue(file, new TypeReference
© 2015 - 2025 Weber Informatics LLC | Privacy Policy