# synchronized mit thread und rückgabe



## Tallan (14. Sep 2009)

Hallo zusammen,

ich stehe vor folgendem Problem.

Ich hab x Clients und einen Server, wenn die Clients sich anmelden sollen sie vom Server eine SessionID bekommen. Um das Problem mit zeitgleichen Logins zu umgehen ist die login() Methode auf dem Server synchrinzied


```
public synchronized void login(String login, String password, String ip) throws RemoteException
	{
		new LoginThread(login, password, ip).start();
	}
```

Jetzt is meine Frage wie übergebe ich dem Client am besten die SessionID?
Geplant hatte ich eigentlich im client etwas in der art


```
String sid = serverinterface.login(...);
```

wobei das durch den Thread wohl nicht geht?
alternativ wäre die möglichkeit im thread einen rmi aufruf auf dem Client zu machen und diesem die Parameter mitzugeben... 
oder für den login keinen thread zu benutzen, was mir allerdings nicht sehr "sauber" wirkt.


----------



## SlaterB (14. Sep 2009)

dass du nicht direkt etwas zurückgeben kannst, liegt am Starten des Threads, 
aber welchen Einfluss hat synchronized bei diesem Problem? ich denke keinen

zum Thread bleiben dir als Möglichkeiten:
1.
die login-Methode wartet solange, bis der LoginThread-fertig ist, z.B. mit Thread.join(),
ob synchronized usw. solange freigegeben werden kann ist ein anderes Thema, am besten nicht gleichzeitig mit RMI testen
2.
die login-Methode gibt direkt irgendeine Unique Number zurück oder einen Namen 
oder der Client hat sich über ein bestimmtes Token/ IP-Adresse/ sonstwas gemeldet,

irgendwie muss eine Zuordung Login-Vorgang zu Client gemerkt werden, 
quasi eine Vor-SessionID, falls die richtige SessionID nicht sofort verfügbar ist,

wenn sich der Client dann später nochmal meldet, kann über die Vor-SessionID die dann vorhandene fertige SessionID bestimmt werden


----------



## dayaftereh (14. Sep 2009)

Hey, ich würde die mal Empfehlen dieses Buch anzulesen Parallele und verteilte Anwendungen in Java und zwar das Kapite über synchronized und das ganze Kapitel über "Verteilte Anwendungen mit Skocket"


----------



## DamienX (14. Sep 2009)

Hi!

Die Frage die sich mir stellt ist warum du ein Problem mit gleichzeitigen logins hast!


----------



## Tallan (14. Sep 2009)

DamienX hat gesagt.:


> Hi!
> 
> Die Frage die sich mir stellt ist warum du ein Problem mit gleichzeitigen logins hast!



weil es z.b möglich ist das sich clients von verschiedenen standpunkte mit den selben logindaten anmelden, wobei nur einer aktiv sein darf und dementsprechend der andere rausgeworfen wird. Zudem wollte ich das ganze in einem thread ablaufen lassen um falls irgendwas bei einem login schiefgeht und die methode länger brauch die anderen nicht warten müssen...
Es geht auch nicht nur um den login selbst sondern auch um weiter methoden die daten über den server aus der db abfragen


----------

