Page 1 sur 1

Java - Savoir si un objet est recyclé ?

MessagePublié: 17 Mars 2010 à 12:45
par Aquanotes
Hello,

En java, existe t'il un moyen simple et efficace de savoir si un objet notes est recyclé (si j'ai fait un xxx.recycle()) ?
C'est surement ce que doit faire la méthode lotus.domino.local.NotesBase.CheckObject

Merci,

MessagePublié: 17 Mars 2010 à 14:39
par amahi
Le moyen le plus sur c'est de "decorer" tes objets, comme ça quand tu les recycles, tu les initialise a null et c'est facile a detecter par la suite.
Exemple tu creer une classe DatabaseWrapper:
Code : Tout sélectionner
public class DatabaseWrapper implements Database {
     private final Database _db
     public DatabaseWrapper(final Database db) {
         _db = db;
     }

    public void recycle() throws NotesException {
         _db.recycle();
         _db = null;
    }

}


Tu n'utilise plus de Database mais directement DatabaseWrapper, etant donner qu'il implemente l'interface Database, pas de soucis de compatibilité. Par contre faut tout te palucher a la pour refactorer les classes Domino

MessagePublié: 17 Mars 2010 à 22:17
par Aquanotes
Salut amahi,

Aujourd'hui je mets déjà mes objets a null après le recycle. Mais si j'ai 2 var. view1 et view2 qui instancie la même vue (par exemple la même vue est utilisé dans différentes classes) le fait de recycler View1 recycle aussi View2.

Mais mettre View1 à null, ne mets pas View2 à null (le test View2==null retourne false). Tu me suis ? et quand je fais ensuite un view2.getDoc... erreur object has benn removed or recycle, un truc du genre. C'est pourquoi je cherche le moyen de tester si l'objet referencé par View2 est tjs là ou recyclé.

Tu crois que "decorer" les objets selon ta méthode permet de solutionner cela.

Je ne suis pas expert java, donc j'ai peu être zappé un truc :p

MessagePublié: 18 Mars 2010 à 08:40
par Michael DELIQUE
Question Stupide de ma part

tu as été poser ta question sur un Forum "Java" ?

MessagePublié: 18 Mars 2010 à 09:32
par amahi
D'experience, quand tu fait du java, pense java. Il faut arreter de coder procedurale et penser objet.
Le simple fait que tu est vue1 = vue2 est un problème de conception.

Dans l'absolue chacune de tes bases a une fonction logique, tu creer une classe qui englobe ta base et qui fait les requetes Domino.
Toi dans ton code tu fait des requetes de type proxy.getMonDocument(parametre)
Dans ton proxy tu fait la requete à la base Notes.

Tu n'as plus qu'un seul et unique accès a ta base notes, chacune de tes vue n'est acceder que a un endroit et quand tu recycle ton proxy, tu fait le menage correctement.

Cela demande beaucoup plus de travail mais le code est beaucoup plus lisible et maintenable au final.

Si ça t'interresse j'ai etendu http://www.puremvc.org/ pour fonctionner avec domino
Tu as une facade, des commandes et des proxys.

Dans la facade tu reference ce que tu peut faire (Sauvegarder document, generer pdf...)
Chaque reference est associé a une commande.
Chaque commande va chercher les proxys dont elle a besoin pour repondre à la requete.
Par contre mon adaptation est tres specifique à mon contexte et si tu veut l'utiliser dans un contexte purement Domino, il doit y avoir du boulot !

Pour répondre à Mickael, dans un forum purement java, d'une part on passe pour des rigolos (ce qui est souvent justifier) et c'est tres dur pour eux de comprendre les principes de domino (gestion documentaire et pas relationnelle).

MessagePublié: 18 Mars 2010 à 10:50
par Aquanotes
Salut,

Intéressant tout cela.

A ce jour j’ai créé un Singleton qui me gère ma db, mon doc profil, une vue souvent utilisée, et qui s’enrichit au fur et à mesure des besoins. Mais ton Proxy me parait bien plus intéressant et si j’ai bien compris va plus loin en les accès à la base, alors que moi je ne fais qu’instancier et retourner les objets Domino.

C’est vrai que de faire comme cela, permet à la fin de faire un singleton.recycle, et derrière tous les objets domino sont recyclés.

Pour PureMvc, si tu as quelques choses à m’envoyer, mon email est dans le profil. Merci à toi.

MessagePublié: 18 Mars 2010 à 11:56
par amahi
On ne peut pas le faire dans l'autre sens? Tu m'envoye ton bout de code et je te dit quoi faire. J'ai quelque clause genre exclusivité et confidentialité qui ne me permette pas de diffuser ce que j ai fait.
Mon mail est sur mon site.