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.mixedlocation;
00032
00033 import org.objectweb.proactive.core.body.UniversalBody;
00034 import org.objectweb.proactive.core.body.ft.protocols.FTManager;
00035 import org.objectweb.proactive.core.body.future.FutureProxy;
00036 import org.objectweb.proactive.core.mop.MethodCall;
00037 import org.objectweb.proactive.core.mop.StubObject;
00038 import org.objectweb.proactive.ext.locationserver.LocationServer;
00039 import org.objectweb.proactive.ext.locationserver.TimedRequestWithLocationServer;
00040
00041
00042 public class TimedRequestWithMixedLocation
00043 extends TimedRequestWithLocationServer {
00044 private static final int MAX_TRIES = 30;
00045 private static int counter = 0;
00046 private int tries;
00047 transient protected LocationServer server;
00048 protected long startTime;
00049
00050 public TimedRequestWithMixedLocation(MethodCall methodCall,
00051 UniversalBody sender, boolean isOneWay, long nextSequenceID,
00052 LocationServer server) {
00053 super(methodCall, sender, isOneWay, nextSequenceID, server);
00054 }
00055
00056 protected int sendRequest(UniversalBody destinationBody)
00057 throws java.io.IOException {
00058 System.out.println("RequestWithMixedLocation: sending to universal " +
00059 counter);
00060 int ftres = FTManager.NON_FT;
00061 try {
00062 ftres = destinationBody.receiveRequest(this);
00063 } catch (Exception e) {
00064
00065 this.backupSolution(destinationBody);
00066 }
00067 return ftres;
00068 }
00069
00073 protected void backupSolution(UniversalBody destinationBody)
00074 throws java.io.IOException {
00075 boolean ok = false;
00076 tries = 0;
00077 System.out.println(
00078 "RequestWithMixedLocationr: backupSolution() contacting server " +
00079 server);
00080 System.out.println(
00081 "RequestWithMixedLocation.backupSolution() : looking for " +
00082 destinationBody);
00083
00084 while (!ok && (tries < MAX_TRIES)) {
00085 UniversalBody mobile = (UniversalBody) server.searchObject(destinationBody.getID());
00086 System.out.println(
00087 "RequestWithMixedLocation: backupSolution() server has sent an answer");
00088
00089
00090 UniversalBody newDestinationBody = (UniversalBody) ((FutureProxy) ((StubObject) mobile).getProxy()).getResult();
00091
00092
00093
00094
00095 try {
00096
00097 newDestinationBody.receiveRequest(this);
00098
00099
00100 System.out.println(
00101 "RequestWithMixedLocation: backupSolution() updating location");
00102 if (sender != null) {
00103 sender.updateLocation(newDestinationBody.getID(),
00104 newDestinationBody.getRemoteAdapter());
00105 }
00106 ok = true;
00107 } catch (Exception e) {
00108 System.out.println(
00109 "RequestWithMixedLocation: backupSolution() failed");
00110 tries++;
00111 try {
00112 Thread.sleep(500);
00113 } catch (Exception e2) {
00114 e2.printStackTrace();
00115 }
00116 }
00117 }
00118 }
00119 }