]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.init/src/org/argeo/init/osgi/ForeignBundleClassLoader.java
Improve runtime manager
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / osgi / ForeignBundleClassLoader.java
1 package org.argeo.init.osgi;
2
3 import java.util.Optional;
4
5 import org.osgi.framework.Bundle;
6 import org.osgi.framework.BundleContext;
7 import org.osgi.framework.wiring.BundleWiring;
8
9 /**
10 * A {@link ClassLoader} based on a {@link Bundle} from another OSGi runtime.
11 */
12 class ForeignBundleClassLoader extends ClassLoader {// implements BundleReference {
13 private BundleContext localBundleContext;
14 private Bundle foreignBundle;
15
16 public ForeignBundleClassLoader(BundleContext localBundleContext, Bundle foreignBundle) {
17 super("Foreign bundle " + foreignBundle.toString(), Optional.ofNullable(foreignBundle.adapt(BundleWiring.class))
18 .map((bw) -> bw.getClassLoader()).orElse(null));
19 this.localBundleContext = localBundleContext;
20 this.foreignBundle = foreignBundle;
21 }
22
23 // @Override
24 protected Bundle getBundle() {
25 return localBundleContext.getBundle(foreignBundle.getLocation());
26 }
27
28 // @Override
29 // public URL getResource(String resName) {
30 // URL res = super.getResource(resName);
31 // return res;
32 // }
33 //
34 // @Override
35 // protected URL findResource(String resName) {
36 // Bundle localBundle = getBundle();
37 // if (localBundle != null) {
38 // URL res = localBundle.getEntry(resName);
39 // if (res != null)
40 // return res;
41 // }
42 // return null;
43 // }
44
45 }