The motivation behind this is as follows:
PushRenderer.addCurrentSession() needs to ensure that all current PUSHIDs for the session are included in the push group for the session. If ICEfaces does not receive a dispose-window message, however, it may maintain unused entries in this list.
It should be possible for addCurrentSession() to simply flag the session as being push enabled with the list of groups that the session was added to. Then, when a new view is initialized, the PUSHID for that view would be added to each of these groups. Cleanup of these PUSHIDs would be automatic. Any windows opened prior to addCurrentSession() would not support push anyway, since they would not have called the JavaScript push initialization.
Similar complaint here:
http://stackoverflow.com/questions/2797231/why-does-postconstruct-callback-fire-every-time-even-though-bean-is-viewscoped
In auction, logging shows that the @PostConstruct on the @ViewScoped AuctionBean is invoked every time the page is interacted with. The recommendation is to call addCurrentSession() from a @SessionScoped bean.