You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by cc...@apache.org on 2009/08/25 06:16:01 UTC
svn commit: r807471 [2/2] - in /servicemix/smx4/nmr/trunk: ./ jbi/deployer/
jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/
jbi/deployer/src/main/java/org/apache/servicemix/jbi/deployer/artifacts/
jbi/deployer/src/main/java/org/apache/se...
Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ExchangeFailedEvent.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ExchangeFailedEvent.java?rev=807471&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ExchangeFailedEvent.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ExchangeFailedEvent.java Tue Aug 25 04:15:57 2009
@@ -0,0 +1,43 @@
+/*
+ * 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.EventObject;
+
+import org.apache.servicemix.nmr.api.Exchange;
+
+/**
+ * Event representing an Exchange failure.
+ */
+public class ExchangeFailedEvent extends EventObject {
+
+ private Exchange exchange;
+
+ public ExchangeFailedEvent(Exchange source) {
+ super(source);
+ this.exchange = source;
+ }
+
+ public Exchange getExchange() {
+ return exchange;
+ }
+
+ public String toString() {
+ return "Exchange failed: " + exchange.getId();
+ }
+}
+
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagedEndpoint.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagedEndpoint.java Tue Aug 25 04:15:57 2009
@@ -21,8 +21,9 @@
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.fusesource.commons.management.ManagementStrategy;
+import org.fusesource.commons.management.Statistic;
+import org.fusesource.commons.management.Statistic.UpdateMode;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
@@ -34,18 +35,30 @@
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) {
+ protected final Statistic inboundExchanges;
+ protected final Statistic outboundExchanges;
+ protected final Statistic inboundExchangeRate;
+ protected final Statistic outboundExchangeRate;
+ protected final ManagementStrategy managementStrategy;
+
+ public ManagedEndpoint(InternalEndpoint endpoint,
+ Map<String,?> properties,
+ ManagementStrategy managementStrategy) {
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");
+ this.managementStrategy = managementStrategy;
+ this.inboundExchanges = managementStrategy.createStatistic("inboundExchanges",
+ this,
+ UpdateMode.VALUE);
+ this.inboundExchangeRate = managementStrategy.createStatistic("inboundExchangeRate",
+ this,
+ UpdateMode.COUNTER);
+ this.outboundExchanges = managementStrategy.createStatistic("outboundExchanges",
+ this,
+ UpdateMode.VALUE);
+ this.outboundExchangeRate = managementStrategy.createStatistic("outboundExchangeRate",
+ this,
+ UpdateMode.COUNTER);
}
public InternalEndpoint getEndpoint() {
@@ -54,12 +67,12 @@
void incrementInbound() {
inboundExchanges.increment();
- inboundExchangeRate.addTime();
+ inboundExchangeRate.increment();
}
void incrementOutbound() {
outboundExchanges.increment();
- outboundExchangeRate.addTime();
+ outboundExchangeRate.increment();
}
/**
@@ -89,7 +102,7 @@
*/
@ManagedAttribute(description = "Number of exchanges received")
public long getInboundExchangeCount() {
- return inboundExchanges.getCount();
+ return inboundExchanges.getUpdateCount();
}
/**
@@ -99,7 +112,7 @@
*/
@ManagedAttribute(description = "Exchanges received per second")
public double getInboundExchangeRate() {
- return inboundExchangeRate.getAveragePerSecond();
+ return getRate(inboundExchangeRate);
}
/**
@@ -109,7 +122,7 @@
*/
@ManagedAttribute(description = "Number of exchanges sent")
public long getOutboundExchangeCount() {
- return outboundExchanges.getCount();
+ return outboundExchanges.getUpdateCount();
}
/**
@@ -119,7 +132,7 @@
*/
@ManagedAttribute(description = "Exchanges sent per second")
public double getOutboundExchangeRate() {
- return outboundExchangeRate.getAveragePerSecond();
+ return getRate(outboundExchangeRate);
}
/**
@@ -132,5 +145,18 @@
inboundExchangeRate.reset();
outboundExchangeRate.reset();
}
+
+ /**
+ * Get the update rate for the given statistic
+ * @param stat the statistic
+ * @return
+ */
+ private synchronized double getRate(Statistic stat) {
+ if (stat.getUpdateCount() == 0) {
+ return 0;
+ }
+ double d = stat.getValue();
+ return d / stat.getUpdateCount();
+ }
}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementAgent.java Tue Aug 25 04:15:57 2009
@@ -16,15 +16,19 @@
*/
package org.apache.servicemix.nmr.management;
+import java.util.EventObject;
import java.util.Set;
import java.util.HashSet;
+import javax.jbi.component.ComponentContext;
import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.JMException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectInstance;
import javax.management.InstanceAlreadyExistsException;
+import javax.management.StandardMBean;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.RequiredModelMBean;
import javax.management.modelmbean.InvalidTargetObjectTypeException;
@@ -34,22 +38,118 @@
import org.springframework.beans.factory.DisposableBean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.nmr.management.stats.CountStatistic;
+import org.apache.servicemix.nmr.management.stats.TimeStatistic;
+import org.fusesource.commons.management.ManagementStrategy;
+import org.fusesource.commons.management.Statistic;
+import org.fusesource.commons.management.Statistic.UpdateMode;
/**
*/
-public class ManagementAgent implements DisposableBean {
+public class ManagementAgent implements ManagementStrategy, DisposableBean {
private static final transient Log LOG = LogFactory.getLog(ManagementAgent.class);
private MBeanServer mbeanServer;
private MetadataMBeanInfoAssembler assembler;
private Set<ObjectName> mbeans = new HashSet<ObjectName>();
+ private NamingStrategy namingStrategy;
public ManagementAgent() {
assembler = new MetadataMBeanInfoAssembler();
assembler.setAttributeSource(new AnnotationJmxAttributeSource());
}
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#manageObject(java.lang.Object)
+ */
+ public void manageObject(Object managedObject) throws Exception {
+ ObjectName objectName = getManagedObjectName(managedObject, null, ObjectName.class);
+ manageNamedObject(managedObject, objectName);
+ }
+
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#getObjectName(java.lang.Object)
+ */
+ public <T> T getManagedObjectName(Object managableObject,
+ String customName,
+ Class<T> nameType) throws Exception {
+ return String.class.equals(nameType) && managableObject == null && customName == null
+ ? nameType.cast(namingStrategy.getJmxDomainName())
+ : ObjectName.class.equals(nameType)
+ ? nameType.cast(getTypeSpecificObjectName(managableObject, customName))
+ : null;
+ }
+
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#manageNamedObject(java.lang.Object)
+ */
+ public void manageNamedObject(Object managedObject, Object preferredName) throws Exception {
+ managedObject = getTypeSpecificManagedObject(managedObject);
+ if (preferredName instanceof ObjectName && managedObject != null) {
+ try {
+ register(managedObject, (ObjectName)preferredName);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ throw new JMException(ex.getMessage());
+ }
+ }
+ }
+
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#unmanageObject(java.lang.Object)
+ */
+ public void unmanageObject(Object managedObject) throws Exception {
+ ObjectName objectName = getManagedObjectName(managedObject, null, ObjectName.class);
+ unmanageNamedObject(objectName);
+ }
+
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#unmanageNamedObject(java.lang.Object)
+ */
+ public void unmanageNamedObject(Object name) throws Exception {
+ if (name instanceof ObjectName) {
+ unregister((ObjectName)name);
+ }
+ }
+
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#isManaged(java.lang.Object)
+ */
+ public boolean isManaged(Object managableObject, Object name) {
+ try {
+ return managableObject != null
+ ? getMbeanServer().isRegistered(
+ getManagedObjectName(managableObject, null, ObjectName.class))
+ : name != null && name instanceof ObjectName
+ ? getMbeanServer().isRegistered((ObjectName)name)
+ : false;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * @see org.fusesource.commons.management.ManagementStrategy#createStatistic(java.lang.Object)
+ */
+ public Statistic createStatistic(String name, Object owner, UpdateMode updateMode) {
+ return updateMode == UpdateMode.COUNTER
+ ? new TimeStatistic(name, null)
+ : updateMode == UpdateMode.VALUE
+ ? new CountStatistic(name, null)
+ : null;
+ }
+
+ /**
+ * A place-holder implementation of notify that logs events to the commons
+ * logging Log.
+ */
+ public void notify(EventObject event) throws Exception {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace(event.toString());
+ }
+ }
+
public MBeanServer getMbeanServer() {
return mbeanServer;
}
@@ -57,6 +157,14 @@
public void setMbeanServer(MBeanServer mbeanServer) {
this.mbeanServer = mbeanServer;
}
+
+ public NamingStrategy getNamingStrategy() {
+ return namingStrategy;
+ }
+
+ public void setNamingStrategy(NamingStrategy namingStrategy) {
+ this.namingStrategy = namingStrategy;
+ }
public void destroy() throws Exception {
// Using the array to hold the busMBeans to avoid the
@@ -80,7 +188,7 @@
}
public void register(Object obj, ObjectName name) throws JMException {
- register(obj, name, false);
+ register(obj, name, !(obj instanceof ManagedEndpoint));
}
public void register(Object obj, ObjectName name, boolean forceRegistration) throws JMException {
@@ -122,5 +230,26 @@
mbeans.add(name);
}
}
-
+
+ private ObjectName getTypeSpecificObjectName(Object mo, String customName) throws MalformedObjectNameException {
+ return mo instanceof ManagedEndpoint
+ ? namingStrategy.getObjectName((ManagedEndpoint)mo)
+ : mo instanceof Nameable
+ ? (customName != null
+ ? namingStrategy.getCustomObjectName(customName, ((Nameable)mo).getName())
+ : namingStrategy.getObjectName((Nameable)mo))
+ : mo instanceof ComponentContext
+ ? namingStrategy.getCustomObjectName(customName,
+ ((ComponentContext)mo).getComponentName())
+ : null;
+ }
+
+
+ private Object getTypeSpecificManagedObject(Object object) throws NotCompliantMBeanException {
+ return object instanceof ManagedEndpoint
+ ? object
+ : object instanceof Nameable
+ ? new StandardMBean(object, ((Nameable)object).getPrimaryInterface())
+ : null;
+ }
}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/ManagementEndpointRegistry.java Tue Aug 25 04:15:57 2009
@@ -27,6 +27,7 @@
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.fusesource.commons.management.ManagementStrategy;
import org.springframework.beans.factory.InitializingBean;
/**
@@ -35,36 +36,27 @@
private static final transient Log LOG = LogFactory.getLog(ManagementEndpointRegistry.class);
- private NamingStrategy namingStrategy;
- private ManagementAgent managementAgent;
+ private ManagementStrategy managementStrategy;
private Map<String, ManagedEndpoint> endpoints;
public ManagementEndpointRegistry() {
endpoints = new ConcurrentHashMap<String, ManagedEndpoint>();
}
- public NamingStrategy getNamingStrategy() {
- return namingStrategy;
+ public ManagementStrategy getManagementAgent() {
+ return managementStrategy;
}
- public void setNamingStrategy(NamingStrategy namingStrategy) {
- this.namingStrategy = namingStrategy;
- }
-
- public ManagementAgent getManagementAgent() {
- return managementAgent;
- }
-
- public void setManagementAgent(ManagementAgent managementAgent) {
- this.managementAgent = managementAgent;
+ public void setManagementStrategy(ManagementStrategy managementStrategy) {
+ this.managementStrategy = managementStrategy;
}
public void register(InternalEndpoint endpoint, Map<String, ?> properties) {
try {
LOG.info("Registering endpoint: " + endpoint + " with properties " + properties);
- ManagedEndpoint ep = new ManagedEndpoint(endpoint, properties);
+ ManagedEndpoint ep = new ManagedEndpoint(endpoint, properties, managementStrategy);
endpoints.put(endpoint.getId(), ep);
- managementAgent.register(ep, namingStrategy.getObjectName(ep));
+ managementStrategy.manageObject(ep);
} catch (Exception e) {
LOG.warn("Unable to register managed endpoint: " + e, e);
}
@@ -74,7 +66,7 @@
try {
LOG.info("Unregistering endpoint: " + endpoint + " with properties " + properties);
ManagedEndpoint ep = endpoints.remove(endpoint.getId());
- managementAgent.unregister(namingStrategy.getObjectName(ep));
+ managementStrategy.unmanageObject(ep);
} catch (Exception e) {
LOG.warn("Unable to unregister managed endpoint: " + e, e);
}
@@ -133,14 +125,17 @@
}
public void exchangeFailed(Exchange exchange) {
+ ExchangeFailedEvent event = new ExchangeFailedEvent(exchange);
+ try {
+ managementStrategy.notify(event);
+ } catch (Exception ex) {
+ LOG.warn("ExchangeFailedEvent notification failed", ex);
+ }
}
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");
+ if (managementStrategy == null) {
+ throw new IllegalArgumentException("managementStrategy must not be null");
}
}
}
Added: servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/Nameable.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/Nameable.java?rev=807471&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/Nameable.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/Nameable.java Tue Aug 25 04:15:57 2009
@@ -0,0 +1,57 @@
+/*
+ * 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;
+
+
+/**
+ * This interface avoids type leakage from the JBI-specific layer into
+ * the generic NMR layer when the names for managable objects are being
+ * constructed by the latter.
+ */
+public interface Nameable {
+
+ /**
+ * @return the name of the parent
+ */
+ String getParent();
+
+ /**
+ * @return the name of the entity
+ */
+ String getName();
+
+ /**
+ * @return the (non-Java) type of the entity
+ */
+ String getType();
+
+ /**
+ * @return the sub-type of the entity
+ */
+ String getSubType();
+
+ /**
+ * @return the version of the entity
+ */
+ String getVersion();
+
+ /**
+ * @return the primary interface of the entity from a management
+ * point of view
+ */
+ Class getPrimaryInterface();
+}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/NamingStrategy.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/NamingStrategy.java Tue Aug 25 04:15:57 2009
@@ -19,10 +19,16 @@
import javax.management.ObjectName;
import javax.management.MalformedObjectNameException;
+
/**
*/
public interface NamingStrategy {
ObjectName getObjectName(ManagedEndpoint endpoint) throws MalformedObjectNameException;
-
+
+ ObjectName getObjectName(Nameable nameable) throws MalformedObjectNameException;
+
+ ObjectName getCustomObjectName(String type, String name);
+
+ String getJmxDomainName();
}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/CountStatistic.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/CountStatistic.java Tue Aug 25 04:15:57 2009
@@ -46,17 +46,19 @@
counter.set(0);
}
- public long getCount() {
+ public long getValue() {
return counter.get();
}
- public void setCount(long count) {
+ public void updateValue(long count) {
counter.set(count);
+ updateUpdateCount();
}
public void add(long amount) {
counter.addAndGet(amount);
updateSampleTime();
+ updateUpdateCount();
if (parent != null) {
parent.add(amount);
}
@@ -65,6 +67,7 @@
public void increment() {
counter.incrementAndGet();
updateSampleTime();
+ updateUpdateCount();
if (parent != null) {
parent.increment();
}
@@ -73,6 +76,7 @@
public void subtract(long amount) {
counter.addAndGet(-amount);
updateSampleTime();
+ updateUpdateCount();
if (parent != null) {
parent.subtract(amount);
}
@@ -81,6 +85,7 @@
public void decrement() {
counter.decrementAndGet();
updateSampleTime();
+ updateUpdateCount();
if (parent != null) {
parent.decrement();
}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/Statistic.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/Statistic.java Tue Aug 25 04:15:57 2009
@@ -16,17 +16,20 @@
*/
package org.apache.servicemix.nmr.management.stats;
+import java.util.concurrent.atomic.AtomicLong;
+
/**
* Base class for a Statistic implementation
*
* @version $Revision: 482795 $
*/
-public class Statistic {
+public abstract class Statistic implements org.fusesource.commons.management.Statistic {
private String name;
private String unit;
private String description;
private long startTime;
private long lastSampleTime;
+ protected final AtomicLong updateCount = new AtomicLong(0);
public Statistic(String name, String unit, String description) {
this.name = name;
@@ -35,8 +38,18 @@
startTime = System.currentTimeMillis();
lastSampleTime = startTime;
}
-
+
+ /**
+ * Gets the number of times the statistic has been updated since the last reset.
+ *
+ * @return the update count
+ */
+ public long getUpdateCount() {
+ return updateCount.get();
+ }
+
public synchronized void reset() {
+ updateCount.set(0);
startTime = System.currentTimeMillis();
lastSampleTime = startTime;
}
@@ -44,6 +57,10 @@
protected synchronized void updateSampleTime() {
lastSampleTime = System.currentTimeMillis();
}
+
+ protected void updateUpdateCount() {
+ updateCount.incrementAndGet();
+ }
public synchronized String toString() {
StringBuffer buffer = new StringBuffer();
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/TimeStatistic.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/java/org/apache/servicemix/nmr/management/stats/TimeStatistic.java Tue Aug 25 04:15:57 2009
@@ -22,7 +22,6 @@
* @version $Revision: 482795 $
*/
public class TimeStatistic extends Statistic {
- private long count;
private long maxTime;
private long minTime;
private long totalTime;
@@ -43,19 +42,14 @@
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) {
+ public synchronized void updateValue(long time) {
updateSampleTime();
- count++;
+ updateUpdateCount();
totalTime += time;
if (time > maxTime) {
maxTime = time;
@@ -64,15 +58,15 @@
minTime = time;
}
if (parent != null) {
- parent.addTime(time);
+ parent.updateValue(time);
}
}
- public synchronized void addTime() {
+ public synchronized void increment() {
long time = getLastSampleTime();
updateSampleTime();
+ updateUpdateCount();
time = getLastSampleTime() - time;
- count++;
totalTime += time;
if (time > maxTime) {
maxTime = time;
@@ -81,7 +75,7 @@
minTime = time;
}
if (parent != null) {
- parent.addTime(time);
+ parent.updateValue(time);
}
}
@@ -102,7 +96,7 @@
/**
* @return the total time of all the steps added together
*/
- public synchronized long getTotalTime() {
+ public synchronized long getValue() {
return totalTime;
}
@@ -111,11 +105,11 @@
* total time by the number of counts
*/
public synchronized double getAverageTime() {
- if (count == 0) {
+ if (updateCount.get() == 0) {
return 0;
}
double d = totalTime;
- return d / count;
+ return d / updateCount.get();
}
@@ -125,11 +119,11 @@
* minimum and maximum times.
*/
public synchronized double getAverageTimeExcludingMinMax() {
- if (count <= 2) {
+ if (updateCount.get() <= 2) {
return 0;
}
double d = totalTime - minTime - maxTime;
- return d / (count - 2);
+ return d / (updateCount.incrementAndGet() - 2);
}
@@ -166,8 +160,8 @@
}
protected synchronized void appendFieldDescription(StringBuffer buffer) {
- buffer.append(" count: ");
- buffer.append(Long.toString(count));
+ buffer.append(" update count: ");
+ buffer.append(Long.toString(updateCount.get()));
buffer.append(" maxTime: ");
buffer.append(Long.toString(maxTime));
buffer.append(" minTime: ");
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/META-INF/spring/servicemix-nmr-management.xml (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/main/resources/META-INF/spring/servicemix-nmr-management.xml Tue Aug 25 04:15:57 2009
@@ -36,16 +36,7 @@
<!-- 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" />
+ <property name="managementStrategy" ref="managementStrategy" />
</bean>
<!-- List of endpoints -->
@@ -63,4 +54,23 @@
</osgi:interfaces>
</osgi:service>
+ <!-- ManagementStrategy -->
+ <!-- Replace the following beans and <osgi:service> element with
+ an <osgi:reference> element if plugging in an alternative
+ ManagementStrategy implementation from another bunble -->
+ <bean id="namingStrategy" class="org.apache.servicemix.nmr.management.DefaultNamingStrategy">
+ <property name="jmxDomainName" value="org.apache.servicemix" />
+ </bean>
+
+ <bean id="managementStrategy" class="org.apache.servicemix.nmr.management.ManagementAgent">
+ <property name="namingStrategy" ref="namingStrategy" />
+ <property name="mbeanServer" ref="mbeanServer" />
+ </bean>
+
+ <osgi:service ref="managementStrategy">
+ <osgi:interfaces>
+ <value>org.fusesource.commons.management.ManagementStrategy</value>
+ </osgi:interfaces>
+ </osgi:service>
+
</beans>
Added: servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java?rev=807471&view=auto
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java (added)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/ManagementStrategyTest.java Tue Aug 25 04:15:57 2009
@@ -0,0 +1,405 @@
+/**
+ * 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.EventObject;
+import java.util.HashMap;
+
+import javax.management.MBeanServer;
+import javax.management.NotCompliantMBeanException;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+import javax.management.modelmbean.RequiredModelMBean;
+
+import org.apache.servicemix.nmr.api.internal.InternalEndpoint;
+
+import org.fusesource.commons.management.Statistic;
+import org.fusesource.commons.management.Statistic.UpdateMode;
+
+import static org.easymock.classextension.EasyMock.*;
+import org.easymock.classextension.IMocksControl;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ManagementStrategyTest extends Assert { //TestCase {
+
+ private IMocksControl control;
+ private ManagementAgent strategy = null;
+ private MBeanServer mbeanServer = null;
+
+ private static final String JMX_DOMAIN = "smx_domain";
+ private static final String EXTENSION_NAME =
+ JMX_DOMAIN + ":Type=Component,Name=extension,SubType=bootstrap";
+ private static final String ENDPOINT_NAME =
+ JMX_DOMAIN + ":Type=Endpoint,Id=endpoint_foo";
+
+ @Before
+ public void setUp() {
+ control = createNiceControl();
+ mbeanServer = control.createMock(MBeanServer.class);
+ strategy = setUpStrategy();
+ }
+
+ @After
+ public void tearDown() {
+ strategy = null;
+ mbeanServer = null;
+ }
+
+ @Test
+ public void testGetJmxDomainName() throws Exception {
+ Object name = strategy.getManagedObjectName(null,
+ null,
+ String.class);
+ assertNotNull(name);
+ assertTrue(name instanceof String);
+ assertEquals("unexpected domain name", name, JMX_DOMAIN);
+ }
+
+ @Test
+ public void testAdminCommandsServiceObjectName() throws Exception {
+ Nameable nameable = getNameable("AdminCommandsService",
+ "ServiceMix",
+ "SystemService",
+ null,
+ null,
+ null);
+ Object name = strategy.getManagedObjectName(nameable,
+ null,
+ ObjectName.class);
+ verifyObjectName(name,
+ ":ContainerName=ServiceMix,Type=SystemService,"
+ + "Name=AdminCommandsService");
+ }
+
+ @Test
+ public void testSharedLibraryObjectName() throws Exception {
+ Nameable nameable = getNameable("servicemix-shared",
+ null,
+ "SharedLibrary",
+ null,
+ "2008.01",
+ null);
+ Object name = strategy.getManagedObjectName(nameable,
+ null,
+ ObjectName.class);
+ verifyObjectName(name,
+ ":Type=SharedLibrary,Name=servicemix-shared,"
+ + "Version=2008.01");
+ }
+
+ @Test
+ public void testServiceEngineObjectName() throws Exception {
+ Nameable nameable = getNameable("servicemix-eip",
+ null,
+ "service-engine",
+ "LifeCycle",
+ null,
+ null);
+ Object name = strategy.getManagedObjectName(nameable,
+ null,
+ ObjectName.class);
+ verifyObjectName(name,
+ ":Type=service-engine,Name=servicemix-eip,"
+ + "SubType=LifeCycle");
+ };
+
+ @Test
+ public void testBindingComponentObjectName() throws Exception {
+ Nameable nameable = getNameable("servicemix-http",
+ null,
+ "binding-component",
+ "LifeCycle",
+ null,
+ null);
+ Object name = strategy.getManagedObjectName(nameable,
+ null,
+ ObjectName.class);
+ verifyObjectName(name,
+ ":Type=binding-component,Name=servicemix-http,"
+ + "SubType=LifeCycle");
+ }
+
+ @Test
+ public void testServiceAssemblyObjectName() throws Exception {
+ Nameable nameable = getNameable("wsdl-first-sa",
+ null,
+ "ServiceAssembly",
+ null,
+ null,
+ null);
+ Object name = strategy.getManagedObjectName(nameable,
+ null,
+ ObjectName.class);
+ verifyObjectName(name,
+ ":Type=ServiceAssembly,Name=wsdl-first-sa");
+ }
+
+ @Test
+ public void testCustomComponentObjectName() throws Exception {
+ Nameable nameable = getNameable("extension",
+ null,
+ null,
+ null,
+ null,
+ FooMBean.class);
+ Object name = strategy.getManagedObjectName(nameable,
+ "bootstrap",
+ ObjectName.class);
+ verifyObjectName(name,
+ ":Type=Component,Name=extension,SubType=bootstrap");
+ }
+
+ @Test
+ public void testIsManagedNameManaged() throws Exception {
+ doTestIsManagedName(true);
+ }
+
+ @Test
+ public void testIsManagedNameUnmanaged() throws Exception {
+ doTestIsManagedName(false);
+ }
+
+ private void doTestIsManagedName(boolean managed) throws Exception {
+ ObjectName name = new ObjectName(EXTENSION_NAME);
+ expect(mbeanServer.isRegistered(name)).andReturn(managed);
+ control.replay();
+ if (managed) {
+ assertTrue(strategy.isManaged(null, name));
+ } else {
+ assertFalse(strategy.isManaged(null, name));
+ }
+ control.verify();
+ }
+
+ @Test
+ public void testIsManagedObjectManaged() throws Exception {
+ doTestIsManagedObject(true);
+ }
+
+ @Test
+ public void testIsManagedObjectUnmanaged() throws Exception {
+ doTestIsManagedObject(false);
+ }
+
+ private void doTestIsManagedObject(boolean managed) throws Exception {
+ ObjectName name = new ObjectName(EXTENSION_NAME);
+ expect(mbeanServer.isRegistered(name)).andReturn(managed);
+ control.replay();
+ Nameable nameable = getNameable("extension",
+ null,
+ "Component",
+ "bootstrap",
+ null,
+ FooMBean.class);
+ if (managed) {
+ assertTrue(strategy.isManaged(nameable, name));
+ } else {
+ assertFalse(strategy.isManaged(nameable, name));
+ }
+ control.verify();
+ }
+
+ @Test
+ public void testManageObjectSingleStep() throws Exception {
+ ObjectName name = new ObjectName(EXTENSION_NAME);
+ Nameable nameable = new Foo("extension",
+ null,
+ "Component",
+ "bootstrap",
+ null,
+ "bar");
+ ObjectInstance instance = new ObjectInstance(name, Nameable.class.getName());
+ expect(mbeanServer.registerMBean(isA(StandardMBean.class), eq(name))).andReturn(instance);
+ control.replay();
+ strategy.manageObject(nameable);
+ control.verify();
+ }
+
+ @Test
+ public void testManageObjectDualStep() throws Exception {
+ Nameable nameable = new Foo("extension",
+ null,
+ "Component",
+ "bootstrap",
+ null,
+ "bar");
+ ObjectName name = strategy.getManagedObjectName(nameable,
+ "bootstrap",
+ ObjectName.class);
+ ObjectInstance instance = new ObjectInstance(name, Nameable.class.getName());
+ expect(mbeanServer.registerMBean(isA(StandardMBean.class), eq(name))).andReturn(instance);
+ control.replay();
+ strategy.manageNamedObject(nameable, name);
+ control.verify();
+ }
+
+ @Test
+ public void testRepeatManageObject() throws Exception {
+ ObjectName name = new ObjectName(EXTENSION_NAME);
+ Nameable nameable = new Foo("extension",
+ null,
+ "Component",
+ "bootstrap",
+ null,
+ "bar");
+ ObjectInstance instance = new ObjectInstance(name, Nameable.class.getName());
+ expect(mbeanServer.registerMBean(isA(StandardMBean.class), eq(name))).andReturn(instance).times(2);
+ control.replay();
+ strategy.manageObject(nameable);
+ strategy.manageObject(nameable);
+ control.verify();
+ }
+
+ @Test
+ public void testRepeatManageManagedEndpoint() throws Exception {
+ ObjectName name = new ObjectName(ENDPOINT_NAME);
+ ObjectInstance instance = new ObjectInstance(name, Nameable.class.getName());
+ InternalEndpoint internal = control.createMock(InternalEndpoint.class);
+ HashMap<String, Object> props = new HashMap<String, Object>();
+ ManagedEndpoint endpoint =
+ new ManagedEndpoint(internal, props, strategy);
+ expect(internal.getId()).andReturn("endpoint_foo");
+ Exception ex = new NotCompliantMBeanException();
+ expect(mbeanServer.registerMBean(isA(ManagedEndpoint.class), eq(name))).andThrow(ex);
+ RequiredModelMBean mbean = control.createMock(RequiredModelMBean.class);
+ expect(mbeanServer.instantiate(RequiredModelMBean.class.getName())).andReturn(mbean);
+ expect(mbeanServer.registerMBean(isA(RequiredModelMBean.class), eq(name))).andReturn(instance);
+ control.replay();
+ strategy.manageObject(endpoint);
+ strategy.manageObject(endpoint);
+ control.verify();
+ }
+
+ @Test
+ public void testCreateStatistics() throws Exception {
+ Statistic counter = strategy.createStatistic("counter", null, UpdateMode.COUNTER);
+ counter.updateValue(150L);
+ counter.updateValue(50L);
+ assertEquals(200L, counter.getValue());
+
+ Statistic value = strategy.createStatistic("value", null, UpdateMode.VALUE);
+ value.updateValue(150L);
+ value.updateValue(50L);
+ assertEquals(50L, value.getValue());
+ }
+
+ @Test
+ public void testEventNotify() throws Exception {
+ // non-replacable static log factory awkward to mock
+ strategy.notify(new EventObject(this));
+ }
+
+ protected ManagementAgent setUpStrategy() {
+ ManagementAgent ms = new ManagementAgent();
+ DefaultNamingStrategy ns = new DefaultNamingStrategy();
+ ns.setJmxDomainName(JMX_DOMAIN);
+ ms.setNamingStrategy(ns);
+ ms.setMbeanServer(mbeanServer);
+ return ms;
+ }
+
+ protected Nameable getNameable(final String name,
+ final String parent,
+ final String type,
+ final String subtype,
+ final String version,
+ final Class primary) {
+ return new Nameable() {
+ public String getName() {
+ return name;
+ }
+ public String getParent() {
+ return parent;
+ }
+ public String getType() {
+ return type;
+ }
+ public String getSubType() {
+ return subtype;
+ }
+ public String getVersion() {
+ return version;
+ }
+ public Class getPrimaryInterface() {
+ return primary;
+ }
+ };
+ }
+
+ protected void verifyObjectName(Object name, String expected) {
+ assertNotNull(name);
+ assertTrue(name instanceof ObjectName);
+ ObjectName on = (ObjectName)name;
+ assertEquals("unexpected object name",
+ on.toString(),
+ (JMX_DOMAIN + expected));
+ }
+
+ public interface FooMBean {
+ String getBar();
+ }
+
+ private static class Foo implements Nameable, FooMBean {
+ private String name;
+ private String parent;
+ private String type;
+ private String subType;
+ private String version;
+ private String bar;
+
+ Foo(String name,
+ String parent,
+ String type,
+ String subType,
+ String version,
+ String bar) {
+ this.name = name;
+ this.parent = parent;
+ this.type = type;
+ this.subType = subType;
+ this.version = version;
+ this.bar = bar;
+ }
+
+ public String getName() {
+ return name;
+ }
+ public String getParent() {
+ return parent;
+ }
+ public String getType() {
+ return type;
+ }
+ public String getSubType() {
+ return subType;
+ }
+ public String getVersion() {
+ return version;
+ }
+ public Class getPrimaryInterface() {
+ return FooMBean.class;
+ }
+ public String getBar() {
+ return bar;
+ }
+ }
+}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/CountStatisticTest.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/CountStatisticTest.java Tue Aug 25 04:15:57 2009
@@ -32,20 +32,24 @@
CountStatistic stat = new CountStatistic("myCounter", "seconds", "myDescription");
assertStatistic(stat, "myCounter", "seconds", "myDescription");
- assertEquals(0, stat.getCount());
+ assertEquals(0, stat.getValue());
stat.increment();
- assertEquals(1, stat.getCount());
+ assertEquals(1, stat.getValue());
+ assertEquals(1, stat.getUpdateCount());
stat.increment();
- assertEquals(2, stat.getCount());
+ assertEquals(2, stat.getValue());
+ assertEquals(2, stat.getUpdateCount());
stat.decrement();
- assertEquals(1, stat.getCount());
+ assertEquals(1, stat.getValue());
+ assertEquals(3, stat.getUpdateCount());
Thread.sleep(500);
stat.increment();
+ assertEquals(4, stat.getUpdateCount());
assertLastTimeNotStartTime(stat);
@@ -53,6 +57,7 @@
stat.reset();
- assertEquals(0, stat.getCount());
+ assertEquals(0, stat.getValue());
+ assertEquals(0, stat.getUpdateCount());
}
}
Modified: 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=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/TimeStatisticTest.java (original)
+++ servicemix/smx4/nmr/trunk/nmr/management/src/test/java/org/apache/servicemix/nmr/management/stats/TimeStatisticTest.java Tue Aug 25 04:15:57 2009
@@ -29,29 +29,29 @@
TimeStatistic stat = new TimeStatistic("myTimer", "millis", "myDescription");
assertStatistic(stat, "myTimer", "millis", "myDescription");
- assertEquals(0, stat.getCount());
+ assertEquals(0, stat.getUpdateCount());
- stat.addTime(100);
- assertEquals(1, stat.getCount());
+ stat.updateValue(100);
+ assertEquals(1, stat.getUpdateCount());
assertEquals(100, stat.getMinTime());
assertEquals(100, stat.getMaxTime());
- stat.addTime(403);
- assertEquals(2, stat.getCount());
+ stat.updateValue(403);
+ assertEquals(2, stat.getUpdateCount());
assertEquals(100, stat.getMinTime());
assertEquals(403, stat.getMaxTime());
- stat.addTime(50);
- assertEquals(3, stat.getCount());
+ stat.updateValue(50);
+ assertEquals(3, stat.getUpdateCount());
assertEquals(50, stat.getMinTime());
assertEquals(403, stat.getMaxTime());
- assertEquals(553, stat.getTotalTime());
+ assertEquals(553, stat.getValue());
Thread.sleep(500);
- stat.addTime(10);
+ stat.updateValue(10);
assertLastTimeNotStartTime(stat);
@@ -59,16 +59,16 @@
stat.reset();
- assertEquals(0, stat.getCount());
+ assertEquals(0, stat.getUpdateCount());
assertEquals(0, stat.getMinTime());
assertEquals(0, stat.getMaxTime());
- assertEquals(0, stat.getTotalTime());
+ assertEquals(0, stat.getValue());
- stat.addTime(100);
- assertEquals(1, stat.getCount());
+ stat.updateValue(100);
+ assertEquals(1, stat.getUpdateCount());
assertEquals(100, stat.getMinTime());
assertEquals(100, stat.getMaxTime());
- assertEquals(100, stat.getTotalTime());
+ assertEquals(100, stat.getValue());
}
}
Modified: servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml?rev=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/nmr/osgi/pom.xml Tue Aug 25 04:15:57 2009
@@ -68,6 +68,11 @@
<artifactId>commons-logging</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.fusesource.commonman</groupId>
+ <artifactId>commons-management</artifactId>
+ <version>${commons.management.version}</version>
+ </dependency>
</dependencies>
<build>
@@ -89,6 +94,7 @@
org.apache.servicemix.nmr.core,
org.apache.servicemix.nmr.core.security,
org.apache.servicemix.nmr.osgi,
+ org.fusesource.commons.management,
*
</Import-Package>
@@ -98,4 +104,4 @@
</plugins>
</build>
-</project>
\ No newline at end of file
+</project>
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=807471&r1=807470&r2=807471&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 Tue Aug 25 04:15:57 2009
@@ -36,12 +36,16 @@
http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd">
<!-- ServiceMix NMR -->
- <bean id="servicemix" class="org.apache.servicemix.nmr.core.ServiceMix">
+ <bean id="servicemix" class="org.apache.servicemix.nmr.core.ServiceMix"
+ init-method="init"
+ destroy-method="shutdown">
<property name="endpointRegistry" ref="endpointRegistry" />
<property name="listenerRegistry" ref="listenerRegistry" />
<property name="flowRegistry" ref="flowRegistry" />
<property name="wireRegistry" ref="wireRegistry" />
<property name="executorFactory" ref="executorFactory" />
+ <property name="managementStrategy" ref="managementStrategy" />
+ <property name="id" value="${nmrId}" />
</bean>
<osgi:service ref="servicemix">
<osgi:interfaces>
@@ -128,7 +132,14 @@
</property>
</bean>
+ <!-- Retrieve ManagementStrategy from OSGi service registry -->
+ <osgi:reference id="managementStrategy"
+ interface="org.fusesource.commons.management.ManagementStrategy"
+ cardinality="1..1" />
+
+
<osgix:cm-properties id="cmProps" persistent-id="org.apache.servicemix.nmr">
+ <prop key="nmrId">org.apache.servicemix.NMR</prop>
<prop key="allowCoreThreadsTimeout">true</prop>
<prop key="threadPoolCorePoolSize">1</prop>
<prop key="threadPoolMaximumPoolSize">16</prop>
Modified: servicemix/smx4/nmr/trunk/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/nmr/trunk/pom.xml?rev=807471&r1=807470&r2=807471&view=diff
==============================================================================
--- servicemix/smx4/nmr/trunk/pom.xml (original)
+++ servicemix/smx4/nmr/trunk/pom.xml Tue Aug 25 04:15:57 2009
@@ -107,6 +107,7 @@
<wsdl4j.version>1.6.1_1</wsdl4j.version>
<xbean.version>3.5</xbean.version>
<geronimo.stax.version>1.0.1</geronimo.stax.version>
+ <commons.management.version>1.0</commons.management.version>
<sonar.skippedModules>examples</sonar.skippedModules>
</properties>