/* * Copyright 2004,2005 The Apache Software Foundation. * * 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.factory; import org.apache.synapse.commons.throttle.core.*; import org.apache.synapse.commons.throttle.core.impl.domainbase.DomainBaseThrottleContext; import org.apache.synapse.commons.throttle.core.impl.ipbase.IPBaseThrottleContext; import org.apache.synapse.commons.throttle.core.impl.rolebase.RoleBaseThrottleContext; import org.apache.synapse.commons.throttle.core.internal.ThrottleServiceDataHolder; /** * Factory for creating a ThrottleContext - holds all callers runtime data - the current state */ public class ThrottleContextFactory { // Task for replicating CallerContexts. private static final ThrottleReplicator throttleReplicator = new ThrottleReplicator(); private static final ThrottleWindowReplicator throttleWindowReplicator = new ThrottleWindowReplicator(); private static final ThrottleContextCleanupTask throttleContextCleanupTask = new ThrottleContextCleanupTask(); private static final ThrottleDistributedInstancesCleanupTask distributedObjectsCleanupTask = new ThrottleDistributedInstancesCleanupTask(); /** * To create a ThrottleContext for the given throttle type * Needs to provide a throttle configuration * * @param throttletype - The type of the throttle * @param configuration - The throttle configuration * @return ThrottleContext - The corresponding ThrottleContext for the given throttle type * @throws ThrottleException - Throws for if the throttle type is unknown */ public static ThrottleContext createThrottleContext(int throttletype, ThrottleConfiguration configuration) throws ThrottleException { if (ThrottleConstants.IP_BASE == throttletype) { return new IPBaseThrottleContext(configuration, throttleReplicator); } else if (ThrottleConstants.DOMAIN_BASE == throttletype) { return new DomainBaseThrottleContext(configuration, throttleReplicator); } else if (ThrottleConstants.ROLE_BASE == throttletype) { return new RoleBaseThrottleContext(configuration, throttleReplicator); } else { throw new ThrottleException("Unknown throttle type"); } } /** * Ger throttle window replicator instance to make sure that there will be one throttle replicator in the implementation * * @return ThrottleWindowReplicator instance */ public static ThrottleWindowReplicator getThrottleWindowReplicatorInstance() { return throttleWindowReplicator; } /** * Get throttle caller context cleanup task instance * implementation * * @return ThrottleWindowReplicator instance */ public static ThrottleContextCleanupTask getThrottleContextCleanupTaskInstance() { return throttleContextCleanupTask; } }