# Blockierende RMI Methode



## SebiB90 (1. Jul 2008)

Hi,

ist es möglich eine blockierende RMI Methode zu erstellen?

Ich hab schon folgendes ausprobiert:

```
private Lock lock = new ReentrantLock();
	private Condition condition = lock.newCondition();

	

	private void lock() {
		try {
			lock.lock();
			condition.await();
		} catch (InterruptedException x) {
			x.printStackTrace();
		} finally {
			lock.unlock();
		}
	}

	private void unlock() {
		try {
			lock.lock();
			condition.signal();
		} finally {
			lock.unlock();
		}
	}
```
mit diesen Methoden blockiere ich bzw hebe diese wieder auf.
Wenn ich jetzt die lock() Methode auf dem Server aufrufe, wird der Thread auch gestoppt und wenn der client eine Methode aufruft, die unlock() aufruft, läuft es weiter.
Jetzt will ich aber folgendes: Der Client soll eine Methode aufrufen, die lock() aufruft und somit die Methode blockiert. Und irgendwann ruft dann der Server unlock() auf damit die Methode beendet und der Client weiter läuft. nur dieses klappt nicht, da das Blockieren nur auf dem Server statt findet und der Client normal weiter läuft.

Daher die Fragen: kann man eine Remote Methode erstellen, die den Client blockiert?

Mfg
SebiB90


----------



## SebiB90 (1. Jul 2008)

Ok, hat sich gelöst.
Die Methode sollte auch nen Rückgabe Wert haben -.-
Dann funktioniert es jedenfalls, da gewartet wird bis es ein return gibt.


----------



## SlaterB (2. Jul 2008)

RMI ist genauso synchron wie normale Java-Aufrufe,
und die hängen ja auch nicht vom Rückgabewert ab..

was passiert, wenn am Ende der Operation eine Exception auftritt und der Aufrufer schon längst woanders ist?


----------



## SebiB90 (2. Jul 2008)

joar stimmt schon...
aber wieso hat es dann nicht geklappt =/
mit Rückgabe funktioniert das. Die Methode wird blockiert und der client wartet solange bis es ein Rückgabe Wert gibt.
Beim anderen läuft der einfach weiter durch. So scheint es jedenfalls =/


----------

