From 8d9c4b8268cd7331c43464ae93b22f230a7c275b Mon Sep 17 00:00:00 2001 From: rfeng Date: Thu, 4 Feb 2010 20:50:00 +0000 Subject: Improve the bundle discovery filtering based on the ML discussion git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@906646 13f79535-47bb-0310-9956-ffa450edef68 --- .../equinox/EquinoxServiceDiscoverer.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java') diff --git a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java index 56b889b607..5b3f7bdb39 100644 --- a/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java +++ b/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java @@ -215,7 +215,7 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { } } - private boolean isProviderBundle(Bundle bundle) { + private boolean isProviderBundle(Bundle bundle, boolean isTuscanyService) { if (bundle.getBundleId() == 0 || bundle.getSymbolicName().startsWith("1.x-osgi-bundle") || bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) { // Skip system bundle as it has access to the application classloader @@ -225,19 +225,27 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { // Skip bundle fragments too return false; } - if (bundle.getSymbolicName().startsWith("org.apache.tuscany.sca.")) { + // FIXME: [rfeng] What bundles should be searched? ACTIVE and STARTING? + if ((bundle.getState() & Bundle.UNINSTALLED) != 0) { + return false; + } + if (isTuscanyService) { Version scaVersion = getSCAVersion(bundle); return scaVersion.compareTo(version) >= 0; } return true; } - protected Collection getBundles() { + protected Collection getBundles(boolean isTuscanyService) { // return bundles.keySet(); Set set = new HashSet(); for (Bundle b : context.getBundles()) { - if (isProviderBundle(b)) { + if (isProviderBundle(b, isTuscanyService)) { set.add(b); + } else { + if (b.getBundleId() != 0) { + logger.warning("Bundle is skipped for service discovery: " + toString(b)); + } } } return set; @@ -249,11 +257,12 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer { // http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html boolean isPropertyFile = "javax.xml.xpath.XPathFactory".equals(serviceName); + boolean isTuscanyService = serviceName.startsWith("org.apache.tuscany.sca."); serviceName = "META-INF/services/" + serviceName; Set visited = new HashSet(); //System.out.println(">>>> getServiceDeclarations()"); - for (Bundle bundle : getBundles()) { + for (Bundle bundle : getBundles(isTuscanyService)) { // if (!isProviderBundle(bundle)) { // continue; // } -- cgit v1.2.3