3 import java.rmi.RemoteException;
4 import java.rmi.server.UnicastRemoteObject;
5 import java.util.ArrayList;
6 import java.util.Calendar;
7 import java.util.GregorianCalendar;
10 public class JaceSpawnerServer extends UnicastRemoteObject implements
11 JaceSpawnerInterface {
13 private static final long serialVersionUID = 1L;
16 boolean finished = false;
19 public JaceSpawnerServer() throws RemoteException {
23 public void startProcess(ArrayList<Object> spawnersList) throws RemoteException {
24 JaceSpawner.Instance().startProcess(spawnersList);
27 public Register getRegister(int rank) throws RemoteException {
28 return JaceSpawner.Instance().getRegister(rank);
31 public void killApplication(JaceInterface stub) throws RemoteException {
33 // Node noeud = Register.Instance().getNodeOfStub(stub);
34 // noeud.setAppliName(null);
35 // new ReconnectThread(stub,noeud.getName()).start();
36 // Register.Instance().removeNode(noeud);
39 * if (Register.Instance().getSize() < 1) { long finalTime =
40 * RunningApplication.Instance().getChrono().getValue(); int nb =
41 * RunningApplication.Instance().getNumberOfDisconnections();
42 * System.out.println("Application finished successfully !!!!!!");
43 * System.out.println("Application finished successfully !!!!!!");
44 * System.out.println("Application finished successfully !!!!!!");
45 * System.out.println("Application finished successfully !!!!!!");
46 * System.out.println("Application finished successfully !!!!!!");
47 * System.out.println("Application finished successfully !!!!!!");
48 * System.out.println("Application finished successfully !!!!!!");
49 * System.out.println("Application finished successfully !!!!!!");
50 * System.out.println("Application finished successfully !!!!!!\n");
51 * System.out.println("TOTAL TIME in s : " + (finalTime/1000));
52 * System.out.println("nb of desconnections : " + nb);
54 * //purger l'appli RunningApplication.Instance().purge(); }
58 public long getChronoValue(String appliName) throws RemoteException {
60 if (RunningApplication.Instance().getName().equals(appliName)) {
61 res = RunningApplication.Instance().getChrono().getValue();
62 // System.out.println("temps chrono : " + res + " ms\n");
64 System.err.println("No application of name "+appliName+" on this Spawner !");
69 public void setOver(boolean bool) throws RemoteException {
70 JaceSpawner.Instance().broadcastFinished(bool);
74 public void setFinished(boolean bool) throws RemoteException {
79 public String getName() throws RemoteException {
80 return LocalHost.Instance().getName();
83 public boolean getFinished() throws RemoteException {
87 private class Signaler implements Runnable
91 Signaler( JaceInterface _host, int _rankOfDead )
94 rankOfDead = _rankOfDead ;
100 JaceSpawner.Instance().signalDeadNode( host, rankOfDead ) ;
105 public void signalDeadNode(JaceInterface host, int rankOfDead )
106 throws RemoteException {
107 System.out.println( "SignalDeadNode of rank " + rankOfDead ) ;
109 new Thread( new Signaler( host, rankOfDead ) ).start() ;
110 // JaceSpawner.Instance().signalDeadNode( host, rankOfDead ) ;
113 // heartBeat that detects if a Spawner is dead or alive
114 public void beating() throws RemoteException {
115 ScanThreadSpawner.Instance().setAliveTime();
117 // System.out.println("spawner is pinging me");
120 public synchronized void replaceBy(JaceSpawnerInterface oldStub,
121 JaceSpawnerInterface stub) throws RemoteException {
122 Calendar cal = new GregorianCalendar();
123 System.out.println("at time=" + cal.get(Calendar.MINUTE) + ":"
124 + cal.get(Calendar.SECOND));
125 System.out.println("replacing a dead spawner by another");
126 JaceSpawner.Instance().replaceBy(oldStub, stub);
127 RunningApplication.Instance().incrementNumberOfSpawnerDisconnections();
130 public void updateHeart(JaceSpawnerInterface stub) throws RemoteException {
131 HeartBeatSpawner.Instance().setServer(stub);
134 public boolean ping() throws RemoteException {
138 public synchronized void replaceDeamonBy(Node oldNode, Node node, int rank)
139 throws RemoteException {
140 Calendar cal = new GregorianCalendar();
141 System.out.println("at time=" + cal.get(Calendar.MINUTE) + ":"
142 + cal.get(Calendar.SECOND));
143 if (Register.Instance().removeNodeOfName(oldNode.getName()))
144 System.out.println("Node " + oldNode.getName() + " of rank " + rank
145 + " has been removed");
147 System.out.println("Node " + oldNode.getName() + " of rank " + rank
148 + " hasn't been removed");
152 Register.Instance().addNode(node);
154 TaskId myTaskId = Register.Instance().getListeOfTasks()
155 .getTaskIdOfHostStub(oldNode.getStub());
157 myTaskId.setHostIP(node.getIP());
159 myTaskId.setHostName(node.getName());
160 myTaskId.setHostStub(node.getStub());
161 // Register.Instance().setVersion(Register.Instance().getVersion()+1);
162 RunningApplication.Instance().incrementNumberOfDisconnections();
163 System.out.println("Replacing node: " + oldNode.getName() + " with: "
165 // Register.Instance().getListeOfTasks().viewAll();
167 System.err.println( "ReplaceDaemon: The new node is null!" ) ;
172 // public void setIdAlgo( String _s ) throws RemoteException
174 // JaceSpawner.Instance().setIdAlgo( _s ) ;