Specializing a Checkpoint Kind

Any attempt to access a checkpoint of a kind which is not registered will simply fail. Developers need to specialize the checkpoint::CheckpointKind to implement recovery and migration operation.

        interface CheckpointKind : checkpoint::CheckpointKind
        {
        };

        entity CheckpointKindImpl
        {`
          [ virtual ]
          void migrate(
              in string i_key,
              in string i_productVersion,
              in string i_applicationVersion,
              in string i_originalBuffer,
              out string o_modifiedBuffer)
              raises (checkpoint::OperationFailed);

          [ virtual ]
          void recover(
              in string i_key,
              in string i_buffer)
              raises (checkpoint::OperationFailed);
        `};

        expose entity CheckpointKindImpl with interface CheckpointKind;

        action ::pkg::CheckpointKindImpl::recover
        {`
          // Recover from the checkpoint buffer
          //
        `};

        action ::pkg::CheckpointKindImpl::migrate
        {`
          // Migrate the checkpoint buffer
          //
        `};