blob: a345eaa0e7c07a69806d0982d2a26b3fafff028b [file] [log] [blame]
/**
* 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.camel.management;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.ManagementStatisticsLevel;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.spi.EventFactory;
import org.apache.camel.spi.EventNotifier;
import org.apache.camel.spi.ManagementAgent;
import org.apache.camel.spi.ManagementNamingStrategy;
import org.apache.camel.spi.ManagementObjectStrategy;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.util.ServiceHelper;
import org.fusesource.commons.management.Statistic;
/**
* A default management strategy that does <b>not</b> manage.
* <p/>
* This is default only used if Camel detects that it cannot use the JMX capable
* {@link org.apache.camel.management.ManagedManagementStrategy} strategy. Then Camel will
* fallback to use this instead that is basically a simple and <tt>noop</tt> strategy.
* <p/>
* This class can also be used to extend your custom management implement. In fact the JMX capable
* provided by Camel extends this class as well.
*
* @see ManagedManagementStrategy
* @version
*/
public class DefaultManagementStrategy implements ManagementStrategy, CamelContextAware {
private List<EventNotifier> eventNotifiers = new ArrayList<EventNotifier>();
private EventFactory eventFactory = new DefaultEventFactory();
private ManagementNamingStrategy managementNamingStrategy;
private ManagementObjectStrategy managementObjectStrategy;
private boolean onlyManageProcessorWithCustomId;
private ManagementAgent managementAgent;
private ManagementStatisticsLevel statisticsLevel = ManagementStatisticsLevel.All;
private CamelContext camelContext;
public List<EventNotifier> getEventNotifiers() {
return eventNotifiers;
}
public void addEventNotifier(EventNotifier eventNotifier) {
this.eventNotifiers.add(eventNotifier);
}
public boolean removeEventNotifier(EventNotifier eventNotifier) {
return eventNotifiers.remove(eventNotifier);
}
public void setEventNotifiers(List<EventNotifier> eventNotifiers) {
this.eventNotifiers = eventNotifiers;
}
public EventFactory getEventFactory() {
return eventFactory;
}
public void setEventFactory(EventFactory eventFactory) {
this.eventFactory = eventFactory;
}
public ManagementNamingStrategy getManagementNamingStrategy() {
if (managementNamingStrategy == null) {
managementNamingStrategy = new DefaultManagementNamingStrategy();
}
return managementNamingStrategy;
}
public void setManagementNamingStrategy(ManagementNamingStrategy managementNamingStrategy) {
this.managementNamingStrategy = managementNamingStrategy;
}
public ManagementObjectStrategy getManagementObjectStrategy() {
if (managementObjectStrategy == null) {
managementObjectStrategy = new DefaultManagementObjectStrategy();
}
return managementObjectStrategy;
}
public void setManagementObjectStrategy(ManagementObjectStrategy managementObjectStrategy) {
this.managementObjectStrategy = managementObjectStrategy;
}
public ManagementAgent getManagementAgent() {
return managementAgent;
}
public void setManagementAgent(ManagementAgent managementAgent) {
this.managementAgent = managementAgent;
}
public void onlyManageProcessorWithCustomId(boolean flag) {
onlyManageProcessorWithCustomId = flag;
}
public boolean isOnlyManageProcessorWithCustomId() {
return onlyManageProcessorWithCustomId;
}
public boolean manageProcessor(ProcessorDefinition<?> definition) {
return false;
}
public void manageObject(Object managedObject) throws Exception {
// noop
}
public void manageNamedObject(Object managedObject, Object preferedName) throws Exception {
// noop
}
public <T> T getManagedObjectName(Object managedObject, String customName, Class<T> nameType) throws Exception {
// noop
return null;
}
public void unmanageObject(Object managedObject) throws Exception {
// noop
}
public void unmanageNamedObject(Object name) throws Exception {
// noop
}
public boolean isManaged(Object managedObject, Object name) {
// noop
return false;
}
public CamelContext getCamelContext() {
return camelContext;
}
public void setCamelContext(CamelContext camelContext) {
this.camelContext = camelContext;
}
public void notify(EventObject event) throws Exception {
if (eventNotifiers != null && !eventNotifiers.isEmpty()) {
for (EventNotifier notifier : eventNotifiers) {
if (notifier.isEnabled(event)) {
notifier.notify(event);
}
}
}
}
public Statistic createStatistic(String name, Object owner, Statistic.UpdateMode updateMode) {
// noop
return null;
}
public void setStatisticsLevel(ManagementStatisticsLevel level) {
this.statisticsLevel = level;
}
public ManagementStatisticsLevel getStatisticsLevel() {
return statisticsLevel;
}
public void start() throws Exception {
if (eventNotifiers != null) {
ServiceHelper.startServices(eventNotifiers);
}
if (managementAgent != null) {
managementAgent.start();
// set the naming strategy using the domain name from the agent
if (managementNamingStrategy == null) {
setManagementNamingStrategy(new DefaultManagementNamingStrategy(managementAgent.getMBeanObjectDomainName()));
}
}
}
public void stop() throws Exception {
if (managementAgent != null) {
managementAgent.stop();
}
if (eventNotifiers != null) {
ServiceHelper.stopServices(eventNotifiers);
}
}
}