Juan Hernandez has uploaded a new change for review.

Change subject: core: Make lock manager a POJO
......................................................................

core: Make lock manager a POJO

Currently this is an EJB, but it doesn't need to be.

Change-Id: I04c8d42a4712f8bff9e33c61b5498e09bcebec76
Signed-off-by: Juan Hernandez <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
R 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/InMemoryLockManager.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManager.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerFactory.java
R 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerMonitorMXBean.java
R 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/lock/InMemoryLockManagerTest.java
6 files changed, 51 insertions(+), 30 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/13261/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
index e09b919..54e861f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
@@ -58,6 +58,8 @@
 import org.ovirt.engine.core.utils.ejb.BeanProxyType;
 import org.ovirt.engine.core.utils.ejb.BeanType;
 import org.ovirt.engine.core.utils.ejb.EjbUtils;
+import org.ovirt.engine.core.utils.lock.LockManager;
+import org.ovirt.engine.core.utils.lock.LockManagerFactory;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.utils.timer.SchedulerUtilQuartzImpl;
@@ -154,6 +156,10 @@
     @Override
     public void Initialize() {
         log.info("Start initializing " + getClass().getSimpleName());
+
+        // Initialize the lock manager:
+        LockManagerFactory.getLockManager().init();
+
         // When getting a proxy to this bean using JBoss embedded, the 
initialize method is called for each method
         // invocation on the proxy, as it is called by setup method which is 
@PostConstruct - the initialized flag
         // makes sure that initialization occurs only once per class (which is 
ok, as this is a @Service)
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/InMemoryLockManager.java
similarity index 91%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java
rename to 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/InMemoryLockManager.java
index dbc3c26..48a6d7e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/InMemoryLockManager.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/InMemoryLockManager.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll.lock;
+package org.ovirt.engine.core.utils.lock;
 
 import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
@@ -13,32 +13,16 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ejb.ConcurrencyManagement;
-import javax.ejb.ConcurrencyManagementType;
-import javax.ejb.Local;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
-import org.ovirt.engine.core.utils.lock.EngineLock;
-import org.ovirt.engine.core.utils.lock.LockManager;
 
 /**
  * The following class an implementation of internal locking mechanism
  */
-@Startup
-@Singleton(name = "LockManager")
-@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
-@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
-@Local(LockManager.class)
 public class InMemoryLockManager implements LockManager, 
LockManagerMonitorMXBean {
 
     private static final Pair<Boolean, Set<String>> LOCK_INSERT_SUCCESS_RESULT 
= new Pair<Boolean, Set<String>>(Boolean.TRUE, Collections.<String>emptySet());
@@ -53,8 +37,40 @@
     private ObjectName objectName = null;
     private static Log log = LogFactory.getLog(InMemoryLockManager.class);
 
-    @PostConstruct
-    public void registerInJMX() {
+    // This flag indicates if the manager has been already initialized, so that
+    // it is safe to call the init method more than once:
+    private boolean initialized = false;
+
+    /**
+     * Initialize the manager if needed. This method can be safely called more
+     * than once and the actual initialization tasks will be performed only
+     * once.
+     */
+    public synchronized void init() {
+        if (!initialized) {
+            doInit();
+            initialized = true;
+        }
+    }
+
+    /**
+     * Perform the actual initialization tasks.
+     */
+    private void doInit() {
+        // Remember to shutdown the manager when exiting:
+        Runtime.getRuntime().addShutdownHook(
+            new Thread("Memory lock manager shutdown") {
+                public void run() {
+                    unregisterFromJMX();
+                }
+            }
+        );
+
+        // Perform the initialization tasks:
+        registerInJMX();
+    }
+
+    private void registerInJMX() {
         try {
             objectName = new ObjectName("InMemoryLockManager:type=" + 
this.getClass().getName());
             platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
@@ -64,8 +80,7 @@
         }
     }
 
-    @PreDestroy
-    public void unregisterFromJMX() {
+    private void unregisterFromJMX() {
         try {
             platformMBeanServer.unregisterMBean(this.objectName);
         } catch (Exception e) {
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManager.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManager.java
index 9527af7..f8788c0 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManager.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManager.java
@@ -11,6 +11,11 @@
 public interface LockManager {
 
     /**
+     * Initialize the lock manager.
+     */
+    void init();
+
+    /**
      * The following method will try to acquire provided lock
      * @param lock
      * @return true - in case of locked was acquired , false with set of 
appropriate error messages otherwise
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerFactory.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerFactory.java
index 2fddc3d..968f9b7 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerFactory.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerFactory.java
@@ -1,12 +1,9 @@
 package org.ovirt.engine.core.utils.lock;
 
-import org.ovirt.engine.core.utils.ejb.BeanProxyType;
-import org.ovirt.engine.core.utils.ejb.BeanType;
-import org.ovirt.engine.core.utils.ejb.EjbUtils;
-
 public class LockManagerFactory {
+    private static final LockManager instance = new InMemoryLockManager();
 
     public static LockManager getLockManager() {
-        return EjbUtils.findBean(BeanType.LOCK_MANAGER, BeanProxyType.LOCAL);
+        return instance;
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/LockManagerMonitorMXBean.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerMonitorMXBean.java
similarity index 92%
rename from 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/LockManagerMonitorMXBean.java
rename to 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerMonitorMXBean.java
index cde8c44..b76da15 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/lock/LockManagerMonitorMXBean.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/lock/LockManagerMonitorMXBean.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll.lock;
+package org.ovirt.engine.core.utils.lock;
 
 import java.util.List;
 
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/lock/InMemoryLockManagerTest.java
similarity index 97%
rename from 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
rename to 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/lock/InMemoryLockManagerTest.java
index fe18344..ff5d20d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/lock/InMemoryLockManagerTest.java
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/lock/InMemoryLockManagerTest.java
@@ -1,4 +1,4 @@
-package org.ovirt.engine.core.bll.lock;
+package org.ovirt.engine.core.utils.lock;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -15,8 +15,6 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.MockEJBStrategyRule;
 import org.ovirt.engine.core.utils.ejb.BeanType;
-import org.ovirt.engine.core.utils.lock.EngineLock;
-import org.ovirt.engine.core.utils.lock.LockManagerFactory;
 
 public class InMemoryLockManagerTest {
 


--
To view, visit http://gerrit.ovirt.org/13261
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I04c8d42a4712f8bff9e33c61b5498e09bcebec76
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Juan Hernandez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to