public static Db4objects.Drs.Db4o.ReplicationRecord BeginReplication(Transaction transA, Transaction transB) { ObjectContainerBase peerA = transA.Container(); ObjectContainerBase peerB = transB.Container(); Db4oDatabase dbA = ((IInternalObjectContainer)peerA).Identity(); Db4oDatabase dbB = ((IInternalObjectContainer)peerB).Identity(); dbB.Bind(transA); dbA.Bind(transB); Db4oDatabase younger = null; Db4oDatabase older = null; if (dbA.IsOlderThan(dbB)) { younger = dbB; older = dbA; } else { younger = dbA; older = dbB; } Db4objects.Drs.Db4o.ReplicationRecord rrA = QueryForReplicationRecord(peerA, transA , younger, older); Db4objects.Drs.Db4o.ReplicationRecord rrB = QueryForReplicationRecord(peerB, transB , younger, older); if (rrA == null) { if (rrB == null) { return(new Db4objects.Drs.Db4o.ReplicationRecord(younger, older)); } rrB.Store(peerA); return(rrB); } if (rrB == null) { rrA.Store(peerB); return(rrA); } if (rrA != rrB) { peerB.ShowInternalClasses(true); try { int id = peerB.GetID(transB, rrB); peerB.Bind(transB, rrA, id); } finally { peerB.ShowInternalClasses(false); } } return(rrA); }
internal virtual Db4oDatabase Produce(byte[] signature, long creationTime) { Db4oDatabase db = (Db4oDatabase)_identities.Get(signature); if (db != null) { return(db); } db = new Db4oDatabase(signature, creationTime); db.Bind(_stream.Transaction); _identities.Put(signature, db); return(db); }