content: /*
   * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.osgi.service.blueprint.container;
  
  /**
   * A <code>BlueprintEvent</code> Listener.
   * 
   * <p>
   * To receive Blueprint Events, a bundle must register a Blueprint Listener
   * service.
   * 
   * After a Blueprint Listener is registered, the Blueprint extender must
   * synchronously send to this Blueprint Listener the last Blueprint Event for
   * each ready Blueprint bundle managed by this extender. This replay of
   * Blueprint Events is designed so that the new Blueprint Listener can be
   * informed of the state of each Blueprint bundle. Blueprint Events sent during
   * this replay will have the {@link BlueprintEvent#isReplay() isReplay()} flag
   * set. The Blueprint extender must ensure that this replay phase does not
   * interfere with new Blueprint Events so that the chronological order of all
   * Blueprint Events received by the Blueprint Listener is preserved. If the last
   * Blueprint Event for a given Blueprint bundle is
   * {@link BlueprintEvent#DESTROYED DESTROYED}, the extender must not send it
   * during this replay phase.
   * 
   * @see BlueprintEvent
   * @ThreadSafe
   * @version $Revision$
   */
  public interface BlueprintListener {
  
  	/**
  	 * Receives notifications of a Blueprint Event.
  	 * 
  	 * Implementers should quickly process the event and return.
  	 * 
  	 * @param event The {@link BlueprintEvent}.
  	 */
  	void blueprintEvent(BlueprintEvent event);
  }
  