8
votes

Dois-je fermer la source de données obtenue JNDI?

MISE À JOUR: Apparemment TOMCAT, commençant par 7.0.11, ferme la source de données pour vous, il n'est donc pas disponible dans le contexte de la WebApp. Voir: https://issues.apache.org/bugzilla/show_bug.cgi?id=25060

hi, p>

J'utilise le printemps 3.0 et Java 1.6. p>

Si je reçois une source de données de cette façon: p>

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/db" />


0 commentaires

3 Réponses :


1
votes

Lorsque vous obtenez la source de données via une recherche JNDI, une ressource partagée - configurée dans votre conteneur. Il est géré par le conteneur et non par l'application, il n'est donc pas nécessaire (il n'y a aucun moyen) de le fermer.


0 commentaires

4
votes

non. Le DataSource est géré par le conteneur JNDI distant et c'est le travail de ce conteneur pour gérer le cycle de vie du DataSource . Le printemps fait simplement l'utiliser, il ne la gère pas.

Même si vous le souhaitez, vous ne pouviez pas - DATASOURCE n'a pas de Fermer () METHOTION, ou quoi que ce soit comme celui-ci.


1 commentaires

Je portais la source de données à la classe sous-jacente (E.G. basicdatasource) et appeler la méthode de cette classe 'de classe. Est-ce une mauvaise chose ou juste inutile? Y a-t-il quelque chose que je devrais faire pour nettoyer l'accès des données dans le contexteDestroyed?



5
votes

Je ne suis pas d'accord. J'ajouterais un auditeur à votre web.xml et implémenterais la méthode contextuelle (). Cette méthode sera appelée par votre conteneur Web / serveur d'applications lorsque l'application Web est détruite ou non remplacée. Dans le contexteDestroyed (), je fermerais la DataSource.

à l'intérieur du web.xml xxx

le code: xxx


2 commentaires

Il s'avère que c'est la bonne réponse. J'ai posté la question à la liste de diffusion Tomcat et à l'un des Réponses a déclaré que, parce que la SPE SPEC a déclaré que les ressources JNDI sont créées lorsqu'elles sont levées (parce que, je suppose, est que Java: les ressources CAV ne sont pas partagées entre les composants). Le WebApp devrait y faire face dans contextuelDestroyed.


On dirait que Tomcat 7 prendra soin de la DataSource pour vous: Problèmes.apache.org /bugzilla/show_bug.cgi?id=25060