Juan Hernandez has uploaded a new change for review.

Change subject: core: Make scheduler a POJO
......................................................................

core: Make scheduler a POJO

Currently the scheduler is a singleton EJB, but it doesn't need to be,
it can be a POJO.

Change-Id: I5a9692e0c82a611b55f81afa3367838d5592884f
Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com>
---
M backend/manager/modules/beans/scheduler/pom.xml
M 
backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtil.java
M 
backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java
A 
backend/manager/modules/beans/scheduler/src/main/modules/org/ovirt/engine/core/scheduler/main/module.xml
M 
backend/manager/modules/beans/scheduler/src/test/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartsImplTest.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/BeanType.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/EngineEJBUtilsStrategy.java
M backend/manager/modules/vdsbroker/pom.xml
M ear/pom.xml
M ear/src/main/resources/META-INF/MANIFEST.MF
M packaging/fedora/spec/ovirt-engine.spec.in
14 files changed, 50 insertions(+), 114 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/22/13222/1

diff --git a/backend/manager/modules/beans/scheduler/pom.xml 
b/backend/manager/modules/beans/scheduler/pom.xml
index 94d4035..c017e2d 100644
--- a/backend/manager/modules/beans/scheduler/pom.xml
+++ b/backend/manager/modules/beans/scheduler/pom.xml
@@ -8,7 +8,7 @@
   </parent>
 
   <artifactId>scheduler</artifactId>
-  <packaging>ejb</packaging>
+  <packaging>jar</packaging>
 
   <name>engine scheduler bean</name>
 
@@ -20,11 +20,6 @@
     </dependency>
 
     <!-- external dependencies -->
-    <dependency>
-      <groupId>org.jboss.spec.javax.ejb</groupId>
-      <artifactId>jboss-ejb-api_3.1_spec</artifactId>
-    </dependency>
-
     <dependency>
       <groupId>org.quartz-scheduler</groupId>
       <artifactId>quartz</artifactId>
@@ -41,21 +36,13 @@
           </additionalClasspathElements>
         </configuration>
       </plugin>
+
+      <!-- Create the JBoss module: -->
       <plugin>
-        <artifactId>maven-ejb-plugin</artifactId>
-        <configuration>
-          <ejbVersion>3.1</ejbVersion>
-          <generateClient>true</generateClient>
-          <archive>
-            <manifest>
-              <addClasspath>false</addClasspath>
-            </manifest>
-            <manifestEntries>
-              <Dependencies>org.slf4j</Dependencies>
-            </manifestEntries>
-          </archive>
-        </configuration>
+        <groupId>org.ovirt.engine</groupId>
+        <artifactId>jboss-modules-maven-plugin</artifactId>
       </plugin>
+
     </plugins>
   </build>
 
diff --git 
a/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtil.java
 
b/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtil.java
index d55d0ad..de76298 100644
--- 
a/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtil.java
+++ 
b/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtil.java
@@ -2,12 +2,9 @@
 
 import java.util.concurrent.TimeUnit;
 
-import javax.ejb.Local;
-
 import org.quartz.Scheduler;
 import org.quartz.Trigger;
 
-@Local
 public interface SchedulerUtil {
 
     /**
@@ -112,11 +109,6 @@
      * Scheduler. The scheduler cannot be re-started.
      */
     public void shutDown();
-
-    /**
-     * Starts the scheduler
-     */
-    public void create();
 
     /**
      * @return the quartz scheduler wrapped by this SchedulerUtil
diff --git 
a/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java
 
b/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java
index 0a5bb7e..808bbf6 100644
--- 
a/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java
+++ 
b/backend/manager/modules/beans/scheduler/src/main/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartzImpl.java
@@ -12,22 +12,10 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.ejb.ConcurrencyManagement;
-import javax.ejb.ConcurrencyManagementType;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
-import javax.ejb.TransactionAttribute;
-import javax.ejb.TransactionAttributeType;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
-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.quartz.JobDataMap;
 import org.quartz.JobDetail;
 import org.quartz.Scheduler;
@@ -37,19 +25,11 @@
 import org.quartz.TriggerKey;
 import org.quartz.impl.StdSchedulerFactory;
 
-// Here we use a Singleton bean, names Scheduler.
-// The @Startup annotation is to make sure the bean is initialized on startup.
-// @ConcurrencyManagement - we use bean managed concurrency:
-// Singletons that use bean-managed concurrency allow full concurrent access 
to all the
-// business and timeout methods in the singleton.
-// The developer of the singleton is responsible for ensuring that the state 
of the singleton is synchronized across all clients.
-@Singleton(name = "Scheduler")
-@Startup
-@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
-@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
 public class SchedulerUtilQuartzImpl implements SchedulerUtil {
+    // The log:
+    private final Log log = LogFactory.getLog(SchedulerUtilQuartzImpl.class);
 
-    // consts
+    // Constants:
     public static final String RUNNABLE_INSTANCE = "runnable.instance";
     public static final String RUN_METHOD_NAME = "method.name";
     public static final String RUN_METHOD_PARAM_TYPE = "method.paramType";
@@ -59,53 +39,37 @@
     public static final String CONFIGURABLE_DELAY_KEY_NAME = 
"configDelayKeyName";
     private static final String TRIGGER_PREFIX = "trigger";
 
+    // This is a singleton and this is the instance:
+    private static final SchedulerUtil instance = new 
SchedulerUtilQuartzImpl();
+
+    public static SchedulerUtil getInstance() {
+        return instance;
+    }
+
     // members
-    private final Log log = LogFactory.getLog(SchedulerUtilQuartzImpl.class);
     private Scheduler sched;
 
     private final AtomicLong sequenceNumber = new AtomicLong(Long.MIN_VALUE);
 
-    /**
-     * This method is called upon the bean creation as part
-     * of the management Service bean lifecycle.
-     */
-    @PostConstruct
-    public void create(){
-        setup();
-    }
+    private SchedulerUtilQuartzImpl() {
+        // Remember the shutdown the scheduler when exiting:
+        Runtime.getRuntime().addShutdownHook(
+            new Thread("Scheduler shutdown") {
+                public void run() {
+                    shutDown();
+                }
+            }
+        );
 
-    /*
-     * retrieving the quartz scheduler from the factory.
-     */
-    public void setup() {
+        // Retrieve the quartz scheduler from the factory:
         try {
             SchedulerFactory sf = new StdSchedulerFactory();
             sched = sf.getScheduler();
             sched.start();
             sched.getListenerManager().addJobListener(new 
FixedDelayJobListener(this), jobGroupEquals(Scheduler.DEFAULT_GROUP));
         } catch (SchedulerException se) {
-            log.error("there is a problem with the underlying Scheduler.", se);
+            log.error("there is a problem with the underlying scheduler.", se);
         }
-    }
-
-    @PreDestroy
-    public void teardown() {
-        try {
-            if (sched != null) {
-                sched.shutdown();
-            }
-        } catch (SchedulerException e) {
-            log.error("Failed to shutdown Quartz service", e);
-        }
-    }
-
-    /**
-     * Returns the single instance of this Class.
-     *
-     * @return a SchedulerUtil instance
-     */
-    public static SchedulerUtil getInstance() {
-        return EjbUtils.findBean(BeanType.SCHEDULER, BeanProxyType.LOCAL);
     }
 
     /**
diff --git 
a/backend/manager/modules/beans/scheduler/src/main/modules/org/ovirt/engine/core/scheduler/main/module.xml
 
b/backend/manager/modules/beans/scheduler/src/main/modules/org/ovirt/engine/core/scheduler/main/module.xml
new file mode 100644
index 0000000..bafc53e
--- /dev/null
+++ 
b/backend/manager/modules/beans/scheduler/src/main/modules/org/ovirt/engine/core/scheduler/main/module.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<module xmlns="urn:jboss:module:1.0" name="org.ovirt.engine.core.scheduler">
+
+ <resources>
+   <resource-root path="scheduler.jar"/>
+ </resources>
+
+ <dependencies>
+   <module name="org.apache.commons.lang"/>
+   <module name="org.apache.commons.logging"/>
+   <module name="org.ovirt.engine.core.dependencies"/>
+ </dependencies>
+
+</module>
diff --git 
a/backend/manager/modules/beans/scheduler/src/test/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartsImplTest.java
 
b/backend/manager/modules/beans/scheduler/src/test/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartsImplTest.java
index d1e3014..ff5c7ef 100644
--- 
a/backend/manager/modules/beans/scheduler/src/test/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartsImplTest.java
+++ 
b/backend/manager/modules/beans/scheduler/src/test/java/org/ovirt/engine/core/utils/timer/SchedulerUtilQuartsImplTest.java
@@ -27,19 +27,17 @@
 
     // private final Log log = LogFactory.getLog(SchedulerUtilTest.class);
     private static List<String> messages;
-    private static SchedulerUtilQuartzImpl scheduler;
+    private static SchedulerUtil scheduler;
 
     @BeforeClass
     public static void init() {
-        // scheduler = SchedulerUtilQuartzImpl.getInstance();
-        scheduler = new SchedulerUtilQuartzImpl();
-        scheduler.setup();
+        scheduler = SchedulerUtilQuartzImpl.getInstance();
         messages = new ArrayList<String>();
     }
 
     @AfterClass
     public static void tearDown() {
-        scheduler.teardown();
+        scheduler.shutDown();
     }
 
     @Before
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 0afd470..e09b919 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
@@ -7,7 +7,6 @@
 import javax.annotation.PostConstruct;
 import javax.ejb.ConcurrencyManagement;
 import javax.ejb.ConcurrencyManagementType;
-import javax.ejb.DependsOn;
 import javax.ejb.Local;
 import javax.ejb.Singleton;
 import javax.ejb.Startup;
@@ -70,7 +69,6 @@
 // to all the business and timeout methods in the singleton.
 // The developer of the singleton is responsible for ensuring that the state
 // of the singleton is synchronized across all clients.
-@DependsOn("Scheduler")
 @Local({ BackendLocal.class, BackendInternal.class })
 @Interceptors({ ThreadLocalSessionCleanerInterceptor.class })
 @Singleton
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java
index 7be4df5..0c75c6a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker/UsersDomainsCacheManagerService.java
@@ -46,7 +46,7 @@
 // The @DependsOn annotation is in order to make sure it is started after the 
stated beans are initialized
 @Singleton
 @Startup
-@DependsOn({"Backend","Scheduler","KerberosManager"})
+@DependsOn({"Backend","KerberosManager"})
 @Local(UsersDomainsCacheManager.class)
 @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
 @ConcurrencyManagement(ConcurrencyManagementType.BEAN)
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
index 6a059b0..049a208 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/BackwardCompatibilityTaskCreationTest.java
@@ -37,6 +37,7 @@
 import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.interfaces.BackendLocal;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator;
@@ -47,7 +48,6 @@
 import org.ovirt.engine.core.utils.RandomUtilsSeedingRule;
 import org.ovirt.engine.core.utils.ejb.BeanType;
 import org.ovirt.engine.core.utils.ejb.ContainerManagedResourceType;
-import org.ovirt.engine.core.utils.timer.SchedulerUtil;
 
 /**
  * A test for task creation in the various commands.
@@ -67,7 +67,7 @@
             );
 
     @ClassRule
-    public static MockEJBStrategyRule ejbRule = new 
MockEJBStrategyRule(BeanType.SCHEDULER, mock(SchedulerUtil.class));
+    public static MockEJBStrategyRule ejbRule = new 
MockEJBStrategyRule(BeanType.BACKEND, mock(BackendLocal.class));
 
     @BeforeClass
     public static void beforeClass() {
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/BeanType.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/BeanType.java
index 8203e2d..ed6dd60 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/BeanType.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/BeanType.java
@@ -7,10 +7,8 @@
  */
 public enum BeanType {
     BACKEND, // Backend bean
-    SCHEDULER, // SchedulerUtil
     USERS_DOMAINS_CACHE,
     VDS_EVENT_LISTENER,
     LOCK_MANAGER,
     EVENTQUEUE_MANAGER;
-
 }
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/EngineEJBUtilsStrategy.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/EngineEJBUtilsStrategy.java
index 5659d31..2dac7b0 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/EngineEJBUtilsStrategy.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/ejb/EngineEJBUtilsStrategy.java
@@ -14,7 +14,6 @@
     @Override
     protected void addJNDIBeans() {
         addBeanJNDIName(BeanType.BACKEND, 
ENGINE_CONTEXT_PREFIX.concat("bll/Backend"));
-        addBeanJNDIName(BeanType.SCHEDULER, 
ENGINE_CONTEXT_PREFIX.concat("scheduler/Scheduler"));
         addBeanJNDIName(BeanType.USERS_DOMAINS_CACHE,
                 
ENGINE_CONTEXT_PREFIX.concat("bll/UsersDomainsCacheManagerService"));
         addBeanJNDIName(BeanType.VDS_EVENT_LISTENER, 
ENGINE_CONTEXT_PREFIX.concat("bll/VdsEventListener"));
diff --git a/backend/manager/modules/vdsbroker/pom.xml 
b/backend/manager/modules/vdsbroker/pom.xml
index 9679ac5..35b4190 100644
--- a/backend/manager/modules/vdsbroker/pom.xml
+++ b/backend/manager/modules/vdsbroker/pom.xml
@@ -41,8 +41,6 @@
       <groupId>${engine.groupId}</groupId>
       <artifactId>scheduler</artifactId>
       <version>${engine.version}</version>
-      <scope>provided</scope>
-      <type>ejb</type>
     </dependency>
 
     <dependency>
diff --git a/ear/pom.xml b/ear/pom.xml
index 6dc83378..171b92e 100644
--- a/ear/pom.xml
+++ b/ear/pom.xml
@@ -67,13 +67,6 @@
     <!-- ** EJB-JARs -->
     <dependency>
       <groupId>org.ovirt.engine.core</groupId>
-      <artifactId>scheduler</artifactId>
-      <version>${engine.version}</version>
-      <type>ejb</type>
-    </dependency>
-
-    <dependency>
-      <groupId>org.ovirt.engine.core</groupId>
       <artifactId>bll</artifactId>
       <version>${engine.version}</version>
       <type>ejb</type>
@@ -199,12 +192,6 @@
             </webModule>
 
             <!-- ** EJB-JARs -->
-            <ejbModule>
-              <groupId>org.ovirt.engine.core</groupId>
-              <artifactId>scheduler</artifactId>
-              <bundleFileName>scheduler.jar</bundleFileName>
-            </ejbModule>
-
             <ejbModule>
               <groupId>org.ovirt.engine.core</groupId>
               <artifactId>bll</artifactId>
diff --git a/ear/src/main/resources/META-INF/MANIFEST.MF 
b/ear/src/main/resources/META-INF/MANIFEST.MF
index b045a89..df3d12b 100644
--- a/ear/src/main/resources/META-INF/MANIFEST.MF
+++ b/ear/src/main/resources/META-INF/MANIFEST.MF
@@ -14,5 +14,6 @@
  org.ovirt.engine.core.compat,
  org.ovirt.engine.core.dal,
  org.ovirt.engine.core.dependencies,
+ org.ovirt.engine.core.scheduler,
  org.ovirt.engine.core.searchbackend,
  org.ovirt.engine.core.utils
diff --git a/packaging/fedora/spec/ovirt-engine.spec.in 
b/packaging/fedora/spec/ovirt-engine.spec.in
index a4fb29c..020cbe8 100644
--- a/packaging/fedora/spec/ovirt-engine.spec.in
+++ b/packaging/fedora/spec/ovirt-engine.spec.in
@@ -309,10 +309,10 @@
 done <<'.'
 %{engine_ear}/bll.jar
 %{engine_ear}/lib/vdsbroker.jar
-%{engine_ear}/scheduler.jar
 %{engine_jboss_modules}/org/ovirt/engine/core/common/main/common.jar
 %{engine_jboss_modules}/org/ovirt/engine/core/compat/main/compat.jar
 %{engine_jboss_modules}/org/ovirt/engine/core/dal/main/dal.jar
+%{engine_jboss_modules}/org/ovirt/engine/core/scheduler/main/scheduler.jar
 
%{engine_jboss_modules}/org/ovirt/engine/core/searchbackend/main/searchbackend.jar
 %{engine_jboss_modules}/org/ovirt/engine/core/tools/main/tools.jar
 %{engine_jboss_modules}/org/ovirt/engine/core/utils/main/utils.jar
@@ -516,7 +516,6 @@
 %{engine_ear}/META-INF
 %{engine_ear}/lib
 %{engine_ear}/bll.jar
-%{engine_ear}/scheduler.jar
 
 # Root web application:
 %{root_war}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5a9692e0c82a611b55f81afa3367838d5592884f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to