buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java
branchhelium-9.0
changeset 618 df88fead2976
parent 587 85df38eb4012
--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java	Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/entity/metadata/Metadata.java	Thu Jul 22 17:08:43 2010 +0300
@@ -35,6 +35,7 @@
 import javax.persistence.Query;
 import javax.persistence.CascadeType;
 import com.nokia.helium.jpa.ORMCommitCount;
+import com.nokia.helium.jpa.ORMUtil;
 import com.nokia.helium.jpa.ORMEntityManager;
 
 /**
@@ -236,9 +237,10 @@
     private void loadFromDB(String path) {
         LogFile logFile = null;
         logFiles = new Hashtable<String, LogFile>();
+        Query query = manager.getEntityManager().createQuery("SELECT l FROM LogFile l");
+        query.setFlushMode(FlushModeType.COMMIT);
         List<LogFile> logFilesList =
-            (List<LogFile>) manager.getEntityManager().createQuery(
-                "SELECT l FROM LogFile l").getResultList();
+            (List<LogFile>) query.getResultList();
         for (LogFile file : logFilesList) {
             log.debug("getting logfile from db: " + file.getPath());
             logFiles.put(file.getPath(), file);
@@ -260,18 +262,20 @@
      * @param obj - object to be stored in the data.
      */
     private void persist(Object obj) {
-        synchronized (manager) {
-            EntityManager em = manager.getEntityManager();
-            ORMCommitCount countObject = manager.getCommitCountObject();
-            //log.debug("object: " + obj);
-            //log.debug("object: " + em);
-            em.persist(obj);
-            countObject.decreaseCount();
-            if (countObject.isCommitRequired()) {
-                countObject.reset();
-                em.getTransaction().commit();
-                em.clear();
-                em.getTransaction().begin();
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            synchronized (manager) {
+                EntityManager em = manager.getEntityManager();
+                ORMCommitCount countObject = manager.getCommitCountObject();
+                //log.debug("object: " + em);
+                em.persist(obj);
+                countObject.decreaseCount();
+                if (countObject.isCommitRequired()) {
+                    countObject.reset();
+                    em.getTransaction().commit();
+                    em.clear();
+                    em.getTransaction().begin();
+                }
             }
         }
     }
@@ -315,11 +319,13 @@
      * Internal function to cache the logpath for performance.
      */
     private void initializeLogPath() {
-        EntityManager em = manager.getEntityManager();
-        Query q = em.createQuery("select m from LogFile m");
+        EntityManager entityManager = manager.getEntityManager();
+        Query query = entityManager.createQuery("select m from LogFile m");
+        query.setFlushMode(FlushModeType.COMMIT);
+        
         name = "metadata";
-        if (q.getResultList().size() == 0) {
-            log.debug("query result: size" + q.getResultList().size());
+        if (query.getResultList().size() == 0) {
+            log.debug("query result: size" + query.getResultList().size());
             populatePriorities();
             populateDB(logPath);
         } else {
@@ -489,7 +495,6 @@
      * priority.
      */
     public final void removeEntries() {
-        EntityManager em = manager.getEntityManager();
         LogFile file = (LogFile)executeSingleQuery("select l from LogFile l where l.path like '%" + logPath + "'");
         if ( file != null ) {
             log.debug("removing entries for : " + file.getPath());
@@ -510,19 +515,22 @@
      * @return object - record from the executed query.
      */
     private Object executeSingleQuery (String queryString) {
-        EntityManager em = manager.getEntityManager();
-        Query query = em.createQuery(queryString);
-        query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
-        query.setHint("eclipselink.maintain-cache", "false");
-        query.setHint("eclipselink.read-only", "true");
-        query.setFlushMode(FlushModeType.COMMIT);
+        Object mutexObject = ORMUtil.getMutexObject();
         Object obj = null;
-        try {
-            obj = query.getSingleResult();
-        } catch (javax.persistence.NoResultException nex) {
-            log.debug("no results for query: " + queryString, nex);
-        } catch (javax.persistence.NonUniqueResultException nux) {
-            log.debug("more than one result returned by query: " + queryString, nux);
+        synchronized (mutexObject) {
+            EntityManager em = manager.getEntityManager();
+            Query query = em.createQuery(queryString);
+            query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
+            query.setHint("eclipselink.maintain-cache", "false");
+            query.setHint("eclipselink.read-only", "true");
+            query.setFlushMode(FlushModeType.COMMIT);
+            try {
+                obj = query.getSingleResult();
+            } catch (javax.persistence.NoResultException nex) {
+                log.debug("no results for query: " + queryString, nex);
+            } catch (javax.persistence.NonUniqueResultException nux) {
+                log.debug("more than one result returned by query: " + queryString, nux);
+            }
         }
         return obj;
     }
@@ -532,19 +540,22 @@
      * @param queryString - query string for whcih the result to be obtained.
      */
     private void removeEntries(String queryString) {
-        EntityManager em = manager.getEntityManager();
-        Query query = em.createNativeQuery(queryString);
-        query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
-        query.setHint("eclipselink.maintain-cache", "false");
-        query.setFlushMode(FlushModeType.COMMIT);
-        try {
-            int deletedRecords = query.executeUpdate();
-            log.debug("total records deleted " + deletedRecords 
-                    + "for query:" + queryString);
-        } catch (javax.persistence.NoResultException nex) {
-            log.debug("no results:", nex);
-        } catch (javax.persistence.NonUniqueResultException nux) {
-            log.debug("more than one result returned:", nux);
+        Object mutexObject = ORMUtil.getMutexObject();
+        synchronized (mutexObject) {
+            EntityManager em = manager.getEntityManager();
+            Query query = em.createNativeQuery(queryString);
+            query.setHint("eclipselink.persistence-context.reference-mode", "WEAK");
+            query.setHint("eclipselink.maintain-cache", "false");
+            query.setFlushMode(FlushModeType.COMMIT);
+            try {
+                int deletedRecords = query.executeUpdate();
+                log.debug("total records deleted " + deletedRecords 
+                        + "for query:" + queryString);
+            } catch (javax.persistence.NoResultException nex) {
+                log.debug("no results:", nex);
+            } catch (javax.persistence.NonUniqueResultException nux) {
+                log.debug("more than one result returned:", nux);
+            }
         }
     }