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.ext.util;
00032
00033 import java.net.UnknownHostException;
00034
00035 import org.apache.log4j.Logger;
00036 import org.objectweb.proactive.ProActive;
00037 import org.objectweb.proactive.core.UniqueID;
00038 import org.objectweb.proactive.core.body.BodyMap;
00039 import org.objectweb.proactive.core.body.UniversalBody;
00040 import org.objectweb.proactive.core.node.NodeFactory;
00041 import org.objectweb.proactive.core.util.UrlBuilder;
00042 import org.objectweb.proactive.core.util.log.Loggers;
00043 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00044 import org.objectweb.proactive.ext.locationserver.LocationServer;
00045
00046
00050 public class SimpleLocationServer implements org.objectweb.proactive.RunActive,
00051 LocationServer {
00052 static Logger logger = ProActiveLogger.getLogger(Loggers.MIGRATION);
00053 private BodyMap table;
00054 private String url;
00055
00056 public SimpleLocationServer() {
00057 }
00058
00059 public SimpleLocationServer(String url) {
00060 this.url = normalizeURL(url);
00061 this.table = new BodyMap();
00062 }
00063
00068 public void updateLocation(UniqueID i, UniversalBody s) {
00069
00070 table.updateBody(i, s);
00071 }
00072
00077 public UniversalBody searchObject(UniqueID id) {
00078 return (UniversalBody) table.getBody(id);
00079 }
00080
00085 public void runActivity(org.objectweb.proactive.Body body) {
00086 this.register();
00087 org.objectweb.proactive.Service service = new org.objectweb.proactive.Service(body);
00088 service.fifoServing();
00089 }
00090
00091 protected String normalizeURL(String url) {
00092 String tmp = url;
00093
00094
00095 String temp = null;
00096 try {
00097 tmp = UrlBuilder.checkUrl(url);
00098 } catch (UnknownHostException e) {
00099 e.printStackTrace();
00100 }
00101 return tmp;
00102 }
00103
00104 protected void register() {
00105 try {
00106 logger.info("Attempt at binding : " + url);
00107 ProActive.register(ProActive.getStubOnThis(), url);
00108 logger.info("Location Server bound in registry : " + url);
00109 } catch (Exception e) {
00110 logger.fatal("Cannot bind in registry - aborting " + url);
00111 e.printStackTrace();
00112 return;
00113 }
00114 }
00115
00116 public static void main(String[] args) {
00117 if (args.length < 1) {
00118 logger.error(
00119 "usage: java org.objectweb.proactive.ext.util.SimpleLocationServer <server url> [node]");
00120 System.exit(-1);
00121 }
00122 Object[] arg = new Object[1];
00123 arg[0] = args[0];
00124 SimpleLocationServer server = null;
00125 try {
00126 if (args.length == 2) {
00127 server = (SimpleLocationServer) ProActive.newActive("org.objectweb.proactive.ext.util.SimpleLocationServer",
00128 arg, NodeFactory.getNode(args[1]));
00129 } else {
00130 server = (SimpleLocationServer) ProActive.newActive("org.objectweb.proactive.ext.util.SimpleLocationServer",
00131 arg);
00132 }
00133 } catch (Exception e) {
00134 e.printStackTrace();
00135 }
00136 }
00137
00138 public void updateLocation(UniqueID i, UniversalBody s, int version) {
00139 this.updateLocation(i,s,0);
00140
00141 }
00142 }