use of org.osgi.framework.BundleReference in project aries by apache.
the class Util method fixContextClassloader.
public static void fixContextClassloader(String cls, String method, Class<?> clsArg, ClassLoader bundleLoader) {
BundleReference br = getBundleReference(bundleLoader);
if (br == null) {
return;
}
final ClassLoader cl = findContextClassloader(br.getBundle(), cls, method, clsArg);
if (cl != null) {
BaseActivator.activator.log(Level.FINE, "Temporarily setting Thread Context Classloader to: " + cl);
AccessController.doPrivileged(new PrivilegedAction<Void>() {
@Override
public Void run() {
Thread.currentThread().setContextClassLoader(cl);
return null;
}
});
} else {
BaseActivator.activator.log(Level.FINE, "No classloader found for " + cls + ":" + method + "(" + clsArg + ")");
}
}
use of org.osgi.framework.BundleReference in project linuxtools by eclipse.
the class CheckDevhelp method testHelpTopic.
@Test
public void testHelpTopic() throws IOException {
// We need to have a devhelp directory with contents to test.
// Copy over the needed devhelp/html contents in this test plug-in,
// test1.devhelp2 and index.html, to the workspace.
ClassLoader cl = getClass().getClassLoader();
Bundle bundle = null;
if (cl instanceof BundleReference) {
bundle = ((BundleReference) cl).getBundle();
}
IWorkspace ws = ResourcesPlugin.getWorkspace();
IPath wslocpath = ws.getRoot().getLocation();
// $NON-NLS-1$
IPath outfilepath = wslocpath.append("devhelp/html/test1");
File outfiledir = outfilepath.toFile();
assertTrue(outfiledir.mkdirs());
// $NON-NLS-1$
outfilepath = outfilepath.append("test1.devhelp2");
File outfile = outfilepath.toFile();
// $NON-NLS-1$
IPath outfilepath2 = wslocpath.append("devhelp/html/test1/index.html");
File outfile2 = outfilepath2.toFile();
outfile.createNewFile();
outfile2.createNewFile();
try (InputStream in = FileLocator.openStream(bundle, new Path("devhelp/html/test1/test1.devhelp2"), false)) {
// $NON-NLS-1$
Files.copy(in, Paths.get(outfile.toURI()), StandardCopyOption.REPLACE_EXISTING);
}
try (InputStream in2 = FileLocator.openStream(bundle, new Path("devhelp/html/test1/index.html"), false)) {
// $NON-NLS-1$
Files.copy(in2, Paths.get(outfile2.toURI()), StandardCopyOption.REPLACE_EXISTING);
}
// $NON-NLS-1$
IPath x = wslocpath.append("devhelp/html");
IPreferenceStore ps = DevHelpPlugin.getDefault().getPreferenceStore();
ps.setValue(PreferenceConstants.DEVHELP_DIRECTORY, x.toOSString());
DevHelpToc toc = new DevHelpToc();
ITopic[] topics = toc.getTopics();
// Verify we have the test1 topic
assertTrue(topics.length > 0);
ITopic topic = topics[0];
// $NON-NLS-1$
assertTrue(topic.getLabel().startsWith("test1"));
ITopic[] subtopics = topic.getSubtopics();
// Verify it has 4 or more sub-topics
assertTrue(subtopics.length > 3);
IUAElement[] elements = topic.getChildren();
assertTrue(elements.length > 3);
String href = topic.getHref();
// Verify the topic href is the index.html file and that the topic is
// enabled
assertEquals(href, // $NON-NLS-1$
"/org.eclipse.linuxtools.cdt.libhover.devhelp/test1/index.html");
assertTrue(topic.isEnabled(null));
}
use of org.osgi.framework.BundleReference in project logging-log4j2 by apache.
the class BundleContextSelector method getContext.
@Override
public LoggerContext getContext(final String fqcn, final ClassLoader loader, final boolean currentContext, final URI configLocation) {
if (currentContext) {
final LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get();
if (ctx != null) {
return ctx;
}
return getDefault();
}
// it's quite possible that the provided ClassLoader may implement BundleReference which gives us a nice shortcut
if (loader instanceof BundleReference) {
return locateContext(((BundleReference) loader).getBundle(), configLocation);
}
final Class<?> callerClass = StackLocatorUtil.getCallerClass(fqcn);
if (callerClass != null) {
return locateContext(FrameworkUtil.getBundle(callerClass), configLocation);
}
final LoggerContext lc = ContextAnchor.THREAD_CONTEXT.get();
return lc == null ? getDefault() : lc;
}
use of org.osgi.framework.BundleReference in project aries by apache.
the class Util method serviceLoaderLoad.
public static <C, S> ServiceLoader<S> serviceLoaderLoad(Class<S> service, Class<C> caller) {
if (BaseActivator.activator == null) {
// The system is not yet initialized. We can't do anything.
return null;
}
ClassLoader bundleLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
@Override
public ClassLoader run() {
return caller.getClassLoader();
}
});
if (!(bundleLoader instanceof BundleReference)) {
BaseActivator.activator.log(Level.FINE, "Classloader of consuming bundle doesn't implement BundleReference: " + bundleLoader);
return ServiceLoader.load(service);
}
BundleReference bundleReference = (BundleReference) bundleLoader;
final ClassLoader bundleClassloader = findContextClassloader(bundleReference.getBundle(), ServiceLoader.class.getName(), "load", service);
if (bundleClassloader == null) {
return ServiceLoader.load(service);
}
Thread thread = Thread.currentThread();
return AccessController.doPrivileged(new PrivilegedAction<ServiceLoader<S>>() {
@Override
public ServiceLoader<S> run() {
ClassLoader contextClassLoader = thread.getContextClassLoader();
try {
thread.setContextClassLoader(bundleClassloader);
return ServiceLoader.load(service);
} finally {
thread.setContextClassLoader(contextClassLoader);
}
}
});
}
use of org.osgi.framework.BundleReference in project aries by apache.
the class Util method serviceLoaderLoad.
public static <C, S> ServiceLoader<S> serviceLoaderLoad(Class<S> service, ClassLoader specifiedClassLoader, Class<C> caller) {
if (BaseActivator.activator == null) {
// The system is not yet initialized. We can't do anything.
return null;
}
ClassLoader bundleLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
@Override
public ClassLoader run() {
return caller.getClassLoader();
}
});
if (!(bundleLoader instanceof BundleReference)) {
BaseActivator.activator.log(Level.FINE, "Classloader of consuming bundle doesn't implement BundleReference: " + bundleLoader);
return ServiceLoader.load(service, specifiedClassLoader);
}
BundleReference bundleReference = (BundleReference) bundleLoader;
final ClassLoader bundleClassloader = findContextClassloader(bundleReference.getBundle(), ServiceLoader.class.getName(), "load", service);
if (bundleClassloader == null) {
return ServiceLoader.load(service, specifiedClassLoader);
}
return ServiceLoader.load(service, new WrapperCL(specifiedClassLoader, bundleClassloader));
}
Aggregations