From 413e7214ca33034dea989bb4e15e628d2ab9c035 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 5 Mar 2012 12:46:35 +0800 Subject: [PATCH] IDEMPIERE-174 Performance: Use Executions.schedule instead of the Executions.activate and Executions.deactivate pair --- .../webui/util/ServerPushTemplate.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java index 14b8cbc95f..f55b5ad0d3 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/ServerPushTemplate.java @@ -17,6 +17,8 @@ import org.adempiere.exceptions.AdempiereException; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.DesktopUnavailableException; import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; /** * Zk UI update must be done in either UI thread or using server push. This class help to implement @@ -40,30 +42,26 @@ public class ServerPushTemplate { * Execute callback in UI thread * @param callback */ - public void execute(IServerPushCallback callback) { + public void execute(final IServerPushCallback callback) { boolean inUIThread = Executions.getCurrent() != null; - boolean desktopActivated = false; - try { if (!inUIThread) { - //10 minutes timeout - if (Executions.activate(desktop, 10 * 60 * 1000)) { - desktopActivated = true; - } else { - throw new DesktopUnavailableException("Timeout activating desktop."); - } + EventListener task = new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + callback.updateUI(); + } + }; + Executions.schedule(desktop, task, new Event("onExecute")); + } else { + callback.updateUI(); } - callback.updateUI(); } catch (DesktopUnavailableException de) { throw de; } catch (Exception e) { throw new AdempiereException("Failed to update client in server push worker thread.", e); - } finally { - if (!inUIThread && desktopActivated) { - Executions.deactivate(desktop); } } - } /** *