IDEMPIERE-2420 issue Form too many keys when has long process. Always suspend resource/request for next schedule/activate call.

This commit is contained in:
Heng Sin Low 2015-03-06 22:33:46 +08:00
parent 2d8fd0cfb2
commit 816445c488
1 changed files with 5 additions and 31 deletions

View File

@ -20,11 +20,9 @@ the License.
package fi.jawsy.jawwa.zk.atmosphere; package fi.jawsy.jawwa.zk.atmosphere;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import org.atmosphere.cpr.AtmosphereResource; import org.atmosphere.cpr.AtmosphereResource;
import org.compiere.Adempiere;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.zkoss.lang.Library; import org.zkoss.lang.Library;
@ -218,35 +216,11 @@ public class AtmosphereServerPush implements ServerPush {
return; return;
} }
boolean suspend = !desktopCtrl.scheduledServerPush();
if (suspend) {
if (!resource.isSuspended()) { if (!resource.isSuspended()) {
resource.suspend(-1, false); resource.suspend(-1, false);
} }
this.resource.set(resource); this.resource.set(resource);
//check again, just in case task is schedule between the resource.suspend and resource.set call
if (desktopCtrl.scheduledServerPush()) {
scheduleCommit();
}
}
}
private void scheduleCommit() {
Adempiere.getThreadPoolExecutor().schedule(new Runnable() {
@Override
public void run() {
DesktopCtrl desktopCtrl = (DesktopCtrl) AtmosphereServerPush.this.desktop.get();
if (desktopCtrl == null) return;
if (desktopCtrl.scheduledServerPush()) {
try {
commitResponse();
} catch (IOException e) {
log.error(e.getLocalizedMessage(), e);
}
}
}
}, 100, TimeUnit.MILLISECONDS);
} }
private static class ThreadInfo { private static class ThreadInfo {