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/09/16 14:49:24 UTC

svn commit: r1171529 [1/2] - in /karaf/cellar/branches/cellar-2.2.x: ./ assembly/src/main/resources/ bundle/src/main/java/org/apache/karaf/cellar/bundle/ cloud/src/main/java/org/apache/karaf/cellar/cloud/ config/src/main/java/org/apache/karaf/cellar/co...

Author: jbonofre
Date: Fri Sep 16 12:49:22 2011
New Revision: 1171529

URL: http://svn.apache.org/viewvc?rev=1171529&view=rev
Log:
[KARAF-857] Add Cellar OBR support.

Added:
    karaf/cellar/branches/cellar-2.2.x/obr/
    karaf/cellar/branches/cellar-2.2.x/obr/NOTICE
    karaf/cellar/branches/cellar-2.2.x/obr/pom.xml
    karaf/cellar/branches/cellar-2.2.x/obr/src/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/Constants.java
      - copied, changed from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEvent.java
      - copied, changed from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleInfo.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrSupport.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlEvent.java
      - copied, changed from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlEventHandler.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java
      - copied, changed from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrListCommand.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrListUrlCommand.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/blueprint.xml
    karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
Modified:
    karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml
    karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/groups.cfg
    karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
    karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java
    karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
    karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/Constants.java
    karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
    karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java
    karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java
    karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
    karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java
    karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
    karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ExportServiceListener.java
    karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ImportServiceListener.java
    karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/RemoteServiceCallHandler.java
    karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java
    karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesEventHandler.java
    karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSupport.java
    karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java
    karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/LocalFeaturesListener.java
    karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/RepositoryEventHandler.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastBundleListener.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastEventTransportFactory.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastInstanceAware.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java
    karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java
    karaf/cellar/branches/cellar-2.2.x/pom.xml

Modified: karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/features.xml Fri Sep 16 12:49:22 2011
@@ -16,8 +16,6 @@
 <features name="karaf-cellar-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
 
     <repository>mvn:org.jclouds.karaf/feature/1.0.0/xml/features</repository>
-    <repository>mvn:org.apache.karaf.assemblies.features/standard/${karaf.version}/xml/features</repository>
-
 
     <feature name='hazelcast' description='In memory data grid' version='${hazelcast.version}' resolver='(obr)'>
         <bundle>mvn:com.hazelcast/hazelcast/${hazelcast.version}</bundle>
@@ -37,6 +35,7 @@
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.config/${project.version}</bundle>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.features/${project.version}</bundle>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.bundle/${project.version}</bundle>
+        <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.dosgi/${project.version}</bundle>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.utils/${project.version}</bundle>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.shell/${project.version}</bundle>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.management/${project.version}</bundle>
@@ -51,8 +50,14 @@
         </configfile>
     </feature>
 
+    <feature name='cellar-obr' description='Karaf Cellar OBR support' version='${project.version}' resolver='(obr)'>
+        <feature>obr</feature>
+        <feature version="${project.version}">cellar</feature>
+        <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.obr/${project.version}</bundle>
+    </feature>
+
     <feature name='cellar-cloud' description='Karaf Cellar Cloud Feature' version='${project.version}' resolver='(obr)'>
-        <feature>cellar</feature>
+        <feature version="${project.version}">cellar</feature>
         <feature version="${jclouds.version}">jclouds</feature>
         <!-- Adding S3 as the default Blobstore -->
         <feature>jclouds-aws-s3</feature>
@@ -62,7 +67,7 @@
 
     <feature name='cellar-webconsole' description='Karaf Cellar Webconsole Plugin' version='${project.version}'
              resolver='(obr)'>
-        <feature>cellar</feature>
+        <feature version="${project.version}">cellar</feature>
         <feature>webconsole</feature>
         <bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.webconsole/${project.version}</bundle>
     </feature>

Modified: karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/groups.cfg
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/groups.cfg?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/groups.cfg (original)
+++ karaf/cellar/branches/cellar-2.2.x/assembly/src/main/resources/groups.cfg Fri Sep 16 12:49:22 2011
@@ -3,9 +3,13 @@ default.config.whitelist.outbound=*
 default.config.blacklist.inbound=org.apache.karaf.cellar.instance,org.apache.karaf.cellar.node,org.apache.karaf.management
 default.config.blacklist.outbound=org.apache.karaf.cellar.instance,org.apache.karaf.cellar.node,org.apache.karaf.management
 default.config.sync=true
+
 default.features.whitelist.inbound=*
 default.features.whitelist.outbound=*
 default.features.blacklist.inbound=cellar
 default.features.blacklist.outbound=cellar
 default.features.sync=true
-default.repositories.sync=true
\ No newline at end of file
+default.features.repositories.sync=true
+
+default.obr.urls.sync=true
+default.obr.bundles.sync=true
\ No newline at end of file

Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleEventHandler.java Fri Sep 16 12:49:22 2011
@@ -58,24 +58,29 @@ public class BundleEventHandler extends 
 				state.setStatus(event.getType());
 
 				if(event.getType() == BundleEvent.INSTALLED) {
+                    LOGGER.debug("CELLAR BUNDLE: install bundle {} from {}", event.getId(), event.getLocation());
 					installBundleFromLocation(event.getLocation());
 					bundleTable.put(event.getId(),state);
 				} else if(event.getType() == BundleEvent.UNINSTALLED) {
+                    LOGGER.debug("CELLAR BUNDLE: uninstall bundle {}/{}", event.getSymbolicName(), event.getVersion());
 					uninstallBundle(event.getSymbolicName(), event.getVersion());
 					bundleTable.remove(event.getId());
 				} else if(event.getType() == BundleEvent.STARTED) {
-					 startBundle(event.getSymbolicName(),event.getVersion());
-					 bundleTable.put(event.getId(),state);
+                    LOGGER.debug("CELLAR BUNDLE: start bundle {}/{}", event.getSymbolicName(), event.getVersion());
+					startBundle(event.getSymbolicName(),event.getVersion());
+					bundleTable.put(event.getId(),state);
 				} else if(event.getType() == BundleEvent.STOPPED) {
-					 stopBundle(event.getSymbolicName(), event.getVersion());
-					 state.setStatus(BundleEvent.INSTALLED);
-					 bundleTable.put(event.getId(),state);
+                    LOGGER.debug("CELLAR BUNDLE: stop bundle {}/{}", event.getSymbolicName(), event.getVersion());
+					stopBundle(event.getSymbolicName(), event.getVersion());
+					state.setStatus(BundleEvent.INSTALLED);
+					bundleTable.put(event.getId(),state);
 				} else if(event.getType() == BundleEvent.UPDATED) {
+                    LOGGER.debug("CELLAR BUNDLE: update bundle {}/{}", event.getSymbolicName(), event.getVersion());
 					updateBundle(event.getSymbolicName(), event.getVersion());
 				}
-			} else logger.debug("Bundle with symbolicName {} is marked as BLOCKED INBOUND",event.getSymbolicName());
+			} else logger.debug("CELLAR BUNDLE: event {} is marked as BLOCKED INBOUND",event.getId());
 		} catch (BundleException e) {
-			logger.info("Failed to install bundle.");
+			logger.error("CELLAR BUNDLE: fail to handle bundle event {}", event.getId(), e);
 		}
 	}
 

Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSupport.java Fri Sep 16 12:49:22 2011
@@ -18,8 +18,6 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 import org.osgi.service.cm.ConfigurationAdmin;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.Dictionary;
 import java.util.Enumeration;
@@ -27,8 +25,6 @@ import java.util.Properties;
 
 public class BundleSupport extends CellarSupport {
 
-    private static final Logger logger = LoggerFactory.getLogger(CellarSupport.class);
-
 	protected BundleContext bundleContext;
 
 	/**

Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/BundleSynchronizer.java Fri Sep 16 12:49:22 2011
@@ -35,7 +35,7 @@ import java.util.Set;
 
 public class BundleSynchronizer extends BundleSupport implements Synchronizer {
 
-    private static final Logger logger = LoggerFactory.getLogger(BundleSynchronizer.class);
+    private static final transient Logger LOGGER = LoggerFactory.getLogger(BundleSynchronizer.class);
 
     private List<EventProducer> producerList;
 
@@ -49,7 +49,7 @@ public class BundleSynchronizer extends 
                 if (isSyncEnabled(group)) {
                     pull(group);
                     push(group);
-                }
+                } else LOGGER.warn("CELLAR BUNDLE: sync is disable for group {}", group.getName());
             }
         }
     }
@@ -89,7 +89,7 @@ public class BundleSynchronizer extends 
                                     installBundleFromLocation(state.getLocation());
                                 }
                             } catch (BundleException e) {
-                                logger.error("Error while pulling bundle", e);
+                                LOGGER.error("CELLAR BUNDLE: fail to pull bundle {}", id, e);
                             }
                         }
                     }
@@ -152,7 +152,7 @@ public class BundleSynchronizer extends 
             String propertyValue = properties.get(propertyKey);
             result = Boolean.parseBoolean(propertyValue);
         } catch (IOException e) {
-            logger.error("Error while checking if sync is enabled.", e);
+            LOGGER.error("CELLAR BUNDLE: fail to check if sync is enabled.", e);
         }
         return result;
     }

Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/Constants.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/Constants.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/Constants.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/Constants.java Fri Sep 16 12:49:22 2011
@@ -14,6 +14,7 @@
 package org.apache.karaf.cellar.bundle;
 
 public class Constants {
+
     public static final String CATEGORY = "bundle";
 	public static final String BUNDLE_MAP = "org.apache.karaf.cellar.bundle.map";
 

Modified: karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/bundle/src/main/java/org/apache/karaf/cellar/bundle/LocalBundleListener.java Fri Sep 16 12:49:22 2011
@@ -27,7 +27,7 @@ import java.util.Set;
 
 public class LocalBundleListener extends BundleSupport implements BundleListener {
 
-    private static final Logger logger = LoggerFactory.getLogger(LocalBundleListener.class);
+    private static final transient Logger LOGGER = LoggerFactory.getLogger(LocalBundleListener.class);
 
     private List<EventProducer> producerList;
 
@@ -40,31 +40,32 @@ public class LocalBundleListener extends
      */
     public void bundleChanged(BundleEvent event) {
         try {
-        if (event != null && event.getBundle() != null) {
-            Set<Group> groups = groupManager.listLocalGroups();
+            if (event != null && event.getBundle() != null) {
+                Set<Group> groups = groupManager.listLocalGroups();
 
-            if (groups != null && !groups.isEmpty()) {
-                for (Group group : groups) {
+                if (groups != null && !groups.isEmpty()) {
+                    for (Group group : groups) {
 
-                    String symbolicName = event.getBundle().getSymbolicName();
-                    String version = event.getBundle().getVersion().toString();
-                    String bundleLocation = event.getBundle().getLocation();
-                    int type = event.getType();
-                    if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
-                        RemoteBundleEvent remoteBundleEvent = new RemoteBundleEvent(symbolicName, version, bundleLocation, type);
-                        remoteBundleEvent.setSourceGroup(group);
-                        remoteBundleEvent.setSourceNode(node);
-                        if (producerList != null && !producerList.isEmpty()) {
-                            for (EventProducer producer : producerList) {
-                                producer.produce(remoteBundleEvent);
+                        String symbolicName = event.getBundle().getSymbolicName();
+                        String version = event.getBundle().getVersion().toString();
+                        String bundleLocation = event.getBundle().getLocation();
+                        int type = event.getType();
+                        if (isAllowed(group, Constants.CATEGORY, bundleLocation, EventType.OUTBOUND)) {
+                            RemoteBundleEvent remoteBundleEvent = new RemoteBundleEvent(symbolicName, version, bundleLocation, type);
+                            remoteBundleEvent.setSourceGroup(group);
+                            remoteBundleEvent.setSourceNode(node);
+                            if (producerList != null && !producerList.isEmpty()) {
+                                for (EventProducer producer : producerList) {
+                                    producer.produce(remoteBundleEvent);
+                                }
                             }
-                        }
-                    } else logger.debug("Bundle with symbolicName {} is marked as BLOCKED OUTBOUND");
+                        } else
+                            LOGGER.debug("CELLAR BUNDLE: event {}/{} is marked as BLOCKED OUTBOUND", event.getBundle().getSymbolicName(), event.getBundle().getVersion());
+                    }
                 }
             }
-        }
-        }catch (Exception ex) {
-            LOGGER.warn("Error handling bundle event",ex);
+        } catch (Exception ex) {
+            LOGGER.error("CELLAR BUNDLE: fail to process bundle {}/{}", new Object[]{ event.getBundle().getSymbolicName(), event.getBundle().getVersion() }, ex);
         }
     }
 

Modified: karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryService.java Fri Sep 16 12:49:22 2011
@@ -37,7 +37,7 @@ import java.util.Set;
 
 public class BlobStoreDiscoveryService implements DiscoveryService {
 
-    private static final Logger logger = LoggerFactory.getLogger(BlobStoreDiscoveryService.class);
+    private static final transient Logger LOGGER = LoggerFactory.getLogger(BlobStoreDiscoveryService.class);
 
     private String provider;
     private String identity;
@@ -53,7 +53,7 @@ public class BlobStoreDiscoveryService i
      * Constructor
      */
     public BlobStoreDiscoveryService() {
-        logger.info("Cloud blob store discovery service initialized");
+        LOGGER.debug("CELLAR CLOUD: blob store discovery service initialized");
     }
 
     public void init() {
@@ -66,7 +66,7 @@ public class BlobStoreDiscoveryService i
                 signIn();
             }
         } catch (Exception ex) {
-            logger.error("Error while initializing blobstore discovery service", ex);
+            LOGGER.error("CELLAR CLOUD: error while initializing blob store discovery service", ex);
         }
     }
 
@@ -76,7 +76,7 @@ public class BlobStoreDiscoveryService i
     }
 
     public void update(Map<String, Object> properties) {
-        logger.info("Updating properties");
+        LOGGER.debug("CELLAR CLOUD: updating properties");
     }
 
     /**
@@ -130,7 +130,7 @@ public class BlobStoreDiscoveryService i
         if (blobStore.blobExists(container, ipAddress)) {
             blobStore.removeBlob(container, ipAddress);
         } else {
-            logger.debug("Could not find the ip address of the current node, in the blobstore.");
+            LOGGER.debug("CELLAR CLOUD: unable to find the IP address of the current node in the blob store.");
         }
     }
 
@@ -152,9 +152,9 @@ public class BlobStoreDiscoveryService i
             ois = new ObjectInputStream(is);
             result = ois.readObject();
         } catch (IOException e) {
-            logger.error("Error while reading blob.", e);
+            LOGGER.error("CELLAR CLOUD: failed to read blob", e);
         } catch (ClassNotFoundException e) {
-            logger.error("Error while reading blob.", e);
+            LOGGER.error("CELLAR CLOUD: failed to read blob", e);
         } finally {
             if (ois != null) {
                 try {
@@ -195,7 +195,7 @@ public class BlobStoreDiscoveryService i
                 blob.setPayload(baos.toByteArray());
                 blobStore.putBlob(container, blob);
             } catch (IOException e) {
-                logger.error("Error while writing blob", e);
+                LOGGER.error("CELLAR CLOUD: failed to write blob", e);
             } finally {
                 if (oos != null) {
                     try {
@@ -222,7 +222,7 @@ public class BlobStoreDiscoveryService i
         try {
             return InetAddress.getLocalHost().getHostAddress();
         } catch (UnknownHostException ex) {
-            logger.error("Can't determine IP address for current node.", ex);
+            LOGGER.error("CELLAR CLOUD: unable to determine IP address for current node", ex);
             return null;
         }
     }

Modified: karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/cloud/src/main/java/org/apache/karaf/cellar/cloud/BlobStoreDiscoveryServiceFactory.java Fri Sep 16 12:49:22 2011
@@ -28,7 +28,7 @@ import java.util.concurrent.ConcurrentHa
 
 public class BlobStoreDiscoveryServiceFactory implements ManagedServiceFactory {
 
-    private static final Logger logger = LoggerFactory.getLogger(BlobStoreDiscoveryServiceFactory.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(BlobStoreDiscoveryServiceFactory.class);
 
     private static final String PROVIDER = "provider";
     private static final String IDENTITY = "identity";
@@ -50,7 +50,7 @@ public class BlobStoreDiscoveryServiceFa
     }
 
     public String getName() {
-        return "Blobstore discovery service factory";
+        return "CELLAR CLOUD: blob store discovery service factory";
     }
 
     public void updated(String pid, Dictionary properties) throws ConfigurationException {
@@ -86,14 +86,14 @@ public class BlobStoreDiscoveryServiceFa
         } finally {
             ServiceRegistration oldRegistration = (newRegistration == null) ? registrations.remove(pid) : registrations.put(pid, newRegistration);
             if (oldRegistration != null) {
-                logger.info("Unregistering blobstore discovery service " + pid);
+                LOGGER.debug("CELLAR CLOUD: un-registering blob store discovery service {}", pid);
                 oldRegistration.unregister();
             }
         }
     }
 
     public void deleted(String pid) {
-        logger.info("Blobstore discovery service deleted {}", pid);
+        LOGGER.debug("CELLAR CLOUD: blob store discovery service deleted {}", pid);
         ServiceRegistration oldRegistration = registrations.remove(pid);
         if (oldRegistration != null) {
             oldRegistration.unregister();

Modified: karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationEventHandler.java Fri Sep 16 12:49:22 2011
@@ -13,7 +13,6 @@
  */
 package org.apache.karaf.cellar.config;
 
-
 import org.apache.karaf.cellar.core.Configurations;
 import org.apache.karaf.cellar.core.Group;
 import org.apache.karaf.cellar.core.Node;
@@ -73,12 +72,12 @@ public class ConfigurationEventHandler e
                         if (!dictionariesEqual(dictionary, existingConfiguration)) {
                             conf.update(preparePull(dictionary));
                         }
-                        LOGGER.info("CELLAR CONFIG EVENT: local configuration updated.");
+                        LOGGER.debug("CELLAR CONFIG: local configuration updated.");
                     }
                 } catch (IOException ex) {
-                    LOGGER.error("Failed to read remote configurationTable", ex);
+                    LOGGER.error("CELLAR CONFIG: fail to read distributed configuration map", ex);
                 }
-            } else LOGGER.debug("Configuration with pid {} is marked as local.", pid);
+            } else LOGGER.debug("CELLAR CONFIG: configuration pid {} is marked as local", pid);
         }
     }
 

Modified: karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/ConfigurationSynchronizer.java Fri Sep 16 12:49:22 2011
@@ -56,7 +56,7 @@ public class ConfigurationSynchronizer e
                 if (isSyncEnabled(group)) {
                     pull(group);
                     push(group);
-                }
+                } else LOGGER.warn("CELLAR CONFFIG: sync is disabled for group {}", group.getName());
             }
         }
     }
@@ -91,9 +91,9 @@ public class ConfigurationSynchronizer e
                                 //Mark the remote configuration event.
                                 conf.update(preparePull(dictionary));
                             }
-                            LOGGER.info("CELLAR CONFIGURATION EVENT: read remote configuration.");
+                            LOGGER.debug("CELLAR CONFIG: read remote configuration.");
                         } catch (IOException ex) {
-                            LOGGER.error("Failed to read remote configuration", ex);
+                            LOGGER.error("CELLAR CONFIG: fail to read distributed configuration map", ex);
                         }
                     }
                 }
@@ -144,7 +144,6 @@ public class ConfigurationSynchronizer e
                                         }
 
                                     }
-                                    LOGGER.info("CELLAR CONFIG EVENT: Publishing PID {} to remote map", pid);
                                 }
                             } else {
                                 RemoteConfigurationEvent event = new RemoteConfigurationEvent(conf.getPid());
@@ -154,14 +153,14 @@ public class ConfigurationSynchronizer e
                                         producer.produce(event);
                                     }
                                 }
-                                LOGGER.info("CELLAR CONFIG EVENT: Publishing PID {} to remote map", pid);
                             }
+                            LOGGER.debug("CELLAR CONFIG: publish PID {} to distributed configuration map", pid);
                         }
                     }
                 } catch (IOException ex) {
-                    LOGGER.error("Failed to read remote configuration, due to I/O error: ", ex);
+                    LOGGER.error("CELLAR CONFIG: fail to read distributed configuration map (IO error)", ex);
                 } catch (InvalidSyntaxException ex) {
-                    LOGGER.error("Failed to read remote configuration, due to invalid filter syntax: ", ex);
+                    LOGGER.error("CELLAR CONFIG: fail to read distributed configuration map (invalid syntax error)", ex);
                 }
             } finally {
                 Thread.currentThread().setContextClassLoader(originalClassLoader);
@@ -180,7 +179,7 @@ public class ConfigurationSynchronizer e
             String propertyValue = properties.get(propertyKey);
             result = Boolean.parseBoolean(propertyValue);
         } catch (IOException e) {
-            LOGGER.error("Error while checking if sync is enabled.", e);
+            LOGGER.error("CELLAR CONFIG: unable to check if sync is enabled", e);
         }
         return result;
     }

Modified: karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/config/src/main/java/org/apache/karaf/cellar/config/LocalConfigurationListener.java Fri Sep 16 12:49:22 2011
@@ -66,7 +66,7 @@ public class LocalConfigurationListener 
                             producer.produce(configurationEvent);
                         }
                     }
-                } else LOGGER.debug("Configuration with PID {} is marked as local.", pid);
+                } else LOGGER.debug("CELLAR CONFIG: configuration with PID {} is marked as local.", pid);
             }
         }
     }
@@ -88,9 +88,9 @@ public class LocalConfigurationListener 
                 configurationTable.put(configuration.getPid(), properties);
             }
         } catch (IOException e) {
-            LOGGER.error("Failed to push configuration with PID: {}", pid, e);
+            LOGGER.error("CELLAR CONFIG: failed to push configuration with PID {} to the distributed map", pid, e);
         } catch (InvalidSyntaxException e) {
-            LOGGER.error("Failed to retrieve configuration with PID: {}", pid, e);
+            LOGGER.error("CELLAR CONFIG: failed to push configuration with PID {} to the distributed map", pid, e);
         }
     }
 

Modified: karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ExportServiceListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ExportServiceListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ExportServiceListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ExportServiceListener.java Fri Sep 16 12:49:22 2011
@@ -55,16 +55,16 @@ public class ExportServiceListener imple
         //Lookup for already exported services.
         ServiceReference[] references = null;
         try {
-            String filter = "(" + Constants.EXPORTED_INTERFACES + "=" + Constants.ALL_INTERFACES+")";
+            String filter = "(" + Constants.EXPORTED_INTERFACES + "=" + Constants.ALL_INTERFACES + ")";
             references = bundleContext.getServiceReferences(null, filter);
 
-        if (references != null) {
-            for (ServiceReference reference : references) {
-                exportService(reference);
+            if (references != null) {
+                for (ServiceReference reference : references) {
+                    exportService(reference);
+                }
             }
-        }
         } catch (InvalidSyntaxException e) {
-            LOGGER.error("Error exporting existing remote services.",e);
+            LOGGER.error("CELLAR DOSGI: unable to export existing remote services", e);
         }
     }
 
@@ -108,7 +108,7 @@ public class ExportServiceListener imple
 
             String exportedServices = (String) serviceReference.getProperty(Constants.EXPORTED_INTERFACES);
             if (exportedServices != null && exportedServices.length() > 0) {
-                LOGGER.info("CELLAR DOSGI EVENT: Exporting remote service.");
+                LOGGER.debug("CELLAR DOSGI: exporting remote service");
                 String[] interfaces = exportedServices.split(Constants.INTERFACE_SEPARATOR);
                 Object service = bundleContext.getService(serviceReference);
 
@@ -156,7 +156,7 @@ public class ExportServiceListener imple
             Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
             String exportedServices = (String) serviceReference.getProperty(Constants.EXPORTED_INTERFACES);
             if (exportedServices != null && exportedServices.length() > 0) {
-                LOGGER.info("CELLAR DOSGI EVENT: Unexporting remote service.");
+                LOGGER.debug("CELLAR DOSGI: unexporting remote service.");
                 String[] interfaces = exportedServices.split(Constants.INTERFACE_SEPARATOR);
                 Object service = bundleContext.getService(serviceReference);
 
@@ -214,7 +214,7 @@ public class ExportServiceListener imple
                         String ifaceName = clazz.getCanonicalName();
                         interfaceList.add(ifaceName);
                     } catch (ClassNotFoundException e) {
-                        LOGGER.warn("Could not load class", e);
+                        LOGGER.error("CELLAR DOSGI: could not load class", e);
                     }
                 }
             }

Modified: karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ImportServiceListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ImportServiceListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ImportServiceListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/ImportServiceListener.java Fri Sep 16 12:49:22 2011
@@ -138,7 +138,7 @@ public class ImportServiceListener imple
      * @param listenerInfo
      */
     private void importService(EndpointDescription endpoint, ListenerInfo listenerInfo) {
-        LOGGER.info("CELLAR DOSGI EVENT: Importing remote service.");
+        LOGGER.debug("CELLAR DOSGI: importing remote service.");
 
         EventProducer requestProducer = producers.get(endpoint.getId());
         if(requestProducer == null) {

Modified: karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/RemoteServiceCallHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/RemoteServiceCallHandler.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/RemoteServiceCallHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/dosgi/src/main/java/org/apache/karaf/cellar/dosgi/RemoteServiceCallHandler.java Fri Sep 16 12:49:22 2011
@@ -59,7 +59,7 @@ public class RemoteServiceCallHandler ex
                 }
 
             } catch (InvalidSyntaxException e) {
-                LOGGER.error("Could not lookup service", e);
+                LOGGER.error("CELLAR DOSGI: unable to lookup service", e);
             }
 
             if (targetService != null) {
@@ -91,17 +91,16 @@ public class RemoteServiceCallHandler ex
                     producer.produce(result);
 
                 } catch (NoSuchMethodException e) {
-                    LOGGER.error("Could not find remote method for service", e);
+                    LOGGER.error("CELLAR DOSGI: unable to find remote method for service", e);
                 } catch (InvocationTargetException e) {
-                    LOGGER.error("Could not invoke remote method for service", e);
+                    LOGGER.error("CELLAR DOSGI: unable to invoke remote method for service", e);
                 } catch (IllegalAccessException e) {
-                    LOGGER.error("Could not invoke remote method for service", e);
+                    LOGGER.error("CELLAR DOSGI: unable to access remote method for service", e);
                 }
             }
         }
     }
 
-
     @Override
     public Class<RemoteServiceCall> getType() {
         return RemoteServiceCall.class;

Modified: karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java Fri Sep 16 12:49:22 2011
@@ -20,7 +20,7 @@ public class Constants {
 
     public static final String REPOSITORIES = "org.apache.karaf.cellar.repositories";
     public static final String FEATURES = "org.apache.karaf.cellar.features";
-    public static final String REPOSITORIES_CATEGORY = "repositories";
+    public static final String REPOSITORIES_CATEGORY = "features.repositories";
     public static final String FEATURES_CATEGORY = "features";
 
 }

Modified: karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesEventHandler.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesEventHandler.java Fri Sep 16 12:49:22 2011
@@ -51,27 +51,24 @@ public class FeaturesEventHandler extend
         String name = event.getName();
         String version = event.getVersion();
         if (isAllowed(event.getSourceGroup(), Constants.FEATURES_CATEGORY, name, EventType.INBOUND) || event.getForce()) {
-            LOGGER.debug("Received features event {} version {} type {}.", new Object[]{event.getName(), event.getVersion(), event.getType()});
             FeatureEvent.EventType type = event.getType();
             Boolean isInstalled = isInstalled(name, version);
             try {
                 if (FeatureEvent.EventType.FeatureInstalled.equals(type) && !isInstalled) {
-                    LOGGER.debug("Installing feature {} version {}", name, version);
+                    LOGGER.debug("CELLAR FEATURES: installing feature {}/{}", name, version);
                     if (version != null) {
                         featuresService.installFeature(name, version);
                     } else featuresService.installFeature(name);
-                    LOGGER.info("CELLAR FEATURES EVENT: installing feature {} version {}", name, version);
                 } else if (FeatureEvent.EventType.FeatureUninstalled.equals(type) && isInstalled) {
-                    LOGGER.debug("Uninstalling feature {} version {}", name, version);
+                    LOGGER.debug("CELLAR FEATURES: uninstalling feature {}/{}", name, version);
                     if (version != null) {
                         featuresService.uninstallFeature(name, version);
                     } else featuresService.uninstallFeature(name);
-                    LOGGER.info("CELLAR FEATURES EVENT: uninstalling feature {} version {}", name, version);
                 }
             } catch (Exception e) {
-                LOGGER.error("Failed to process feature event.", e);
+                LOGGER.warn("CELLAR FEATURES: failed to handle event.", e);
             }
-        } else LOGGER.debug("Feature with name {} is marked as BLOCKED INBOUND", name);
+        } else LOGGER.debug("CELLAR FEATURES: event {} is marked as BLOCKED INBOUND", name);
     }
 
     public Class<RemoteFeaturesEvent> getType() {

Modified: karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSupport.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSupport.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSupport.java Fri Sep 16 12:49:22 2011
@@ -86,8 +86,8 @@ public class FeaturesSupport extends Cel
                     Boolean installed = featuresService.isInstalled(feature);
                     features.put(info, installed);
                 }
-            } else LOGGER.debug("Feature with name {} is marked as BLOCKED OUTBOUND", feature.getName());
-        } else LOGGER.debug("Feature is null");
+            } else LOGGER.debug("CELLAR FEATURES: feature {} is marked as BLOCKED OUTBOUND", feature.getName());
+        } else LOGGER.debug("CELLAR FEATURES: feature is null");
     }
 
     /**
@@ -106,8 +106,8 @@ public class FeaturesSupport extends Cel
                     FeatureInfo info = new FeatureInfo(feature.getName(), feature.getVersion());
                     features.put(info, force);
                 }
-            } else LOGGER.debug("Feature with name {} is marked as BLOCKED OUTBOUND", feature.getName());
-        } else LOGGER.debug("Feature is null");
+            } else LOGGER.debug("CELLAR FEATURES: feature {} is marked as BLOCKED OUTBOUND", feature.getName());
+        } else LOGGER.debug("CELLAR FEATURES: feature is null");
     }
 
     /**

Modified: karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java Fri Sep 16 12:49:22 2011
@@ -54,7 +54,7 @@ public class FeaturesSynchronizer extend
                 if (isSyncEnabled(group)) {
                     pull(group);
                     push(group);
-                }
+                } else LOGGER.warn("CELLAR FEATURES: sync is disabled for group {}", group.getName());
             }
         }
     }
@@ -82,13 +82,12 @@ public class FeaturesSynchronizer extend
                 if (repositories != null && !repositories.isEmpty()) {
                     for (String url : repositories) {
                         try {
-                            LOGGER.debug("Adding repository {}", url);
+                            LOGGER.debug("CELLAR FEATURES: adding repository {}", url);
                             featuresService.addRepository(new URI(url));
-                            LOGGER.info("CELLAR FEATURE EVENT: adding new repository {}", url);
                         } catch (MalformedURLException e) {
-                            LOGGER.error("Failed to add features repository. URL {} is malformed", url);
+                            LOGGER.warn("CELLAR FEATURES: failed to add features repository {} (URL is malformed)", url, e);
                         } catch (Exception e) {
-                            LOGGER.error("Failed to add features repository.", e);
+                            LOGGER.warn("CELLAR FEATURES: failed to add features repository {}", url, e);
                         }
                     }
                 }
@@ -105,23 +104,21 @@ public class FeaturesSynchronizer extend
                             //If feature needs to be installed locally.
                             if (remotelyInstalled && !localyInstalled) {
                                 try {
-                                    LOGGER.debug("Installing feature {}/{}", info.getName(), info.getVersion());
+                                    LOGGER.debug("CELLAR FEATURES: installing feature {}/{}", info.getName(), info.getVersion());
                                     featuresService.installFeature(info.getName(), info.getVersion());
-                                    LOGGER.info("CELLAR FEATURE EVENT: installing feature {}/{}", info.getName(), info.getVersion());
                                 } catch (Exception e) {
-                                    LOGGER.error("Failed to install feature {}/{} ", info.getName(), info.getVersion());
+                                    LOGGER.warn("CELLAR FEATURES: failed to install feature {}/{} ", new Object[]{ info.getName(), info.getVersion() }, e);
                                 }
                                 //If feature needs to be localy uninstalled.
                             } else if (!remotelyInstalled && localyInstalled) {
                                 try {
-                                    LOGGER.debug("Uninstalling feature {}/{}", info.getName(), info.getVersion());
+                                    LOGGER.debug("CELLAR FEATURES: uninstalling feature {}/{}", info.getName(), info.getVersion());
                                     featuresService.uninstallFeature(info.getName(), info.getVersion());
-                                    LOGGER.info("CELLAR FEATURE EVENT: uninstalling feature {}/{}", info.getName(), info.getVersion());
                                 } catch (Exception e) {
-                                    LOGGER.error("Failed to uninstall feature {}/{} ", info.getName(), info.getVersion());
+                                    LOGGER.warn("CELLAR FEATURES: failed to uninstall feature {}/{} ", new Object[]{ info.getName(), info.getVersion() }, e);
                                 }
                             }
-                        } else LOGGER.debug("Feature with name {} is marked as BLOCKED INBOUND", info.getName());
+                        } else LOGGER.debug("CELLAR FEATURES: feature {} is marked as BLOCKED INBOUND", info.getName());
                     }
                 }
             } finally {
@@ -151,14 +148,14 @@ public class FeaturesSynchronizer extend
                     repositoryList = featuresService.listRepositories();
                     featuresList = featuresService.listFeatures();
                 } catch (Exception e) {
-                    LOGGER.error("Error listing features.", e);
+                    LOGGER.warn("CELLAR FEATURES: unable to list features", e);
                 }
 
                 //Process repository list
                 if (repositoryList != null && repositoryList.length > 0) {
                     for (Repository repository : repositoryList) {
                         pushRepository(repository, group);
-                        LOGGER.info("CELLAR FEATURES EVENT: pushing repository {} in Cellar group {}", repository.getName(), group.getName());
+                        LOGGER.debug("CELLAR FEATURES: pushing repository {} in group {}", repository.getName(), group.getName());
                     }
                 }
 
@@ -166,7 +163,7 @@ public class FeaturesSynchronizer extend
                 if (featuresList != null && featuresList.length > 0) {
                     for (Feature feature : featuresList) {
                         pushFeature(feature, group);
-                        LOGGER.info("CELLAR FEATURES EVENT: pushing feature {} in Cellar group {}", feature.getName(), group.getName());
+                        LOGGER.debug("CELLAR FEATURES: pushing feature {} in group {}", feature.getName(), group.getName());
                     }
                 }
             } finally {
@@ -186,7 +183,7 @@ public class FeaturesSynchronizer extend
             String propertyValue = properties.get(propertyKey);
             result = Boolean.parseBoolean(propertyValue);
         } catch (IOException e) {
-            LOGGER.error("Error while checking if sync is enabled.", e);
+            LOGGER.warn("CELLAR FEATURES: error while checking if sync is enabled", e);
         }
         return result;
     }

Modified: karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/LocalFeaturesListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/LocalFeaturesListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/LocalFeaturesListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/LocalFeaturesListener.java Fri Sep 16 12:49:22 2011
@@ -80,7 +80,7 @@ public class LocalFeaturesListener exten
                                 producer.produce(featureEvent);
                             }
                         }
-                    } else LOGGER.debug("Feature with name {} is marked as local.", name);
+                    } else LOGGER.debug("CELLAR FEATURES: feature {} is marked as local.", name);
                 }
             }
         }

Modified: karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/RepositoryEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/RepositoryEventHandler.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/RepositoryEventHandler.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/RepositoryEventHandler.java Fri Sep 16 12:49:22 2011
@@ -48,14 +48,14 @@ public class RepositoryEventHandler exte
         RepositoryEvent.EventType type = event.getType();
         try {
             if (RepositoryEvent.EventType.RepositoryAdded.equals(type)) {
-                LOGGER.debug("Adding repository url {}", uri);
+                LOGGER.debug("CELLAR FEATURES: adding repository URI {}", uri);
                 featuresService.addRepository(new URI(uri));
             } else {
-                LOGGER.debug("Removing repository url {}", uri);
+                LOGGER.debug("CELLAR FEATURES: removing repository URI {}", uri);
                 featuresService.removeRepository(new URI(uri));
             }
         } catch (Exception e) {
-            LOGGER.error("Failed to add/remove repository {}", uri);
+            LOGGER.error("CELLAR FEATURES: failed to add/remove repository URI {}", uri, e);
         }
     }
 

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/CellarMembershipListener.java Fri Sep 16 12:49:22 2011
@@ -32,6 +32,7 @@ import java.util.Set;
 public class CellarMembershipListener extends HazelcastInstanceAware implements MembershipListener {
 
     private static final transient Logger LOGGER = LoggerFactory.getLogger(CellarMembershipListener.class);
+
     private GroupManager groupManager;
     private List<? extends Synchronizer> synchronizers;
 
@@ -61,7 +62,7 @@ public class CellarMembershipListener ex
                 }
             }
         } catch (Exception e) {
-            LOGGER.warn("Error while calling memberAdded", e);
+            LOGGER.warn("CELLAR HAZELCAST: error while calling memberAdded", e);
         }
     }
 

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastBundleListener.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastBundleListener.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastBundleListener.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastBundleListener.java Fri Sep 16 12:49:22 2011
@@ -11,7 +11,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.karaf.cellar.hazelcast;
 
 import org.apache.karaf.cellar.core.utils.CombinedClassLoader;
@@ -24,7 +23,6 @@ import java.util.Dictionary;
 
 public class HazelcastBundleListener implements BundleListener {
 
-
     private BundleContext bundleContext;
     private CombinedClassLoader combinedClassLoader;
 

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastClusterManager.java Fri Sep 16 12:49:22 2011
@@ -181,4 +181,13 @@ public class HazelcastClusterManager ext
     public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
         this.configurationAdmin = configurationAdmin;
     }
+
+    public CombinedClassLoader getCombinedClassLoader() {
+        return this.combinedClassLoader;
+    }
+
+    public void setCombinedClassLoader(CombinedClassLoader combinedClassLoader) {
+        this.combinedClassLoader = combinedClassLoader;
+    }
+
 }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastEventTransportFactory.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastEventTransportFactory.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastEventTransportFactory.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastEventTransportFactory.java Fri Sep 16 12:49:22 2011
@@ -11,7 +11,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.karaf.cellar.hazelcast;
 
 import com.hazelcast.core.IQueue;
@@ -25,15 +24,11 @@ import org.apache.karaf.cellar.core.util
 import java.util.HashMap;
 import java.util.Map;
 
-/**
- * @author: iocanel
- */
 public class HazelcastEventTransportFactory extends HazelcastInstanceAware implements EventTransportFactory {
 
     private Dispatcher dispatcher;
     private CombinedClassLoader combinedClassLoader;
 
-
     @Override
     public EventProducer getEventProducer(String name, Boolean pubsub) {
         if (pubsub) {
@@ -90,4 +85,5 @@ public class HazelcastEventTransportFact
     public void setCombinedClassLoader(CombinedClassLoader combinedClassLoader) {
         this.combinedClassLoader = combinedClassLoader;
     }
+
 }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastGroupManager.java Fri Sep 16 12:49:22 2011
@@ -89,7 +89,7 @@ public class HazelcastGroupManager imple
                 }
             }
         } catch (IOException e) {
-            LOGGER.error("Error reading group configuration.");
+            LOGGER.error("CELLAR HAZELCAST: error reading group configuration", e);
         }
         registerGroup(DEFAULT_GROUP);
     }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastInstanceAware.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastInstanceAware.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastInstanceAware.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/HazelcastInstanceAware.java Fri Sep 16 12:49:22 2011
@@ -40,6 +40,4 @@ public class HazelcastInstanceAware {
         this.instance = instance;
     }
 
-
-
 }

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueConsumer.java Fri Sep 16 12:49:22 2011
@@ -94,14 +94,14 @@ public class QueueConsumer<E extends Eve
                 try {
                         e = getQueue().poll(10, TimeUnit.SECONDS);
                 } catch (InterruptedException e1) {
-                    LOGGER.warn("Consume task interrupted");
+                    LOGGER.warn("CELLAR HAZELCAST: consume task interrupted");
                 }
                 if (e != null) {
                     consume(e);
                 }
             }
         } catch (Exception ex) {
-            LOGGER.error("Error while consuming from queue",ex);
+            LOGGER.error("CELLAR HAZELCAST: error while consuming from queue",ex);
         }
         finally {
             Thread.currentThread().setContextClassLoader(originalClassLoader);
@@ -126,7 +126,6 @@ public class QueueConsumer<E extends Eve
         executorService.execute(this);
     }
 
-
     @Override
     public void stop() {
       isConsuming = false;

Modified: karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java?rev=1171529&r1=1171528&r2=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/hazelcast/src/main/java/org/apache/karaf/cellar/hazelcast/QueueProducer.java Fri Sep 16 12:49:22 2011
@@ -80,7 +80,7 @@ public class QueueProducer<E extends Eve
             try {
                 queue.put(event);
             } catch (InterruptedException e) {
-                LOGGER.error("Queue producer interrupted",e);
+                LOGGER.error("CELLAR HAZELCAST: queue producer interrupted", e);
             }
         }
     }

Added: karaf/cellar/branches/cellar-2.2.x/obr/NOTICE
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/NOTICE?rev=1171529&view=auto
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/NOTICE (added)
+++ karaf/cellar/branches/cellar-2.2.x/obr/NOTICE Fri Sep 16 12:49:22 2011
@@ -0,0 +1,48 @@
+Apache Karaf Cellar
+Copyright 2011 The Apache Software Foundation
+
+
+I. Included Software
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+Licensed under the Apache License 2.0.
+
+This product includes software written by
+Antony Lesuisse.
+Licensed under Public Domain.
+
+
+II. Used Software
+
+This product uses software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright (c) OSGi Alliance (2000, 2010).
+Licensed under the Apache License 2.0.
+
+This product uses software developed at
+OPS4J (http://www.ops4j.org/).
+Licensed under the Apache License 2.0.
+
+This product uses software developed at
+FUSE Source (http://www.fusesource.org/).
+Licensed under the Apache License 2.0.
+
+This product uses software developed at
+JClouds (http://www.jclouds.org/).
+Licensed under the Apache License 2.0.
+
+This product uses software developed at
+JLine (http://jline.sourceforge.net).
+Licensed under the BSD License.
+
+This product uses software developed at
+SLF4J (http://www.slf4j.org/).
+Licensed under the MIT License.
+
+This product includes software from http://www.json.org.
+Copyright (c) 2002 JSON.org
+
+
+III. License Summary
+- Apache License 2.0

Added: karaf/cellar/branches/cellar-2.2.x/obr/pom.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/pom.xml?rev=1171529&view=auto
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/pom.xml (added)
+++ karaf/cellar/branches/cellar-2.2.x/obr/pom.xml Fri Sep 16 12:49:22 2011
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (the "License"); you may not use this file except in compliance with
+        the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing, software
+        distributed under the License is distributed on an "AS IS" BASIS,
+        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        See the License for the specific language governing permissions and
+        limitations under the License.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf</groupId>
+        <artifactId>cellar</artifactId>
+        <version>2.2.3-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.karaf.cellar</groupId>
+    <artifactId>org.apache.karaf.cellar.obr</artifactId>
+    <packaging>bundle</packaging>
+    <name>Apache Karaf :: Cellar :: OBR</name>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <osgi.import>
+            !org.apache.karaf.cellar.obr*,
+            org.apache.karaf.cellar.core*;version=${project.version},
+            org.apache.felix.service.command,
+            org.apache.felix.gogo.commands,
+            org.apache.karaf.shell.console;version="[2.2,4)",
+            org.apache.karaf.shell.console.commands;version="[2.2,4)",
+            org.apache.karaf.shell.console.completer;version="[2.2,4)",
+            *
+        </osgi.import>
+        <osgi.dynamic.import>
+            org.apache.felix.bundlerepository,
+            org.osgi.service.obr
+        </osgi.dynamic.import>
+        <osgi.export>
+            org.apache.karaf.cellar.obr*;version=${project.version}
+        </osgi.export>
+    </properties>
+
+    <dependencies>
+
+        <!-- Cellar Core -->
+        <dependency>
+            <groupId>org.apache.karaf.cellar</groupId>
+            <artifactId>org.apache.karaf.cellar.core</artifactId>
+        </dependency>
+
+        <!-- OBR -->
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.bundlerepository</artifactId>
+        </dependency>
+
+    </dependencies>
+
+</project>
\ No newline at end of file

Copied: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/Constants.java (from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java)
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/Constants.java?p2=karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/Constants.java&p1=karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java&r1=1169779&r2=1171529&rev=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/Constants.java Fri Sep 16 12:49:22 2011
@@ -11,16 +11,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.cellar.features;
+package org.apache.karaf.cellar.obr;
 
 /**
- * Features constants.
+ * Cellar OBR constants
  */
 public class Constants {
 
-    public static final String REPOSITORIES = "org.apache.karaf.cellar.repositories";
-    public static final String FEATURES = "org.apache.karaf.cellar.features";
-    public static final String REPOSITORIES_CATEGORY = "repositories";
-    public static final String FEATURES_CATEGORY = "features";
+    public static final String BUNDLES_DISTRIBUTED_SET_NAME = "org.apache.karaf.cellar.obr.bundles";
+    public static final String URLS_DISTRIBUTED_SET_NAME = "org.apache.karaf.cellar.obr.urls";
+
+    public static final String BUNDLES_CONFIG_CATEGORY = "obr.bundles";
+    public static final String URLS_CONFIG_CATEGORY = "obr.urls";
+
+    public static final int URL_ADD_EVENT_TYPE = 1;
+    public static final int URL_REMOVE_EVENT_TYPE = 0;
+
+    public static final int BUNDLE_START_EVENT_TYPE = 1;
 
 }

Copied: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEvent.java (from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java)
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEvent.java?p2=karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEvent.java&p1=karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java&r1=1169779&r2=1171529&rev=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEvent.java Fri Sep 16 12:49:22 2011
@@ -11,16 +11,30 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.cellar.features;
+package org.apache.karaf.cellar.obr;
+
+import org.apache.karaf.cellar.core.event.Event;
 
 /**
- * Features constants.
+ * OBR Bundle cluster event.
  */
-public class Constants {
+public class ObrBundleEvent extends Event {
+
+    private String bundleId;
+    private int type;
+
+    public ObrBundleEvent(String bundleId, int type) {
+        super(bundleId);
+        this.bundleId = bundleId;
+        this.type = type;
+    }
+
+    public String getBundleId() {
+        return this.bundleId;
+    }
 
-    public static final String REPOSITORIES = "org.apache.karaf.cellar.repositories";
-    public static final String FEATURES = "org.apache.karaf.cellar.features";
-    public static final String REPOSITORIES_CATEGORY = "repositories";
-    public static final String FEATURES_CATEGORY = "features";
+    public int getType() {
+        return this.type;
+    }
 
 }

Added: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java?rev=1171529&view=auto
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java (added)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java Fri Sep 16 12:49:22 2011
@@ -0,0 +1,153 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.cellar.obr;
+
+import org.apache.felix.bundlerepository.Reason;
+import org.apache.felix.bundlerepository.Resolver;
+import org.apache.felix.bundlerepository.Resource;
+import org.apache.karaf.cellar.core.control.BasicSwitch;
+import org.apache.karaf.cellar.core.control.Switch;
+import org.apache.karaf.cellar.core.event.EventHandler;
+import org.apache.karaf.cellar.core.event.EventType;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.Version;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * OBR bundles event handler.
+ */
+public class ObrBundleEventHandler extends ObrSupport implements EventHandler<ObrBundleEvent> {
+
+    private static final transient Logger LOGGER = LoggerFactory.getLogger(ObrBundleEventHandler.class);
+
+    protected static final char VERSION_DELIM = ',';
+
+    public static final String SWITCH_ID = "org.apache.karaf.cellar.event.obr.bundle";
+
+    private final Switch eventSwitch = new BasicSwitch(SWITCH_ID);
+
+    @Override
+    public void init() {
+        super.init();
+    }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+    }
+
+    private String[] getTarget(String bundle) {
+        String[] target;
+        int idx = bundle.indexOf(VERSION_DELIM);
+        if (idx > 0) {
+            target = new String[]{ bundle.substring(0, idx), bundle.substring(idx + 1) };
+        } else {
+            target = new String[]{ bundle, null };
+        }
+        return target;
+    }
+
+    private Resource selectNewestVersion(Resource[] resources) {
+        int idx = -1;
+        Version v = null;
+        for (int i = 0; (resources != null) && (i < resources.length); i++) {
+            if (i == 0) {
+                idx = 0;
+                v = resources[i].getVersion();
+            } else {
+                Version vtmp = resources[i].getVersion();
+                if (vtmp.compareTo(v) > 0) {
+                    idx = i;
+                    v = vtmp;
+                }
+            }
+        }
+        return (idx < 0) ? null : resources[idx];
+    }
+
+    private Resource[] searchRepository(String targetId, String targetVersion) throws InvalidSyntaxException {
+        try {
+            Bundle bundle = getBundleContext().getBundle(Long.parseLong(targetId));
+            targetId = bundle.getSymbolicName();
+        } catch (NumberFormatException e) {
+            // it was not a number, so ignore.
+        }
+
+        // the target ID may be a bundle name or bundle symbolic name, so create
+        StringBuffer sb = new StringBuffer("(|(presentationname=");
+        sb.append(targetId);
+        sb.append(")(symbolicname=");
+        sb.append(targetId);
+        sb.append("))");
+        if (targetVersion != null) {
+            sb.insert(0, "&(");
+            sb.append("(version=");
+            sb.append(targetVersion);
+            sb.append("))");
+        }
+        return obrService.discoverResources(sb.toString());
+    }
+
+    /**
+     * Handle an OBR bundle event.
+     *
+     * @param event the OBR bundle event.
+     */
+    @Override
+    public void handle(ObrBundleEvent event) {
+        String bundleId = event.getBundleId();
+        try {
+            if (isAllowed(event.getSourceGroup(), Constants.BUNDLES_CONFIG_CATEGORY, bundleId, EventType.INBOUND)) {
+                Resolver resolver = obrService.resolver();
+                String[] target = getTarget(bundleId);
+                Resource resource = selectNewestVersion(searchRepository(target[0], target[1]));
+                if (resource != null) {
+                    resolver.add(resource);
+                } else {
+                    LOGGER.warn("CELLAR OBR: bundle {} unknown", target[0]);
+                }
+                if ((resolver.getAddedResources() != null) &&
+                        (resolver.getAddedResources().length > 0)) {
+                    if (resolver.resolve()) {
+                        if (event.getType() == Constants.BUNDLE_START_EVENT_TYPE)
+                            resolver.deploy(Resolver.START);
+                        else resolver.deploy(0);
+                    }
+                } else {
+                    Reason[] reqs = resolver.getUnsatisfiedRequirements();
+                    if (reqs != null && reqs.length > 0) {
+                        LOGGER.warn("CELLAR OBR: unsatisfied requirement(s): ");
+                        for (Reason reason : reqs) {
+                            LOGGER.warn("CELLAR OBR:    {}", reason.getRequirement().getFilter());
+                            LOGGER.warn("CELLAR OBR:      {}", reason.getResource().getPresentationName());
+                        }
+                    } else LOGGER.warn("CELLAR OBR: could not resolve targets");
+                }
+            } else LOGGER.debug("CELLAR OBR: bundle {} is marked as BLOCKED INBOUND", bundleId);
+        } catch (Exception e) {
+            LOGGER.error("CELLAR OBR: failed to handle bundle event {}", bundleId, e);
+        }
+    }
+
+    public Class<ObrBundleEvent> getType() {
+        return ObrBundleEvent.class;
+    }
+
+    public Switch getSwitch() {
+        return this.eventSwitch;
+    }
+
+}

Added: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleInfo.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleInfo.java?rev=1171529&view=auto
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleInfo.java (added)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleInfo.java Fri Sep 16 12:49:22 2011
@@ -0,0 +1,79 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.cellar.obr;
+
+import java.io.Serializable;
+
+/**
+ * Simple serializable wrapper for OBR bundle.
+ */
+public class ObrBundleInfo implements Serializable {
+
+    private String presentationName;
+    private String symbolicName;
+    private String version;
+
+    public ObrBundleInfo(String presentationName, String symbolicName, String version) {
+        this.presentationName = presentationName;
+        this.symbolicName = symbolicName;
+        this.version = version;
+    }
+
+    public String getPresentationName() {
+        return this.presentationName;
+    }
+
+    public void setPresentationName(String presentationName) {
+        this.presentationName = presentationName;
+    }
+
+    public String getSymbolicName() {
+        return this.symbolicName;
+    }
+
+    public void setSymbolicName(String symbolicName) {
+        this.symbolicName = symbolicName;
+    }
+
+    public String getVersion() {
+        return this.version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ObrBundleInfo info = (ObrBundleInfo) o;
+
+        if (presentationName != null ? !presentationName.equals(info.presentationName) : info.presentationName != null) return false;
+        if (symbolicName != null ? !symbolicName.equals(info.symbolicName) : info.symbolicName != null) return false;
+        if (version != null ? !version.equals(info.version) : info.version != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = presentationName != null ? presentationName.hashCode() : 0;
+        result = 31 * result + (symbolicName != null ? symbolicName.hashCode() : 0);
+        result = 31 * result + (version != null ? version.hashCode() : 0);
+        return result;
+    }
+
+}

Added: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrSupport.java?rev=1171529&view=auto
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrSupport.java (added)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrSupport.java Fri Sep 16 12:49:22 2011
@@ -0,0 +1,48 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.cellar.obr;
+
+import org.apache.felix.bundlerepository.RepositoryAdmin;
+import org.apache.karaf.cellar.core.CellarSupport;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Cellar OBR support.
+ */
+public class ObrSupport extends CellarSupport {
+
+    protected BundleContext bundleContext;
+    protected RepositoryAdmin obrService;
+
+    public void init() { }
+
+    public void destroy() { }
+
+    public BundleContext getBundleContext() {
+        return this.bundleContext;
+    }
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
+    public RepositoryAdmin getObrService() {
+        return this.obrService;
+    }
+
+    public void setObrService(RepositoryAdmin obrService) {
+        this.obrService = obrService;
+    }
+
+}

Copied: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlEvent.java (from r1169779, karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java)
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlEvent.java?p2=karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlEvent.java&p1=karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java&r1=1169779&r2=1171529&rev=1171529&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/features/src/main/java/org/apache/karaf/cellar/features/Constants.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlEvent.java Fri Sep 16 12:49:22 2011
@@ -11,16 +11,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.cellar.features;
+package org.apache.karaf.cellar.obr;
+
+import org.apache.karaf.cellar.core.event.Event;
+import org.apache.karaf.cellar.core.event.EventType;
 
 /**
- * Features constants.
+ * OBR URL Event.
  */
-public class Constants {
+public class ObrUrlEvent extends Event {
+
+    private String url;
+    private int type;
+
+    public ObrUrlEvent(String url, int type) {
+        super(url);
+        this.url = url;
+        this.type = type;
+    }
+
+    public String getUrl() {
+        return this.url;
+    }
 
-    public static final String REPOSITORIES = "org.apache.karaf.cellar.repositories";
-    public static final String FEATURES = "org.apache.karaf.cellar.features";
-    public static final String REPOSITORIES_CATEGORY = "repositories";
-    public static final String FEATURES_CATEGORY = "features";
+    public int getType() {
+        return this.type;
+    }
 
-}
+}
\ No newline at end of file