4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
PersistM.java
Go to the documentation of this file.
1 /*
2  * Project: Server for annotations sharing
3  * Author: Ing. Jaroslav Dytrych idytrych@fit.vutbr.cz
4  * File: PersistM.java
5  * Description: Persistence manager (class for manipulating with database)
6  */
7 
8 /**
9  * @file PersistM.java
10  *
11  * @brief Persistence manager (database manipulator)
12  */
13 
14 package cz.vutbr.fit.knot.annotations.app;
15 
16 import java.io.Serializable;
17 import java.util.ArrayList;
18 import java.util.Iterator;
19 import java.util.List;
20 import java.util.logging.Level;
21 import java.util.logging.Logger;
22 import javax.persistence.EntityManager;
23 import javax.persistence.EntityManagerFactory;
24 import javax.persistence.EntityTransaction;
25 import javax.persistence.Persistence;
26 import javax.persistence.Query;
27 
28 
29 /**
30  * Persistence manager (class for manipulating with database)
31  *
32  * @brief Persistence manager (database manipulator)
33  * @author idytrych
34  */
35 public class PersistM implements Serializable {
36 
37  private EntityManagerFactory entityManagerFactory;
38 
39  /**
40  * Constructor.
41  */
42  public PersistM() {
43  entityManagerFactory = Persistence.createEntityManagerFactory("AnnotationsPU");
44  }
45 
46  /**
47  * Gets entity manager.
48  *
49  * @return entity manager
50  */
51  public EntityManager getEM() {
52  return entityManagerFactory.createEntityManager();
53  }
54 
55  /**
56  * Gets entity from the database
57  *
58  * @param entityName Name of entity
59  * @param id Id of entity
60  * @return If entity was found, returns requested entity, else returns null
61  */
62  public Object getEntityById(String entityName, int id) {
63  EntityManager em = getEM();
64  try {
65  Query q = em.createNamedQuery(entityName + ".findById");
66  q.setParameter("id", id);
67  List l = q.getResultList();
68  if (l.isEmpty()) {
69  return null;
70  }
71  return l.get(0);
72  } catch (Exception e) {
74  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "getEntityById", e);
75  }
76  return null;
77  } finally {
78  em.close();
79  }
80  }
81 
82  /**
83  * Gets list of entities with given name from the database
84  *
85  * @param entityName Name of entities
86  * @return If succeed, returns list of entities, else returns null
87  */
88  public List getEntitiesByName(String entityName) {
89  EntityManager em = getEM();
90  try {
91  Query q = em.createNamedQuery(entityName + ".findAll");
92  return q.getResultList();
93  } catch (Exception e) {
94  System.out.print("EXCEPTION "+e.getLocalizedMessage());
96  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "getEntitiesByName", e);
97  }
98  return null;
99  } finally {
100  em.close();
101  }
102  }
103 
104  /**
105  * Query database with named query
106  *
107  * @param queryName Name of query
108  * @return If succeed, returns list of results, else returns null
109  */
110  public List queryDB(String queryName) {
111  EntityManager em = getEM();
112  try {
113  Query q = em.createNamedQuery(queryName);
114  q.setHint("javax.persistence.cache.storeMode", "REFRESH");
115  return q.getResultList();
116  } catch (Exception e) {
118  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "queryDB:" + queryName, e);
119  }
120  return null;
121  } finally {
122  em.close();
123  }
124  }
125 
126  /**
127  * Query database with named query with parameters
128  *
129  * @param queryName Name of query
130  * @param params Array of parameters
131  * @return If succeed, returns list of results, else returns null
132  */
133  public List queryDB(String queryName, Object[] params) {
134  EntityManager em = getEM();
135  try {
136  Query q = em.createNamedQuery(queryName);
137  q.setHint("javax.persistence.cache.storeMode", "REFRESH");
138  for (int p = 0; p < params.length; p = p + 2) {
139  q.setParameter((String) params[p], params[p + 1]);
140  }
141  return q.getResultList();
142  } catch (Exception e) {
144  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "queryDB:" + queryName, e);
145  }
146  return null;
147  } finally {
148  em.close();
149  }
150  }
151 
152  /**
153  * Persist entity in database
154  *
155  * @param entity Entity to be saved
156  * @return In case of error returns true, false otherwise
157  */
158  public boolean persistEntity(Object entity) {
159  EntityManager em = getEM();
160  try {
161  EntityTransaction transaction = em.getTransaction();
162  transaction.begin();
163  em.persist(entity);
164  em.flush();
165  transaction.commit();
166  } catch (Exception e) {
168  String eString = "";
169  if (entity != null) {
170  eString = entity.toString();
171  }
172  System.out.println(e.getMessage());
173  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "persistEntity: " + eString, e);
174  }
175  return true;
176  } finally {
177  em.close();
178  }
179  return false;
180  }
181 
182 
183  /**
184  * Persist list of entities in to database
185  *
186  * @param entity list of entities to be saved
187  * @return In case of error returns true, false otherwise
188  */
189  public boolean persistEntities(ArrayList<Object> entity) {
190  EntityManager em = getEM();
191  if(entity != null && !entity.isEmpty()){
192  Iterator<Object> objIt = entity.iterator();
193  Object ent = null;
194  try {
195  EntityTransaction transaction = em.getTransaction();
196  transaction.begin();
197  int counter = 0;
198 
199  while(objIt.hasNext()){
200  ent = objIt.next();
201  em.persist(ent);
202  if ((counter % 10000) == 0) {
203  em.getTransaction().commit();
204  em.clear();
205  em.getTransaction().begin();
206  }
207  }
208  transaction.commit();
209  } catch (Exception e) {
211  String eString = "";
212  if (ent != null) {
213  eString = ent.toString();
214  }
215  System.out.println("Crash! " + e.getMessage() + " :: " +eString);
216  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "persistEntity: " + eString, e);
217  }
218  return true;
219  } finally {
220  em.close();
221  }
222  }
223  return false;
224  }
225 
226  /**
227  * Saves changes in entity to database
228  *
229  * @param entity Entity to be saved
230  * @return In case of failure returns null, saved entity otherwise
231  */
232  public Object saveEntityChanges(Object entity) {
233  EntityManager em = getEM();
234  try {
235  EntityTransaction transaction = em.getTransaction();
236  transaction.begin();
237  entity = em.merge(entity);
238  em.flush();
239  transaction.commit();
240  } catch (Exception e) {
242  String eString = "";
243  if (entity != null) {
244  eString = entity.toString();
245  }
246  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "saveEntityChanges: " + eString, e);
247  }
248  return null;
249  } finally {
250  em.close();
251  }
252  return entity;
253  }
254 
255  /**
256  * Removes entity from database
257  *
258  * @param entity Entity to be removed
259  * @return In case of error returns true, false otherwise
260  */
261  public boolean removeEntity(Object entity) {
262  EntityManager em = getEM();
263  try {
264  EntityTransaction transaction = em.getTransaction();
265  transaction.begin();
266  entity = em.merge(entity);
267  em.remove(entity);
268  em.flush();
269  transaction.commit();
270  } catch (Exception e) {
272  String eString = "";
273  if (entity != null) {
274  eString = entity.toString();
275  }
276  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "removeEntity: " + eString, e);
277  }
278  return true;
279  } finally {
280  em.close();
281  }
282  return false;
283  }
284 
285  /**
286  * Removes all entities from database table
287  *
288  * @param tableName Name of table
289  * @return In case of error returns true, false otherwise
290  */
291  public boolean deleteTable(String tableName) {
292  EntityManager em = getEM();
293  EntityTransaction transaction = em.getTransaction();
294 
295  try {
296  transaction.begin();
297  Query q1 = em.createQuery("DELETE FROM " + tableName);
298  q1.executeUpdate();
299  transaction.commit();
300  }
301  catch(Exception e){
303  Logger.getLogger(PersistM.class.getName()).log(Level.ALL, "Can't delete content of table: " + tableName, e);
304  }
305  return true;
306  } finally {
307  em.close();
308  }
309  return false;
310  }
311 } // class PersistM
Persistence manager (database manipulator)
Definition: PersistM.java:35
Object getEntityById(String entityName, int id)
Definition: PersistM.java:62
boolean deleteTable(String tableName)
Definition: PersistM.java:291
boolean persistEntities(ArrayList< Object > entity)
Definition: PersistM.java:189
List getEntitiesByName(String entityName)
Definition: PersistM.java:88
EntityManagerFactory entityManagerFactory
Definition: PersistM.java:37
List queryDB(String queryName, Object[] params)
Definition: PersistM.java:133