[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