From 723c66ea036b5bc53ddeee0005e335cffff16a45 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Mon, 23 Nov 2015 14:42:32 +0100 Subject: Use singleton for EntityManagerFactory --- src/jpa/EntityManagerFactorySingleton.java | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/jpa/EntityManagerFactorySingleton.java (limited to 'src/jpa') diff --git a/src/jpa/EntityManagerFactorySingleton.java b/src/jpa/EntityManagerFactorySingleton.java new file mode 100644 index 0000000..dbd4873 --- /dev/null +++ b/src/jpa/EntityManagerFactorySingleton.java @@ -0,0 +1,54 @@ +/** + * + */ +package jpa; + +import javax.annotation.PreDestroy; +import javax.enterprise.context.ApplicationScoped; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +/** + * A singleton for application wide {@link EntityManagerFactory}. Increases + * performance significant. + * + * @author Stefan Suhren + * @version 1.0 + */ +@ApplicationScoped +public class EntityManagerFactorySingleton +{ + private static final String DB_PU = "catalog"; + + private static final EntityManagerFactorySingleton singleton = new EntityManagerFactorySingleton(); + + private EntityManagerFactory emf; + + private EntityManagerFactorySingleton() + { + } + + public static EntityManagerFactorySingleton getInstance() + { + return singleton; + } + + public EntityManagerFactory getEntityManagerFactory() + { + if (emf == null) + { + emf = Persistence.createEntityManagerFactory(DB_PU); + } + return emf; + } + + @PreDestroy + public void closeEmf() + { + if (emf != null && emf.isOpen()) + { + emf.close(); + } + emf = null; + } +} -- cgit v1.2.3-70-g09d2