You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2010/10/21 15:43:26 UTC
svn commit: r1025997 - in /karaf/trunk/features:
core/src/main/java/org/apache/karaf/features/
core/src/main/java/org/apache/karaf/features/internal/
obr/src/main/java/org/apache/karaf/features/obr/internal/
obr/src/test/java/org/apache/karaf/features/...
Author: gnodet
Date: Thu Oct 21 13:43:26 2010
New Revision: 1025997
URL: http://svn.apache.org/viewvc?rev=1025997&view=rev
Log:
[KARAF-252] Add a dependency boolean attribute on features' bundles and allow specifiying an optional resolver
Modified:
karaf/trunk/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java
karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java
karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java
karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java
karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java
karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/BundleInfo.java Thu Oct 21 13:43:26 2010
@@ -27,4 +27,6 @@ public interface BundleInfo {
boolean isStart();
+ boolean isDependency();
+
}
Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/BundleInfoImpl.java Thu Oct 21 13:43:26 2010
@@ -26,7 +26,8 @@ public class BundleInfoImpl implements B
private int startLevel;
private String location;
private boolean start;
-
+ private boolean dependency;
+
public BundleInfoImpl() {
}
@@ -34,36 +35,43 @@ public class BundleInfoImpl implements B
public BundleInfoImpl(String location) {
this.location = location;
}
-
-
+
+
public BundleInfoImpl(String location, boolean start) {
this.location = location;
this.start = start;
}
-
+
public BundleInfoImpl(String location, int startLevel) {
this.location = location;
this.startLevel = startLevel;
}
-
+
public BundleInfoImpl(String location, int startLevel, boolean start) {
this.location = location;
this.startLevel = startLevel;
this.start = start;
}
-
+
+ public BundleInfoImpl(String location, int startLevel, boolean start, boolean dependency) {
+ this.location = location;
+ this.startLevel = startLevel;
+ this.start = start;
+ this.dependency = dependency;
+ }
+
public void setStartLevel(Integer startLevel) {
this.startLevel = startLevel;
}
-
+
public int getStartLevel() {
return this.startLevel;
}
-
+
public void setName(String location) {
this.location = location;
}
-
+
public String getLocation() {
return this.location;
}
@@ -75,4 +83,13 @@ public class BundleInfoImpl implements B
public boolean isStart() {
return start;
}
+
+ public void setDependency(boolean dependency) {
+ this.dependency = dependency;
+ }
+
+ public boolean isDependency() {
+ return dependency;
+ }
+
}
Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeatureImpl.java Thu Oct 21 13:43:26 2010
@@ -34,8 +34,6 @@ public class FeatureImpl implements Feat
private String version;
private String resolver;
private List<Feature> dependencies = new ArrayList<Feature>();
- // TODO
- // private List<String> bundles = new ArrayList<String>();
private List<BundleInfo> bundles = new ArrayList<BundleInfo>();
private Map<String, Map<String,String>> configs = new HashMap<String, Map<String,String>>();
public static String SPLIT_FOR_NAME_AND_VERSION = "_split_for_name_and_version_";
Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java Thu Oct 21 13:43:26 2010
@@ -440,13 +440,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 '" + resolver + "' not found, using the default 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();
}
Modified: karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java (original)
+++ karaf/trunk/features/core/src/main/java/org/apache/karaf/features/internal/RepositoryImpl.java Thu Oct 21 13:43:26 2010
@@ -163,13 +163,19 @@ public class RepositoryImpl implements R
Element b = (Element) bundleNodes.item(j);
String bStartLevel = b.getAttribute("start-level");
String bStart = b.getAttribute("start");
+ String bDependency = b.getAttribute("dependency");
boolean bs = true;
+ boolean bd = false;
int bsl = 0;
// Check the value of the "start" attribute
if (bStart != null && bStart.length() > 0) {
bs = Boolean.parseBoolean(bStart);
}
+ // Check the value of the "dependency" attribute
+ if (bDependency != null && bDependency.length() > 0) {
+ bd = Boolean.parseBoolean(bDependency);
+ }
// Check start level
if (bStartLevel != null && bStartLevel.length() > 0) {
try {
@@ -178,7 +184,7 @@ public class RepositoryImpl implements R
LOGGER.error("The start-level is not an int value for the bundle : " + b.getTextContent());
}
}
- f.addBundle(new BundleInfoImpl(b.getTextContent(), bsl, bs));
+ f.addBundle(new BundleInfoImpl(b.getTextContent(), bsl, bs, bd));
}
features.add(f);
}
Modified: karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java (original)
+++ karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/BundleInfoImpl.java Thu Oct 21 13:43:26 2010
@@ -26,6 +26,7 @@ public class BundleInfoImpl implements B
private int startLevel;
private String location;
private boolean start;
+ private boolean dependency;
public BundleInfoImpl() {
@@ -52,6 +53,13 @@ public class BundleInfoImpl implements B
this.start = start;
}
+ public BundleInfoImpl(String location, int startLevel, boolean start, boolean dependency) {
+ this.location = location;
+ this.startLevel = startLevel;
+ this.start = start;
+ this.dependency = dependency;
+ }
+
public void setStartLevel(Integer startLevel) {
this.startLevel = startLevel;
}
@@ -75,4 +83,13 @@ public class BundleInfoImpl implements B
public boolean isStart() {
return start;
}
+
+ public void setDependency(boolean dependency) {
+ this.dependency = dependency;
+ }
+
+ public boolean isDependency() {
+ return dependency;
+ }
+
}
Modified: karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java (original)
+++ karaf/trunk/features/obr/src/main/java/org/apache/karaf/features/obr/internal/ObrResolver.java Thu Oct 21 13:43:26 2010
@@ -22,6 +22,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -51,6 +52,7 @@ public class ObrResolver implements Reso
public List<BundleInfo> resolve(Feature feature) throws Exception {
List<Requirement> reqs = new ArrayList<Requirement>();
List<Resource> ress = new ArrayList<Resource>();
+ List<Resource> deploy = new ArrayList<Resource>();
Map<Object, BundleInfo> infos = new HashMap<Object, BundleInfo>();
for (BundleInfo bundleInfo : feature.getBundles()) {
try {
@@ -74,7 +76,9 @@ public class ObrResolver implements Reso
org.apache.felix.bundlerepository.Resolver resolver = repositoryAdmin.resolver(repos.toArray(new Repository[repos.size()]));
for (Resource res : ress) {
- resolver.add(res);
+ if (!infos.get(res).isDependency()) {
+ resolver.add(res);
+ }
}
for (Requirement req : reqs) {
resolver.add(req);
@@ -99,7 +103,9 @@ public class ObrResolver implements Reso
}
List<BundleInfo> bundles = new ArrayList<BundleInfo>();
- for (Resource res : resolver.getRequiredResources()) {
+ Collections.addAll(deploy, resolver.getAddedResources());
+ Collections.addAll(deploy, resolver.getRequiredResources());
+ for (Resource res : deploy) {
BundleInfo info = infos.get(res);
if (info == null) {
Reason[] reasons = resolver.getReason(res);
Modified: karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java?rev=1025997&r1=1025996&r2=1025997&view=diff
==============================================================================
--- karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java (original)
+++ karaf/trunk/features/obr/src/test/java/org/apache/karaf/features/obr/internal/ObrResolverTest.java Thu Oct 21 13:43:26 2010
@@ -63,6 +63,7 @@ public class ObrResolverTest {
expect(admin.resolver(EasyMock.<org.apache.felix.bundlerepository.Repository[]>anyObject())).andReturn(resolver);
resolver.add(EasyMock.capture(captureReq));
expect(resolver.resolve(Resolver.NO_OPTIONAL_RESOURCES)).andReturn(true);
+ expect(resolver.getAddedResources()).andReturn(new Resource[] { });
expect(resolver.getRequiredResources()).andReturn(new Resource[] { resource });
expect(resolver.getReason(resource)).andAnswer(new IAnswer() {
public Object answer() throws Throwable {