--- a/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMUtil.java Tue Apr 27 08:33:08 2010 +0300
+++ b/buildframework/helium/sf/java/jpa/src/com/nokia/helium/jpa/ORMUtil.java Wed Jun 16 16:51:40 2010 +0300
@@ -38,6 +38,10 @@
private static HashMap<String, ORMEntityManager> emMap =
new HashMap<String, ORMEntityManager>();
+ private static HashMap<String, Integer> emMapCount =
+ new HashMap<String, Integer>();
+
+ private static Object mutexObject = new Object();
private ORMUtil() {
}
@@ -50,13 +54,22 @@
log.debug("initializeORM: urlpath: " + urlPath);
if (manager == null) {
try {
+ log.debug("initializing for the first time");
manager = new ORMEntityManager(urlPath);
emMap.put(urlPath, manager);
+ Integer countObj = new Integer(1);
+ emMapCount.put(urlPath, countObj);
log.debug("initializeORM: manager: " + manager);
log.debug("initializeORM: manager: " + manager.getEntityManager());
} catch ( IOException ex ) {
throw new BuildException("Entity Manager creation failure");
}
+ } else {
+ Integer countObj = emMapCount.get(urlPath);
+ log.debug("object exists and incrementing the value");
+ countObj = new Integer(countObj.intValue() + 1);
+ log.debug("object exists count value: " + countObj.intValue());
+ emMapCount.put(urlPath, countObj);
}
}
@@ -64,7 +77,7 @@
* Helper Function to return the entity manager.
* @return entity manager created during initialization.
*/
- public static ORMEntityManager getEntityManager(String urlPath) {
+ public static synchronized ORMEntityManager getEntityManager(String urlPath) {
log.debug("getEntityManager: urlpath: " + urlPath);
ORMEntityManager manager = emMap.get(urlPath);
if (manager != null) {
@@ -80,14 +93,30 @@
/**
* Finalize the entity manager and release all the objects.
*/
- public static void finalizeORM(String urlPath) {
+ public static synchronized void finalizeORM(String urlPath) {
ORMEntityManager manager = emMap.get(urlPath);
log.debug("finalizeORM: urlpath: " + urlPath);
if (manager != null) {
- manager.finalizeEntityManager();
- manager = null;
- log.debug("finalizeORM: manager" + manager);
- emMap.remove(urlPath);
+ Integer countObj = emMapCount.get(urlPath);
+ if (countObj != null) {
+ int count = countObj.intValue();
+ count = count - 1;
+ if (count > 0) {
+ countObj = new Integer(count);
+ log.debug("countOBj value: " + countObj.intValue());
+ emMapCount.put(urlPath, countObj);
+ } else {
+ manager.finalizeEntityManager();
+ manager = null;
+ log.debug("finalizeORM: manager" + manager);
+ emMap.remove(urlPath);
+ emMapCount.remove(urlPath);
+ }
+ }
}
}
+
+ public static Object getMutexObject() {
+ return mutexObject;
+ }
}
\ No newline at end of file