# ThrottleServiceComponent.java

    /*
    * Copyright 2005,2006 WSO2, Inc. http://wso2.com
    *
    * Licensed 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.synapse.commons.throttle.core.internal;

    import com.hazelcast.core.HazelcastInstance;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.osgi.service.component.ComponentContext;
    import org.apache.synapse.commons.throttle.core.ThrottleUtil;

    /**
     * This class represents the throttle core declarative service component.
     *
     * @scr.component name="throttle.core.services" immediate="true"
     * @scr.reference name="hazelcast.instance.service"
     * interface="com.hazelcast.core.HazelcastInstance"
     * cardinality="0..1"
     * policy="dynamic"
     * bind="setHazelcastInstance"
     * unbind="unsetHazelcastInstance"
     */
    public class ThrottleServiceComponent {

    	private static final Log log  = LogFactory.getLog(ThrottleServiceComponent.class.getName());

    	protected void activate(ComponentContext context) {
    		log.debug("Activating throttle core service component");
    		if (ThrottleServiceDataHolder.getInstance().getThrottleProperties() == null){
    			ThrottleServiceDataHolder.getInstance().setThrottleProperties(
    					ThrottleUtil.loadThrottlePropertiesFromConfigurations());
    		}
    	}

    	protected void deactivate(ComponentContext ctx) {
    		log.debug("Deactivating throttle core service component");
    	}

    	/**
    	 * Access Hazelcast Instance, which is exposed as an OSGI service.
    	 *
    	 * @param hazelcastInstance hazelcastInstance found from the OSGI service
    	 */
    	protected void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
    		ThrottleServiceDataHolder.getInstance().setHazelCastInstance(hazelcastInstance);
    	}

    	protected void unsetHazelcastInstance(HazelcastInstance hazelcastInstance) {
    		ThrottleServiceDataHolder.getInstance().setHazelCastInstance(null);
    	}
    }