Client/Server Kommunikation - Warten auf Serverantwort

Kiloui

Mitglied
Hi,

ich habe eine Webanwendung. Die Clients kommunizieren über einen MQServer (Apache ActiveMQ) mit dem Server.

Nehmen wir als Beispiel mal den Login.

Der Client schickt Benutzername/Passwort an den Server. Und wartet nur auf eine Antwort (true bzw. false) ob der Login ok ist.

Es läuft ein Thread der einen MessageListener implementiert und über die Methode onMessage(Message message) verfügt. Angenommen der MessageListener wird im Fall einer Serverantwort aufgerufen und erhält den String true bzw false....

Wie kann ich den Client so lange "schlafen lassen" bis der Thread eine Antwort vom Server erhält ? d.h. bis der MessageListener aufgerufen wird ?
 
Hey, danke für die Antwort. Ich habe mir jetzt mal ein Minimalbeispiel mit wait/notify zusammengebastelt. Macht das so sinn ?


Code:
public class main {
	public static void main(String[] args){
		 PermissionChecker pms = new PermissionChecker();
		 
                 //prüfen ob Login ok...
		 System.out.println("Der Login ist ok: " + pms.initCheckingPermissions());
		 System.out.println("Weiter gehts in main...");
	}
}

Code:
public class PermissionChecker {
	public boolean userHasPermission = false;

	public synchronized boolean initCheckingPermissions() {  
		try {
			 PermissionCheckerThread pmsThread = new PermissionCheckerThread(this);  
			 pmsThread.start(); 
			 System.out.println("Der aufrufende Thread (main) legt sich schlafen...");
			 wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}  
		
		return userHasPermission;
	}

	public synchronized void setUserHasPermission(boolean serverResponse){  
			userHasPermission = serverResponse;
			System.out.println("Login ok!");
			System.out.println("Benachrichtige main --> wecke main auf");
			notifyAll();
	} 
}

Code:
import java.util.concurrent.TimeUnit;

public class PermissionCheckerThread extends Thread {  
	PermissionChecker pms;
	
	public PermissionCheckerThread(PermissionChecker pms) {  
		this.pms = pms;
	}  

	public void run() { 
		try {
			System.out.println("Beim Server anfragen ob Login ok...");
			TimeUnit.SECONDS.sleep( 3 ); //warte auf eine Antwort vom Server
			boolean serverResponse = true;
			pms.setUserHasPermission(serverResponse);
		} catch (InterruptedException e) {
			e.printStackTrace();
		} 
	}       
}
 

Neue Beiträge

Zurück