/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.core.api.registry; import org.mule.runtime.api.exception.MuleException; /** * A {@link Registry} which not only registers and fetches objects, but it's also capable of applying lifecycle and injects * dependencies * * @since 3.7.0 */ public interface LifecycleRegistry extends Registry { /** * Will fire any lifecycle methods according to the current lifecycle without actually registering the object in the registry. * This is useful for prototype objects that are created per request and would clutter the registry with single use objects. * * @param object the object to process * @return either the same object but with the lifecycle applied or a proxy to it * @throws MuleException if the registry fails to perform the lifecycle change for the object. */ Object applyLifecycle(Object object) throws MuleException; /** * Will fire the given lifecycle {@code phase} without actually registering the object in the registry. This is useful for * prototype objects that are created per request and would clutter the registry with single use objects. * * @param object the object to process * @param phase the specific lifecycle phase you want to fire * @return either the same object but with the lifecycle applied or a proxy to it * @throws MuleException if the registry fails to perform the lifecycle change for the object. */ Object applyLifecycle(Object object, String phase) throws MuleException; /** * Applies lifecycle phase to an object independent of the current lifecycle phase. All phases between the {@code startPhase} * and the {@code endPhase} will be executed. * * @param object the object to apply lifecycle to * @param startPhase the lifecycle phase the object is currently in. Must not be null. * @param toPhase the lifecycle phase to transition the object to. Must not be null. * @throws MuleException if there is an exception while invoking lifecycle on the object */ void applyLifecycle(Object object, String startPhase, String toPhase) throws MuleException; /** * Look up a single object by name. * <p/> * Because {@link #lookupObject(String)} will return objects which had lifecycle phases applied,this method exists for cases in * which you want to specify that lifecycle is not to be applied. The actual semantics of that actually depends on the * implementation, since invoking this method might return a new instance or an already existing one. If an existing one is * returned, then the lifecycle might have been previously applied regardless. * * @param key the key of the object you're looking for * @param applyLifecycle if lifecycle should be applied to the returned object. Passing {@code true} doesn't guarantee that the * lifecycle is applied * @return object or {@code null} if not found */ <T> T lookupObject(String key, boolean applyLifecycle); }