long sessionTimeout = this.connectQos.getSessionQos().getSessionTimeout();
final long MIN = 2000L; // Sessions which live less than 2 seconds are not supported
if (sessionTimeout >= MIN) {
long gap = (sessionTimeout < 60*1000L) ? sessionTimeout/2 : sessionTimeout-30*1000L;
final long refreshTimeout = sessionTimeout - gap;
final Timeout timeout = this.glob.getPingTimer();
this.sessionRefreshTimeoutHandle = timeout.addTimeoutListener(new I_Timeout() {
public void timeout(Object userData) {
if (isAlive()) {
if (log.isLoggable(Level.FINE)) log.fine(getLogId()+"Refreshing session to not expire");
try {
refreshSession();
}
catch (XmlBlasterException e) {
log.warning(getLogId()+"Can't refresh the login session '" + getId() + "': " + e.toString());
}
}
else {
if (log.isLoggable(Level.FINE)) log.fine(getLogId()+"Can't refresh session as we have no connection");
}
try {
sessionRefreshTimeoutHandle = timeout.addOrRefreshTimeoutListener(this, refreshTimeout, null, sessionRefreshTimeoutHandle) ;
}
catch (XmlBlasterException e) {
log.warning(getLogId()+"Can't refresh the login session '" + getId() + "': " + e.toString());
}
}