Code Monkey home page Code Monkey logo

documently's Introduction

Documently

This is a sample application showcasing a DDD/CQRS architecture with Event Sourcing with a number of excellent open source software technologies. I (Henrik) want to make it easy for people to get started with this architecture - why not try to maximize developer happiness and make the world a better place and learn it yourself while you're at it?

Some of the concepts you can learn include:

  • Creating a Caliburn Micro WPF client with a ribbon, which uses the EventAggregator pattern for its reactive UI and wires itself up with Castle Windsor.
  • How to configure MassTransit with RabbitMQ
  • How to write unit-tests for aggregate roots based on simple invoke-method, read resulting events.
  • How to use CommonDomain to publish committed events
  • Getting started with RavenDB
  • Getting started with RabbitMQ
  • Doing application validation logic (non-emptyness, etc) with FluentValidation
  • How to use TopShelf with the DomainService (in daemon/Windows Service mode, not hosted).

Currently incomplete but upcoming features:

  • Properly handling de-duplication of events on the read-side
  • Properly handling replaying of the event store from the last received point forward on the read-side
  • Finishing implementing the Document-part of the App and WpfClient
  • Running a WPF, a iOS phone and console application side-by-side and having the system work as a whole.
  • Implement the indexing logic for the Document-part of the domain using SVMs.

The above tasks are rather easy to accomplish, they just take a few hours worth of time - so if you feel up for learning the concepts of CQRS and Event Sourcing, feel free to have a go and send a pull-request!

Getting started

First, start the event-store and view-store - RavenDB.Server, in this case. It can be found in src\packages\RavenDB.1.x.x\server. Once this is done, install RabbitMQ

There are two sample clients: one WPF Client with a nice UI and one console application for a quick start. Before using them, you need to compile the solution and start the Documently.Domain.Service console application. This is the domain service that handles the domain logic and broadcasts the (domain) events.

Once both RavenDB and the Domain Service are started without error messages, start one of the clients, or both and try it out!

Note: When starting Domain Service the first time you will need to run it as admin to avoid getting error messages from MassTransit's Performance Counters - or you can run it and just ignore those messages.

Credits

The sample is based on code by:

CommonDomain documentation at https://github.com/haf/CommonDomain/wiki/Intro-to-Common-Domain You can find more information about CQRS in the wiki: https://github.com/haf/Documently/wiki

documently's People

Contributors

chribben avatar haf avatar mbp avatar moramatte avatar waysec avatar whyer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

documently's Issues

Provide projects bootstrapper

Bootstrapper should:

  • Help user download the dependencies
  • Let the user choose between in-memory samples and RMQ-samples.

error running the app

This happens when I run the console app having fired up the raven db server and the domain service:

eate(CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\sr
c\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:lin
e 70
at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(Cr
eationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castl
e.Windsor\MicroKernel\ComponentActivator\AbstractComponentActivator.cs:line 75
at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationCont
ext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor
MicroKernel\Lifestyle\AbstractLifestyleManager.cs:line 42
at Castle.MicroKernel.Lifestyle.SingletonLifestyleManager.Resolve(CreationCon
text context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor
\MicroKernel\Lifestyle\SingletonLifestyleManager.cs:line 50
at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext con
text, Boolean requiresDecommission, Boolean instanceRequired) in c:\TeamCity\bui
ldAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel\Handlers\DefaultHan
dler.cs:line 61
at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex
t, Boolean instanceRequired) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src
\Castle.Windsor\MicroKernel\Handlers\AbstractHandler.cs:line 771
at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex
t) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKerne
l\Handlers\AbstractHandler.cs:line 369
at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveServiceDepen
dency(CreationContext context, ComponentModel model, DependencyModel dependency)
in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel
Resolvers\DefaultDependencyResolver.cs:line 390
at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.Resolve(CreationCon
text context, ISubDependencyResolver contextHandlerResolver, ComponentModel mode
l, DependencyModel dependency) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\s
rc\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:line 243
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateCons
tructorArgumentsCore(ConstructorCandidate constructor, Object[] arguments, Creat
ionContext context, Type[] signature) in c:\TeamCity\buildAgent\work\83ad55e3df1
8b1a8\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivato
r.cs:line 353
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateCons
tructorArguments(ConstructorCandidate constructor, CreationContext context, Type
[]& signature) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windso
r\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:line 338
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiat
e(CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\C
astle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:line 9
0
at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCr
eate(CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\sr
c\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:lin
e 70
at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(Cr
eationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castl
e.Windsor\MicroKernel\ComponentActivator\AbstractComponentActivator.cs:line 75
at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationCont
ext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor
MicroKernel\Lifestyle\AbstractLifestyleManager.cs:line 42
at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext con
text, Boolean requiresDecommission, Boolean instanceRequired) in c:\TeamCity\bui
ldAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel\Handlers\DefaultHan
dler.cs:line 61
at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex
t, Boolean instanceRequired) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src
\Castle.Windsor\MicroKernel\Handlers\AbstractHandler.cs:line 771
at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex
t) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKerne
l\Handlers\AbstractHandler.cs:line 369
at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler, Type s
ervice, IDictionary additionalArguments) in c:\TeamCity\buildAgent\work\83ad55e3
df18b1a8\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:line 899
at Castle.MicroKernel.DefaultKernel.Resolve(Type service, IDictionary argumen
ts) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKern
el\DefaultKernel_Resolve.cs:line 188
at Castle.Facilities.TypedFactory.TypedFactoryComponent.Resolve(IKernel kerne
l) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\Facilities
\TypedFactory\TypedFactoryComponent.cs:line 76
at Castle.Facilities.TypedFactory.Internal.TypedFactoryInterceptor.Resolve(II
nvocation invocation) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle
.Windsor\Facilities\TypedFactory\Internal\TypedFactoryInterceptor.cs:line 205
at Castle.Facilities.TypedFactory.Internal.TypedFactoryInterceptor.Intercept(
IInvocation invocation) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Cast
le.Windsor\Facilities\TypedFactory\Internal\TypedFactoryInterceptor.cs:line 89
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.Func1Proxy.Invoke() at Documently.Domain.CommandHandlers.CreateCustomerCommandHandler.Consume(Cre ateNewCustomer command) in C:\Users\Wayne Douglas\Dev\Scratch\Documently\src\Doc umently.Domain\CommandHandlers\CreateCustomerCommandHandler.cs:line 21 at MassTransit.Pipeline.Sinks.ConsumerMessageSink2.<>c__DisplayClass1.b__0(IConsumeContext1 context) in d:\BuildAgent-02\work\8d1373c869590c5b\sr c\MassTransit\Pipeline\Sinks\ConsumerMessageSink.cs:line 55 at MassTransit.Pipeline.Sinks.InboundConvertMessageSink1.<>c__DisplayClass2.
<>c__DisplayClass4.b__1(IConsumeContext x) in d:\BuildAgent-02\work\8
d1373c869590c5b\src\MassTransit\Pipeline\Sinks\InboundConvertMessageSink.cs:line
45
at MassTransit.Context.ServiceBusReceiveContext.DeliverMessageToConsumers(IRe
ceiveContext context) in d:\BuildAgent-02\work\8d1373c869590c5b\src\MassTransit
Context\ServiceBusReceiveContext.cs:line 113
2012-02-28 14:49:38,475 [22] ERROR MassTransit.Transports.Endpoint [(null)] - An
exception was thrown by a message consumer
MassTransit.Exceptions.MessageException: At least one consumer threw an exceptio
n ---> EventStore.Persistence.StorageUnavailableException: Unable to connect to
the remote server ---> System.Net.WebException: Unable to connect to the remote
server ---> System.Net.Sockets.SocketException: No connection could be made beca
use the target machine actively refused it 127.0.0.1:8081
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
ss socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at Raven.Client.Connection.HttpJsonRequest.ReadStringInternal(Func1 getRespo nse) in c:\Builds\raven\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:l ine 257 at Raven.Client.Connection.HttpJsonRequest.ReadResponseString() in c:\Builds\ raven\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:line 172 at Raven.Client.Connection.ServerClient.DirectPutIndex(String name, String op erationUrl, Boolean overwrite, IndexDefinition definition) in c:\Builds\raven\Ra ven.Client.Lightweight\Connection\ServerClient.cs:line 641 at Raven.Client.Connection.ServerClient.<>c__DisplayClass2f.<PutIndex>b__2e(S tring operationUrl) in c:\Builds\raven\Raven.Client.Lightweight\Connection\Serve rClient.cs:line 621 at Raven.Client.Connection.ServerClient.TryOperation[T](Func2 operation, Str
ing operationUrl, Boolean avoidThrowing, T& result) in c:\Builds\raven\Raven.Cli
ent.Lightweight\Connection\ServerClient.cs:line 185
at Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](String meth
od, Func`2 operation) in c:\Builds\raven\Raven.Client.Lightweight\Connection\Ser
verClient.cs:line 150
at Raven.Client.Connection.ServerClient.PutIndex(String name, IndexDefinition
definition, Boolean overwrite) in c:\Builds\raven\Raven.Client.Lightweight\Conn
ection\ServerClient.cs:line 621
at Raven.Client.Indexes.AbstractIndexCreationTask.Execute(IDatabaseCommands d
atabaseCommands, DocumentConvention documentConvention) in c:\Builds\raven\Raven
.Client.Lightweight\Indexes\AbstractIndexCreationTask.cs:line 89
at Raven.Client.Indexes.AbstractIndexCreationTask.Execute(IDocumentStore stor
e) in c:\Builds\raven\Raven.Client.Lightweight\Indexes\AbstractIndexCreationTask
.cs:line 76
at EventStore.Persistence.RavenPersistence.RavenPersistenceEngine.<Initialize

b__0() in c:\Code\public\EventStore\src\proj\EventStore.Persistence.RavenPersis
tence\RavenPersistenceEngine.cs:line 78
at EventStore.Persistence.RavenPersistence.RavenPersistenceEngine.TryRaven[T](Func1 callback) in c:\Code\public\EventStore\src\proj\EventStore.Persistence.R avenPersistence\RavenPersistenceEngine.cs:line 337 --- End of inner exception stack trace --- at EventStore.Persistence.RavenPersistence.RavenPersistenceEngine.TryRaven[T](Func1 callback) in c:\Code\public\EventStore\src\proj\EventStore.Persistence.R
avenPersistence\RavenPersistenceEngine.cs:line 342
at EventStore.Persistence.RavenPersistence.RavenPersistenceEngine.Initialize(
) in c:\Code\public\EventStore\src\proj\EventStore.Persistence.RavenPersistence
RavenPersistenceEngine.cs:line 74
at EventStore.Dispatcher.SynchronousDispatchScheduler.Start() in c:\Code\publ
ic\EventStore\src\proj\EventStore.Core\Dispatcher\SynchronousDispatchScheduler.c
s:line 42
at EventStore.Dispatcher.SynchronousDispatchScheduler..ctor(IDispatchCommits
dispatcher, IPersistStreams persistence) in c:\Code\public\EventStore\src\proj\E
ventStore.Core\Dispatcher\SynchronousDispatchScheduler.cs:line 20
at EventStore.Dispatcher.AsynchronousDispatchScheduler..ctor(IDispatchCommits
dispatcher, IPersistStreams persistence) in c:\Code\public\EventStore\src\proj
EventStore.Core\Dispatcher\AsynchronousDispatchScheduler.cs:line 12
at EventStore.AsynchronousDispatchSchedulerWireup.<.ctor>b__4(NanoContainer c
) in c:\Code\public\EventStore\src\proj\EventStore.Wireup\AsynchronousDispatchSc
hedulerWireup.cs:line 21
at EventStore.NanoContainer.<>c__DisplayClass11.<Register>b__0(NanoContainer c) in c:\Code\public\EventStore\src\proj\EventStore.Wireup\NanoContainer.cs:lin e 17 at EventStore.ContainerRegistration.Resolve(NanoContainer container) in c:\Co de\public\EventStore\src\proj\EventStore.Wireup\NanoContainer.cs:line 88 at EventStore.NanoContainer.Resolve[TService]() in c:\Code\public\EventStore\ src\proj\EventStore.Wireup\NanoContainer.cs:line 42 at EventStore.Wireup.BuildEventStore(NanoContainer context) in c:\Code\public \EventStore\src\proj\EventStore.Wireup\Wireup.cs:line 70 at EventStore.NanoContainer.<>c__DisplayClass11.b__0(NanoContainer
c) in c:\Code\public\EventStore\src\proj\EventStore.Wireup\NanoContainer.cs:lin
e 17
at EventStore.ContainerRegistration.Resolve(NanoContainer container) in c:\Co
de\public\EventStore\src\proj\EventStore.Wireup\NanoContainer.cs:line 88
at EventStore.NanoContainer.ResolveTService in c:\Code\public\EventStore
src\proj\EventStore.Wireup\NanoContainer.cs:line 42
at EventStore.Wireup.Build() in c:\Code\public\EventStore\src\proj\EventStore
.Wireup\Wireup.cs:line 63
at EventStore.Wireup.Build() in c:\Code\public\EventStore\src\proj\EventStore
.Wireup\Wireup.cs:line 61
at EventStore.Wireup.Build() in c:\Code\public\EventStore\src\proj\EventStore
.Wireup\Wireup.cs:line 61
at EventStore.PersistenceWireup.Build() in c:\Code\public\EventStore\src\proj
\EventStore.Wireup\PersistenceWireup.cs:line 56
at Documently.Infrastructure.Installers.EventStoreInstaller.GetInitializedEve
ntStore(IDispatchCommits bus) in C:\Users\Wayne Douglas\Dev\Scratch\Documently\s
rc\Documently.Infrastructure\Installers\EventStoreInstaller.cs:line 43
at Documently.Infrastructure.Installers.EventStoreInstaller.b__0(IKe
rnel k) in C:\Users\Wayne Douglas\Dev\Scratch\Documently\src\Documently.Infrastr
ucture\Installers\EventStoreInstaller.cs:line 30
at Castle.MicroKernel.Registration.ComponentRegistration1.<>c__DisplayClass1 21.b__11(IKernel k, ComponentModel m, CreationContext c) in
c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel\Reg
istration\ComponentRegistration.cs:line 742
at Castle.MicroKernel.ComponentActivator.FactoryMethodActivator1.Instantiate (CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Ca stle.Windsor\MicroKernel\ComponentActivator\FactoryMethodActivator.cs:line 41 at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCr eate(CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\sr c\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:lin e 70 at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(Cr eationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castl e.Windsor\MicroKernel\ComponentActivator\AbstractComponentActivator.cs:line 75 at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationCont ext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\ MicroKernel\Lifestyle\AbstractLifestyleManager.cs:line 42 at Castle.MicroKernel.Lifestyle.SingletonLifestyleManager.Resolve(CreationCon text context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor \MicroKernel\Lifestyle\SingletonLifestyleManager.cs:line 50 at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext con text, Boolean requiresDecommission, Boolean instanceRequired) in c:\TeamCity\bui ldAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel\Handlers\DefaultHan dler.cs:line 61 at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex t, Boolean instanceRequired) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src \Castle.Windsor\MicroKernel\Handlers\AbstractHandler.cs:line 771 at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex t) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKerne l\Handlers\AbstractHandler.cs:line 369 at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveServiceDepen dency(CreationContext context, ComponentModel model, DependencyModel dependency) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel\ Resolvers\DefaultDependencyResolver.cs:line 390 at Castle.MicroKernel.Resolvers.DefaultDependencyResolver.Resolve(CreationCon text context, ISubDependencyResolver contextHandlerResolver, ComponentModel mode l, DependencyModel dependency) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\s rc\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:line 243 at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateCons tructorArgumentsCore(ConstructorCandidate constructor, Object[] arguments, Creat ionContext context, Type[] signature) in c:\TeamCity\buildAgent\work\83ad55e3df1 8b1a8\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivato r.cs:line 353 at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateCons tructorArguments(ConstructorCandidate constructor, CreationContext context, Type []& signature) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windso r\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:line 338 at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiat e(CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\C astle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:line 9 0 at Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCr eate(CreationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\sr c\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:lin e 70 at Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(Cr eationContext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castl e.Windsor\MicroKernel\ComponentActivator\AbstractComponentActivator.cs:line 75 at Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationCont ext context) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\ MicroKernel\Lifestyle\AbstractLifestyleManager.cs:line 42 at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext con text, Boolean requiresDecommission, Boolean instanceRequired) in c:\TeamCity\bui ldAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKernel\Handlers\DefaultHan dler.cs:line 61 at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex t, Boolean instanceRequired) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src \Castle.Windsor\MicroKernel\Handlers\AbstractHandler.cs:line 771 at Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext contex t) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKerne l\Handlers\AbstractHandler.cs:line 369 at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler, Type s ervice, IDictionary additionalArguments) in c:\TeamCity\buildAgent\work\83ad55e3 df18b1a8\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:line 899 at Castle.MicroKernel.DefaultKernel.Resolve(Type service, IDictionary argumen ts) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\MicroKern el\DefaultKernel_Resolve.cs:line 188 at Castle.Facilities.TypedFactory.TypedFactoryComponent.Resolve(IKernel kerne l) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle.Windsor\Facilities \TypedFactory\TypedFactoryComponent.cs:line 76 at Castle.Facilities.TypedFactory.Internal.TypedFactoryInterceptor.Resolve(II nvocation invocation) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Castle .Windsor\Facilities\TypedFactory\Internal\TypedFactoryInterceptor.cs:line 205 at Castle.Facilities.TypedFactory.Internal.TypedFactoryInterceptor.Intercept( IInvocation invocation) in c:\TeamCity\buildAgent\work\83ad55e3df18b1a8\src\Cast le.Windsor\Facilities\TypedFactory\Internal\TypedFactoryInterceptor.cs:line 89 at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.Proxies.Func1Proxy.Invoke()
at Documently.Domain.CommandHandlers.CreateCustomerCommandHandler.Consume(Cre
ateNewCustomer command) in C:\Users\Wayne Douglas\Dev\Scratch\Documently\src\Doc
umently.Domain\CommandHandlers\CreateCustomerCommandHandler.cs:line 21
at MassTransit.Pipeline.Sinks.ConsumerMessageSink2.<>c__DisplayClass1.<Selec tor>b__0(IConsumeContext1 context) in d:\BuildAgent-02\work\8d1373c869590c5b\sr
c\MassTransit\Pipeline\Sinks\ConsumerMessageSink.cs:line 55
at MassTransit.Pipeline.Sinks.InboundConvertMessageSink`1.<>c__DisplayClass2.
<>c__DisplayClass4.b__1(IConsumeContext x) in d:\BuildAgent-02\work\8
d1373c869590c5b\src\MassTransit\Pipeline\Sinks\InboundConvertMessageSink.cs:line
45
at MassTransit.Context.ServiceBusReceiveContext.DeliverMessageToConsumers(IRe
ceiveContext context) in d:\BuildAgent-02\work\8d1373c869590c5b\src\MassTransit
Context\ServiceBusReceiveContext.cs:line 113
--- End of inner exception stack trace ---
at MassTransit.Context.ServiceBusReceiveContext.DeliverMessageToConsumers(IRe
ceiveContext context) in d:\BuildAgent-02\work\8d1373c869590c5b\src\MassTransit
Context\ServiceBusReceiveContext.cs:line 129
at MassTransit.Transports.Endpoint.<>c__DisplayClass6.<>c__DisplayClass8.b__5(IReceiveContext receiveContext) in d:\BuildAgent-02\work\8d1373c869590
c5b\src\MassTransit\Transports\Endpoint.cs:line 151
2012-02-28 14:49:38,579 [22] INFO MassTransit.Messages [(null)] - MOVE:rabbitmq
://localhost/Documently.Domain.Service:rabbitmq://localhost/Documently.Domain.Se
rvice_error:8

Simple load test errors

Hey

When I replace the code in program.cs in the Documently.App project:

            for (int i = 0; i < 10; i++)
            {
                Logger.InfoFormat("creating {0}", i);

                var customerId = CombGuid.Generate();

                Console.WriteLine("create new customer by pressing a key");

                // Console.ReadKey(true);

                // create customer (Write/Command)
                this.CreateCustomer(customerId);

                Console.WriteLine("Customer created. Press any key to relocate customer.");

                // Console.ReadKey(true);

                // Customer relocating (Write/Command)
                this.RelocateCustomer(customerId);

                Console.WriteLine("Customer relocated. Press any key to show list of customers.");

                // Console.ReadKey(true);

                // show all customers [in RMQ] (Read/Query)
                this.ShowCustomerListView();
            }

I get a load of errors ranging from stuff about commit IDs to object reference issues - is this because I am trying to do something stupid or is there an issue here?

viewmodels stop process events without save method

I've been struggling with this issue quite long. According to CommonDomain source code events are dispatched via ApplyEvent method in AggregateBase class. For example when CreateCustomerCommandHandler is called, then Created event is dispatched. But when you comment out repo.Save(client, CombGuid.Generate(), null); line in Consume method in the same handler, events are not dispatched. Should't dispatching of events be independent from repository.Save method and should't be performed inside Aggregat Root (Customer in this case) or am I missing something?

MassTransit dependency inside AggregateRoot

I don't think it's a good idea to have a strong dependency inside the AggregateRoot only for identity generation. Probably it's better to go like IBus and provide a Documently.Infrastructure.INewIdentityGenerator interface that can be implemented with any custom identity generator strategy.

CommonDomain race condition

The way that streams are saved in a dictionary internally in common domain causes problems. Fix by simply bringing in the functionality from common domain or by submitting a pull request.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.