updated documentation
This commit is contained in:
parent
a0b98ee6d6
commit
32fa99be15
|
@ -102,7 +102,7 @@ which produces the following type definition:
|
||||||
"extendedTypes": [ "Facet" ]
|
"extendedTypes": [ "Facet" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
At a certain point, the information-system-model introduces the following Property type, which models an event.
|
At a certain point, the ``information-system-model`` introduces the following ``Property`` type, which models an event.
|
||||||
|
|
||||||
.. code:: java
|
.. code:: java
|
||||||
|
|
||||||
|
@ -267,9 +267,11 @@ which produces the following type definition:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
So imagine you want to update the 'EventFacet' type definition to use this property type instead of the 'date' and 'event' properties.
|
So imagine you want to update the ``EventFacet`` type definition to use this property type instead of the ``date`` and ``event`` properties.
|
||||||
|
|
||||||
To update the 'EventFacet' there are different strategies:
|
The objective is to obtain a facet with ``event`` property as an ``Event``.
|
||||||
|
|
||||||
|
To update the ``EventFacet`` there are different strategies:
|
||||||
|
|
||||||
|
|
||||||
Java Backwards Compatibility
|
Java Backwards Compatibility
|
||||||
|
@ -409,7 +411,6 @@ which produces the following type definition:
|
||||||
"extendedTypes": [ "Facet" ]
|
"extendedTypes": [ "Facet" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
The implementation should be something like this:
|
The implementation should be something like this:
|
||||||
|
|
||||||
.. code:: java
|
.. code:: java
|
||||||
|
@ -544,9 +545,10 @@ The implementation should be something like this:
|
||||||
|
|
||||||
|
|
||||||
With this strategy, any Java client reading the event facet instantiated with the old
|
With this strategy, any Java client reading the event facet instantiated with the old
|
||||||
model will remap the 'date' and 'event' properties to an instance of 'Event' named 'event'.
|
model will remap the ``date`` and ``event`` properties to an instance of ``Event`` named ``event``.
|
||||||
|
|
||||||
We receive
|
|
||||||
|
We receive:
|
||||||
|
|
||||||
.. code:: javascript
|
.. code:: javascript
|
||||||
|
|
||||||
|
@ -557,7 +559,7 @@ We receive
|
||||||
"event": "certified"
|
"event": "certified"
|
||||||
}
|
}
|
||||||
|
|
||||||
which will be serialized in turn as:
|
which will be serialized/deserialized in turn as:
|
||||||
|
|
||||||
.. code:: javascript
|
.. code:: javascript
|
||||||
{
|
{
|
||||||
|
@ -575,8 +577,48 @@ which will be serialized in turn as:
|
||||||
}
|
}
|
||||||
|
|
||||||
The problem of this solution is that if the facet is updated to the new format in the server and
|
The problem of this solution is that if the facet is updated to the new format in the server and
|
||||||
there are old clients they will not be able to deserialise the new version.
|
there are old clients they will not be able to deserialize the new version.
|
||||||
|
|
||||||
|
With this solution the 'event' property in the server is of type ANY (an Object in Java)
|
||||||
|
|
||||||
|
|
||||||
|
.. code:: java
|
||||||
|
|
||||||
|
@ISProperty(name=EVENT_PROPERTY, type=Object.class, description = ....
|
||||||
|
public Event getTheEvent();
|
||||||
|
|
||||||
|
The ``@ISProperty`` annotation specifies the type of the property ``type=Object.class`` instead of letting the system to get the type from the function return, i.e. ``Event``.
|
||||||
|
The type definition in JSON has:
|
||||||
|
|
||||||
|
.. code:: javascript
|
||||||
|
|
||||||
|
"propertyType": "Any"
|
||||||
|
|
||||||
|
|
||||||
|
PRO:
|
||||||
|
* the name of the variable is already ``event`` as we want as final objective.
|
||||||
|
|
||||||
|
CONS:
|
||||||
|
* the server cannot check the validity of the variable received from an updating client.
|
||||||
|
|
||||||
|
The future release of ``EventFacet`` will
|
||||||
|
|
||||||
|
* remove ``type=Object.class`` from ``@ISProperty`` annotation;
|
||||||
|
* remove deprecated methods from the Java interface and its implementation:
|
||||||
|
* ``public Date getDate();``
|
||||||
|
* ``public void setDate(Date date);``
|
||||||
|
* ``public String getEvent();``
|
||||||
|
* ``public void setEvent(String event);``
|
||||||
|
* deprecate ``public Event getTheEvent();``
|
||||||
|
* add ``public Event getEvent();``
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Java and Javascript Backwards Compatibility
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
This solution is Java compliant from a code perspective and the old properties are keep for old clients.
|
||||||
|
|
||||||
.. code:: java
|
.. code:: java
|
||||||
|
|
||||||
|
@ -810,6 +852,7 @@ The implementation should be the following:
|
||||||
*
|
*
|
||||||
* It eventually instantiate {@link Event} if null.
|
* It eventually instantiate {@link Event} if null.
|
||||||
*/
|
*/
|
||||||
|
@JsonSetter("event")
|
||||||
public void setEvent(String event) {
|
public void setEvent(String event) {
|
||||||
if(event == null) {
|
if(event == null) {
|
||||||
this.theEvent = new EventImpl();
|
this.theEvent = new EventImpl();
|
||||||
|
@ -838,3 +881,74 @@ The implementation should be the following:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
With this strategy, any Java client reading the event facet instantiated with the old
|
||||||
|
model will remap the 'date' and 'event' properties to an instance of 'Event' named 'theEvent'.
|
||||||
|
The old properties 'date' and 'event' properties are still available for old clients.
|
||||||
|
|
||||||
|
We receive
|
||||||
|
|
||||||
|
.. code:: javascript
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "EventFacet",
|
||||||
|
"id": "d9f91175-8c33-4f68-8619-48e6feca4e47",
|
||||||
|
"date": "2024-01-08 12:52:59.907 +0100",
|
||||||
|
"event": "certified"
|
||||||
|
}
|
||||||
|
|
||||||
|
which will be serialized/deserialized in turn as:
|
||||||
|
|
||||||
|
.. code:: javascript
|
||||||
|
{
|
||||||
|
"type": "EventFacet",
|
||||||
|
"id": "d9f91175-8c33-4f68-8619-48e6feca4e47",
|
||||||
|
"date": "2024-01-08 12:52:59.907 +0100"
|
||||||
|
"event": "certified",
|
||||||
|
"theEvent": {
|
||||||
|
"type": "Event",
|
||||||
|
"what": "certified",
|
||||||
|
"when": "2024-01-08 11:52:59.907 +0000",
|
||||||
|
"who": null,
|
||||||
|
"where": null,
|
||||||
|
"why": null,
|
||||||
|
"how": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
With this solution we use ``theEvent`` property in the server of type Event which validity can be checked by the server:
|
||||||
|
|
||||||
|
PRO:
|
||||||
|
* the server can check the validity of the variable received from an updating client.
|
||||||
|
|
||||||
|
CONS:
|
||||||
|
* the name of the variable is ``theEvent`` and only in a future step will be changed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The future release of ``EventFacet`` will
|
||||||
|
|
||||||
|
* remove deprecated methods from the Java interface and its implementation:
|
||||||
|
* ``public Date getDate();``
|
||||||
|
* ``public void setDate(Date date);``
|
||||||
|
* ``public String getEvent();``
|
||||||
|
* ``public void setEvent(String event);``
|
||||||
|
* deprecate ``public Event getTheEvent();``
|
||||||
|
* add ``public Event getEvent();``
|
||||||
|
|
||||||
|
Both ``event`` and ``theEvent`` will coexist until the next version.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
This solution has the following issue:
|
||||||
|
``date`` and ``event`` may not align with ``theEvent`` if updated from old clients.
|
||||||
|
|
||||||
|
The proposed implementation involves ``setTheEvent()``, which could potentially overwrite ``date`` if invoked by Jackson beforehand.
|
||||||
|
Therefore, implementing this correctly requires careful consideration.
|
||||||
|
|
||||||
|
It's important to note that only old clients might disalign the ``date``.
|
||||||
|
As a result, the most advanced values always reside in the old properties.
|
||||||
|
Conversely, a new client would have already corrected and aligned them.
|
||||||
|
|
||||||
|
Of course, there is no resolution for bugged new clients causing misalignments,
|
||||||
|
but that's a separate issue not covered in this guide.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue