test_class.file: server/src/test/java/io/spine/server/integration/IntegrationBrokerTest.java
test_class.identifier: IntegrationBrokerTest
test_case.body: @Test
      @DisplayName("send messages between two contexts regardless of registration order")
      void mutual() {
          String suffix = IntegrationBrokerTest.class.getSimpleName();
          BlackBoxContext photos = BlackBoxContext.from(
                  BoundedContext.singleTenant("Photos-" + suffix)
                                .add(PhotosProcMan.class)
          );
          BlackBoxContext billing = BlackBoxContext.from(
                  BoundedContext.singleTenant("Billing-" + suffix)
                                .add(BillingAggregate.class)
          );
          photos.receivesCommand(UploadPhotos.generate());
          assertReceived(photos, PhotosUploaded.class);
          assertReceived(billing, CreditsHeld.class);
          assertReceived(photos, PhotosProcessed.class);
  
          photos.close();
          billing.close();
      }
test_case.class_method_signature: IntegrationBrokerTest.mutual()
test_case.full_signature: @Test @DisplayName("send messages between two contexts regardless of registration order") void mutual()
test_case.identifier: mutual
test_case.invocations: getSimpleName from add singleTenant from add singleTenant receivesCommand generate assertReceived assertReceived assertReceived close close
test_case.modifiers: @Test @DisplayName("send messages between two contexts regardless of registration order")
test_case.parameters: ()
test_case.return: void
test_case.signature: void mutual()
focal_class.declarator: CONFIG_EXCHANGE_CHANNEL_ID = channelIdFor(
              TypeUrl.of(RequestForExternalMessages.class)
      )
focal_class.modifier: private static final
focal_class.original_string: private static final ChannelId CONFIG_EXCHANGE_CHANNEL_ID = channelIdFor(
              TypeUrl.of(RequestForExternalMessages.class)
      );
focal_class.type: ChannelId
focal_class.var_name: CONFIG_EXCHANGE_CHANNEL_ID
focal_class.declarator: EVENT = TypeUrl.of(Event.class)
focal_class.modifier: private static final
focal_class.original_string: private static final TypeUrl EVENT = TypeUrl.of(Event.class);
focal_class.type: TypeUrl
focal_class.var_name: EVENT
focal_class.declarator: subscriberHub
focal_class.modifier: private final
focal_class.original_string: private final SubscriberHub subscriberHub;
focal_class.type: SubscriberHub
focal_class.var_name: subscriberHub
focal_class.declarator: publisherHub
focal_class.modifier: private final
focal_class.original_string: private final PublisherHub publisherHub;
focal_class.type: PublisherHub
focal_class.var_name: publisherHub
focal_class.declarator: busAdapter
focal_class.modifier: private @MonotonicNonNull
focal_class.original_string: private @MonotonicNonNull BusAdapter busAdapter;
focal_class.type: BusAdapter
focal_class.var_name: busAdapter
focal_class.declarator: context
focal_class.modifier: private @MonotonicNonNull
focal_class.original_string: private @MonotonicNonNull BoundedContextName context;
focal_class.type: BoundedContextName
focal_class.var_name: context
focal_class.declarator: configurationObserver
focal_class.modifier: private @MonotonicNonNull
focal_class.original_string: private @MonotonicNonNull ConfigurationChangeObserver configurationObserver;
focal_class.type: ConfigurationChangeObserver
focal_class.var_name: configurationObserver
focal_class.declarator: broadcast
focal_class.modifier: private @MonotonicNonNull
focal_class.original_string: private @MonotonicNonNull ConfigurationBroadcast broadcast;
focal_class.type: ConfigurationBroadcast
focal_class.var_name: broadcast
focal_class.file: server/src/main/java/io/spine/server/integration/IntegrationBroker.java
focal_class.identifier: IntegrationBroker
focal_class.interfaces: implements ContextAware, AutoCloseable
focal_class.class_method_signature: IntegrationBroker.IntegrationBroker()
focal_class.full_signature: public  IntegrationBroker()
focal_class.identifier: IntegrationBroker
focal_class.modifiers: public
focal_class.parameters: ()
focal_class.signature:  IntegrationBroker()
focal_class.class_method_signature: IntegrationBroker.registerWith(BoundedContext context)
focal_class.full_signature: @Override public void registerWith(BoundedContext context)
focal_class.identifier: registerWith
focal_class.modifiers: @Override public
focal_class.parameters: (BoundedContext context)
focal_class.return: void
focal_class.signature: void registerWith(BoundedContext context)
focal_class.class_method_signature: IntegrationBroker.isRegistered()
focal_class.full_signature: @Override public boolean isRegistered()
focal_class.identifier: isRegistered
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean isRegistered()
focal_class.class_method_signature: IntegrationBroker.publish(EventEnvelope event)
focal_class.full_signature:  void publish(EventEnvelope event)
focal_class.identifier: publish
focal_class.parameters: (EventEnvelope event)
focal_class.return: void
focal_class.signature: void publish(EventEnvelope event)
focal_class.class_method_signature: IntegrationBroker.dispatchLocally(Event event)
focal_class.full_signature:  void dispatchLocally(Event event)
focal_class.identifier: dispatchLocally
focal_class.parameters: (Event event)
focal_class.return: void
focal_class.signature: void dispatchLocally(Event event)
focal_class.class_method_signature: IntegrationBroker.dispatchLocally(Event event, StreamObserver<Ack> ackObserver)
focal_class.full_signature:  void dispatchLocally(Event event, StreamObserver<Ack> ackObserver)
focal_class.identifier: dispatchLocally
focal_class.parameters: (Event event, StreamObserver<Ack> ackObserver)
focal_class.return: void
focal_class.signature: void dispatchLocally(Event event, StreamObserver<Ack> ackObserver)
focal_class.class_method_signature: IntegrationBroker.register(EventDispatcher dispatcher)
focal_class.full_signature: public void register(EventDispatcher dispatcher)
focal_class.identifier: register
focal_class.modifiers: public
focal_class.parameters: (EventDispatcher dispatcher)
focal_class.return: void
focal_class.signature: void register(EventDispatcher dispatcher)
focal_class.class_method_signature: IntegrationBroker.unregister(EventDispatcher dispatcher)
focal_class.full_signature: public void unregister(EventDispatcher dispatcher)
focal_class.identifier: unregister
focal_class.modifiers: public
focal_class.parameters: (EventDispatcher dispatcher)
focal_class.return: void
focal_class.signature: void unregister(EventDispatcher dispatcher)
focal_class.class_method_signature: IntegrationBroker.toChannelId(EventClass cls)
focal_class.full_signature: private static ChannelId toChannelId(EventClass cls)
focal_class.identifier: toChannelId
focal_class.modifiers: private static
focal_class.parameters: (EventClass cls)
focal_class.return: ChannelId
focal_class.signature: ChannelId toChannelId(EventClass cls)
focal_class.class_method_signature: IntegrationBroker.observerFor(EventClass externalClass)
focal_class.full_signature: private ExternalMessageObserver observerFor(EventClass externalClass)
focal_class.identifier: observerFor
focal_class.modifiers: private
focal_class.parameters: (EventClass externalClass)
focal_class.return: ExternalMessageObserver
focal_class.signature: ExternalMessageObserver observerFor(EventClass externalClass)
focal_class.class_method_signature: IntegrationBroker.notifyTypesChanged()
focal_class.full_signature: private void notifyTypesChanged()
focal_class.identifier: notifyTypesChanged
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void notifyTypesChanged()
focal_class.class_method_signature: IntegrationBroker.notifyOthers()
focal_class.full_signature:  void notifyOthers()
focal_class.identifier: notifyOthers
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void notifyOthers()
focal_class.class_method_signature: IntegrationBroker.close()
focal_class.full_signature: @Override public void close()
focal_class.identifier: close
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void close()
focal_class.class_method_signature: IntegrationBroker.toString()
focal_class.full_signature: @Override public String toString()
focal_class.identifier: toString
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String toString()
focal_method.body: @Override
      public void close() throws Exception {
          configurationObserver.close();
          notifyTypesChanged();
  
          subscriberHub.close();
          publisherHub.close();
      }
focal_method.class_method_signature: IntegrationBroker.close()
focal_method.full_signature: @Override public void close()
focal_method.identifier: close
focal_method.invocations: close notifyTypesChanged close close
focal_method.modifiers: @Override public
focal_method.parameters: ()
focal_method.return: void
focal_method.signature: void close()