Это действительно просто, но я не могу понять, почему он сбрасывает дату создания. Я использую простой кэш истечения срока действия на объекте. Если срок его действия истек, я создам новый объект. Если это не так, просто используйте тот, который существует. Однако каждый раз, когда я проверяю дату создания объекта, это текущая дата.
public class MyObjectImpl implements MyObjectInterface {
private static final long serialVersionUID = -3542728718515350246L; // auto generated from Eclipse...
public MyObjectImpl() {
this.creationDate = new Date().getTime();
}
public boolean hasExpired(BigInteger millesecondsToExpiration) {
if (millesecondsToExpiration == null) {
millesecondsToExpiration = new BigInteger("2592000000"); // 30 Days
}
if (getCreationDate() + millesecondsToExpiration.longValue() < new Date().getTime()) {
return true;
} else {
return false;
}
}
private Long creationDate;
public Long getCreationDate() {
return this.creationDate;
}
}
Вот как я это называю:
MyObjectInterface myObject = (MyObjectInterface)session.getAttribute("MY_OBJECT");
if (myObject == null || (myObject != null && myObject.hasExpired(null))) {
session.setAttribute("MY_OBJECT", new myObjectImpl());
}