2009-07-29 7 views
3

J'ai lu à maintes reprises que nous ne sommes pas censés utiliser des variables statiques dans un bean session. Alors, comment suis-je censé obtenir un enregistreur pour ce haricot et l'utiliser sur toutes les méthodes de haricot?Si nous ne sommes pas autorisés à utiliser des variables statiques dans les beans session, comment définir un logger?

+0

Je ne suis pas sûr (d'où le commentaire et pas une réponse) mais ne pourriez-vous pas simplement appeler une méthode log statique dans votre enregistreur ou est-ce considéré comme aussi mauvais qu'une variable statique? –

Répondre

7

Je pense que vous interprétez la "règle" un peu trop rigidement.

Vous ne devez stocker aucune sorte d'état d'une servlet/session/bean dans une variable statique, car cette référence est partagée par toutes les instances de ce type.

Toutefois, un enregistreur (généralement ou non) doit contenir n'importe quel état. Il est parfaitement bien l'OMI d'utiliser des références statiques à une instance Logger, si vous suivez la pratique habituelle de nommer/catégoriser vos enregistreurs sur la base classname:

public class SomeTypeOfBean { 
    private static final Logger log = Logger.getLogger(SomeTypeOfBean.class); 
    //... 
} 
1

Vous pouvez simplement en faire un membre non statique.

3

lecture seule des références statiques non-bloquant (qui est ce qu'un enregistreur est) sont généralement bien, s'il n'y a aucun problème avec quelques copies d'eux autour (à la discrétion du serveur d'application). Cela dit, rien ne dit qu'un enregistreur doive être dans une variable statique. Il peut s'agir d'une variable d'instance (et d'une variable transitoire si votre enregistreur n'est pas sérialisable). Une chose à réaliser avec les règles EJB - il est très important de comprendre pourquoi ils existent et ce qui pourrait trébucher un serveur d'applications (si vous développez en effet un serveur d'applications indépendant). Une fois que vous avez compris cela, vous savez comment travailler avec eux (et ils ont du sens étant donné ce qu'un serveur d'application est censé faire avec votre classe). Si c'est juste un tas de règles arbitraires écrites sur un document, alors vous ne serez pas en mesure de comprendre comment travailler avec eux, au lieu d'être piégé par eux.

Questions connexes