/** * Copyright OPS4J * * 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.ops4j.pax.wicket.spi; import org.apache.wicket.util.io.IClusterable; import org.ops4j.pax.wicket.util.proxy.LazyInitProxyFactory; /** * <p> * Represents a service locator for lazy init proxies. When the first method invocation occurs on the lazy init proxy * this locator will be used to retrieve the proxy target object that will receive the method invocation. * </p> * <p> * Generally implementations should be small when serialized because the main purpose of lazy init proxies is to be * stored in session when the wicket pages are serialized, and when deserialized to be able to lookup the dependency * again. The smaller the implementation of IProxyTargetLocator the less the drain on session size. * </p> * <p> * A small implementation may use a static lookup to retrieve the target object. * </p> * Example: * * * <pre> * class UserServiceLocator implements IProxyTargetLocator { * Object locateProxyObject() { * MyApplication app = (MyApplication) Application.get(); * return app.getUserService(); * } * } * </pre> * * @see LazyInitProxyFactory#createProxy(Class, ProxyTargetLocator) * @author nmw * @version $Id: $Id */ // FIXME: is it necessary to extend IClusterable here?? public interface ProxyTargetLocator extends IClusterable { /** * Returns the object that will be used as target object for a lazy init proxy. * * @return the {@link org.ops4j.pax.wicket.spi.ProxyTarget} located or <code>null</code> if no proxy could be found * @throws java.lang.IllegalStateException if any. */ ProxyTarget locateProxyTarget() throws IllegalStateException; /** * <p>getParent.</p> * * @return the parent holding the responsibility for the serialisation. */ Class<?> getParent(); }