Buenas,
Si como dices en el titulo utilizas Java EE, lo correcto seria que utilices inyeccion de dependencias para no tener que gestionar y cerrar asi tu factory directamente.
Código Java:
Ver original@PersistenceUnit(unitName="PersistenceUnit")
private EntityManagerFactory emf;
De esta forma sera el propio contenedor el que se encargue de hacer el close y liberar los recursos cuando proceda.
Tambien puedes hacer lo mismo directamente con el entityManager:
Código Java:
Ver original@PersistenceContext(unitName="PersistenceUnit")
private EntityManager em;
Un saludo