blob: 997cadc72248e523843aed90a484f457290ff261 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.framework.adaptor;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import org.osgi.framework.BundleException;
/**
* A ClassLoaderDelegate is used by the BundleClassLoader in a similar
* fashion that a parent ClassLoader is used. A ClassLoaderDelegate must
* be queried for any resource or class before it is loaded by the
* BundleClassLoader. The Framework implements the ClassLoaderDelegate
* and supplies it to the BundleClassLoader. FrameworkAdaptor implementations
* are not responsible for suppling an implementation for ClassLoaderDelegate.
* <p>
* This interface is not intended to be implemented by clients.
* </p>
* @noimplement This interface is not intended to be implemented by clients.
* @since 3.1
*/
public interface ClassLoaderDelegate {
/**
* Finds a class for a bundle that may be outside of the actual bundle
* (i.e. a class from an imported package or required bundle).<p>
*
* If the class does not belong to an imported package or is not
* found in a required bundle then the ClassloaderDelegate will call
* BundleClassLoader.findLocalClass(). <p>
*
* If no class is found then a ClassNotFoundException is thrown.
* @param classname the class to find.
* @return the Class.
* @throws ClassNotFoundException if the class is not found.
*/
public Class findClass(String classname) throws ClassNotFoundException;
/**
* Finds a resource for a bundle that may be outside of the actual bundle
* (i.e. a resource from an imported package or required bundle).<p>
*
* If the resource does not belong to an imported package or is not
* found in a required bundle then the ClassloaderDelegate will call
* BundleClassLoader.findLocalResource(). <p>
*
* If no resource is found then return null.
* @param resource the resource to load.
* @return the resource or null if resource is not found.
*/
public URL findResource(String resource);
/**
* Finds an enumeration of resources for a bundle that may be outside of
* the actual bundle (i.e. a resource from an imported package or required
* bundle).<p>
*
* If the resource does not belong to an imported package or is not
* found in a required bundle then the ClassloaderDelegate will call
* BundleClassLoader.findLocalResource(). <p>
* If no resource is found then return null.
* @param resource the resource to find.
* @return the enumeration of resources found or null if the resource
* does not exist.
*/
public Enumeration findResources(String resource) throws IOException;
/**
* Returns the absolute path name of a native library. The following is
* a list of steps that a ClassLoaderDelegate must take when trying to
* find a library:
* <ul>
* <li>If the bundle is a fragment then try to find the library in the
* host bundle.
* <li>if the bundle is a host then try to find the library in the
* host bundle and then try to find the library in the fragment
* bundles.
* </ul>
* If no library is found return null.
* @param libraryname the library to find the path to.
* @return the path to the library or null if not found.
*/
public String findLibrary(String libraryname);
/**
* Returns true if the lazy trigger has been set for this
* delegate. The lazy trigger is set when a bundle has been
* marked for lazy activation due to a successful class load.
* @return true if the lazy trigger has been set
* @since 3.6
*/
public boolean isLazyTriggerSet();
/**
* Sets the lazy trigger for this delegate. This will activate
* the bundle if the bundle has been started with the activation
* policy and the bundle's start level is met.
* @throws BundleException if an error occurred while activating the bundle
* @see ClassLoaderDelegate#isLazyTriggerSet()
* @since 3.6
*/
public void setLazyTrigger() throws BundleException;
}