- public <T extends SchemaSourceRepresentation> CheckedFuture<T, SchemaSourceException> getSchemaSource(final SourceIdentifier id, final Class<T> representation) {
- final ListMultimap<Class<? extends SchemaSourceRepresentation>, AbstractSchemaSourceRegistration<?>> srcs = sources.get(id);
- if (srcs == null) {
- return Futures.<T, SchemaSourceException>immediateFailedCheckedFuture(new MissingSchemaSourceException("No providers registered for source" + id, id));
+ public <T extends SchemaSourceRepresentation> ListenableFuture<T> getSchemaSource(
+ @Nonnull final SourceIdentifier id, @Nonnull final Class<T> representation) {
+ final ArrayList<AbstractSchemaSourceRegistration<?>> sortedSchemaSourceRegistrations;
+
+ synchronized (this) {
+ final ListMultimap<Class<? extends SchemaSourceRepresentation>, AbstractSchemaSourceRegistration<?>> srcs =
+ sources.get(id);
+ if (srcs == null) {
+ return immediateFailedFluentFuture(new MissingSchemaSourceException(
+ "No providers registered for source" + id, id));
+ }
+
+ sortedSchemaSourceRegistrations = Lists.newArrayList(srcs.get(representation));