A good suggestion Isuru!

I think the best option is to move the registry based data store to a
database due to many reasons. Jane started this effort sometime back but it
was halted.

Thanks

On Tue, Nov 24, 2015 at 3:35 PM, Isuru Haththotuwa <isu...@apache.org>
wrote:

> Hi Devs,
>
> We are heavily using serialization to store context/runtime data
> throughout Stratos, and we depend on the default serialization mechanism
> provided by Java. The downside of this is if a Serialized class is changed
> (adding/removing a non-transient and non-static class variables), we cannot
> use any data serialized with the older version of the same class. The only
> option in this case is to start with a new deployment of Stratos.
>
> Currently since we are using the default serialization/deserialization
> capabilities by implementing Java Serializable interface, we have no
> control over this process. But, if we implement Externalizable [1]
> interface, we actually can have some control over the
> serialization/deserialization. With this, its the responsibility of the
> implementing class to maintain the serialization/deserialization logic.
>
> To maintain the backward compatibility of serialized data, AFAIU we can do
> the following:
>
>    - Maintain a version for serialized classes (ex.:
>    CloudControllerContext - version 4.1.4)
>    - Write our own serialization/deserialization logic, depending on the
>    version
>    - If a change occurs to the class such that previously deserialized
>    data can not be used (adding a non-transient member to the class, etc.),
>    increment the version of the relevant class and modify the deserialization
>    logic as shown in [2]
>
> Therefore, even in there is a change to the class signature, still the
> already serialized data can be de-serialized from the previous version. I
> did a quick PoC for custom serialization and deserialization using
> CloudControllerContext class, which worked fine.
>
> There are few downsides of this approach though:
>
>    1. Maintain our own serialization/deserialization logic, requires
>    updating if a change occurs in the relevant classes
>    2. The Externalizable interface requires a default non argument
>    Constructor to work, and that will require some design changes (since we
>    have private/non-default constructors in a few singleton Context classes)
>
> wdyt?
>
> [1]. https://docs.oracle.com/javase/7/docs/api/java/io/Externalizable.html
>
> [2].
> if ("4.1.4".equals(CC_CONTEXT_VERSION)) {
>      // de-serialize members in 4.1.4 version
> } else if ("4.1.5".equals(CC_CONTEXT_VERSION)) {
>      // de-serialize members in 4.1.5 version
> }
>
>
> --
> Thanks and Regards,
>
> Isuru H.
> +94 716 358 048* <http://wso2.com/>*
>
>
>


-- 
Imesh Gunaratne

Senior Technical Lead, WSO2
Committer & PMC Member, Apache Stratos

Reply via email to