You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by an...@apache.org on 2013/03/26 17:35:35 UTC
svn commit: r1461211 - in /karaf/cellar/trunk/bundle: pom.xml
src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
src/main/resources/OSGI-INF/blueprint/blueprint.xml
Author: anierbeck
Date: Tue Mar 26 16:35:35 2013
New Revision: 1461211
URL: http://svn.apache.org/r1461211
Log:
[KARAF-2251] - Cellar: features:install ignores incoming and outgoing blacklist
Modified:
karaf/cellar/trunk/bundle/pom.xml
karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
karaf/cellar/trunk/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
Modified: karaf/cellar/trunk/bundle/pom.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/pom.xml?rev=1461211&r1=1461210&r2=1461211&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/pom.xml (original)
+++ karaf/cellar/trunk/bundle/pom.xml Tue Mar 26 16:35:35 2013
@@ -43,6 +43,7 @@
org.apache.karaf.shell.console.commands;version="[3,4)",
org.apache.karaf.shell.console.completer;version="[3,4)",
org.apache.karaf.shell.commands;version="[3,4)",
+ org.apache.karaf.features;version="[3,4)",
org.osgi*,
org.slf4j;resolution:=optional
</osgi.import>
@@ -64,6 +65,12 @@
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.configadmin</artifactId>
</dependency>
+
+ <!-- Karaf features -->
+ <dependency>
+ <groupId>org.apache.karaf.features</groupId>
+ <artifactId>org.apache.karaf.features.core</artifactId>
+ </dependency>
<!-- Logging Dependencies -->
<dependency>
Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java?rev=1461211&r1=1461210&r2=1461211&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java Tue Mar 26 16:35:35 2013
@@ -19,12 +19,17 @@ import org.apache.karaf.cellar.core.cont
import org.apache.karaf.cellar.core.control.SwitchStatus;
import org.apache.karaf.cellar.core.event.EventHandler;
import org.apache.karaf.cellar.core.event.EventType;
+import org.apache.karaf.features.BundleInfo;
+import org.apache.karaf.features.Feature;
+import org.apache.karaf.features.FeaturesService;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.BundleException;
import org.osgi.service.cm.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
public class BundleEventHandler extends BundleSupport implements EventHandler<RemoteBundleEvent> {
@@ -34,6 +39,8 @@ public class BundleEventHandler extends
public static final String SWITCH_ID = "org.apache.karaf.cellar.bundle.handler";
private final Switch eventSwitch = new BasicSwitch(SWITCH_ID);
+
+ private FeaturesService featureService;
/**
* Handles remote bundle events.
@@ -63,6 +70,13 @@ public class BundleEventHandler extends
try {
//Check if the pid is marked as local.
if (isAllowed(event.getSourceGroup(), Constants.CATEGORY, event.getLocation(), EventType.INBOUND)) {
+ //check the features first
+ List<Feature> matchingFeatures = retrieveFeature(event);
+ for (Feature feature : matchingFeatures) {
+ if (!isAllowed(event.getSourceGroup(), "features", feature.getName(), EventType.INBOUND)) {
+ LOGGER.warn("CELLAR BUNDLE: bundle {} is contained in a feature marked as BLOCKED INBOUND", event.getLocation());
+ }
+ }
if (event.getType() == BundleEvent.INSTALLED) {
installBundleFromLocation(event.getLocation());
LOGGER.debug("CELLAR BUNDLE: installing {}/{}", event.getSymbolicName(), event.getVersion());
@@ -82,9 +96,26 @@ public class BundleEventHandler extends
} else LOGGER.warn("CELLAR BUNDLE: bundle {} is marked as BLOCKED INBOUND", event.getSymbolicName());
} catch (BundleException e) {
LOGGER.error("CELLAR BUNDLE: failed to install bundle {}/{}.", new Object[]{event.getSymbolicName(), event.getVersion()}, e);
+ } catch (Exception e) {
+ LOGGER.error("CELLAR BUNDLE: failed to handle bundle event", e);
}
}
+ private List<Feature> retrieveFeature(RemoteBundleEvent event) throws Exception {
+ Feature[] features = featureService.listFeatures();
+ List<Feature> matchingFeatures = new ArrayList<Feature>();
+ for (Feature feature : features) {
+ List<BundleInfo> bundles = feature.getBundles();
+ for (BundleInfo bundleInfo : bundles) {
+ String location = bundleInfo.getLocation();
+ if (location.equalsIgnoreCase(event.getLocation())) {
+ matchingFeatures.add(feature);
+ }
+ }
+ }
+ return matchingFeatures;
+ }
+
/**
* Initialization Method.
*/
@@ -120,5 +151,19 @@ public class BundleEventHandler extends
public Class<RemoteBundleEvent> getType() {
return RemoteBundleEvent.class;
}
+
+ /**
+ * @return the featureService
+ */
+ public FeaturesService getFeatureService() {
+ return featureService;
+ }
+
+ /**
+ * @param featureService the featureService to set
+ */
+ public void setFeatureService(FeaturesService featureService) {
+ this.featureService = featureService;
+ }
}
Modified: karaf/cellar/trunk/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1461211&r1=1461210&r2=1461211&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/trunk/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml Tue Mar 26 16:35:35 2013
@@ -46,6 +46,7 @@
<property name="clusterManager" ref="clusterManager"/>
<property name="bundleContext" ref="blueprintBundleContext"/>
<property name="groupManager" ref="groupManager"/>
+ <property name="featuresService" ref="featuresService"/>
</bean>
<service ref="eventHandler" interface="org.apache.karaf.cellar.core.event.EventHandler">
<service-properties>
@@ -58,5 +59,6 @@
<reference id="groupManager" interface="org.apache.karaf.cellar.core.GroupManager" />
<reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"/>
<reference id="eventProducer" interface="org.apache.karaf.cellar.core.event.EventProducer"/>
+ <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService"/>
</blueprint>