import java.util.Locale;
import java.util.Map;
import java.util.Set;
-import java.util.WeakHashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import com.itmill.toolkit.terminal.VariableOwner;
import com.itmill.toolkit.terminal.Paintable.RepaintRequestEvent;
import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
+import com.itmill.toolkit.tests.util.Log;
import com.itmill.toolkit.ui.Component;
import com.itmill.toolkit.ui.ComponentContainer;
import com.itmill.toolkit.ui.Upload;
private final ArrayList dirtyPaintabletSet = new ArrayList();
- private final WeakHashMap paintableIdMap = new WeakHashMap();
+ private final HashMap paintableIdMap = new HashMap();
- private final WeakHashMap idPaintableMap = new WeakHashMap();
+ private final HashMap idPaintableMap = new HashMap();
private int idSequence = 0;
} catch (SocketException e) {
// Most likely client browser closed socket
System.err
- .println("Warning: SocketException in ApplicationServlet");
+ .println("Warning: SocketException in CommunicationManager."
+ + " Most likely client (browser) closed socket.");
} catch (final Throwable e) {
e.printStackTrace();
// Writes the error report to client
e.printStackTrace(new PrintWriter(err));
err.write("\n</pre></body></html>");
err.close();
+ } finally {
+ synchronized (application) {
+ for (Iterator it = paintableIdMap.keySet().iterator(); it
+ .hasNext();) {
+ Component p = (Component) it.next();
+ if (p.getApplication() == null) {
+
+ idPaintableMap.remove(paintableIdMap.get(p));
+ it.remove();
+ }
+ }
+
+ Log.debug("paintableIdMap.size=" + paintableIdMap.size()
+ + ", idPaintableMap.size=" + idPaintableMap.size());
+ }
}
}
* @param paintable
* @return the paintable Id.
*/
- public synchronized String getPaintableId(Paintable paintable) {
+ public String getPaintableId(Paintable paintable) {
String id = (String) paintableIdMap.get(paintable);
if (id == null) {
return id;
}
- public synchronized boolean hasPaintableId(Paintable paintable) {
+ public boolean hasPaintableId(Paintable paintable) {
return paintableIdMap.containsKey(paintable);
}
* root window for which dirty components is to be fetched
* @return
*/
- public synchronized ArrayList getDirtyComponents(Window w) {
+ public ArrayList getDirtyComponents(Window w) {
final ArrayList resultset = new ArrayList(dirtyPaintabletSet);
// The following algorithm removes any components that would be painted