internal void ActivatePending(Transaction ta) { while (_stillToActivate != null) { // TODO: Optimize! A lightweight int array would be faster. IEnumerator i = new Iterator4Impl(_stillToActivate); _stillToActivate = null; while (i.MoveNext()) { ObjectContainerBase.PendingActivation item = (ObjectContainerBase.PendingActivation )i.Current; ObjectReference @ref = item.@ref; object obj = @ref.GetObject(); if (obj == null) { ta.RemoveReference(@ref); } else { @ref.ActivateInternal(ActivationContextFor(ta, obj, item.depth)); } } } }
public ObjectReference Bind2(Transaction trans, ObjectReference oldRef, object obj ) { int id = oldRef.GetID(); trans.RemoveReference(oldRef); ObjectReference newRef = new ObjectReference(ClassMetadataForObject(obj), id); newRef.SetObjectWeak(this, obj); newRef.SetStateDirty(); trans.ReferenceSystem().AddExistingReference(newRef); return newRef; }
public HardObjectReference GetHardObjectReferenceById(Transaction trans, int id) { if (id <= 0) { return HardObjectReference.Invalid; } ObjectReference @ref = trans.ReferenceForId(id); if (@ref != null) { // Take care about handling the returned candidate reference. // If you loose the reference, weak reference management might also. object candidate = @ref.GetObject(); if (candidate != null) { return new HardObjectReference(@ref, candidate); } trans.RemoveReference(@ref); } @ref = new ObjectReference(id); object readObject = @ref.Read(trans, new LegacyActivationDepth(0), Const4.AddToIdTree , true); if (readObject == null) { return HardObjectReference.Invalid; } // check class creation side effect and simply retry recursively // if it hits: if (readObject != @ref.GetObject()) { return GetHardObjectReferenceById(trans, id); } return new HardObjectReference(@ref, readObject); }