blob: dd574d16a6df1cdc745c249157f8422ed1cd5c59 [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.servicemix.jbi.audit;
import javax.jbi.JBIException;
import javax.jbi.messaging.MessageExchange;
import javax.management.JMException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
import org.apache.servicemix.jbi.container.JBIContainer;
import org.apache.servicemix.jbi.event.ExchangeEvent;
import org.apache.servicemix.jbi.event.ExchangeListener;
import org.apache.servicemix.jbi.management.AttributeInfoHelper;
import org.apache.servicemix.jbi.management.BaseSystemService;
import org.apache.servicemix.jbi.management.OperationInfoHelper;
import org.apache.servicemix.jbi.management.ParameterHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Base class for ServiceMix auditors implementations.
*
* @since 2.1
* @version $Revision$
*/
public abstract class AbstractAuditor extends BaseSystemService implements AuditorMBean, ExchangeListener {
protected static final transient Logger LOGGER = LoggerFactory.getLogger(AbstractAuditor.class);
private boolean asContainerListener = true;
public JBIContainer getContainer() {
return container;
}
public void setContainer(JBIContainer container) {
this.container = container;
}
protected Class getServiceMBean() {
return AuditorMBean.class;
}
/* (non-Javadoc)
* @see javax.jbi.management.LifeCycleMBean#start()
*/
public void start() throws javax.jbi.JBIException {
super.start();
doStart();
if (isAsContainerListener()) {
this.container.addListener(this);
}
}
/* (non-Javadoc)
* @see javax.jbi.management.LifeCycleMBean#stop()
*/
public void stop() throws javax.jbi.JBIException {
this.container.removeListener(this);
doStop();
super.stop();
}
protected void doStart() throws JBIException {
}
protected void doStop() throws JBIException {
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.management.MBeanInfoProvider#getAttributeInfos()
*/
public MBeanAttributeInfo[] getAttributeInfos() throws JMException {
// TODO: this should not be an attribute, as it can require access to database
AttributeInfoHelper helper = new AttributeInfoHelper();
helper.addAttribute(getObjectToManage(), "exchangeCount", "number of exchanges");
return AttributeInfoHelper.join(super.getAttributeInfos(), helper.getAttributeInfos());
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.management.MBeanInfoProvider#getOperationInfos()
*/
public MBeanOperationInfo[] getOperationInfos() throws JMException {
// TODO: add other operations infos
OperationInfoHelper helper = new OperationInfoHelper();
ParameterHelper ph = helper.addOperation(getObjectToManage(), "getExchangesByRange", 2, "retrieve a bunch messages");
ph.setDescription(0, "fromIndex", "lower index of message (start from 0)");
ph.setDescription(1, "toIndex", "upper index of message (exclusive, > fromIndex)");
ph = helper.addOperation(getObjectToManage(), "getExchangeById", 1, "retrieve an exchange given its id");
ph.setDescription(0, "id", "id of the exchange to retrieve");
return OperationInfoHelper.join(super.getOperationInfos(), helper.getOperationInfos());
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchangeCount()
*/
public abstract int getExchangeCount() throws AuditorException;
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchangeId(int)
*/
public String getExchangeIdByIndex(int index) throws AuditorException {
if (index < 0) {
throw new IllegalArgumentException("index should be greater or equal to zero");
}
return getExchangeIdsByRange(index, index + 1)[0];
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchangeIds()
*/
public String[] getAllExchangeIds() throws AuditorException {
return getExchangeIdsByRange(0, getExchangeCount());
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchangeIds(int, int)
*/
public abstract String[] getExchangeIdsByRange(int fromIndex, int toIndex) throws AuditorException;
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchange(int)
*/
public MessageExchange getExchangeByIndex(int index) throws AuditorException {
if (index < 0) {
throw new IllegalArgumentException("index should be greater or equal to zero");
}
return getExchangesByRange(index, index + 1)[0];
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchange(java.lang.String)
*/
public MessageExchange getExchangeById(String id) throws AuditorException {
if (id == null || id.length() == 0) {
throw new IllegalArgumentException("id should be non null and non empty");
}
return getExchangesByIds(new String[] {id })[0];
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchanges()
*/
public MessageExchange[] getAllExchanges() throws AuditorException {
return getExchangesByRange(0, getExchangeCount());
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchanges(int, int)
*/
public MessageExchange[] getExchangesByRange(int fromIndex, int toIndex) throws AuditorException {
return getExchangesByIds(getExchangeIdsByRange(fromIndex, toIndex));
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#getExchanges(java.lang.String[])
*/
public abstract MessageExchange[] getExchangesByIds(String[] ids) throws AuditorException;
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#deleteExchanges()
*/
public int deleteAllExchanges() throws AuditorException {
return deleteExchangesByRange(0, getExchangeCount());
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#deleteExchange(int)
*/
public boolean deleteExchangeByIndex(int index) throws AuditorException {
if (index < 0) {
throw new IllegalArgumentException("index should be greater or equal to zero");
}
return deleteExchangesByRange(index, index + 1) == 1;
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#deleteExchange(java.lang.String)
*/
public boolean deleteExchangeById(String id) throws AuditorException {
return deleteExchangesByIds(new String[] {id }) == 1;
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#deleteExchanges(int, int)
*/
public int deleteExchangesByRange(int fromIndex, int toIndex) throws AuditorException {
return deleteExchangesByIds(getExchangeIdsByRange(fromIndex, toIndex));
}
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#deleteExchanges(java.lang.String[])
*/
public abstract int deleteExchangesByIds(String[] ids) throws AuditorException;
/* (non-Javadoc)
* @see org.apache.servicemix.jbi.audit.AuditorMBean#resendExchange(javax.jbi.messaging.MessageExchange)
*/
public void resendExchange(MessageExchange exchange) throws JBIException {
container.resendExchange(exchange);
}
/**
* Test if Auditor should be included as a container listener
*
* @return Returns the addToContainer.
*/
public boolean isAsContainerListener() {
return asContainerListener;
}
/**
* Set if Auditor should be included as a container listener.
*
* @param addToContainer
* The addToContainer to set.
*/
public void setAsContainerListener(boolean addToContainer) {
this.asContainerListener = addToContainer;
}
public void exchangeAccepted(ExchangeEvent event) {
}
}