我無法使複製在兩個db4o數據庫之間完全運行。我遵循了很多教程,我的代碼似乎與他們一致(顯然不是)。輸出表明ReplicationSession檢測到更改,但不會複製其他數據庫中的更改。db4o到db4o複製不完全複製
private ReflectiveDatabase()
{
openDb();
providerA = new Db4oEmbeddedReplicationProvider(hostContainer);
providerB = new Db4oEmbeddedReplicationProvider(clientContainer);
//Start a new ReplicationSession with event for replacing newest object on conflict.
replication = Replication.begin(providerA, providerB,
new ReplicationEventListener() {
@Override
public void onReplicate(ReplicationEvent replicationEvent) {
if (replicationEvent.isConflict()) {
ObjectState stateDesktop = replicationEvent.stateInProviderA();
ObjectState stateMobile = replicationEvent.stateInProviderB();
if (stateDesktop.modificationDate() >= stateMobile.modificationDate()) {
replicationEvent.overrideWith(stateDesktop);
} else {
replicationEvent.overrideWith(stateMobile);
}
}
}
});
}
public EmbeddedConfiguration configure()
{
EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
configuration.file().generateUUIDs(ConfigScope.GLOBALLY);
configuration.file().generateCommitTimestamps(true);
return configuration;
}
public void openDb()
{
// try to connect to the host
if(hostContainer != null) hostContainer.close();
try
{
hostContainer = Db4oEmbedded.openFile(configure(), "local1.db4o");
}
catch (com.db4o.ext.Db4oIOException e)
{
...
}
// try to connect to the client
if(clientContainer != null)
{
clientContainer.close();
}
try
{
clientContainer = Db4oEmbedded.openFile(configure(), "local2.db4o");
}
catch (com.db4o.ext.Db4oIOException e)
{
...
}
}
這裏是我已經從一個計時器每787-8
public void syncDatabases()
{
// First get the changes of the two replication-partners
ObjectSet<Object> changesOnHost = replication.providerA().objectsChangedSinceLastReplication();
ObjectSet<Object> changesOnClient = replication.providerB().objectsChangedSinceLastReplication();
System.out.println("Changes on Server: " + changesOnHost.size());
System.out.println("Changes on Client: " + changesOnClient.size());
// then iterate over both change-sets and replicate it
for (Object changedObjectOnClient : changesOnClient)
{
replication.replicate(changedObjectOnClient);
}
for (Object changedObjectOnHost : changesOnHost)
{
replication.replicate(changedObjectOnHost);
}
replication.commit();
}
public void writeToClient(Object object)
{
clientContainer.store(object);
clientContainer.commit();
}
作品就好了創建並寫入到數據庫中的新對象運行的實際同步。
如果我從其中一個數據庫(如字段更改)寫入更改的對象,則運行時的同步方法將會檢測到存在更改的對象,並且事實上它是正確的,並且其字段已更改。但是,我沒有看到該對象正在其他數據庫中複製。其字段與更改的對象字段不同。
難道我只是對db4o的複製能力有一種誤解嗎?作爲第二年,我的聯賽有點不合時宜,但如果任何人都可以看到我的錯在哪裏,我將不勝感激。
上面的代碼是使用bd4o的8.0.249.16098,drs ... – Spleen
我已經更改爲版本7.12,並且具有完全複製功能。由於這兩個版本之間有很大的不同,方法不同,但我又一次遵循了文檔中的教程。我不知道爲什麼上面的版本8不起作用,所以我會說這是沒有答案,只是解決。 – Spleen