You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2011/03/15 12:29:44 UTC
svn commit: r1081738 -
/karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
Author: jbonofre
Date: Tue Mar 15 11:29:44 2011
New Revision: 1081738
URL: http://svn.apache.org/viewvc?rev=1081738&view=rev
Log:
[KARAF-505] Karaf now supports the OBR resolver including optional "flag".
Modified:
karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
Modified: karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java?rev=1081738&r1=1081737&r2=1081738&view=diff
==============================================================================
--- karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (original)
+++ karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java Tue Mar 15 11:29:44 2011
@@ -425,13 +425,31 @@ public class FeaturesServiceImpl impleme
if (resolver == null || resolver.length() == 0) {
return feature.getBundles();
}
+ boolean optional = false;
+ if (resolver.startsWith("(") && resolver.endsWith(")")) {
+ resolver = resolver.substring(1, resolver.length() - 1);
+ optional = true;
+ }
// Else, find the resolver
String filter = "(&(" + Constants.OBJECTCLASS + "=" + Resolver.class.getName() + ")(name=" + resolver + "))";
ServiceTracker tracker = new ServiceTracker(bundleContext, FrameworkUtil.createFilter(filter), null);
tracker.open();
try {
- Resolver r = (Resolver) tracker.waitForService(resolverTimeout);
- return r.resolve(feature);
+ if (optional) {
+ Resolver r = (Resolver) tracker.getService();
+ if (r != null) {
+ return r.resolve(feature);
+ } else {
+ LOGGER.debug("Optional resolver '{}' not found, using the default resolver", resolver);
+ return feature.getBundles();
+ }
+ } else {
+ Resolver r = (Resolver) tracker.waitForService(resolverTimeout);
+ if (r == null) {
+ throw new Exception("Unable to find required resolver '" + resolver + "'");
+ }
+ return r.resolve(feature);
+ }
} finally {
tracker.close();
}