Ceci est vraiment basique, mais je n'arrive pas à comprendre pourquoi il ne cesse de réinitialiser la date de création. J'utilise un cache d'expiration simple sur l'objet. Si elle a expiré, je vais créer un nouvel objet. Si ce n'est pas le cas, utilisez simplement celui qui existe. Cependant, chaque fois que je vais vérifier la date de création sur l'objet, c'est la date actuelle.Comment puis-je faire en sorte que mon objet Java cesse de réinitialiser sa date de création à la date actuelle?
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;
}
}
Voici comment je l'appelle:
MyObjectInterface myObject = (MyObjectInterface)session.getAttribute("MY_OBJECT");
if (myObject == null || (myObject != null && myObject.hasExpired(null))) {
session.setAttribute("MY_OBJECT", new myObjectImpl());
}
Veuillez indiquer le code qui illustre la «mauvaise» date. Comment obtenez-vous comparer l'instance de MyObjectImpl? –
Vous pouvez voir le code qui illustre l'appel maintenant. Merci. –
Pourquoi utilisez-vous un BigInteger quand il doit toujours être converti en 'long' pour la comparaison? Il laisse la possibilité de résultats inattendus si une valeur plus grande que longue est utilisée comme paramètre pour votre méthode. –