Gestion de configuration applicative
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
1 - Chaque action sur les données est un Event
2 - Seuls les events sont sauvegardés (event store)
3 - L'état de la donnée est construit à partir des events
La problématique - Le concept - L'architecture - La technique - La démo
1 - Chaque action sur les données est un Event
2 - Seuls les events sont sauvegardés (event store)
3 - L'état de la donnée est construit à partir des events
La problématique - Le concept - L'architecture - La technique - La démo
2 - Seuls les events sont sauvegardés (event store)
3 - L'état de la donnée est construit à partir des events
La problématique - Le concept - L'architecture - La technique - La démo
1 - Chaque action sur les données est un Event
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
public final class PropertiesSavedEvent {
private final String applicationName;
private final String platformName;
private final String path;
private final PropertiesData properties;
private final String comment;
@JsonCreator
public PropertiesSavedEvent(@JsonProperty("applicationName")final String applicationName,
@JsonProperty("platformName") final String platformName,
@JsonProperty("path") final String path,
@JsonProperty("properties") final PropertiesData properties,
@JsonProperty("comment") final String comment) {
this.applicationName = applicationName;
this.platformName = platformName;
this.path = path;
this.properties = properties;
this.comment = comment;
}
// truncated for simplicity
}
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
127.0.0.1:6379> llen module-demoKatana-war-1.0.0.1-wc
(integer) 4
127.0.0.1:6379> lrange module-demoKatana-war-1.0.0.1-wc 0 3
1) "{\"eventType\":\"com.vsct.dt.hesperides.templating.modules.ModuleCreatedEven
t\",\"data\":\"{\\\"moduleCreated\\\":{\\\"name\\\":\\\"demoKatana-war\\\",\\\"v
ersion\\\":\\\"1.0.0.1\\\",\\\"working_copy\\\":true,\\\"technos\\\":[],\\\"vers
ion_id\\\":1},\\\"templates\\\":[{\\\"name\\\":\\\"application.properties\\\",\\
\"namespace\\\":\\\"modules#demoKatana-war#1.0.0.1#WORKINGCOPY\\\",\\\"filename\
\\":\\\"application.properties\\\",\\\"location\\\":\\\"/appl/{{username}}/prope
rties\\\",\\\"content\\\":\\\"spring.datasource.jndi-name=jdbc/demoKatana\\\\nin
fo.propriete_en_dur={{propriete_a_surcharger}}\\\\n{{#test}}\\\\n\\\\t{{prop2|co
mmentaire}}\\\\n{{/test}}\\\",\\\"version_id\\\":1}]}\",\"timestamp\":1448975559
026,\"user\":\"untracked\"}"
// truncated for simplicity
Long len = jedis.llen(streamName);
int i = 0, j = 0, counter = 0;
List<byte[]> events = jedis.lrange(streamName.getBytes(StandardCharsets.UTF_8), j, j + BATCH_SIZE - 1);
for (i = 0; i < events.size(); i++) {
Event event = MAPPER.readValue(events.get(i), Event.class);
Object hesperidesEvent = MAPPER.readValue(event.getData(), Class.forName(event.getEventType()));
eventConsumer.accept(hesperidesEvent);
}
// truncated for simplicity
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
// 1 - Create the event bus
EventBus eventBus = new EventBus();
// 2 - Create listener
public class ModuleEventsIndexation {
private final ElasticSearchIndexationExecutor indexer;
public ModuleEventsIndexation(final ElasticSearchIndexationExecutor indexer) {
this.indexer = indexer;
}
/* This is the event handler */
@Subscribe
public void deleteModule(final ModuleDeletedEvent event){
this.indexer.index(new DeleteModuleCommand(event));
}
// truncated for simplicity
}
// 3 - Register the listener
eventBus.register(new ModuleEventsIndexation(elasticSearchIndexationExecutor));
// 4 - Propagate the event
eventBus.post(event);
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
La problématique - Le concept - L'architecture - La technique - La démo
Back
Front
Docs
Docker
This presentation