00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030  
00031 package org.objectweb.proactive.loadbalancing;
00032 
00033 import java.util.Iterator;
00034 import java.util.ArrayList;
00035 
00036 import org.objectweb.proactive.ActiveObjectCreationException;
00037 import org.objectweb.proactive.ProActive;
00038 import org.objectweb.proactive.core.node.Node;
00039 import org.objectweb.proactive.core.node.NodeException;
00040 import org.objectweb.proactive.loadbalancing.metrics.MetricFactory;
00041 
00042 public class LoadBalancing {
00043         private static ArrayList<LoadBalancer> loadBalancers = new ArrayList<LoadBalancer>();
00044         private static MetricFactory mf;
00045         private static boolean activated = false;
00046         private static InformationRecover ir;
00047         
00048         public static void activateOn(Node[] nodes, MetricFactory mf) {
00049                 LoadBalancing.mf = mf;
00050                 activated = true;
00051                 LoadBalancer lb = null;
00052 
00053                 try {
00054                         ir = (InformationRecover) ProActive.newActive(
00055                                         InformationRecover.class.getName(), null);
00056 
00057                         for (int i = 0; i < nodes.length; i++) {
00058                                 lb = (LoadBalancer) ProActive.newActive(LoadBalancer.class
00059                                                 .getName(), new Object[]{mf}, nodes[i]);
00060                                 loadBalancers.add(lb);
00061 
00062                                 lb = null;
00063                         }
00064 
00065                         Iterator<LoadBalancer> it = loadBalancers.iterator();
00066                         while (it.hasNext()) {
00067                                 lb = it.next();
00068                                 lb.init(loadBalancers,ir);
00069                                 lb = null;
00070 
00071                         }
00072                 } 
00073                 catch (ActiveObjectCreationException e)         {e.printStackTrace();}
00074                 catch (NodeException e)                                         {e.printStackTrace();}
00075 
00076         }
00077         
00078         public static void activate(MetricFactory mf) {
00079                 LoadBalancing.mf = mf;
00080                 activated = true;
00081 
00082                 try {
00083                         ir = (InformationRecover) ProActive.newActive(
00084                                         InformationRecover.class.getName(), null);
00085 
00086                         
00087                 } 
00088                 catch (ActiveObjectCreationException e)         {e.printStackTrace();}
00089                 catch (NodeException e)                                         {e.printStackTrace();}
00090 
00091         }
00092         
00093         public static void kill() {
00094                 activated = false;
00095 
00096                 ProActive.terminateActiveObject(ir,true);
00097                 LoadBalancer lb;
00098                 Iterator<LoadBalancer> it = loadBalancers.iterator();
00099                 while (it.hasNext()) {
00100                         lb = it.next();
00101                         ProActive.terminateActiveObject(lb,true);
00102                 }
00103         }
00104         
00105         public static void addNode(Node node){
00106                 if(! activated)
00107                         return; 
00108                 
00109                 try {
00110                         LoadBalancer lb = (LoadBalancer) ProActive.newActive(LoadBalancer.class
00111                                         .getName(), new Object[]{mf}, node);
00112                         loadBalancers.add(lb);
00113                         lb.init(loadBalancers,ir);
00114                         lb.notifyLoadBalancers();
00115                         
00116                 }
00117                 catch (ActiveObjectCreationException e)         {e.printStackTrace();}
00118                 catch (NodeException e)                                         {e.printStackTrace();}
00119                 
00120         }
00121 }