Skip to content

Commit

Permalink
feat: added map entry listener on json cache service using spring events
Browse files Browse the repository at this point in the history
  • Loading branch information
mherwig committed May 14, 2024
1 parent 98d95b5 commit 5b28feb
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;

import static java.util.Optional.empty;
import static java.util.Optional.of;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package de.telekom.eni.pandora.horizon.cache.service;

import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.HazelcastJsonValue;
import com.hazelcast.map.listener.EntryAddedListener;
import com.hazelcast.map.listener.EntryEvictedListener;
import com.hazelcast.map.listener.EntryRemovedListener;
import com.hazelcast.map.listener.EntryUpdatedListener;
import org.springframework.context.ApplicationEventPublisher;

public class JsonCacheServiceEntryListener implements EntryAddedListener<String, HazelcastJsonValue>,
EntryRemovedListener<String, HazelcastJsonValue>,
EntryUpdatedListener<String, HazelcastJsonValue>,
EntryEvictedListener<String, HazelcastJsonValue> {

private final ApplicationEventPublisher applicationEventPublisher;

public JsonCacheServiceEntryListener(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}

@Override
public void entryAdded(EntryEvent<String, HazelcastJsonValue> entryEvent) {
applicationEventPublisher.publishEvent(new JsonCacheServiceEvent(entryEvent));
}

@Override
public void entryEvicted(EntryEvent<String, HazelcastJsonValue> entryEvent) {
applicationEventPublisher.publishEvent(new JsonCacheServiceEvent(entryEvent));
}

@Override
public void entryRemoved(EntryEvent<String, HazelcastJsonValue> entryEvent) {
applicationEventPublisher.publishEvent(new JsonCacheServiceEvent(entryEvent));
}

@Override
public void entryUpdated(EntryEvent<String, HazelcastJsonValue> entryEvent) {
applicationEventPublisher.publishEvent(new JsonCacheServiceEvent(entryEvent));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package de.telekom.eni.pandora.horizon.cache.service;

import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.HazelcastJsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class JsonCacheServiceEvent {

private EntryEvent<String, HazelcastJsonValue> entryEvent;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.telekom.eni.pandora.horizon.tracing.Constants;
import de.telekom.eni.pandora.horizon.model.event.IdentifiableMessage;
import de.telekom.eni.pandora.horizon.model.event.MessageType;
import de.telekom.eni.pandora.horizon.model.event.StatusMessage;
import de.telekom.eni.pandora.horizon.model.event.SubscriptionEventMessage;
import de.telekom.eni.pandora.horizon.model.meta.HorizonComponentId;
import de.telekom.eni.pandora.horizon.tracing.Constants;
import de.telekom.eni.pandora.horizon.tracing.HorizonTracer;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.producer.ProducerRecord;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;

class HorizonComponentIdTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
import brave.propagation.CurrentTraceContext;
import brave.propagation.TraceContext;
import brave.propagation.TraceContextOrSamplingFlags;
import de.telekom.eni.pandora.horizon.tracing.PandoraTracer;
import de.telekom.eni.pandora.horizon.tracing.SamplingState;
import de.telekom.eni.pandora.horizon.tracing.ScopedDebugSpanWrapper;
import de.telekom.eni.pandora.horizon.tracing.TracingProperties;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
import com.hazelcast.core.HazelcastJsonValue;
import com.hazelcast.map.IMap;
import de.telekom.eni.pandora.horizon.cache.service.JsonCacheService;
import de.telekom.eni.pandora.horizon.cache.service.JsonCacheServiceEntryListener;
import de.telekom.eni.pandora.horizon.kubernetes.resource.SubscriptionResource;
import de.telekom.jsonfilter.operator.Operator;
import de.telekom.jsonfilter.serde.OperatorDeserializer;
import de.telekom.jsonfilter.serde.OperatorSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

Expand All @@ -21,7 +23,7 @@ public class JsonCacheAutoconfiguration {
private static final String SUBSCRIPTION_RESOURCE_V1 = "subscriptions.subscriber.horizon.telekom.de.v1";

@Bean
public JsonCacheService<SubscriptionResource> subscriptionCache(HazelcastInstance hazelcastInstance) {
public JsonCacheService<SubscriptionResource> subscriptionCache(HazelcastInstance hazelcastInstance, ApplicationEventPublisher applicationEventPublisher) {
var module = new SimpleModule();
module.addSerializer(Operator.class, new OperatorSerializer());
module.addDeserializer(Operator.class, new OperatorDeserializer());
Expand All @@ -30,6 +32,7 @@ public JsonCacheService<SubscriptionResource> subscriptionCache(HazelcastInstanc
mapper.registerModule(module);

IMap<String, HazelcastJsonValue> map = hazelcastInstance.getMap(SUBSCRIPTION_RESOURCE_V1);
map.addEntryListener(new JsonCacheServiceEntryListener(applicationEventPublisher), true);
return new JsonCacheService<>(SubscriptionResource.class, map, mapper);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

import brave.Tracing;
import brave.TracingCustomizer;
import de.telekom.eni.pandora.horizon.tracing.HorizonTracer;
import de.telekom.eni.pandora.horizon.tracing.PandoraTracer;
import de.telekom.eni.pandora.horizon.tracing.TracingProperties;
import de.telekom.eni.pandora.horizon.tracing.HorizonTracer;
import jakarta.servlet.Filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.tracing.BraveAutoConfiguration;
Expand Down

0 comments on commit 5b28feb

Please sign in to comment.