synchron und asynchroner Methodenaufruf

  • Themenstarter Themenstarter koplop
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

koplop

Gast
hallo,

ich habe folgendes Problem:

ich habe eine Methode, die synchron läuft.

Code:
public Antwort (Anfrage anfrage){

// hier soll dann der asynchrone Methodenaufruf erfolgen.. 
return antwort;
}

Nun will ich innerhalb dieser Methode eine asynchrone Kommunikation aufbauen, das heißt ich will eine Methode asführen, die eine Anfrage irgendwohin stellt. Dann soll derjeniege, der die Anfrage bekommt auch die Möglichkeit haben, mir eine Antwort zu senden. Habe ich dann die Antwort, dann kann ich diese wieder in der synchronen Methode zurückgeben.

Synchron ist mir ja eigentlich klar, einfach eine Methode mit Rückgabewert. Wie realisere ich aber eine asynchrone Methode?

Wenn ich eine Methode ohne Rückgabewert wegschicke, woher weiß dann der Empfänger das was angekommen ist?, und
der Sender muss ja auch wiederum warten, oder horchen, um eine Antwort zu empfangen...

Ein Methodenbeispiel wäre sehr gut..
 
eine asynchrone methode macht ihre arbeit in einem extra thread, benachrichtigen kannst du die klasse dann zum beispiel mit einem listener (siehe z.B. ActionListener)
 
???:L

Listener geht doch aber nur mit wat oder swing? ich benütze aber keines von beiden...
 
ich kenne es aber nur von awt/swing. Also wie würde den ein Listener aussehen, der auf den Empfang einer void Methode reagiert?

Kannst du mir da vielleicht ein Beispiel geben?
 
hallo,

gibts da eigentlich auch was auf deutsch?
...also Listener benutzen, die auf Methoden hören, also keine Swing oder AWT Sachen..
 
Na schau dir doch an, wie das in Swing/AWT funktioniert... ein Interface das man implementieren muss, und ein paar Instanzen die in einer Liste gesammelt werden...

Code:
// Listener definieren
public interface Listener{
  public void bum();
}

// Listener implementieren
public class Irgendwo implements Listener{
  public void bum(){ ... }
}

public class Observed{
  private List<Listener> list = new ArrayList<Listener>();

  // Listener hinzufügen
  public void add( Listener x ){
    list.add( x );
  }

  // Listeners informieren, die Methode muss man halt vor irgendwoher aufrufen
  protected void fireEvent(){
    for( Listener x : list )
      x.bum();
  }
}
 
Statt was eigenes zu schreiben, gibts auch eine fertige Lösung in der Java API mittels java.util.Observer und java.util.Observable.
 
ja danke, ich werde es mal versuchen. Ich muss dazu sagen, das ich das benützen möchte, um einen Webservice asynchron aufzurufen. Weiß aber nicht ob dies dann so geht, vielleicht benötigt man da noch speziellere Sachen?

aber trotzdem erstmal gute Antworten.
:toll:
 
hallo,

also das würde mich nun auch interessieren, ob man die Observable Geschichte so übernehmen kann, und in Webservices übertragen??

kennt sich da jemand aus?
 
Hm, da gibts doch sicher spezielle J2EE Lösungen, um Webservices asynchron aufzurufen!? Hab das zumindest mal mit .NET gemacht und da gibts auf jeden Fall ne einfache fertige Lösung, um asynchron aufzurufen. Würde mich echt wundern, wenn man das in Java so proprietär mit Threads lösen müsste. 😉
 
byto hat gesagt.:
Hm, da gibts doch sicher spezielle J2EE Lösungen, um Webservices asynchron aufzurufen!? Hab das zumindest mal mit .NET gemacht und da gibts auf jeden Fall ne einfache fertige Lösung, um asynchron aufzurufen. Würde mich echt wundern, wenn man das in Java so proprietär mit Threads lösen müsste. 😉

ja die Java lösung würde mich natürlich auch intereseiren, aber wie sieht den die .NET Lösung aus? Also was brauch ich da alles? Mit C# hab ich mal was gemacht, ist aber schon länger her...
 
Du brauchst das .NET Framework dafür. Frag mich aber nicht nach Details, das ist einfach zu lange her und die Sourcen finde ich jetzt auch nicht mehr. Der Code war zumindest in C# geschrieben. Aber das ist ja prinzipiell wurscht, welche .NET Sprache Du da verwendest.
 
ja dann muss ich es wohl doch versuchen in Java zu machen. Aber da hab ich gleich mal nochne frage:
ich habe einen TomcatServer und Axis, und eclipse wtp, also ein ganz normalen Webservice bekomme ich schon hin. Jetzt habe ich aber gelesen, das man mit JMS asynchrone Nachrichten verschicken kann. Kann ich den JMS in meiner Umgebung benutzen? oder brauch da unbedingt einen Applikationsserver?
 
ja heißt das in Tomcat ist JMS enthalten? weil ich dachte Tomcat ist kein Aplikationsserver..
oder brauche ich unbedingt einen Applikationsserver? wenn ja was ist den der einfachste Weg einen zu instlalieren, um dann ein einfaches Beispiel mit einem Webservice zu erstellen?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben