In order to alter a versionable node (and its non-versionable subtree) the node must be checked-out. The checked-out state indicates to the repository and other clients that the current base version (the one pointed to be jcr:baseVersion) of N is “being worked on” and will (usually) be checked-in again at some point in the future, thus creating a new version. When a versionable node is first created (or an existing node is first made versionable, in those implementations that allow that) it will already be in the checked-out state (its jcr:checkedOut property is set to true).
To check-out a versionable node N, the client calls N.checkout. If the node is already checked out, this method has no effect. If N is not versionable then an UnsupportedRepositoryOperationException is thrown. Otherwise, a N.checkout will cause the following series of events:
The current value of N's jcr:baseVersion is copied to N's jcr:predecessors property.
N’s jcr:isCheckedOut property is set to true.
N and N's connected non-versionable subtree lose their read-only status (see 8.2.5 Check In, for an explanation of the term “connected non-versionable subtree”).
This method acts directly on the workspace and the version storage. All changes are persisted immediately. There is no need to call save.