# RMI-Objekt zwischen zwei RMI-Servern kopieren



## LaLaLa (7. Feb 2008)

Hallo,

ich möchte ein RMI-Objekt, das Daten enthält (ein "private int"), auf zwei RMI-Servern abgleichen. Dazu will ich das Objekt bei jeder Änderung serialisieren und an den anderen Server übertragen.

Irgendwo im "Hintergrund" soll der Server also das Objekt überwachen und bei Änderungen serialisiert an den Backupserver senden. Alternativ könnte dies natürlich auf einen speziellen Trigger hin geschehen. (Sowas wie die OnChange-Message in Visual C++/MFC)

Ich möchte den Code und das Interface meines Remoteobjekts - ein Counter - möglichst nicht anfassen, damit dieser einfach austauschbar bleibt.

Kann mir jemand einen Tip geben, in welcher Richtung ich denken/suchen muss? (Datenkonsitenz, etc soll jetzt noch nicht betrachtet werden. synchronized oder nicht ist auch erstmal egal, ich brauche nur eine Verbindung vom "Server Main" zu den RMI-Objekten)

Hier noch die Codesnippets (ohne Exceptionhandling)

Der Server:

```
public class Server {

	public static void main(String[] args) {
			CounterImpl myCounter = new CounterImpl();
			Naming.rebind("Counter", myCounter);
			System.out.println("counter server ready");
                   // überwache counterobjekte hier, aber wie

	}
}
```

Das RMI-Objekt (interface entsprechend)

```
public class CounterImpl extends UnicastRemoteObject implements Counter {

	private int counter;
	
	public CounterImpl() throws RemoteException{
		counter = 0;
	}

	public int increment() throws RemoteException {
		counter++;
		return counter;
	}

	public int reset() throws RemoteException {
		counter = 0;
		return counter;
	}
}
```


----------



## tuxedo (7. Feb 2008)

Kannst du mal erklären was du damit bezwecken willst? Vielleicht fällt mir dann was dazu ein.

Willst du damit den Server ausfallsicher machen und ggf. on-the-fly auf einen ersatzserver umschalten der dann im gleichen KOntext weiterläuft wie Server 1 aufgehört hat?

- Alex


----------



## Guest (7. Feb 2008)

Hi Alex,

ja, es ist dafür gedacht die Ausfallsicherheit zu erhöhen. Der Gedanke ist, das alle Server den selben stand eines Objektes haben und füreinander einspringen können. Erste Stufe ist ersteinmal ein Master, der sich selbst auf n Server kopiert. Mit ausgeklügelteren Mechnaismen zur Datenkonsistenz kann man es dann auch für Loadbalancing einsetzen.

Zum Thema:

Ich versuche gerade über Clone() bzw. ein in einen ByteArray serialsiertes RMI-Object eine Kopie auf Server 2 zu erzeugen. Ich denke das wird klappen, aber ich brauche immer noch einen Trigger.

Ideen?


----------

