Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * #%L
   * Even Distribution Service Locator Selection Strategy
   * %%
   * Copyright (C) 2011 Talend Inc.
   * %%
   * 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.
  * #L%
  */
 package org.talend.esb.servicelocator.cxf.internal;
 
 import java.util.List;
 import java.util.Map;
 
 
 
 public class RandomSelectionStrategy extends LocatorSelectionStrategy implements FailoverStrategy {
 	
 	private int reloadAdressesCount = 10;
 	
 	
 	private int reloadCounter = 0;
 
 	public void setReloadAdressesCount(int reloadAdressesCount) {
 		this. = reloadAdressesCount;
 	}

 
 	public List<StringgetAlternateAddresses(Exchange exchange) {
 		QName serviceName = getServiceName(exchange);
 		// force reload
 		List<StringalternateAddressesgetRotatedAdresses(serviceNametrue);
 		return alternateAddresses;
 	}

 
 	synchronized public String getPrimaryAddress(Exchange exchange) {
 		QName serviceName = getServiceName(exchange);
 		String primaryAddress = null;
 		List<StringavailableAddresses = getRotatedAdresses(serviceNamefalse);
 		if (!availableAddresses.isEmpty())
 			primaryAddress = availableAddresses.get(0);
 		if (.isLoggable(.)) {
 			.log(."Get address for service " + serviceName + 
 					" using strategy " + this.getClass().getName() + " selecting from "
 					+ availableAddresses + " selected = " + primaryAddress);
 		}
  		return primaryAddress;
 	}
 			
 	synchronized private List<StringgetRotatedAdresses(QName serviceNameboolean forceReload) {
 		List<StringavailableAddresses  = .get(serviceName);
 		if (forceReload || isReloadAdresses() || availableAddresses == null || availableAddresses.isEmpty()) {
 			availableAddresses = getEndpoints(serviceName);		
 		}
 		if (!availableAddresses.isEmpty()) {
 			availableAddresses = getRotatedList(availableAddresses);
 			if (.isLoggable(.)) {
 						"List of endpoints for service " +  serviceName + ": " + availableAddresses);
 			}
 		} else {
 			if (.isLoggable(.)) {
 						"Received empty list of endpoints from locator for service " +  serviceName);
 			}
 		}
 		.put(serviceNameavailableAddresses);
 		return availableAddresses;
 	}
 	
 	private List<StringgetRotatedList(List<Stringstrings) {
 		int index = .nextInt(strings.size());
 		List<Stringrotated = new ArrayList<String>();
 		for (int i = 0; i < strings.size(); i++) {
 			rotated.add(strings.get(index));
			index = (index+1) % strings.size();
		}
		return rotated;
	}
	synchronized private boolean isReloadAdresses() {
		boolean isReloadAdresses = ( == 0);
		return isReloadAdresses;
	}
New to GrepCode? Check out our FAQ X