001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.spi;
018    
019    import javax.management.JMException;
020    import javax.management.MBeanServer;
021    import javax.management.ObjectName;
022    
023    import org.apache.camel.Service;
024    
025    /**
026     * Camel JMX service agent
027     */
028    public interface InstrumentationAgent extends Service {
029    
030        /**
031         * Registers object with management infrastructure with a specific name. Object must be annotated or 
032         * implement standard MBean interface.
033         *
034         * @param obj  the object to register
035         * @param name the name
036         * @throws JMException is thrown if the registration failed
037         */
038        void register(Object obj, ObjectName name) throws JMException;
039        
040        /**
041         * Registers object with management infrastructure with a specific name. Object must be annotated or 
042         * implement standard MBean interface.
043         *
044         * @param obj  the object to register
045         * @param name the name
046         * @param forceRegistration if set to <tt>true</tt>, then object will be registered despite
047         * existing object is already registered with the name.
048         * @throws JMException is thrown if the registration failed
049         */
050        void register(Object obj, ObjectName name, boolean forceRegistration) throws JMException;
051        
052        /**
053         * Unregisters object based upon registered name
054         *
055         * @param name the name
056         * @throws JMException is thrown if the unregistration failed
057         */
058        void unregister(ObjectName name) throws JMException;
059    
060        /**
061         * Get the MBeanServer which hosts managed objects.
062         * <p/>
063         * <b>Notice:</b> If the JMXEnabled configuration is not set to <tt>true</tt>,
064         * this method will return <tt>null</tt>.
065         * 
066         * @return the MBeanServer
067         */
068        MBeanServer getMBeanServer();
069    
070        /**
071         * Get domain name for Camel MBeans.
072         * <p/>
073         * <b>Notice:</b> That this can be different that the default domain name of the MBean Server.
074         * 
075         * @return domain name
076         */
077        String getMBeanObjectDomainName();
078    
079    }