blob: bae833f47c10e3ad74bcaabb04e407ff6cd3e8c9 [file] [log] [blame]
= 6. Task serialization
Date: 2019-10-02
== Status
Accepted (lazy consensus)
== Context
By switching the task manager to a distributed implementation, we need to be able to execute a `Task` on any node of the cluster.
We need to have a way to describe the `Task` to be executed and serialize it in order to be able to store it in the `Created` event.
Which will be persisted in the Event Store, and will be send in the event bus.
At this point in time a `Task` can contain any arbitrary code.
It's not an element of a finite set of actions.
== Decision
* Create a `Factory` for one `Task`
* Inject a `Factory` `Registry` via a Guice Module
* The `Task` `Serialization` will be done in JSON, We will get inspired by `EventSerializer`
* Every ``Task``s should have a specific integration test demonstrating that serialization works
* Each `Task` is responsible of eventually dealing with the different versions of the serialized information
== Consequences
* Every ``Task``s should be serializable.
* Every ``Task``s should provide a `Factory` which would be responsible to deserialize the task and instantiate it.
* Every `Factory` should be registered through a Guice module to be created for each project containing a `Factory`