2010-09-09 44 views

回答

3

據我所知這是不可能的=(。當你嘗試運行一個備份,而一個正在進行的時候,你會得到一個BackupInProgressException。這樣你就知道已經有一個備份正在進行中

但是這不是一個真正的通知,並在很多情況下不usfull

但是有一個複雜的工作,各地可以提供自己的存儲執行備份過程:

的IStorage myStorage = ...; container.Ext()。Backup(myStorage,「backup.db4o.bak」);

這樣你就可以實現一個通知你的包裝存儲。您構建一個實現IStorage接口的裝飾器。返回的IBin實例會在關閉時通知您。當備份調用IBin實例的close-methon時,您知道它已完成。

這是一個草案是如何完成的。 (不是testet或任何東西)。 StorageDecorator是IStorage裝飾器的基類,它包含在db4o中。

class NotificationStorageDecorator : StorageDecorator 
{ 
    public NotificationStorageDecorator(IStorage storage) : base(storage) 
    { 

    } 

    public NotificationStorageDecorator() : this(new FileStorage()){} 

    protected override IBin Decorate(BinConfiguration config, IBin bin) 
    { 
     return new MyNotificationBin(bin);  
    } 

    class MyNotificationBin : BinDecorator 
    { 
     public MyNotificationBin(IBin bin) : base(bin) 
     { 
     } 

     public override void Close() 
     { 
      base.Close(); 
      // Implement here your notification-mechanism 
      // For example with events etc 
      Console.Out.WriteLine("Backup-done"); 
     } 
    } 
} 

//然後用它

  var notifactionStorage = new NotificationStorageDecorator(); 
      container.Ext().Backup(notifactionStorage,"backup.db4o.back"); 
+0

+1 @Gamlor我覺得這是圍繞一個非常合理的工作。如果沒有其他人有東西,我一定會嘗試這個。 – eglasius 2010-09-09 16:42:39

+0

@eglasius你有這個成功嗎?我們仍然有一個遺留系統,並提高我們需要了解的關於完成備份的可靠性。 – 2013-12-15 11:07:58

+0

對不起,但最後,我們再也沒有回來試試這個:( – eglasius 2013-12-16 23:04:06