The method setImmediate(boolean) has nothing to do with this - it tells whether the client (browser) should send events (like editing a value or changing the selection) to the server as soon as they happen or whether it is ok to wait until there is another event on which the first one can be “piggy-backed.” A non-immediate event might still be sent immediately, this is only a hint for the client.
If you are updating the container in the background, make sure you are doing synchronization or locking correctly - see
this thread . You need a push or pull to get the changes to the client when they happen, but maybe you already have that set up.
For Vaadin 7 locking (replacing synchronization on Vaadin 6 Application instance), see VaadinSession.lock()/unlock() - the class Application that is mentioned in the thread above does not exist anymore.
Even small mistakes in synchronization/locking can lead to occasional strange errors that are very hard to find, so best follow a common pattern very carefully (below for Vaadin 7):
// all this in the background thread inside the main loop or in timer code
data = fetchDataFromDBOrOtherLongOperationNotTouchingUIClasses();
VaadinSession.lock();
try {
updateYourUI(data);
} finally {
VaadinSession.unlock();
}
If you are forcing the table to refresh, you basically guarantee it needs to be redrawn completely. If you only use the addItem(…) etc. methods of the container and let the container handle notifying the table, some containers might be able to send more specific updates to the Table saying that only these rows have been added, though at least in most cases a full refresh of the contents is performed.