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