Pseudo-Archive Java :
Accueil -|- Visuel -|- Logistique -|- Applications réparties
La pseudo-archive Java est un service proposé par la SARL diaam informatique, et il est hébergé par la Sogid.
diaam informatique
Date sent:      	Thu, 12 Apr 2001 14:34:59 +0200
From:           	Sebastien Cesbron <scesbron@ifrance.com>
To:             	java@u-strasbg.fr
Subject:        	Singleton static
Send reply to:  	java@u-strasbg.fr

Bonjour,

J'ai un singleton qui est implémenté comme une classe dont toutes les
méthodes sont statiques. Pour l'initialisation, j'utilise le bloc "static
{ }" et je me demandais s'il y avait un moyen de savoir quand cette classe
sera supprimée de la mémoire ?

Seb

__________________________________________________________________________
____ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif


     

Date sent:      	Thu, 12 Apr 2001 14:38:54 +0200
From:           	Jean-Baptiste BRIAUD <jean-baptiste.briaud@solsoft.fr>
Organization:   	SolSoft
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

Salut,

Je ne crois pas que les classes soient supprimées de la mémoire.

Mais si quelqu'un sait comment faire, je suis prenneur.
Se serait l'inverse d'un Class.forName(String s);

A+

Sebastien Cesbron wrote:
> 
> Bonjour,
> 
> J'ai un singleton qui est implémenté comme une classe dont toutes les
> méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> "static { }" et je me demandais s'il y avait un moyen de savoir quand
> cette classe sera supprimée de la mémoire ?
> 
> Seb
> 
> ________________________________________________________________________
> ______ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
> emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> http://www.ifrance.com/_reloc/email.emailif

-- 
_______________________________________________________
Jean-Baptiste BRIAUD                    Solsoft
  software engineer              http://www.solsoft.fr

Solsoft SA  130 rue Victor Hugo  92300 Levallois-Perret
    "Policy Management for eBusiness Security"

     

Date sent:      	Thu, 12 Apr 2001 15:08:14 +0200
From:           	Sebastien Cesbron <scesbron@ifrance.com>
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

Il y a forcément, à un moment donné (lorsque la VM s'arrête au plus
tard) libération de la mémoire qui avait été allouée pour mettre le code
associé à la classe. Par contre, cet évènement ne déclenche peut être
aucune méthode.

Seb

> 
> Salut,
> 
> Je ne crois pas que les classes soient supprimées de la mémoire.
> 
> Mais si quelqu'un sait comment faire, je suis prenneur.
> Se serait l'inverse d'un Class.forName(String s);
> 
> A+
> 
> Sebastien Cesbron wrote:
> >
> > Bonjour,
> >
> > J'ai un singleton qui est implémenté comme une classe dont toutes les
> > méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> > "static { }" et je me demandais s'il y avait un moyen de savoir quand
> > cette classe sera supprimée de la mémoire ?
> >
> > Seb
> >
> > ______________________________________________________________________
> > ________ ifrance.com, l'email gratuit le plus complet de l'Internet !
> > vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> > http://www.ifrance.com/_reloc/email.emailif
> 
> --
> _______________________________________________________
> Jean-Baptiste BRIAUD                    Solsoft
>   software engineer              http://www.solsoft.fr
> 
> Solsoft SA  130 rue Victor Hugo  92300 Levallois-Perret
>     "Policy Management for eBusiness Security"

__________________________________________________________________________
____ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif

     

Date sent:      	Thu, 12 Apr 2001 15:21:31 +0200
From:           	Cyriaque Dupoirieux <cyriaque.dupoirieux@pcotech.fr>
Organization:   	PCO Technologies
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr


Les classes statiques sont allouée dès qu'un accès à un attribut ou à une
méthode a lieu. Elles sont libérées par le garbage s'il c'est possible.
(et c'est possible lorsque plus aucune classes instanciée ne s'en sert...)
Vous pouvez constater ce comportement en mettant une trace dans le bloc
statique de la classe. L'affichage de la trace à lieu la première fois que
l'on accède à la classe statique, puis parfois, de nouveau en cours
d'exécution...

Si vous vouler forcer le garbage collector ce doit être quelque chose
comme System.gc()

Cyriaque,


Sebastien Cesbron a écrit :

> Bonjour,
>
> J'ai un singleton qui est implémenté comme une classe dont toutes les
> méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> "static { }" et je me demandais s'il y avait un moyen de savoir quand
> cette classe sera supprimée de la mémoire ?
>
> Seb
>
> ________________________________________________________________________
> ______ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
> emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> http://www.ifrance.com/_reloc/email.emailif

     

Date sent:      	Thu, 12 Apr 2001 15:39:57 +0200
From:           	Jean-Baptiste BRIAUD <jean-baptiste.briaud@solsoft.fr>
Organization:   	SolSoft
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

Le garbage s'occupe de liberer les classes ?
Je croyais qu'il ne s'occupait que des instances ...

Le fait que le bloc statique s'execute plusieurs fois ne
prouve rien. Il pourrait y avoir un mécanisme d'initialisation
de la classe qui se joue plusieurs fois, mais la classe reste en
mémoire.

Et existerait-il un moyen de tester si une classe est toujours en
mémoire ?
Sinon, si j'accède a un attribut statique pour le savoir,
ca (re)charge la classe.

Cyriaque Dupoirieux wrote:
> 
> Les classes statiques sont allouée dès qu'un accès à un attribut ou à
> une méthode a lieu. Elles sont libérées par le garbage s'il c'est
> possible. (et c'est possible lorsque plus aucune classes instanciée ne
> s'en sert...) Vous pouvez constater ce comportement en mettant une trace
> dans le bloc statique de la classe. L'affichage de la trace à lieu la
> première fois que l'on accède à la classe statique, puis parfois, de
> nouveau en cours d'exécution...
> 
> Si vous vouler forcer le garbage collector ce doit être quelque chose
> comme System.gc()
> 
> Cyriaque,
> 
> Sebastien Cesbron a écrit :
> 
> > Bonjour,
> >
> > J'ai un singleton qui est implémenté comme une classe dont toutes les
> > méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> > "static { }" et je me demandais s'il y avait un moyen de savoir quand
> > cette classe sera supprimée de la mémoire ?
> >
> > Seb
> >
> > ______________________________________________________________________
> > ________ ifrance.com, l'email gratuit le plus complet de l'Internet !
> > vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> > http://www.ifrance.com/_reloc/email.emailif

-- 
_______________________________________________________
Jean-Baptiste BRIAUD                    Solsoft
  software engineer              http://www.solsoft.fr

Solsoft SA  130 rue Victor Hugo  92300 Levallois-Perret
    "Policy Management for eBusiness Security"

     

Date sent:      	Thu, 12 Apr 2001 15:44:08 +0200
From:           	Sebastien Cesbron <scesbron@ifrance.com>
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

Tout à fait d'accord au niveau de l'initialisation.
Le problème c'est que je n'arrive pas à trouver de méthode équivalente à
static{} pour savoir quand la mémoire allouée pour la classe est libérée
et je voulais savoir s'il y avait un moyen d'être informé de cet
évènement.

Seb

> 
> Les classes statiques sont allouée dès qu'un accès à un attribut ou à
> une méthode a lieu. Elles sont libérées par le garbage s'il c'est
> possible. (et c'est possible lorsque plus aucune classes instanciée ne
> s'en sert...) Vous pouvez constater ce comportement en mettant une trace
> dans le bloc statique de la classe. L'affichage de la trace à lieu la
> première fois que l'on accède à la classe statique, puis parfois, de
> nouveau en cours d'exécution...
> 
> Si vous vouler forcer le garbage collector ce doit être quelque chose
> comme System.gc()
> 
> Cyriaque,
> 
> Sebastien Cesbron a écrit :
> 
> > Bonjour,
> >
> > J'ai un singleton qui est implémenté comme une classe dont toutes les
> > méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> > "static { }" et je me demandais s'il y avait un moyen de savoir quand
> > cette classe sera supprimée de la mémoire ?
> >
> > Seb
> >
> > ______________________________________________________________________
> > ________ ifrance.com, l'email gratuit le plus complet de l'Internet !
> > vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> > http://www.ifrance.com/_reloc/email.emailif

__________________________________________________________________________
____ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif


     

To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Date sent:      	Thu, 12 Apr 2001 15:44:05 +0200 (MEST)
From:           	Nicolas Delsaux <nicolas.delsaux@free.fr>
Send reply to:  	java@u-strasbg.fr

En réponse à Jean-Baptiste BRIAUD <jean-baptiste.briaud@solsoft.fr>:

> Salut,
> 
> Je ne crois pas que les classes soient supprimées de la mémoire.

Non, elles ne le sont jamais, et c'est pour ça qu'il faut temporairement
redémarrer son PC, pour ne pas qu'il grossisse jusqu'à déborder de dessous
le bureau ;)

> 
> Mais si quelqu'un sait comment faire, je suis prenneur.
> Se serait l'inverse d'un Class.forName(String s);

Pour ton information, els classes Java ne sont pas désallouées à la main,
comme en C++, mais gérées par un outil qui fait ce travail à la palce du
développeur : le garbage collector (ramasse-miettes en vieil françois).
Celui-ci tourne dans son thread et vérifie périodiquement quelles sont les
références qui pointent vers un objet particulier (et donc également vers
les objets Class). Lorsqu'un objet n'est plus référencé nulle part, sauf
par le GC, celui-ci commence à penser à le détruire en le rendant fantôme,
il n'est alors pluis accessible, mais toujours vivant. Après quoi il est
finallement tué. A la lecture de ce petit exposé, tu te rends
immédiatement compte qu'une implémentation de cette méthode inverse de
Class.forName serait tout sauf facile, et cohérente avec l'architecture de
la machine virtuelle... Pour ce qui est de la question de Seb, la réponse
est : jamais. En fait, ton singleton sera déchargé uniquement au moment où
ta classe sera déchargée,c 'est-à-dire à la fin de l'exécution de ton
processus Java (car l'instance est référencée par la classe, il faut donc
que la classe ne soit plus référencée). En fait, pour ces deux problèmes,
une seule solution: utiliser des ClassLoaders spécialisés qui vont
permettre de recharger périodiquement la classe, comme c'est le cas dans
les serveurs de servlets. Le seul problème est alors la persistence, car
si la classe a changé, recharger les éléments d'une ancienne instance est
particulièrement délicat. La discussion concernant l'existence de
ClassLoaders permettant ce rechargement a déja eu lieu sur cette liste
(j'étais alors à votre place) et les réponses avaient alors été assez peu
claires (de mon point de vue en tout cas). Par conséquent, si vous voulez
en savoir plus, je vous conseille de vous jeter sur le seul ouvrage
traitant (à ma connaissance) de ce sujet complexe : "Server-based Java
programming" de Ted Neward aux éditions Manning. Pour approfondir le
sujet, et consulter les exemples qui sont très instructifs, vous pouvez
sans plus attendre cliquer sur le lien http://www.javageeks.com/

> 
> A+
> 
> > Bonjour,
> > 
> > J'ai un singleton qui est implémenté comme une classe dont toutes les
> > méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> > "static { }" et je me demandais s'il y avait un moyen de savoir quand
> > cette classe sera supprimée de la mémoire ?
> > 
> > Seb
> > 
> -- 
> _______________________________________________________
> Jean-Baptiste BRIAUD                    Solsoft
>   software engineer              http://www.solsoft.fr
> 
> Solsoft SA  130 rue Victor Hugo  92300 Levallois-Perret
>     "Policy Management for eBusiness Security"
> 
Nicolas Delsaux

     

From:           	"Cedric Beust" <cedric@beust.com>
To:             	<java@u-strasbg.fr>
Subject:        	RE: Singleton static
Date sent:      	Thu, 12 Apr 2001 08:08:39 -0700
Send reply to:  	java@u-strasbg.fr

> From: briaud@solsoft.fr [mailto:briaud@solsoft.fr]On Behalf Of

> Le garbage s'occupe de liberer les classes ?
> Je croyais qu'il ne s'occupait que des instances ...

Ces deux affirmations sont exactes :-)

Les classes elles-memes sont representees par des instances de la class
"Class", donc elles peuvent etre garbage collecte'es au meme titre que les
autres objets.

--
Cedric

     

Date sent:      	Thu, 12 Apr 2001 17:25:36 +0200
From:           	Jean-Baptiste BRIAUD <jean-baptiste.briaud@solsoft.fr>
Organization:   	SolSoft
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

Tt a fait OK pour l'instance de a classe Class.
Y a t-il un moyen de savoir l'état d'une classe
chargee/non chargee ?

Peut-on faire une sorte de weakreference sur une classe ?

Cedric Beust wrote:
> 
> > From: briaud@solsoft.fr [mailto:briaud@solsoft.fr]On Behalf Of
> 
> > Le garbage s'occupe de liberer les classes ?
> > Je croyais qu'il ne s'occupait que des instances ...
> 
> Ces deux affirmations sont exactes :-)
> 
> Les classes elles-memes sont representees par des instances de la class
> "Class", donc elles peuvent etre garbage collecte'es au meme titre que
> les autres objets.
> 
> --
> Cedric

-- 
_______________________________________________________
Jean-Baptiste BRIAUD                    Solsoft
  software engineer              http://www.solsoft.fr

Solsoft SA  130 rue Victor Hugo  92300 Levallois-Perret
    "Policy Management for eBusiness Security"

     

From:           	"Thibaut Fagart" <tfagart@soleri.com>
To:             	<java@u-strasbg.fr>
Subject:        	RE: Singleton static
Date sent:      	Thu, 12 Apr 2001 17:30:22 +0200
Send reply to:  	java@u-strasbg.fr

Tu peux peut etre essayer de mettre un finalize sur ton instance ?
Class Singleton {
 Public static singletonMethod() ;

Private instance= new Singleton();
Public void finalize() {
 System.out.println ...
}
}
Tout à fait d'accord au niveau de l'initialisation.
Le problème c'est que je n'arrive pas à trouver de méthode équivalente à
static{} pour savoir quand la mémoire allouée pour la classe est libérée
et je voulais savoir s'il y avait un moyen d'être informé de cet
évènement.

Seb

>
> Les classes statiques sont allouée dès qu'un accès à un attribut ou à
> une
méthode
> a lieu. Elles sont libérées par le garbage s'il c'est possible. (et
> c'est
possible
> lorsque plus aucune classes instanciée ne s'en sert...)
> Vous pouvez constater ce comportement en mettant une trace dans le bloc
statique
> de la classe. L'affichage de la trace à lieu la première fois que l'on
accède à la
> classe statique, puis parfois, de nouveau en cours d'exécution...
>
> Si vous vouler forcer le garbage collector ce doit être quelque chose
comme
> System.gc()
>
> Cyriaque,
>
> Sebastien Cesbron a écrit :
>
> > Bonjour,
> >
> > J'ai un singleton qui est implémenté comme une classe dont toutes les
> > méthodes sont statiques. Pour l'initialisation, j'utilise le bloc
> > "static { }" et je me demandais s'il y avait un moyen de savoir quand
> > cette classe sera supprimée de la mémoire ?
> >
> > Seb
> >
> >
__________________________________________________________________________
__ __ > > ifrance.com, l'email gratuit le plus complet de l'Internet ! > >
vos emails depuis un navigateur, en POP3, sur Minitel, sur le WAP... > >
http://www.ifrance.com/_reloc/email.emailif

__________________________________________________________________________
__ __ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif

     

From:           	"Cedric Beust" <cedric@beust.com>
To:             	<java@u-strasbg.fr>
Subject:        	RE: Singleton static
Date sent:      	Thu, 12 Apr 2001 09:04:05 -0700
Send reply to:  	java@u-strasbg.fr

> From: briaud@solsoft.fr [mailto:briaud@solsoft.fr]On Behalf Of

> Tt a fait OK pour l'instance de a classe Class.
> Y a t-il un moyen de savoir l'état d'une classe
> chargee/non chargee ?

Pas vraiment, non.  C'est un peu comme le principe d'incertitude
d'Heisenberg:  vouloir observer le phenomene altere le phenomene :-)

Tu cherches a faire quoi exactement ?

--
Cedric

     

From:           	"Herve AGNOUX" <hagnoux@mail.club-internet.fr>
To:             	java@u-strasbg.fr
Date sent:      	Fri, 13 Apr 2001 07:29:49 +0200
Subject:        	Re: Singleton static
Priority:       	normal
Send reply to:  	java@u-strasbg.fr

Le 12 Apr 01, Cyriaque Dupoirieux a écrit :

> statique de la classe. L'affichage de la trace à lieu la première fois
> que l'on accède à la classe statique, puis parfois, de nouveau en cours
> d'exécution...
> 

Tu peux nous donner un code qui provoque cet effet qui me parait 
étrange, et contraire à ce que racontent les specs de Java, où il 
me semble avoir compris que les initialisations statiques ne sont 
exécutées qu'une et une seule fois ?


--
Hervé AGNOUX  hagnoux@mail.club-internet.fr
Faites vos sites avec des formulaires électroniques :
http://www.diaam.com

     

Date sent:      	Fri, 13 Apr 2001 08:48:35 +0200
From:           	Cyriaque Dupoirieux <cyriaque.dupoirieux@pcotech.fr>
Organization:   	PCO Technologies
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr



Herve AGNOUX a écrit :

> Le 12 Apr 01, Cyriaque Dupoirieux a écrit :
>
> > statique de la classe. L'affichage de la trace à lieu la première fois
> > que l'on accède à la classe statique, puis parfois, de nouveau en
> > cours d'exécution...
> >
>
> Tu peux nous donner un code qui provoque cet effet qui me parait
> étrange, et contraire à ce que racontent les specs de Java, où il
> me semble avoir compris que les initialisations statiques ne sont
> exécutées qu'une et une seule fois ?

C'est vrai, les initialisations statiques sont effectuées une seule fois
et avant toute autre initialisation non statique même si cela ne suit pas
l'ordre des déclarations de votre classe. Mais, lorsque l'on travaille
avec une classe purement statique, elle est allouée en mémoire dès qu'un
objet y référe (cette classe est alors une instance de la classe Class
comme l'a deja dit Cedric Beust...)

Le garbage collector, thread qui s'occupe, entre autre, de libérer de la
mémoire dès que possible, peut donc constater que plus aucun objet ne
"pointe" sur l'objet de type Class représentant notre classe statique et
le libérer.

Un objet référençant alors denouveau la classe statique pourra constater
que l'initialisation statique a été re-executé...

Si l'on réflechit, cela ne pouvait être autrement, le GC ne peut pas se
permettre de garder ad vitam toutes les classes statiques si elles ne
sont, à priori, plus utilisée par personne.

Cyriaque,


     

Date sent:      	Fri, 13 Apr 2001 09:08:47 +0200
From:           	Sebastien Cesbron <scesbron@ifrance.com>
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

En fait, j'utilise le pattern Singleton pour la classe qui se charge des
logs dans mon application. Pour qu'elle soit plus simple à utiliser, j'ai
implémenté le pattern comme une classe avec des méthodes statiques. En
mettant l'initialisation dans le bloc static {}, personne n'a à se soucier
de l'initialisation, celle-ci sera faite lorsque un premier log sera fait.
J'aurais également aimé fermer proprement le fichier de log dans une
méthode du même style que finalize mais apparamment ce n'est pas possible.
Et en y réfléchissant, je me dis que de toutes façons, dès qu'on
implémente le pattern singleton de quelque manière que ce soit, par
définition quelqu'un à une référence vers le Singleton pour éviter qu'il
n'y ait plusieurs instances de créer et pour le fournir à tous ceux qui le
désire. Donc j'ai l'impression que la seule manière de résoudre mon
problème c'est de trouver un endroit dans le programme où je puisse
appeler ma méthode de terminaison en étant sûr que je suis à la fin de mon
programme. Du coup, je trouve cela bizarre d'appeler explicitement la
méthode de terminaison et d'appeler implicitement la méthode d'init. Cette
solution ne me satisfait donc qu'à moitié.

Affaire à suivre ...

Seb

> 
> > From: briaud@solsoft.fr [mailto:briaud@solsoft.fr]On Behalf Of
> 
> > Tt a fait OK pour l'instance de a classe Class.
> > Y a t-il un moyen de savoir l'état d'une classe
> > chargee/non chargee ?
> 
> Pas vraiment, non.  C'est un peu comme le principe d'incertitude
> d'Heisenberg:  vouloir observer le phenomene altere le phenomene :-)
> 
> Tu cherches a faire quoi exactement ?
> 
> --
> Cedric

__________________________________________________________________________
____ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif

     

Date sent:      	Fri, 13 Apr 2001 10:51:14 +0200
From:           	Jean-Baptiste BRIAUD <jean-baptiste.briaud@solsoft.fr>
Organization:   	SolSoft
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr


As tu essayé Runtime.getRuntime().addShutdownHook(Thread hook) ?

Sur le papier ca devrait te permettre d'être prévenu que
la JVM "se ferme".

Sebastien Cesbron wrote:
> 
> En fait, j'utilise le pattern Singleton pour la classe qui se charge des
> logs dans mon application. Pour qu'elle soit plus simple à utiliser,
> j'ai implémenté le pattern comme une classe avec des méthodes statiques.
> En mettant l'initialisation dans le bloc static {}, personne n'a à se
> soucier de l'initialisation, celle-ci sera faite lorsque un premier log
> sera fait. J'aurais également aimé fermer proprement le fichier de log
> dans une méthode du même style que finalize mais apparamment ce n'est
> pas possible. Et en y réfléchissant, je me dis que de toutes façons, dès
> qu'on implémente le pattern singleton de quelque manière que ce soit,
> par définition quelqu'un à une référence vers le Singleton pour éviter
> qu'il n'y ait plusieurs instances de créer et pour le fournir à tous
> ceux qui le désire. Donc j'ai l'impression que la seule manière de
> résoudre mon problème c'est de trouver un endroit dans le programme où
> je puisse appeler ma méthode de terminaison en étant sûr que je suis à
> la fin de mon programme. Du coup, je trouve cela bizarre d'appeler
> explicitement la méthode de terminaison et d'appeler implicitement la
> méthode d'init. Cette solution ne me satisfait donc qu'à moitié.
> 
> Affaire à suivre ...
> 
> Seb
[SNIP]

     

From:           	"Herve AGNOUX" <hagnoux@mail.club-internet.fr>
To:             	java@u-strasbg.fr
Date sent:      	Fri, 13 Apr 2001 11:02:47 +0200
Subject:        	Re: Singleton static
Priority:       	normal
Send reply to:  	java@u-strasbg.fr

Le 13 Apr 01, Sebastien Cesbron a écrit :

> En fait, j'utilise le pattern Singleton pour la classe qui se charge des
> logs dans mon application. Pour qu'elle soit plus simple à utiliser,
> j'ai

Si c'est pour des logs, arrête de te casser la tête, et utilise log4j :
http://jakarta.apache.org/log4j/index.html


> désire. Donc j'ai l'impression que la seule manière de résoudre mon
> problème c'est de trouver un endroit dans le programme où je puisse
> appeler ma méthode de terminaison en étant sûr que je suis à la fin de
> mon programme. Du coup, je trouve cela bizarre d'appeler explicitement
> la

Je pense que toute appli doit controler sa fin en un seul point. A partir
de là, il est facile d'organiser cette fin comme tu le souhaites,
notemment de fermer les fichiers.

Sinon, la seule façon que je connaisse est d'utiliser un SecurityManager
perso. J'ai jamais fait ça pour l'instant, j'ai toujours réussi à procéder
selon la première méthode.

En cherchant un peu au sujet de ta question, j'ai découvert dans la spec
du langage (12.7 Finalization of Classes) qu'il existerait la méthode
statique "classFinalize" qui serait appelée au déchargement de la classe ?
Jamais utilisé, elle marche peut être ?


--
Hervé AGNOUX  hagnoux@mail.club-internet.fr
Faites vos sites avec des formulaires électroniques :
http://www.diaam.com

     

Date sent:      	Fri, 13 Apr 2001 02:10:52 -0700 (PDT)
From:           	Thierry Janaudy <janaudy@yahoo.com>
Send reply to:  	janaudy@jyperion.com
Subject:        	RE: Singleton static
To:             	java@u-strasbg.fr

Salut,

--- Cedric Beust <cedric@beust.com> wrote:
> > From: briaud@solsoft.fr
> [mailto:briaud@solsoft.fr]On Behalf Of
> 
> > Tt a fait OK pour l'instance de a classe Class.
> > Y a t-il un moyen de savoir l'état d'une classe
> > chargee/non chargee ?
> 
> Pas vraiment, non.  C'est un peu comme le principe
> d'incertitude
> d'Heisenberg:  vouloir observer le phenomene altere
> le phenomene :-)
> 

Bon, si on ne peut connaitre ni la vitesse, ni
l'emplacement de la classe a un instant donnee,
on pourrait controller son chargement par
l'implementation d'un ClassLoader pour l'application!?

Sur ce,

Bonnes fetes de Paques de la part des poules
londoniennes.

Thierry @ qui s'envole pour Nimes.

=====
________________________________________
Thierry Janaudy (Independent consultant)
+44 77 52 14 3001
[cv]            http://www.janaudy.com/
[company]       http://www.jyperion.com/
[search engine] http://pharos.inria.fr/Java/

__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/

     

From:           	"Cedric Beust" <cedric@beust.com>
To:             	<java@u-strasbg.fr>
Subject:        	RE: Singleton static
Date sent:      	Fri, 13 Apr 2001 09:38:06 -0700
Send reply to:  	java@u-strasbg.fr

Herve AGNOUX a écrit :

> Tu peux nous donner un code qui provoque cet effet qui me parait
> étrange, et contraire à ce que racontent les specs de Java, où il
> me semble avoir compris que les initialisations statiques ne sont
> exécutées qu'une et une seule fois ?

Pas tout a fait.  Les initialisations statiques sont executees a chaque
fois que le ClassLoader charge la classe en question.  Ce qui peut arriver
plusieurs fois durant la vie du processus.

--
Cedric

     

Date sent:      	Tue, 17 Apr 2001 12:32:19 +0100
From:           	Laurent Rouvet <laurent@roovay.com>
To:             	java@u-strasbg.fr
Subject:        	Re: Singleton static
Send reply to:  	java@u-strasbg.fr

Un Singleton n'est pas une classe static,
mais une classe qui n'autorise qu'une seule instance.

Il me semble que ton probleme vient de la.
Tu devrais avoir une classe Log qui est un Singleton.
Elle est instancie par ton application, ces methodes sont static (ex:
LOG.print(msg) t'evitant de passer la reference de cette instance dons
tout ton appli - c'est donc une instance à la visibilite globale) et elle
utilise un  finalize pour se terminer proprement. Note que ton appli doit
garder une reference sur le singleton pour evite qu'il soit libere par GC
(ce qui n'est pas tres genant).

public Log {
  private static Log singleton;

  private Log(...options...){
    ....
  }

  public static Log getInstance(.... options...) {
    if (singleton == null)
      singleton = new Log(....);
    return singleton;
 } 

  public static void print(....) {
    if (singleton == null) 
      throw new IllegalStateException("Le singleton Log n'est pas
instance.");
    .....
  }

  protected void finalize() throws Throwable {
    if (singleton != null) ....
  }
}


Neanmois, comme l'a deja dit Herve je te conseil log4j.



Sebastien Cesbron wrote:
> 
> En fait, j'utilise le pattern Singleton pour la classe qui se charge des
> logs dans mon application. Pour qu'elle soit plus simple à utiliser,
> j'ai implémenté le pattern comme une classe avec des méthodes statiques.
> En mettant l'initialisation dans le bloc static {}, personne n'a à se
> soucier de l'initialisation, celle-ci sera faite lorsque un premier log
> sera fait. J'aurais également aimé fermer proprement le fichier de log
> dans une méthode du même style que finalize mais apparamment ce n'est
> pas possible. Et en y réfléchissant, je me dis que de toutes façons, dès
> qu'on implémente le pattern singleton de quelque manière que ce soit,
> par définition quelqu'un à une référence vers le Singleton pour éviter
> qu'il n'y ait plusieurs instances de créer et pour le fournir à tous
> ceux qui le désire. Donc j'ai l'impression que la seule manière de
> résoudre mon problème c'est de trouver un endroit dans le programme où
> je puisse appeler ma méthode de terminaison en étant sûr que je suis à
> la fin de mon programme. Du coup, je trouve cela bizarre d'appeler
> explicitement la méthode de terminaison et d'appeler implicitement la
> méthode d'init. Cette solution ne me satisfait donc qu'à moitié.
> 
> Affaire à suivre ...
> 
> Seb
> 
> >
> > > From: briaud@solsoft.fr [mailto:briaud@solsoft.fr]On Behalf Of
> >
> > > Tt a fait OK pour l'instance de a classe Class.
> > > Y a t-il un moyen de savoir l'état d'une classe
> > > chargee/non chargee ?
> >
> > Pas vraiment, non.  C'est un peu comme le principe d'incertitude
> > d'Heisenberg:  vouloir observer le phenomene altere le phenomene :-)
> >
> > Tu cherches a faire quoi exactement ?
> >
> > --
> > Cedric
> 
> ________________________________________________________________________
> ______ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
> emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
> http://www.ifrance.com/_reloc/email.emailif

-- 
Laurent
http://roovay.com/laurent/contact.html


C'est fini ! Retour à l'accueil de la pseudo-archive