servicemix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gno...@apache.org
Subject svn commit: r633939 [2/2] - in /servicemix/smx4/nmr/trunk: jbi/ jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/impl/ jbi/itests/src/test/java/org/apache/servicemix/jbi/ jbi/management/ jbi/management/src/ jbi/management/src/main/ jbi/man...
Date Wed, 05 Mar 2008 17:24:06 GMT
Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagedEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagedEndpoint.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagedEndpoint.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagedEndpoint.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,136 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.servicemix.nmr.api.Endpoint;
+import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
+import org.apache.servicemix.nmr.management.stats.CountStatistic;
+import org.apache.servicemix.nmr.management.stats.TimeStatistic;
+import org.springframework.jmx.export.annotation.ManagedAttribute;
+import org.springframework.jmx.export.annotation.ManagedOperation;
+import org.springframework.jmx.export.annotation.ManagedResource;
+
+/**
+ */
+@ManagedResource(description = "Managed Endpoint", currencyTimeLimit = 15)
+public class ManagedEndpoint {
+
+    protected final InternalEndpoint endpoint;
+    protected final Map<String,?> properties;
+    protected final CountStatistic inboundExchanges;
+    protected final CountStatistic outboundExchanges;
+    protected final TimeStatistic inboundExchangeRate;
+    protected final TimeStatistic outboundExchangeRate;
+
+    public ManagedEndpoint(InternalEndpoint endpoint, Map<String,?> properties) {
+        this.endpoint = endpoint;
+        this.properties = new HashMap<String,Object>(properties);
+        this.inboundExchanges = new CountStatistic("inboundExchanges", "Number of exchanges received");
+        this.inboundExchangeRate = new TimeStatistic("inboundExchangeRate", "Number of exchanges received per second");
+        this.outboundExchanges = new CountStatistic("outboundExchanges", "Number of exchanges sent");
+        this.outboundExchangeRate = new TimeStatistic("outboundExchangeRate", "Number of exchanges sent per second");
+    }
+
+    public InternalEndpoint getEndpoint() {
+        return endpoint;
+    }
+
+    void incrementInbound() {
+        inboundExchanges.increment();
+        inboundExchangeRate.addTime();
+    }
+
+    void incrementOutbound() {
+        outboundExchanges.increment();
+        outboundExchangeRate.addTime();
+    }
+
+    /**
+     * Retrieve the name of the endpoint
+     *
+     * @return the name of the endpoint
+     */
+    @ManagedAttribute(description = "Name of the endpoint")
+    public String getName() {
+        return (String) properties.get(Endpoint.NAME);
+    }
+
+    /**
+     * Retrieve the properties of the endpoint
+     *
+     * @return the properties of the endpoint
+     */
+    @ManagedAttribute(description = "Properties associated to this endpoint")
+    public Map<String, ?> getProperties() {
+        return properties;
+    }
+
+    /**
+     * Get the Inbound MessageExchange count
+     *
+     * @return inbound count
+     */
+    @ManagedAttribute(description = "Number of exchanges received")
+    public long getInboundExchangeCount() {
+        return inboundExchanges.getCount();
+    }
+
+    /**
+     * Get the Inbound MessageExchange rate (number/sec)
+     *
+     * @return the inbound exchange rate
+     */
+    @ManagedAttribute(description = "Exchanges received per second")
+    public double getInboundExchangeRate() {
+        return inboundExchangeRate.getAveragePerSecond();
+    }
+
+    /**
+     * Get the Outbound MessageExchange count
+     *
+     * @return outbound count
+     */
+    @ManagedAttribute(description = "Number of exchanges sent")
+    public long getOutboundExchangeCount() {
+        return outboundExchanges.getCount();
+    }
+
+    /**
+     * Get the Outbound MessageExchange rate (number/sec)
+     *
+     * @return the outbound exchange rate
+     */
+    @ManagedAttribute(description = "Exchanges sent per second")
+    public double getOutboundExchangeRate() {
+        return outboundExchangeRate.getAveragePerSecond();
+    }
+
+    /**
+     * reset the Stats
+     */
+    @ManagedOperation
+    public void reset() {
+        inboundExchanges.reset();
+        outboundExchanges.reset();
+        inboundExchangeRate.reset();
+        outboundExchangeRate.reset();
+    }
+
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management;
+
+import java.util.Set;
+import java.util.HashSet;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.JMException;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectInstance;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.modelmbean.ModelMBeanInfo;
+import javax.management.modelmbean.RequiredModelMBean;
+import javax.management.modelmbean.InvalidTargetObjectTypeException;
+
+import org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler;
+import org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource;
+import org.springframework.beans.factory.DisposableBean;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ */
+public class ManagementAgent implements DisposableBean {
+
+    private static final transient Log LOG = LogFactory.getLog(ManagementAgent.class);
+
+    private MBeanServer mbeanServer;
+    private MetadataMBeanInfoAssembler assembler;
+    private Set<ObjectName> mbeans = new HashSet<ObjectName>();
+
+    public ManagementAgent() {
+        assembler = new MetadataMBeanInfoAssembler();
+        assembler.setAttributeSource(new AnnotationJmxAttributeSource());
+    }
+
+    public MBeanServer getMbeanServer() {
+        return mbeanServer;
+    }
+
+    public void setMbeanServer(MBeanServer mbeanServer) {
+        this.mbeanServer = mbeanServer;
+    }
+
+    public void destroy() throws Exception {
+        // Using the array to hold the busMBeans to avoid the
+        // CurrentModificationException
+        Object[] mBeans = mbeans.toArray();
+        int caught = 0;
+        for (Object name : mBeans) {
+            mbeans.remove((ObjectName)name);
+            try {
+                unregister((ObjectName)name);
+            } catch (JMException jmex) {
+                LOG.info("Exception unregistering MBean", jmex);
+                caught++;
+            }
+        }
+        if (caught > 0) {
+            LOG.warn("A number of " + caught
+                     + " exceptions caught while unregistering MBeans during stop operation.  "
+                     + "See INFO log for details.");
+        }
+    }
+
+    public void register(Object obj, ObjectName name) throws JMException {
+        register(obj, name, false);
+    }
+
+    public void register(Object obj, ObjectName name, boolean forceRegistration) throws JMException {
+        try {
+            registerMBeanWithServer(obj, name, forceRegistration);
+        } catch (NotCompliantMBeanException e) {
+            // If this is not a "normal" MBean, then try to deploy it using JMX
+            // annotations
+            ModelMBeanInfo mbi = assembler.getMBeanInfo(obj, name.toString());
+            RequiredModelMBean mbean = (RequiredModelMBean) mbeanServer.instantiate(RequiredModelMBean.class.getName());
+            mbean.setModelMBeanInfo(mbi);
+            try {
+                mbean.setManagedResource(obj, "ObjectReference");
+            } catch (InvalidTargetObjectTypeException itotex) {
+                throw new JMException(itotex.getMessage());
+            }
+            registerMBeanWithServer(mbean, name, forceRegistration);
+        }
+    }
+
+    public void unregister(ObjectName name) throws JMException {
+        mbeanServer.unregisterMBean(name);
+    }
+
+    private void registerMBeanWithServer(Object obj, ObjectName name, boolean forceRegistration) throws JMException {
+        ObjectInstance instance = null;
+        try {
+            instance = mbeanServer.registerMBean(obj, name);
+        } catch (InstanceAlreadyExistsException e) {
+            if (forceRegistration) {
+                mbeanServer.unregisterMBean(name);
+                instance = mbeanServer.registerMBean(obj, name);
+            } else {
+                throw e;
+            }
+        }
+
+        if (instance != null) {
+            mbeans.add(name);
+        }
+    }
+
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.nmr.api.Endpoint;
+import org.apache.servicemix.nmr.api.Exchange;
+import org.apache.servicemix.nmr.api.Role;
+import org.apache.servicemix.nmr.api.Status;
+import org.apache.servicemix.nmr.api.event.ExchangeListener;
+import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
+import org.apache.servicemix.nmr.api.internal.InternalExchange;
+import org.apache.servicemix.nmr.api.service.ServiceRegistry;
+import org.apache.servicemix.nmr.core.ServiceRegistryImpl;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ */
+public class ManagementEndpointRegistry implements ExchangeListener, InitializingBean {
+
+    private static final transient Log LOG = LogFactory.getLog(ManagementEndpointRegistry.class);
+
+    private NamingStrategy namingStrategy;
+    private ManagementAgent managementAgent;
+    private Map<String, ManagedEndpoint> endpoints;
+
+    public ManagementEndpointRegistry() {
+        endpoints = new ConcurrentHashMap<String, ManagedEndpoint>();
+    }
+
+    public NamingStrategy getNamingStrategy() {
+        return namingStrategy;
+    }
+
+    public void setNamingStrategy(NamingStrategy namingStrategy) {
+        this.namingStrategy = namingStrategy;
+    }
+
+    public ManagementAgent getManagementAgent() {
+        return managementAgent;
+    }
+
+    public void setManagementAgent(ManagementAgent managementAgent) {
+        this.managementAgent = managementAgent;
+    }
+
+    public void register(InternalEndpoint endpoint, Map<String, ?> properties) {
+        try {
+            LOG.info("Registering endpoint: " + endpoint + " with properties " + properties);
+            ManagedEndpoint ep = new ManagedEndpoint(endpoint, properties);
+            endpoints.put(endpoint.getId(), ep);
+            managementAgent.register(ep, namingStrategy.getObjectName(ep));
+        } catch (Exception e) {
+            LOG.warn("Unable to register managed endpoint: " + e, e);
+        }
+    }
+
+    public void unregister(InternalEndpoint endpoint, Map<String, ?> properties) {
+        try {
+            LOG.info("Unregistering endpoint: " + endpoint + " with properties " + properties);
+            ManagedEndpoint ep = endpoints.remove(endpoint.getId());
+            managementAgent.unregister(namingStrategy.getObjectName(ep));
+        } catch (Exception e) {
+            LOG.warn("Unable to unregister managed endpoint: " + e, e);
+        }
+    }
+
+    public void exchangeSent(Exchange exchange) {
+        try {
+            LOG.info("Sending exchange: " + exchange);
+            if (exchange.getStatus() == Status.Active &&
+                    exchange.getRole() == Role.Consumer &&
+                    exchange.getOut(false) == null &&
+                    exchange.getFault(false) == null &&
+                    exchange instanceof InternalExchange) {
+                String id = ((InternalExchange) exchange).getSource().getId();
+                LOG.info("Source endpoint: " + id + " (known endpoints: " + endpoints + ")");
+                ManagedEndpoint me = endpoints.get(id);
+                me.incrementOutbound();
+            }
+        } catch (Throwable t) {
+            LOG.warn("Caught exception while processing exchange: " + t, t);
+        }
+    }
+
+    public void exchangeDelivered(Exchange exchange) {
+        try {
+            LOG.info("Receiving exchange: " + exchange);
+            if (exchange.getStatus() == Status.Active &&
+                    exchange.getRole() == Role.Provider &&
+                    exchange.getOut(false) == null &&
+                    exchange.getFault(false) == null &&
+                    exchange instanceof InternalExchange) {
+                String id = ((InternalExchange) exchange).getDestination().getId();
+                LOG.info("Dest endpoint: " + id + " (known endpoints: " + endpoints + ")");
+                ManagedEndpoint me = endpoints.get(id);
+                me.incrementInbound();
+            }
+        } catch (Throwable t) {
+            LOG.warn("Caught exception while processing exchange: " + t, t);
+        }
+    }
+
+    public void afterPropertiesSet() throws Exception {
+        if (managementAgent == null) {
+            throw new IllegalArgumentException("managementAgent must not be null");
+        }
+        if (namingStrategy == null) {
+            throw new IllegalArgumentException("namingStrategy must not be null");
+        }
+    }
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/NamingStrategy.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/NamingStrategy.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/NamingStrategy.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/NamingStrategy.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management;
+
+import javax.management.ObjectName;
+import javax.management.MalformedObjectNameException;
+
+/**
+ */
+public interface NamingStrategy {
+
+    ObjectName getObjectName(ManagedEndpoint endpoint) throws MalformedObjectNameException;
+
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/CountStatistic.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/CountStatistic.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/CountStatistic.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/CountStatistic.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management.stats;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * A count statistic implementation
+ *
+ * @version $Revision: 564607 $
+ */
+public class CountStatistic extends Statistic {
+
+    private final AtomicLong counter = new AtomicLong(0);
+    private CountStatistic parent;
+
+    public CountStatistic(CountStatistic parent, String name, String description) {
+        this(name, description);
+        this.parent = parent;
+    }
+
+    public CountStatistic(String name, String description) {
+        this(name, "count", description);
+    }
+
+    public CountStatistic(String name, String unit, String description) {
+        super(name, unit, description);
+    }
+
+    public void reset() {
+        super.reset();
+        counter.set(0);
+    }
+
+    public long getCount() {
+        return counter.get();
+    }
+
+    public void setCount(long count) {
+        counter.set(count);
+    }
+
+    public void add(long amount) {
+        counter.addAndGet(amount);
+        updateSampleTime();
+        if (parent != null) {
+            parent.add(amount);
+        }
+    }
+
+    public void increment() {
+        counter.incrementAndGet();
+        updateSampleTime();
+        if (parent != null) {
+            parent.increment();
+        }
+    }
+
+    public void subtract(long amount) {
+        counter.addAndGet(-amount);
+        updateSampleTime();
+        if (parent != null) {
+            parent.subtract(amount);
+        }
+    }
+
+    public void decrement() {
+        counter.decrementAndGet();
+        updateSampleTime();
+        if (parent != null) {
+            parent.decrement();
+        }
+    }
+
+    public CountStatistic getParent() {
+        return parent;
+    }
+
+    public void setParent(CountStatistic parent) {
+        this.parent = parent;
+    }
+
+    protected void appendFieldDescription(StringBuffer buffer) {
+        buffer.append(" count: ");
+        buffer.append(Long.toString(counter.get()));
+        super.appendFieldDescription(buffer);
+    }
+
+    /**
+     * @return the average time period that elapses between counter increments since the last reset.
+     */
+    public double getPeriod() {
+        double count = counter.get();
+        if (count == 0) {
+            return 0;
+        }
+        double time = System.currentTimeMillis() - getStartTime();
+        return time / (count * 1000.0);
+    }
+
+    /**
+     * @return the number of times per second that the counter is incrementing since the last reset.
+     */
+    public double getFrequency() {
+        double count = counter.get();
+        double time = System.currentTimeMillis() - getStartTime();
+        return count * 1000.0 / time;
+    }
+
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/Statistic.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/Statistic.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/Statistic.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/Statistic.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management.stats;
+
+/**
+ * Base class for a Statistic implementation
+ *
+ * @version $Revision: 482795 $
+ */
+public class Statistic {
+    private String name;
+    private String unit;
+    private String description;
+    private long startTime;
+    private long lastSampleTime;
+
+    public Statistic(String name, String unit, String description) {
+        this.name = name;
+        this.unit = unit;
+        this.description = description;
+        startTime = System.currentTimeMillis();
+        lastSampleTime = startTime;
+    }
+
+    public synchronized void reset() {
+        startTime = System.currentTimeMillis();
+        lastSampleTime = startTime;
+    }
+
+    protected synchronized void updateSampleTime() {
+        lastSampleTime = System.currentTimeMillis();
+    }
+
+    public synchronized String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(name);
+        buffer.append("{");
+        appendFieldDescription(buffer);
+        buffer.append(" }");
+        return buffer.toString();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getUnit() {
+        return unit;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public synchronized long getStartTime() {
+        return startTime;
+    }
+
+    public synchronized long getLastSampleTime() {
+        return lastSampleTime;
+    }
+
+    protected synchronized void appendFieldDescription(StringBuffer buffer) {
+        buffer.append(" unit: ");
+        buffer.append(unit);
+        buffer.append(" startTime: ");
+        //buffer.append(new Date(startTime));
+        buffer.append(startTime);
+        buffer.append(" lastSampleTime: ");
+        //buffer.append(new Date(lastSampleTime));
+        buffer.append(lastSampleTime);
+        buffer.append(" description: ");
+        buffer.append(description);
+    }
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/TimeStatistic.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/TimeStatistic.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/TimeStatistic.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/TimeStatistic.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,188 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.management.stats;
+
+/**
+ * A time statistic implementation
+ *
+ * @version $Revision: 482795 $
+ */
+public class TimeStatistic extends Statistic {
+    private long count;
+    private long maxTime;
+    private long minTime;
+    private long totalTime;
+    private TimeStatistic parent;
+
+    public TimeStatistic(String name, String description) {
+        this(name, "millis", description);
+    }
+
+    public TimeStatistic(TimeStatistic parent, String name, String description) {
+        this(name, description);
+        this.parent = parent;
+    }
+
+    public TimeStatistic(String name, String unit, String description) {
+        super(name, unit, description);
+    }
+
+    public synchronized void reset() {
+        super.reset();
+        count = 0;
+        maxTime = 0;
+        minTime = 0;
+        totalTime = 0;
+    }
+
+    public synchronized long getCount() {
+        return count;
+    }
+
+    public synchronized void addTime(long time) {
+        updateSampleTime();
+        count++;
+        totalTime += time;
+        if (time > maxTime) {
+            maxTime = time;
+        }
+        if (time < minTime || minTime == 0) {
+            minTime = time;
+        }
+        if (parent != null) {
+            parent.addTime(time);
+        }
+    }
+
+    public synchronized void addTime() {
+        long time = getLastSampleTime();
+        updateSampleTime();
+        time = getLastSampleTime() - time;
+        count++;
+        totalTime += time;
+        if (time > maxTime) {
+            maxTime = time;
+        }
+        if (time < minTime || minTime == 0) {
+            minTime = time;
+        }
+        if (parent != null) {
+            parent.addTime(time);
+        }
+    }
+
+    /**
+     * @return the maximum time of any step
+     */
+    public long getMaxTime() {
+        return maxTime;
+    }
+
+    /**
+     * @return the minimum time of any step
+     */
+    public synchronized long getMinTime() {
+        return minTime;
+    }
+
+    /**
+     * @return the total time of all the steps added together
+     */
+    public synchronized long getTotalTime() {
+        return totalTime;
+    }
+
+    /**
+     * @return the average time calculated by dividing the
+     *         total time by the number of counts
+     */
+    public synchronized double getAverageTime() {
+        if (count == 0) {
+            return 0;
+        }
+        double d = totalTime;
+        return d / count;
+    }
+
+
+    /**
+     * @return the average time calculated by dividing the
+     *         total time by the number of counts but excluding the
+     *         minimum and maximum times.
+     */
+    public synchronized double getAverageTimeExcludingMinMax() {
+        if (count <= 2) {
+            return 0;
+        }
+        double d = totalTime - minTime - maxTime;
+        return d / (count - 2);
+    }
+
+
+    /**
+     * @return the average number of steps per second
+     */
+    public double getAveragePerSecond() {
+        double d = 1000;
+        double averageTime = getAverageTime();
+        if (averageTime == 0) {
+            return 0;
+        }
+        return d / averageTime;
+    }
+
+    /**
+     * @return the average number of steps per second excluding the min & max values
+     */
+    public double getAveragePerSecondExcludingMinMax() {
+        double d = 1000;
+        double average = getAverageTimeExcludingMinMax();
+        if (average == 0) {
+            return 0;
+        }
+        return d / average;
+    }
+
+    public TimeStatistic getParent() {
+        return parent;
+    }
+
+    public void setParent(TimeStatistic parent) {
+        this.parent = parent;
+    }
+
+    protected synchronized void appendFieldDescription(StringBuffer buffer) {
+        buffer.append(" count: ");
+        buffer.append(Long.toString(count));
+        buffer.append(" maxTime: ");
+        buffer.append(Long.toString(maxTime));
+        buffer.append(" minTime: ");
+        buffer.append(Long.toString(minTime));
+        buffer.append(" totalTime: ");
+        buffer.append(Long.toString(totalTime));
+        buffer.append(" averageTime: ");
+        buffer.append(Double.toString(getAverageTime()));
+        buffer.append(" averageTimeExMinMax: ");
+        buffer.append(Double.toString(getAverageTimeExcludingMinMax()));
+        buffer.append(" averagePerSecond: ");
+        buffer.append(Double.toString(getAveragePerSecond()));
+        buffer.append(" averagePerSecondExMinMax: ");
+        buffer.append(Double.toString(getAveragePerSecondExcludingMinMax()));
+        super.appendFieldDescription(buffer);
+    }
+
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/META-INF/spring/servicemix-nmr-management.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/META-INF/spring/servicemix-nmr-management.xml?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/META-INF/spring/servicemix-nmr-management.xml (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/META-INF/spring/servicemix-nmr-management.xml Wed Mar  5 09:23:59 2008
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:osgi="http://www.springframework.org/schema/osgi"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xsi:schemaLocation="
+  http://www.springframework.org/schema/beans
+  http://www.springframework.org/schema/beans/spring-beans.xsd
+  http://www.springframework.org/schema/util
+  http://www.springframework.org/schema/util/spring-util.xsd
+  http://www.springframework.org/schema/osgi
+  http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+    <!-- MBeanServer -->
+    <osgi:reference id="mbeanServer"
+                    interface="javax.management.MBeanServer"
+                    cardinality="1..1" />
+
+    <!-- Endpoint registry -->
+    <bean id="endpointRegistry" class="org.apache.servicemix.nmr.management.ManagementEndpointRegistry">
+        <property name="namingStrategy" ref="namingStrategy" />
+        <property name="managementAgent" ref="managementAgent" />
+    </bean>
+
+    <bean id="namingStrategy" class="org.apache.servicemix.nmr.management.DefaultNamingStrategy">
+        <property name="jmxDomainName" value="org.apache.servicemix" />
+    </bean>
+
+    <bean id="managementAgent" class="org.apache.servicemix.nmr.management.ManagementAgent">
+        <property name="mbeanServer" ref="mbeanServer" />
+    </bean>
+
+    <!-- List of endpoints -->
+    <osgi:list id="endpoints"
+               interface="org.apache.servicemix.nmr.api.internal.InternalEndpoint"
+               cardinality="0..N">
+        <osgi:listener ref="endpointRegistry" bind-method="register" unbind-method="unregister" />
+    </osgi:list>
+
+    <!-- Exchange listener -->
+    <osgi:service ref="endpointRegistry">
+        <osgi:interfaces>
+            <value>org.apache.servicemix.nmr.api.event.ExchangeListener</value>
+            <value>org.apache.servicemix.nmr.api.event.Listener</value>
+        </osgi:interfaces>
+    </osgi:service>
+
+</beans>

Added: servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/CountStatisticTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/CountStatisticTest.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/CountStatisticTest.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/CountStatisticTest.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,58 @@
+/**
+ * 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.
+ */
+package org.apache.servicemix.nmr.management.stats;
+
+import org.apache.servicemix.nmr.management.stats.CountStatistic;
+
+
+public class CountStatisticTest extends StatisticTestSupport {
+
+    private static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+            .getLog(CountStatisticTest.class);
+
+    /**
+     * Use case for CountStatisticImple class.
+     * @throws Exception
+     */
+    public void testStatistic() throws Exception {
+        CountStatistic stat = new CountStatistic("myCounter", "seconds", "myDescription");
+        assertStatistic(stat, "myCounter", "seconds", "myDescription");
+
+        assertEquals(0, stat.getCount());
+
+        stat.increment();
+        assertEquals(1, stat.getCount());
+
+        stat.increment();
+        assertEquals(2, stat.getCount());
+
+        stat.decrement();
+        assertEquals(1, stat.getCount());
+
+        Thread.sleep(500);
+
+        stat.increment();
+
+        assertLastTimeNotStartTime(stat);
+
+        LOG.info("Counter is: " + stat);
+
+        stat.reset();
+
+        assertEquals(0, stat.getCount());
+    }
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/StatisticTestSupport.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/StatisticTestSupport.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/StatisticTestSupport.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/StatisticTestSupport.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,47 @@
+/**
+ * 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.
+ */
+package org.apache.servicemix.nmr.management.stats;
+
+import junit.framework.TestCase;
+
+public abstract class StatisticTestSupport extends TestCase {
+
+    /**
+     * assert method used by the management related classes for its usecase.
+     *
+     * @param counter
+     * @param name
+     * @param unit
+     * @param description
+     */
+    protected void assertStatistic(Statistic counter, String name, String unit, String description) {
+        assertEquals(name, counter.getName());
+        assertEquals(unit, counter.getUnit());
+        assertEquals(description, counter.getDescription());
+    }
+
+    /**
+     * assert method to determine last time vs the start time.
+     *
+     * @param counter
+     */
+    protected void assertLastTimeNotStartTime(Statistic counter) {
+        assertTrue("Should not have start time the same as last sample time. Start time: "
+                   + counter.getStartTime() + " lastTime: " + counter.getLastSampleTime(), counter
+            .getStartTime() != counter.getLastSampleTime());
+    }
+}

Added: servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/TimeStatisticTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/TimeStatisticTest.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/TimeStatisticTest.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/TimeStatisticTest.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,74 @@
+/**
+ * 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.
+ */
+package org.apache.servicemix.nmr.management.stats;
+
+public class TimeStatisticTest extends StatisticTestSupport {
+
+    private static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+            .getLog(TimeStatisticTest.class);
+
+    /**
+     * Use case for TimeStatisticImpl class.
+     * @throws Exception
+     */
+    public void testStatistic() throws Exception {
+        TimeStatistic stat = new TimeStatistic("myTimer", "millis", "myDescription");
+        assertStatistic(stat, "myTimer", "millis", "myDescription");
+
+        assertEquals(0, stat.getCount());
+
+        stat.addTime(100);
+        assertEquals(1, stat.getCount());
+        assertEquals(100, stat.getMinTime());
+        assertEquals(100, stat.getMaxTime());
+
+        stat.addTime(403);
+        assertEquals(2, stat.getCount());
+        assertEquals(100, stat.getMinTime());
+        assertEquals(403, stat.getMaxTime());
+
+        stat.addTime(50);
+        assertEquals(3, stat.getCount());
+        assertEquals(50, stat.getMinTime());
+        assertEquals(403, stat.getMaxTime());
+
+
+        assertEquals(553, stat.getTotalTime());
+
+        Thread.sleep(500);
+
+        stat.addTime(10);
+
+        assertLastTimeNotStartTime(stat);
+
+        LOG.info("Stat is: " + stat);
+
+        stat.reset();
+
+        assertEquals(0, stat.getCount());
+        assertEquals(0, stat.getMinTime());
+        assertEquals(0, stat.getMaxTime());
+        assertEquals(0, stat.getTotalTime());
+
+        stat.addTime(100);
+        assertEquals(1, stat.getCount());
+        assertEquals(100, stat.getMinTime());
+        assertEquals(100, stat.getMaxTime());
+        assertEquals(100, stat.getTotalTime());
+
+    }
+}

Modified: servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml?rev=633939&r1=633938&r2=633939&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml Wed Mar  5 09:23:59 2008
@@ -82,7 +82,14 @@
                 <configuration>
                     <instructions>
                         <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
-                        <Import-Package>org.apache.servicemix.nmr.api,org.apache.servicemix.nmr.core</Import-Package>
+                        <Import-Package>
+                            org.apache.servicemix.nmr.api,
+                            org.apache.servicemix.nmr.api.event,
+                            org.apache.servicemix.nmr.api.internal,
+                            org.apache.servicemix.nmr.core,
+                            org.apache.servicemix.nmr.osgi,
+                            *
+                        </Import-Package>
                         <Spring-Context>*;publish-context:=false;create-asynchronously:=true</Spring-Context>
                     </instructions>
                 </configuration>

Added: servicemix/smx4/nmr/trunk/nmr/osgi/src/main/java/org/apache/servicemix/nmr/osgi/InternalRegistryWrapper.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/osgi/src/main/java/org/apache/servicemix/nmr/osgi/InternalRegistryWrapper.java?rev=633939&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/osgi/src/main/java/org/apache/servicemix/nmr/osgi/InternalRegistryWrapper.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/osgi/src/main/java/org/apache/servicemix/nmr/osgi/InternalRegistryWrapper.java Wed Mar  5 09:23:59 2008
@@ -0,0 +1,59 @@
+/*
+ * 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.
+ */
+package org.apache.servicemix.nmr.osgi;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.servicemix.nmr.api.Endpoint;
+import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
+import org.apache.servicemix.nmr.api.service.ServiceRegistry;
+import org.apache.servicemix.nmr.core.ServiceRegistryImpl;
+import org.apache.servicemix.nmr.core.util.MapToDictionary;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.springframework.osgi.context.BundleContextAware;
+
+/**
+ */
+public class InternalRegistryWrapper extends ServiceRegistryImpl<InternalEndpoint>
+                                     implements ServiceRegistry<InternalEndpoint>, BundleContextAware {
+
+    private BundleContext bundleContext;
+    private Map<Endpoint, ServiceRegistration> registrations = new ConcurrentHashMap();
+
+    public void setBundleContext(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
+    @Override
+    protected void doRegister(InternalEndpoint endpoint, Map<String, ?> properties) {
+        ServiceRegistration reg = bundleContext.registerService(
+                                      InternalEndpoint.class.getName(),
+                                      endpoint,
+                                      new MapToDictionary(properties));
+        registrations.put(endpoint, reg);
+    }
+
+    @Override
+    protected void doUnregister(InternalEndpoint endpoint, Map<String, ?> properties) {
+        ServiceRegistration reg = registrations.remove(endpoint);
+        reg.unregister();
+        super.unregister(endpoint, properties);
+    }
+
+}

Modified: servicemix/smx4/nmr/trunk/nmr/osgi/src/main/resources/META-INF/spring/servicemix-nmr.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/osgi/src/main/resources/META-INF/spring/servicemix-nmr.xml?rev=633939&r1=633938&r2=633939&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/osgi/src/main/resources/META-INF/spring/servicemix-nmr.xml (original)
+++ servicemix/smx4/nmr/trunk/nmr/osgi/src/main/resources/META-INF/spring/servicemix-nmr.xml Wed Mar  5 09:23:59 2008
@@ -60,7 +60,9 @@
     <!-- Endpoint registry and service tracker -->
     <bean id="endpointRegistry" class="org.apache.servicemix.nmr.core.EndpointRegistryImpl">
         <property name="nmr" ref="servicemix" />
+        <property name="registry" ref="internalEndpointRegistry" />
     </bean>
+    <bean id="internalEndpointRegistry" class="org.apache.servicemix.nmr.osgi.InternalRegistryWrapper" />
     <osgi:list id="endpoints"
                interface="org.apache.servicemix.nmr.api.Endpoint"
                cardinality="0..N">

Modified: servicemix/smx4/nmr/trunk/nmr/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/pom.xml?rev=633939&r1=633938&r2=633939&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/nmr/pom.xml Wed Mar  5 09:23:59 2008
@@ -39,6 +39,7 @@
         <module>spring</module>
         <module>osgi</module>
         <module>commands</module>
+        <module>management</module>
     </modules>
 
 </project>



Mime
View raw message