You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2010/02/03 21:30:04 UTC
svn commit: r906227 - in
/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo:
gbean/runtime/GBeanInstance.java kernel/osgi/BundleClassLoader.java
kernel/osgi/BundleUtils.java
Author: gawor
Date: Wed Feb 3 20:30:04 2010
New Revision: 906227
URL: http://svn.apache.org/viewvc?rev=906227&view=rev
Log:
extact some code into a separate utility function
Modified:
geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java
geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java
geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java
Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java?rev=906227&r1=906226&r2=906227&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/gbean/runtime/GBeanInstance.java Wed Feb 3 20:30:04 2010
@@ -914,7 +914,7 @@
try {
try {
//TODO OSGI NO!
- instance = objectRecipe.create(new BundleClassLoader(bundleContext.getBundle()));
+ instance = objectRecipe.create(classLoader);
} catch (ConstructionException e) {
Throwable targetException = e.getCause();
if (targetException instanceof Exception) {
Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java?rev=906227&r1=906226&r2=906227&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleClassLoader.java Wed Feb 3 20:30:04 2010
@@ -30,9 +30,6 @@
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleReference;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
-import org.osgi.service.packageadmin.PackageAdmin;
/**
* ClassLoader for a {@link Bundle}.
@@ -85,7 +82,7 @@
public URL getResource(String name) {
URL resource = bundle.getResource(name);
if (resource == null && isMetaInfResource(name)) {
- LinkedHashSet<Bundle> wiredBundles = getWiredBundles();
+ LinkedHashSet<Bundle> wiredBundles = BundleUtils.getWiredBundles(bundle);
Iterator<Bundle> iterator = wiredBundles.iterator();
while (iterator.hasNext() && resource == null) {
resource = iterator.next().getResource(name);
@@ -101,7 +98,7 @@
if (isMetaInfResource(name)) {
ArrayList<URL> allResources = new ArrayList<URL>();
addToList(allResources, e);
- LinkedHashSet<Bundle> wiredBundles = getWiredBundles();
+ LinkedHashSet<Bundle> wiredBundles = BundleUtils.getWiredBundles(bundle);
for (Bundle wiredBundle : wiredBundles) {
Enumeration<URL> resources = wiredBundle.getResources(name);
addToList(allResources, resources);
@@ -127,58 +124,7 @@
private boolean isMetaInfResource(String name) {
return searchWiredBundles && name != null && (name.startsWith(META_INF_1) || name.startsWith(META_INF_2));
}
-
- private LinkedHashSet<Bundle> getWiredBundles() {
- ServiceReference reference = bundle.getBundleContext().getServiceReference(PackageAdmin.class.getName());
- PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(reference);
-
- BundleDescription description = new BundleDescription(bundle.getHeaders());
-
- // handle static wire via Import-Package
- List<BundleDescription.ImportPackage> imports = description.getExternalImports();
- LinkedHashSet<Bundle> wiredBundles = new LinkedHashSet<Bundle>();
- for (BundleDescription.ImportPackage packageImport : imports) {
- ExportedPackage[] exports = packageAdmin.getExportedPackages(packageImport.getName());
- Bundle wiredBundle = getWiredBundle(exports);
- if (wiredBundle != null) {
- wiredBundles.add(wiredBundle);
- }
- }
-
- // handle dynamic wire via DynamicImport-Package
- if (!description.getDynamicImportPackage().isEmpty()) {
- for (Bundle b : bundle.getBundleContext().getBundles()) {
- if (!wiredBundles.contains(b)) {
- ExportedPackage[] exports = packageAdmin.getExportedPackages(b);
- Bundle wiredBundle = getWiredBundle(exports);
- if (wiredBundle != null) {
- wiredBundles.add(wiredBundle);
- }
- }
- }
- }
-
- bundle.getBundleContext().ungetService(reference);
-
- return wiredBundles;
- }
-
- private Bundle getWiredBundle(ExportedPackage[] exports) {
- if (exports != null) {
- for (ExportedPackage exportedPackage : exports) {
- Bundle[] importingBundles = exportedPackage.getImportingBundles();
- if (importingBundles != null) {
- for (Bundle importingBundle : importingBundles) {
- if (importingBundle == bundle) {
- return exportedPackage.getExportingBundle();
- }
- }
- }
- }
- }
- return null;
- }
-
+
private void addToList(List<URL> list, Enumeration<URL> enumeration) {
if (enumeration != null) {
while (enumeration.hasMoreElements()) {
Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java?rev=906227&r1=906226&r2=906227&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/osgi/BundleUtils.java Wed Feb 3 20:30:04 2010
@@ -20,9 +20,15 @@
package org.apache.geronimo.kernel.osgi;
import java.util.Dictionary;
+import java.util.LinkedHashSet;
+import java.util.List;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.ExportedPackage;
+import org.osgi.service.packageadmin.PackageAdmin;
/**
* @version $Rev$ $Date$
@@ -37,4 +43,72 @@
Dictionary headers = bundle.getHeaders();
return (headers != null && headers.get(Constants.FRAGMENT_HOST) != null);
}
+
+ /**
+ * Returns Bundle (if any) associated with current thread's context ClassLoader.
+ */
+ public static Bundle getContextBundle() {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ if (classLoader instanceof BundleReference) {
+ return ((BundleReference) classLoader).getBundle();
+ } else {
+ return null;
+ }
+ }
+
+ public static LinkedHashSet<Bundle> getWiredBundles(Bundle bundle) {
+ ServiceReference reference = bundle.getBundleContext().getServiceReference(PackageAdmin.class.getName());
+ PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(reference);
+ try {
+ return getWiredBundles(packageAdmin, bundle);
+ } finally {
+ bundle.getBundleContext().ungetService(reference);
+ }
+ }
+
+ public static LinkedHashSet<Bundle> getWiredBundles(PackageAdmin packageAdmin, Bundle bundle) {
+ BundleDescription description = new BundleDescription(bundle.getHeaders());
+
+ // handle static wire via Import-Package
+ List<BundleDescription.ImportPackage> imports = description.getExternalImports();
+ LinkedHashSet<Bundle> wiredBundles = new LinkedHashSet<Bundle>();
+ for (BundleDescription.ImportPackage packageImport : imports) {
+ ExportedPackage[] exports = packageAdmin.getExportedPackages(packageImport.getName());
+ Bundle wiredBundle = getWiredBundle(bundle, exports);
+ if (wiredBundle != null) {
+ wiredBundles.add(wiredBundle);
+ }
+ }
+
+ // handle dynamic wire via DynamicImport-Package
+ if (!description.getDynamicImportPackage().isEmpty()) {
+ for (Bundle b : bundle.getBundleContext().getBundles()) {
+ if (!wiredBundles.contains(b)) {
+ ExportedPackage[] exports = packageAdmin.getExportedPackages(b);
+ Bundle wiredBundle = getWiredBundle(bundle, exports);
+ if (wiredBundle != null) {
+ wiredBundles.add(wiredBundle);
+ }
+ }
+ }
+ }
+
+ return wiredBundles;
+ }
+
+ private static Bundle getWiredBundle(Bundle bundle, ExportedPackage[] exports) {
+ if (exports != null) {
+ for (ExportedPackage exportedPackage : exports) {
+ Bundle[] importingBundles = exportedPackage.getImportingBundles();
+ if (importingBundles != null) {
+ for (Bundle importingBundle : importingBundles) {
+ if (importingBundle == bundle) {
+ return exportedPackage.getExportingBundle();
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
}