I've finally got ServiceDiscoveryManager to a stage where I feel like it's been completely brought up to date.
Originally SDM's LookupCache had some latent race conditions that became evident after I created a non blocking DynamicPolicyProvider. I spent some time refactoring it, I separated LookupCacheImpl from SDM, into it's own file, but was never happy with remote method calls and filtering being performed whist synchronized on a monitor. I've finally got it sorted nicely now, so it's much easier to understand. I've used some Java 8 features like ConcurrentMap.computeIfPresent, but I'm finally happy with it. Logging in SDM is now processed by a single threaded executor, so logging doesn’t interfere with concurrency, yep it's a complex class and logging helps you figure out what's going on. The best feature though, is utilising the new ServiceRegistrar default lookup method. SDM's and LookupCache's api is unchanged, you just configure it how you want it to behave. So if you want the existing slow insecure behaviour where you download everything, authenticate and filter later you can keep doing that. However, if you want security and performance, with delayed unmarshalling, don't want to download services you can't authenticate or your filter doesn’t match locally using logical comparisons of attributes, you can do that too. Because you only download what you want when you need it, performance is gr8. I've written a bunch of new tests too. I haven't committed the latest changes. Oh and security doesn't require you to implement ProxyTrust (complex and confusing), because the service is authenticated prior to download, not after. Cheers, Peter. Sent from my Samsung device.