Info su Push

Buongiorno,
sto costruendo una webapp con vaadin 8 e ho bisogno di un Push più rapido.
Mi spiego meglio: ho una textarea che si popola grazie ad un evento che proviene da un listener.
Il primo è immediato, però gli altri vengono sempre con ritardo, a meno che l’evento venga dopo circa 10 secondi.
Sembra che, dopo un push, ci sia un attesa e dopo tale attesa il push diventa pronto.
Mi chiedevo se fosse possibile avere un push immediato e non aspettare tempo per vedere stampato l’evento su textarea.

Ciao Luca,
potresti postare il codice coinvolto in modo da inquadrare meglio la situazione?

L’annotazione push è sulla classe MyUI con il modo Manual.

public class CallsUI extends HorizontalLayout implements myListeners {

private TextArea callsTextArea;

public CallsUI() {
	MyListeners.addListener(this);
	textArea = new TextArea();
	this.addComponent(textArea);
}

@Override
public void onNewText(String msg) {
	textArea.setValue(textArea.getValue()+"\n"+msg);
	UI ui = getUI();
	ui.access(new Runnable() {
		@Override
		public void run() {
			ui.push();
		}
	});		
}

}

Se capisco correttamente onNewText è il tuo listener invocato da un processo in background che deve aggiornare la UI.
Se il caso è questo le operazioni di modifica della UI devono stare all’interno di una UI.access e, se @Push è impostato in PushMode.AUTOMATIC (che è il default) la chiamata a ui.push() non ti serve (viene fatto in automatico alla uscita della access).

Prova in questo modo

@Override
public void onNewText(String msg) {
	UI ui = getUI();
	ui.access(new Runnable() {
		@Override
		public void run() {
	        textArea.setValue(textArea.getValue()+"\n"+msg);
		}
	});		
}

HTH
Marco

Ecco, quando non si legge con attenzione :smiley:

Luca Mezzolla:
L’annotazione push è sulla classe MyUI con il modo Manual.

Allora, come giustamente facevi, ci va anche la ui.push()

Ciao Marco,
funziona anche come dici tu.
Il primo testo viene stampato subito, però se mando un altro testo da stampare, viene stampato dopo qualche secondo.
Invece, se aspetto 4-5 secondi e mando un altro testo da stampare, viene stampato subito.
Io ho bisogno di ridurre al minimo questo tempo che vaadin impiega tra un push e l’altro.
Mi sembra che sia così…

Che io sappia non ci dovrebbero essere dei delay tra una push e la seguente; faccio qualche prova e ti aggiorno

Ciao Luca,
ho fatto una prova e messaggi successivi vengono portati in textarea immediatamente, senza alcun delay.

Se ti può essere utile qui trovi il codice con cui ho fatto le prove
https://gist.github.com/mcollovati/69412cd88eefbdebdb86bea45d2e2f1a

Grazie Marco! Sembra interessante…
:slight_smile: