2010-09-09 45 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