It's quite often the case that you need replication in both directions. For example when you have a mobile device which keeps the data in sync with a desktop PC. Changes on the both partners have to be replicated to the other partner.
First, make sure that you've prepared and configured db4o properly. See "Simple Example"
Start a replication-session with the two replication partners. Note that no replication direction is set.
IObjectContainer desktopDatabase = OpenDatabase(DesktopDatabaseName); IObjectContainer mobileDatabase = OpenDatabase(MobileDatabaseName); IReplicationProvider dektopReplicationProvider = new Db4oEmbeddedReplicationProvider(desktopDatabase); IReplicationProvider mobileReplicationProvider = new Db4oEmbeddedReplicationProvider(mobileDatabase); IReplicationSession replicationSession = Replication.Begin(dektopReplicationProvider, mobileReplicationProvider);
Dim desktopDatabase As IObjectContainer = OpenDatabase(DesktopDatabaseName) Dim mobileDatabase As IObjectContainer = OpenDatabase(MobileDatabaseName) Dim dektopReplicationProvider As IReplicationProvider _ = New Db4oEmbeddedReplicationProvider(desktopDatabase) Dim mobileReplicationProvider As IReplicationProvider _ = New Db4oEmbeddedReplicationProvider(mobileDatabase) Dim replicationSession As IReplicationSession _ = Replication.Begin(dektopReplicationProvider, mobileReplicationProvider)
Then get the changed objects from both replication partners. Each replication partner returns the updated and created object in a object-set. Then iterate over both object-sets and replicate the changes.
// First get the changes of the two replication-partners IObjectSet changesOnDesktop = replicationSession.ProviderA().ObjectsChangedSinceLastReplication(); IObjectSet changesOnMobile = replicationSession.ProviderB().ObjectsChangedSinceLastReplication(); // then iterate over both change-sets and replicate it foreach (object changedObjectOnDesktop in changesOnDesktop) { replicationSession.Replicate(changedObjectOnDesktop); } foreach (object changedObjectOnMobile in changesOnMobile) { replicationSession.Replicate(changedObjectOnMobile); } replicationSession.Commit();
' First get the changes of the two replication-partners Dim changesOnDesktop As IObjectSet _ = replicationSession.ProviderA().ObjectsChangedSinceLastReplication() Dim changesOnMobile As IObjectSet _ = replicationSession.ProviderB().ObjectsChangedSinceLastReplication() ' then iterate over both change-sets and replicate it For Each changedObjectOnDesktop As Object In changesOnDesktop replicationSession.Replicate(changedObjectOnDesktop) Next For Each changedObjectOnMobile As Object In changesOnMobile replicationSession.Replicate(changedObjectOnMobile) Next replicationSession.Commit()