[exo-jcr-commits] exo-jcr SVN: r2355 - in kernel/trunk/exo.kernel.component.common/src: test/java/org/exoplatform/services/scheduler/test and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu May 6 13:32:21 EDT 2010
Author: nfilotto
Date: 2010-05-06 13:32:20 -0400 (Thu, 06 May 2010)
New Revision: 2355
Modified:
kernel/trunk/exo.kernel.component.common/src/main/java/org/exoplatform/services/scheduler/impl/QuartzSheduler.java
kernel/trunk/exo.kernel.component.common/src/test/java/org/exoplatform/services/scheduler/test/TestSchedulerService.java
kernel/trunk/exo.kernel.component.common/src/test/resources/conf/portal/test-configuration.xml
Log:
EXOJCR-716: Fix based on an ContainerLifeCyclePlugin that will start the scheduler after all the components Startable
Modified: kernel/trunk/exo.kernel.component.common/src/main/java/org/exoplatform/services/scheduler/impl/QuartzSheduler.java
===================================================================
--- kernel/trunk/exo.kernel.component.common/src/main/java/org/exoplatform/services/scheduler/impl/QuartzSheduler.java 2010-05-06 13:57:53 UTC (rev 2354)
+++ kernel/trunk/exo.kernel.component.common/src/main/java/org/exoplatform/services/scheduler/impl/QuartzSheduler.java 2010-05-06 17:32:20 UTC (rev 2355)
@@ -18,6 +18,11 @@
*/
package org.exoplatform.services.scheduler.impl;
+import org.exoplatform.container.BaseContainerLifecyclePlugin;
+import org.exoplatform.container.ExoContainer;
+import org.exoplatform.container.ExoContainerContext;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
import org.picocontainer.Startable;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
@@ -31,13 +36,24 @@
*/
public class QuartzSheduler implements Startable
{
- private Scheduler scheduler_;
+ private static final Log log = ExoLogger.getLogger("exo.kernel.component.common.QuartzSheduler");
+
+ private final Scheduler scheduler_;
- public QuartzSheduler() throws Exception
+ public QuartzSheduler(ExoContainerContext ctx) throws Exception
{
SchedulerFactory sf = new StdSchedulerFactory();
scheduler_ = sf.getScheduler();
- scheduler_.start();
+ // This will launch the scheduler when all the components will be started
+ ctx.getContainer().addContainerLifecylePlugin(new BaseContainerLifecyclePlugin()
+ {
+
+ @Override
+ public void startContainer(ExoContainer container) throws Exception
+ {
+ scheduler_.start();
+ }
+ });
}
public Scheduler getQuartzSheduler()
@@ -57,7 +73,7 @@
}
catch (Exception ex)
{
- ex.printStackTrace();
+ log.warn("Could not shutdown the scheduler", ex);
}
}
}
Modified: kernel/trunk/exo.kernel.component.common/src/test/java/org/exoplatform/services/scheduler/test/TestSchedulerService.java
===================================================================
--- kernel/trunk/exo.kernel.component.common/src/test/java/org/exoplatform/services/scheduler/test/TestSchedulerService.java 2010-05-06 13:57:53 UTC (rev 2354)
+++ kernel/trunk/exo.kernel.component.common/src/test/java/org/exoplatform/services/scheduler/test/TestSchedulerService.java 2010-05-06 17:32:20 UTC (rev 2355)
@@ -18,15 +18,22 @@
*/
package org.exoplatform.services.scheduler.test;
+import org.exoplatform.container.BaseContainerLifecyclePlugin;
+import org.exoplatform.container.ExoContainer;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.services.scheduler.JobInfo;
import org.exoplatform.services.scheduler.JobSchedulerService;
import org.exoplatform.services.scheduler.PeriodInfo;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
import org.quartz.JobListener;
import org.quartz.TriggerListener;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
/**
* Created by The eXo Platform SAS Author : Hoa Pham hoapham at exoplatform.com Oct
@@ -48,6 +55,12 @@
{
}
+ public void testJobWithNonStartedServices() throws Exception
+ {
+ MyComponent component = (MyComponent)PortalContainer.getInstance().getComponentInstanceOfType(MyComponent.class);
+ assertEquals(Boolean.TRUE, component.getResult());
+ }
+
public void testSeviceWithGlobalListener() throws Exception
{
assertTrue("JobScheduler is not deployed correctly", service_ != null);
@@ -258,4 +271,51 @@
assertTrue("now, expect no non global trigger is found", triggerListenerCol.size() == 0);
System.out.println("-------------------End Test Non Global Listener---------");
}
+
+ public static class MyContainerLifecyclePlugin extends BaseContainerLifecyclePlugin
+ {
+
+ @Override
+ public void startContainer(ExoContainer container) throws Exception
+ {
+ MyComponent component = (MyComponent)container.getComponentInstanceOfType(MyComponent.class);
+ component.started = true;
+ }
+ }
+
+ public static class MyComponent
+ {
+ public boolean started;
+ private final CountDownLatch doneSignal = new CountDownLatch(1);
+ public Boolean result;
+
+ public void doSomething()
+ {
+ if (started)
+ {
+ result = Boolean.TRUE;
+ }
+ else
+ {
+ result = Boolean.FALSE;
+ }
+ doneSignal.countDown();
+ }
+
+ public Boolean getResult() throws InterruptedException
+ {
+ doneSignal.await(2, TimeUnit.SECONDS);
+ return result;
+ }
+ }
+
+ public static class MyJobWithNonStartedServices implements Job
+ {
+
+ public void execute(JobExecutionContext context) throws JobExecutionException
+ {
+ MyComponent component = (MyComponent)PortalContainer.getInstance().getComponentInstanceOfType(MyComponent.class);
+ component.doSomething();
+ }
+ }
}
Modified: kernel/trunk/exo.kernel.component.common/src/test/resources/conf/portal/test-configuration.xml
===================================================================
--- kernel/trunk/exo.kernel.component.common/src/test/resources/conf/portal/test-configuration.xml 2010-05-06 13:57:53 UTC (rev 2354)
+++ kernel/trunk/exo.kernel.component.common/src/test/resources/conf/portal/test-configuration.xml 2010-05-06 17:32:20 UTC (rev 2355)
@@ -21,8 +21,14 @@
-->
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www.exoplaform.org/xml/ns/kernel_1_0.xsd"
xmlns="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd">
-
+ <container-lifecycle-plugin>
+ <type>org.exoplatform.services.scheduler.test.TestSchedulerService$MyContainerLifecyclePlugin</type>
+ </container-lifecycle-plugin>
<component>
+ <type>org.exoplatform.services.scheduler.test.TestSchedulerService$MyComponent</type>
+ </component>
+
+ <component>
<key>org.exoplatform.services.net.NetService</key>
<type>org.exoplatform.services.net.impl.NetServiceImpl</type>
</component>
@@ -196,5 +202,25 @@
</properties-param>
</init-params>
</component-plugin>
+ <component-plugin>
+ <name>AddJob</name>
+ <set-method>addPeriodJob</set-method>
+ <type>org.exoplatform.services.scheduler.PeriodJob</type>
+ <description>add a job to the JobSchedulerService</description>
+ <init-params>
+ <properties-param>
+ <name>job.info</name>
+ <description>Test QueueTaks</description>
+ <property name="jobName" value="job1" />
+ <property name="groupName" value="group1" />
+ <property name="job" value="org.exoplatform.services.scheduler.test.TestSchedulerService$MyJobWithNonStartedServices" />
+
+ <property name="repeatCount" value="1" />
+ <property name="period" value="1000" />
+ <property name="startTime" value="" />
+ <property name="endTime" value="" />
+ </properties-param>
+ </init-params>
+ </component-plugin>
</external-component-plugins>
</configuration>
More information about the exo-jcr-commits
mailing list