/*
* Copyright (C) 2011 Red Hat, Inc. and/or its affiliates.
*
* 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.jboss.errai.ioc.client.api;
/**
* An <tt>InitBallot</tt> is injected by the container into a bean which declares a dependency on it. By doing so, the bean
* enjoins itself into the startup contract of the framework services. Thus, it is expected to call {@link #voteForInit()}
* to indicate that it is okay to proceed with initialization. The class must be parameterized with a class which
* represents the startup dependency.
* <p>
* The container imposes a fixed amount of time for which there must be a call to {@link #voteForInit()}. If the call
* is not made within this time period, then the dependency will be deemed unsatisified and the container will produce
* an error.
*
* @param <T> A type reference to be used to uniquely identify the dependency. This is typically the same class
* which declares the <tt>InitBallot</tt>, but not necessarily. If more than component injects an
* <tt>InitBallot</tt> with the same type parameter, they will all represent the same dependency.
* @author Mike Brock
*/
public interface InitBallot<T> {
/**
* When called, the class's lock on the startup procedure for framework services is released.
*/
public void voteForInit();
}