|
using System;
using System.Linq;
using Raven.Client.Document;
using Raven.Client.Shard.ShardStrategy;
namespace Raven.Client.Shard
{
public class ShardedDocumentStore : IDocumentStore
{
public event Action<string, int, object> Stored;
public ShardedDocumentStore(IShardStrategy shardStrategy, Shards shards)
{
if (shards == null || shards.Count == 0)
throw new ArgumentException("Must have one or more shards", "shards");
if (shardStrategy == null)
throw new ArgumentException("Must have shard strategy", "shardStrategy");
this.shardStrategy = shardStrategy;
this.shards = shards;
}
private readonly IShardStrategy shardStrategy;
private readonly Shards shards;
public string Identifier { get; set; }
#region IDisposable Members
public void Dispose()
{
Stored = null;
foreach (var shard in shards)
shard.Dispose();
}
#endregion
public IDocumentSession OpenSession()
{
return new ShardedDocumentSession(shardStrategy, shards.Select(x => x.OpenSession()).ToArray());
}
public IDocumentStore Initialise()
{
try
{
foreach (var shard in shards)
{
shard.Stored += Stored;
shard.Initialise();
}
}
catch (Exception)
{
Dispose();
throw;
}
return this;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I've been a software developer since 1996 and have enjoyed C# since 2003. I have a Bachelor's degree in Computer Science and for some reason, a Master's degree in Business Administration. I currently do software development contracting/consulting.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.