This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

--Asynchrone Kommunikation mit CallBack

Dokumente für die Entwicklung von und mit JVx.

--Asynchrone Kommunikation mit CallBack

Postby Development@SIB » Tue Sep 29, 2009 4:06 pm



Dieser Artikel ist veraltet - Bitte verwenden Sie unser neues System

https://doc.sibvisions.com





Durch die Server Actions können beliebige Funktionen aus der Business Logik vom Client angesprochen werden. Im Normalfall handelt es sich dabei um Aktionen die nicht sehr Zeitintensiv sind wie z.B. Eingabevalidierungen.

Aus diesem Grund arbeitet die Kommunikation zwischen Client und Server synchron, sprich der Client stellt eine Anfrage an den Server und wartet bis die Antwort vom Server zurückgeliefert wird. Während der Wartezeit wird der Mauscursor in der Applikation als Sanduhr dargestellt, und der Anwender kann keine weiteren Aktionen durchführen.

Wenn z.B ein Bericht erstellt werden soll, der sehr zeitintensive Berechnungen und Datenanalysen durchführt, dann ist eine längere Wartezeit nicht von Vorteil.

Für zeitintensive Aktionen ist eine asynchrone Kommunikation ohne weiteren Aufwand möglich. Das bedeutet aber nicht, daß die komplette Kommunikation asynchron arbeiten muss. Es obligt dem Applikationsentwickler zu entscheiden welche Aktionen asynchron ausgeführt werden sollen.

Die Übertragung der Ausführungsergebnisse wird vollautomatisch durchgeführt. Der Entwickler muss sich daher um keine Besonderheiten kümmern.


Anwendungsbeispiel

Unsere Applikation ermöglicht die Erstellung von Berichten denen Millionen von Datensätzen zugrunde liegen. Diese Datensätze müssen jedoch erst ausgewertet und verdichtet werden. Die Laufzeit für die Erstellung eines Berichtes liegt bei ca. 3 Minuten.

Der Anwender startet einen Bericht mit einem Button (siehe Client Actions)und erhält einen Hinweis wenn der Bericht erstellt wurde. In der Zwischenzeit kann wie gewohnt weitergearbeitet werden.

Für die Lösung benötigen wir im ersten Schritt eine Server Action:

Code: Select all
/**
 * Creates a statistic report.
 *
 * @param pId the master data ID
 * @param pName the report name entered from the user
 */
public String startReport(BigDecimal pId, String pName)
{
    ReportGenerator rgen = new ReportGenerator();

    rgen.createReport(pId);

    return pName;
}


Die Server Action wird mit nun asynchron aufgerufen. Das wird durch die Verwendung eines CallBack listeners erledigt:

Code: Select all
/**
 * Starts the creation of the statistic report.
 *
 * @throws Throwable if it's not possible to start report creation
 */
public void doStartReport() throws Throwable
{
    getConnection().callAction(new ICallBackListener()
                               {
                                    public void callBack(CallBackEvent pEvent)
                                    {
                                       try
                                       {
                                          showInformation(Showcase.this,
                                                          (String)pEvent.getObject());
                                       }
                                       catch (Exception e)
                                       {
                                          ExceptionHandler.raise(e);
                                       }
                                    }
                               },
                               "startReport",
                               bdId,
                               "Report: " + bdId);
}

Sobald der Report erstellt wurde wird der Client darüber informiert. In unserer Lösung wird ein Hinweis angezeigt.
User avatar
Development@SIB
 
Posts: 325
Joined: Mon Sep 28, 2009 1:54 pm

Return to Documentation (DE)