From 34ac48d938d5f3411505f7d0f883a585148ec716 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 08 Jan 2010 18:13:58 +0000
Subject: [PATCH] * various minor code fixes * fix unit tests * remove TODOs from Javadoc (issues are now in Issue Tracker)
---
sdk/src/org/opends/sdk/AbstractLoadBalancingAlgorithm.java | 121 +++++++++++++++++++++++++++++-----------
1 files changed, 87 insertions(+), 34 deletions(-)
diff --git a/sdk/src/org/opends/sdk/AbstractLoadBalancingAlgorithm.java b/sdk/src/org/opends/sdk/AbstractLoadBalancingAlgorithm.java
index c903cc2..b5233a1 100644
--- a/sdk/src/org/opends/sdk/AbstractLoadBalancingAlgorithm.java
+++ b/sdk/src/org/opends/sdk/AbstractLoadBalancingAlgorithm.java
@@ -1,5 +1,34 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2009 Sun Microsystems, Inc.
+ */
+
package org.opends.sdk;
+
+
import com.sun.opends.sdk.util.Validator;
import com.sun.opends.sdk.util.StaticUtils;
@@ -7,20 +36,27 @@
import java.util.ArrayList;
import java.util.logging.Level;
+
+
/**
- * Created by IntelliJ IDEA. User: digitalperk Date: Dec 15, 2009 Time: 3:49:17
- * PM To change this template use File | Settings | File Templates.
+ * Created by IntelliJ IDEA. User: digitalperk Date: Dec 15, 2009 Time:
+ * 3:49:17 PM To change this template use File | Settings | File
+ * Templates.
*/
-public abstract class AbstractLoadBalancingAlgorithm
- implements LoadBalancingAlgorithm
+public abstract class AbstractLoadBalancingAlgorithm implements
+ LoadBalancingAlgorithm
{
protected final List<MonitoredConnectionFactory> factoryList;
- protected AbstractLoadBalancingAlgorithm(ConnectionFactory<?>... factories)
+
+
+ protected AbstractLoadBalancingAlgorithm(
+ ConnectionFactory<?>... factories)
{
- Validator.ensureNotNull(factories);
- factoryList = new ArrayList<MonitoredConnectionFactory>(factories.length);
- for(ConnectionFactory<?> f : factories)
+ Validator.ensureNotNull((Object[]) factories);
+ factoryList = new ArrayList<MonitoredConnectionFactory>(
+ factories.length);
+ for (ConnectionFactory<?> f : factories)
{
factoryList.add(new MonitoredConnectionFactory(f));
}
@@ -28,30 +64,42 @@
new MonitorThread().start();
}
- protected class MonitoredConnectionFactory
- extends AbstractConnectionFactory<AsynchronousConnection>
- implements ResultHandler<AsynchronousConnection>
+
+
+ protected class MonitoredConnectionFactory extends
+ AbstractConnectionFactory<AsynchronousConnection> implements
+ ResultHandler<AsynchronousConnection>
{
private final ConnectionFactory<?> factory;
+
private volatile boolean isOperational;
+
private volatile FutureResult<?> pendingConnectFuture;
+
+
private MonitoredConnectionFactory(ConnectionFactory<?> factory)
{
this.factory = factory;
this.isOperational = true;
}
+
+
public boolean isOperational()
{
return isOperational;
}
+
+
public void handleErrorResult(ErrorResultException error)
{
isOperational = false;
}
+
+
public void handleResult(AsynchronousConnection result)
{
isOperational = true;
@@ -59,44 +107,43 @@
result.close();
}
- public FutureResult<? extends AsynchronousConnection>
- getAsynchronousConnection(
+
+
+ public FutureResult<? extends AsynchronousConnection> getAsynchronousConnection(
final ResultHandler<? super AsynchronousConnection> resultHandler)
{
- ResultHandler handler = new ResultHandler<AsynchronousConnection>()
+ ResultHandler<AsynchronousConnection> handler = new ResultHandler<AsynchronousConnection>()
{
public void handleErrorResult(ErrorResultException error)
{
isOperational = false;
- if(resultHandler != null)
+ if (resultHandler != null)
{
resultHandler.handleErrorResult(error);
}
if (StaticUtils.DEBUG_LOG.isLoggable(Level.WARNING))
{
- StaticUtils.DEBUG_LOG
- .warning(String
- .format(
- "Connection factory " + factory +
- " is no longer operational: "
- + error.getMessage()));
+ StaticUtils.DEBUG_LOG.warning(String
+ .format("Connection factory " + factory
+ + " is no longer operational: "
+ + error.getMessage()));
}
}
+
+
public void handleResult(AsynchronousConnection result)
{
isOperational = true;
- if(resultHandler != null)
+ if (resultHandler != null)
{
resultHandler.handleResult(result);
}
if (StaticUtils.DEBUG_LOG.isLoggable(Level.WARNING))
{
- StaticUtils.DEBUG_LOG
- .warning(String
- .format(
- "Connection factory " + factory +
- " is now operational"));
+ StaticUtils.DEBUG_LOG.warning(String
+ .format("Connection factory " + factory
+ + " is now operational"));
}
}
};
@@ -104,6 +151,8 @@
}
}
+
+
private class MonitorThread extends Thread
{
private MonitorThread()
@@ -112,21 +161,25 @@
this.setDaemon(true);
}
+
+
public void run()
{
- while(true)
+ while (true)
{
- for(MonitoredConnectionFactory f : factoryList)
+ for (MonitoredConnectionFactory f : factoryList)
{
- if(!f.isOperational && (f.pendingConnectFuture == null ||
- f.pendingConnectFuture.isDone()))
+ if (!f.isOperational
+ && (f.pendingConnectFuture == null || f.pendingConnectFuture
+ .isDone()))
{
if (StaticUtils.DEBUG_LOG.isLoggable(Level.FINEST))
{
- StaticUtils.DEBUG_LOG
- .finest(String.format("Attempting connect on factory " + f));
+ StaticUtils.DEBUG_LOG.finest(String
+ .format("Attempting connect on factory " + f));
}
- f.pendingConnectFuture = f.factory.getAsynchronousConnection(f);
+ f.pendingConnectFuture = f.factory
+ .getAsynchronousConnection(f);
}
}
try
--
Gitblit v1.10.0