Question

Je viens de commencer à migrer mon framework de persistance local vers JPA.

Étant donné que les frameworks de persistance cachent une bonne partie de la plomberie, je voudrais savoir si la fermeture des EntityManagers NE créera PAS de fuite de ressources ou si les frameworks vont les collecter et les fermer pour moi.

J'ai l'intention dans tous les endroits de les fermer, mais dois-je le faire?

Actuellement, en utilisant TopLink, c'est simplement parce que cela fonctionne avec NetBeans, mais je suis heureux de rechercher d'autres fournisseurs JPA.

Était-ce utile?

La solution

Cela dépend comment vous l'avez obtenu.

Si vous l'avez créé à l'aide de EntityManagerFactory, vous devrez le fermer, quel que soit le framework utilisé.

Si vous l'avez obtenu en utilisant une injection de dépendance (par exemple, en utilisant les annotations EJB et @PersistenceContext), vous ne devriez pas le fermer à la main (AFAIK, cela entraînerait une exception RuntimeException).

Autres conseils

Vous devriez.

Les cadres n'ont aucune idée de la façon dont vous envisagez d'utiliser le ME, ils ne peuvent donc pas le fermer (sauf, peut-être, lors de la finalisation, ce qui n'est pas garanti). Oui, ne pas les fermer créerait une fuite de ressources.

L'idée est la même que "Toujours fermer java.sql.Connection". (bien que certaines sources de données disposent de paramètres permettant de les fermer automatiquement par inactivité) ou "toujours fermer la session Hibernate".

Par ailleurs, si vous envisagez d'écrire du code portable, vous ne devez pas vous fier à un fournisseur JPA spécifique "être intelligent". - d’autres peuvent ne pas fermer le ME à temps.

J'ai obtenu EntityManager en utilisant l'annotation @PersistenceContext dans mon référentiel. Je peux voir que lorsque le pool de connexions atteint son maxPoolSize , il n'est pas nettoyé.

Cependant, si je crée EntityManager à l'aide de EntityManagerFactory et appelle entitymanager.close () , les connexions sont en cours de nettoyage. J'utilise c3p0 comme bibliothèque de connectionpool.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top