make_persistent (Vapor::Persistable)

    # File vapor/persistable.rb, line 116
        def make_persistent
          raise RepositoryOfflineError, "no PersistenceManager available" unless @@pmgr
          raise PersistableReadOnlyError if self.persistent_readonly?

          if self.state != TRANSIENT then
            raise ObjectAlreadyPersistentError
          end

        @@pmgr.try_change_state( self ){
          @vapor_state = NEW
          @vapor_oid = @@pmgr.next_oid
          @vapor_revision = 0

          @@pmgr.new_object( self )

          ## search reference attributes and mark them persistent, too
          self.class.metadata.nil? or begin
          self.class.metadata.select{|m| m.type == ClassAttribute::Reference }.each{|md|
            attribute = eval "@#{md.name}"
            next if attribute.nil?

            if md.is_array then  # this is supposed to be an array
              raise VaporTypeError, "non-array where Array of Persistables expected" unless attribute.is_a? Array
              attribute.each{|a|
                raise VaporTypeError, "non-Persistable found in Array of Persistables" unless a.kind_of? Persistable
                # make it persistent, if it's not yet
                if a.state == TRANSIENT then
                  a.make_persistent
                end
              }
            else                 # normal Persistable
              raise VaporTypeError, "non-Persistable #{attribute.inspect} at #{md.name} here Persistable expected" unless attribute.kind_of? Persistable
              # make it persistent, if it's not yet
              if attribute.state == TRANSIENT then
                attribute.make_persistent
              end
            end

          }
          rescue VaporTypeError => e  # some kind of type error, abort
            @vapor_state = TRANSIENT
            @vapor_oid = nil
            raise
          end
        }

        end