muoncore / newton

Extend Muon into the world of Spring. Implement Muon apis, especially around events to provide DDD patterns natively in Spring Boot
http://muoncore.io
GNU Lesser General Public License v3.0
12 stars 5 forks source link

Event not on classpath throws Nullpointer when processed outside originating bounded context #45

Closed bobjana closed 7 years ago

bobjana commented 7 years ago

2017-06-22 11:51:04.519 INFO 439 --- [ channel-4] nClusterAwareTrackingSubscriptionManager : Event{eventType='AdministratorCreatedEvent', streamName='security-service/Customer', schema='null', causedById=null, causedByRelation='null', service='security-service', orderId=37, eventTime=1498125022716} java.lang.NullPointerException at io.muoncore.protocol.event.Event.getPayload(Event.java:83) at io.muoncore.newton.cluster.MuonClusterAwareTrackingSubscriptionManager.lambda$localTrackingSubscription$7(MuonClusterAwareTrackingSubscriptionManager.java:107) at io.muoncore.newton.cluster.MuonClusterAwareTrackingSubscriptionManager$EventSubscriber.onNext(MuonClusterAwareTrackingSubscriptionManager.java:136) at io.muoncore.newton.cluster.MuonClusterAwareTrackingSubscriptionManager$EventSubscriber.onNext(MuonClusterAwareTrackingSubscriptionManager.java:119) at io.muoncore.protocol.event.client.DefaultEventClient$1.onNext(DefaultEventClient.java:144) at io.muoncore.protocol.event.client.DefaultEventClient$1.onNext(DefaultEventClient.java:134) at io.muoncore.protocol.reactivestream.client.ReactiveStreamClientProtocol.handleMessage(ReactiveStreamClientProtocol.java:102) at io.muoncore.channel.impl.WiretapChannel$2.lambda$send$0(WiretapChannel.java:64) at io.muoncore.transport.client.RingBufferLocalDispatcher.route(RingBufferLocalDispatcher.java:404) at io.muoncore.transport.client.RingBufferLocalDispatcher$SingleThreadTask.run(RingBufferLocalDispatcher.java:297) at io.muoncore.transport.client.RingBufferLocalDispatcher$3.onEvent(RingBufferLocalDispatcher.java:171) at io.muoncore.transport.client.RingBufferLocalDispatcher$3.onEvent(RingBufferLocalDispatcher.java:168) at reactor.jarjar.com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748)

daviddawson commented 7 years ago

Yes, we've seen this.

What should the expected behaviour be in the various cases?

bobjana commented 7 years ago

As a first pass, it shouldn't throw a Nullpointer exception.

Then I suppose if none of the susbcribers are actually listening to the event in question, it should just ignore it. Otherwise if it is unable to deserialize the event, it should log an error message which describes the reason for failing deserialization