Example #1
0
        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);
        }