OpenJDK / jep / jeps
changeset 194:b2f990fa2dde
187: Serialization 2.0
author | mr |
---|---|
date | Mon, 13 Jan 2014 16:26:37 -0800 |
parents | e60de85c9ecd |
children | 361b39000b21 |
files | jep-187.md |
diffstat | 1 files changed, 104 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jep-187.md Mon Jan 13 16:26:37 2014 -0800 @@ -0,0 +1,104 @@ +JEP: 187 +Title: Serialization 2.0 +Author: Brian Goetz +Organization: Oracle +Created: 2013/6/20 +Type: Research +State: Posted +Exposure: Open +Component: core/lang +Discussion: core dash libs dash dev at openjdk dot java dot net +Start: 2013/Q3 +Effort: M +Duration: M +Template: 1.0 + + +Summary +------- + +Java serialization, while useful, presents many challenges for code +safety, maintainability, and compatibility. It may be possible to +restructure serialization so that it is explicit, while still mostly +unintrusive, which would eliminate many current defects. + + +Goals +----- + +This is a _research JEP_. The sole goal of this JEP is to explore the +design space sufficiently to be able to propose a feature JEP (or +recommend that the feature not be pursued.) + + +Non-Goals +--------- + +It is not a goal of this research JEP to produce a production-ready +implementation or specification. + + +Success Metrics +--------------- + +This research JEP will be judged successful if it produces a design that +we wish to move forward to a feature JEP, or else certainty that we do +not wish to proceed with this feature. + + +Motivation +---------- + +A more flexible serialization mechanism will reduce errors and improve +maintainability of Java classes. A more secure serialization mechanism +will reduce the attack surface of Java applications. + + +Description +----------- + +Serialization, as currently specified, undermines the fundamental +object-oriented notion that a constructor can enforce that objects are +created with their representational invariants established. Because +serialization is implemented at the representation level, this basic +mechanism is bypassed, allowing objects to be created that do not respect +the invariants intended by the developer. A more explicit serialization +mechanism would also allow developers to directly express design intent +for schema evolution. + +The current design of serialization poses many hazards for developers: + + - Objects can be maliciously created that do not respect their + representational invariants; + + - Even in the absence of maliciously constructed bytestreams, old + serialized instances may still not be seen to respect the invariants + in the current version of the code, which means that one cannot + reason about representational invariants of runtime instances by + reading the source code only for the current version; + + - The mechanisms for influencing serialization and deserialization all + involve "magic" methods (like readResolve) or fields (like + serialVersionUID); + + - Evolving or refactoring a serializable class is often very difficult; + and, finally, + + - Developers are often forced to choose between serializability and + immutability, since final fields cannot be written from methods like + readObject(). + +The root cause of all of these problems was the desire to make +serialization transparent, and therefore "magic". If deserialization +were more explicitly represented in the programming model, then +deserialization could proceed through a constructor-like mechanism, which +would allow an opportunity to check or reestablish invariants, as well as +explicitly model for incorporating schema evolution. + +Issues to be explored by this effort: + + - Feasibility of compatibly evolving serialization through explicit + deserialization constructors; + - Compatibility with existing serialized objects; + - Migration concerns and tooling options; and + - Interactions with modularity.