summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Suhren <suhren.stefan@fh-swf.de>2015-11-23 14:42:32 +0100
committerStefan Suhren <suhren.stefan@fh-swf.de>2015-11-23 15:57:23 +0100
commit723c66ea036b5bc53ddeee0005e335cffff16a45 (patch)
tree019505d47b785b7dd0a8a4bed671ba9ca17fa569 /src
parent25ae0a23d15383df7f84ad51ee8f078c519ed963 (diff)
downloadJCatalog-723c66ea036b5bc53ddeee0005e335cffff16a45.tar.gz
JCatalog-723c66ea036b5bc53ddeee0005e335cffff16a45.zip
Use singleton for EntityManagerFactory
Diffstat (limited to 'src')
-rw-r--r--src/beans/CategoryManager.java21
-rw-r--r--src/beans/ProductManager.java11
-rw-r--r--src/beans/UserManager.java17
-rw-r--r--src/jpa/EntityManagerFactorySingleton.java54
4 files changed, 80 insertions, 23 deletions
diff --git a/src/beans/CategoryManager.java b/src/beans/CategoryManager.java
index fc3d438..db42f37 100644
--- a/src/beans/CategoryManager.java
+++ b/src/beans/CategoryManager.java
@@ -17,11 +17,10 @@ import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
import jpa.Category;
+import jpa.EntityManagerFactorySingleton;
@ManagedBean(name = "CategoryManager")
@SessionScoped
@@ -41,10 +40,14 @@ public class CategoryManager
public Collection getCategories()
{
- EntityManagerFactory factory = Persistence
- .createEntityManagerFactory("catalog");
- EntityManager manager = factory.createEntityManager();
- return manager.createQuery("SELECT c FROM Category c ").getResultList();
+ EntityManager manager = EntityManagerFactorySingleton.getInstance()
+ .getEntityManagerFactory().createEntityManager();
+
+ Collection categories = manager.createQuery("SELECT c FROM Category c ")
+ .getResultList();
+ manager.close();
+
+ return categories;
}
public void select(javax.faces.event.ActionEvent actionEvent)
@@ -54,9 +57,8 @@ public class CategoryManager
Integer selectedId = Integer.valueOf((String) params.get("selectedId"));
// System.out.println(selectedId);
- EntityManagerFactory factory = Persistence
- .createEntityManagerFactory("catalog");
- EntityManager manager = factory.createEntityManager();
+ EntityManager manager = EntityManagerFactorySingleton.getInstance()
+ .getEntityManagerFactory().createEntityManager();
EntityTransaction tx = manager.getTransaction();
tx.begin();
@@ -83,5 +85,6 @@ public class CategoryManager
e.printStackTrace();
}
context.responseComplete();
+ manager.close();
}
}
diff --git a/src/beans/ProductManager.java b/src/beans/ProductManager.java
index d499e3c..3442c52 100644
--- a/src/beans/ProductManager.java
+++ b/src/beans/ProductManager.java
@@ -16,10 +16,9 @@ import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
+import jpa.EntityManagerFactorySingleton;
import jpa.Product;
@ManagedBean(name = "ProductManager")
@@ -37,12 +36,11 @@ public class ProductManager
{
FacesContext facesContext = FacesContext.getCurrentInstance();
Map params = facesContext.getExternalContext().getRequestParameterMap();
- String selectedId = (String) params.get("selectedId");
+ int selectedId = Integer.valueOf((String) params.get("selectedId"), 10);
// System.out.println(selectedId);
- EntityManagerFactory factory = Persistence
- .createEntityManagerFactory("catalog");
- EntityManager manager = factory.createEntityManager();
+ EntityManager manager = EntityManagerFactorySingleton.getInstance()
+ .getEntityManagerFactory().createEntityManager();
EntityTransaction tx = manager.getTransaction();
tx.begin();
@@ -69,6 +67,7 @@ public class ProductManager
e.printStackTrace();
}
context.responseComplete();
+ manager.close();
}
}
diff --git a/src/beans/UserManager.java b/src/beans/UserManager.java
index 190926b..36fd807 100644
--- a/src/beans/UserManager.java
+++ b/src/beans/UserManager.java
@@ -16,11 +16,10 @@ import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
-import javax.persistence.Persistence;
import javax.persistence.Query;
+import jpa.EntityManagerFactorySingleton;
import jpa.User;
@ManagedBean(name = "UserManager")
@@ -43,9 +42,8 @@ public class UserManager
&& current.getPassword() != null
&& current.getPassword().length() > 0)
{
- EntityManagerFactory factory = Persistence
- .createEntityManagerFactory("catalog");
- EntityManager manager = factory.createEntityManager();
+ EntityManager manager = EntityManagerFactorySingleton.getInstance()
+ .getEntityManagerFactory().createEntityManager();
Query query = manager.createQuery(
"SELECT u FROM User u where u.username = :username and u.password = :password");
query.setParameter("username", current.getUsername());
@@ -58,6 +56,8 @@ public class UserManager
current = (User) results.get(0);
outcome = "success";
}
+
+ manager.close();
}
// System.out.println(outcome);
return outcome;
@@ -97,9 +97,8 @@ public class UserManager
public User getCurrent()
{
- EntityManagerFactory factory = Persistence
- .createEntityManagerFactory("catalog");
- EntityManager manager = factory.createEntityManager();
+ EntityManager manager = EntityManagerFactorySingleton.getInstance()
+ .getEntityManagerFactory().createEntityManager();
EntityTransaction tx = manager.getTransaction();
tx.begin();
@@ -115,6 +114,8 @@ public class UserManager
tx.rollback();
}
+ manager.close();
+
return current;
}
}
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;
+ }
+}