You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ge...@apache.org on 2011/05/26 05:35:55 UTC

svn commit: r1127768 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/core/timer/EJBCronTrigger.java test/java/org/apache/openejb/timer/EJBCronTriggerTest.java

Author: genspring
Date: Thu May 26 03:35:55 2011
New Revision: 1127768

URL: http://svn.apache.org/viewvc?rev=1127768&view=rev
Log:
OPENEJB-1542 Implement the Expression Rules defined in ejb3.1 spec 18.2.1.2

additional logic and unit cases.

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/timer/EJBCronTriggerTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java?rev=1127768&r1=1127767&r2=1127768&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java Thu May 26 03:35:55 2011
@@ -467,10 +467,15 @@ public class EJBCronTrigger extends Trig
                     nextDayOfWeek = expressions[3].getNextValue(calendarDayOfWeek);
                 }
 
-                if (value != null && nextDayOfWeek != null) {
+                if (nextDayOfWeek != null) {
                     calendarDayOfWeek.set(expressions[3].field, nextDayOfWeek);
                     int newDayOfMonth = calendarDayOfWeek.get(expressions[2].field);
-                    value = Math.min(value, newDayOfMonth);
+                    
+                    if (value == null) {
+                        value = newDayOfMonth;
+                    } else {
+                        value = Math.min(value, newDayOfMonth);
+                    }
                     //Next valid DayOfWeek might exist in next month.
                     calendar.set(Calendar.MONTH, calendarDayOfWeek.get(Calendar.MONTH));
                 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/timer/EJBCronTriggerTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/timer/EJBCronTriggerTest.java?rev=1127768&r1=1127767&r2=1127768&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/timer/EJBCronTriggerTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/timer/EJBCronTriggerTest.java Thu May 26 03:35:55 2011
@@ -70,7 +70,7 @@ public class EJBCronTriggerTest {
 	@Test(timeout = 1000)
 	public void testIncrementsA() throws ParseException {
 		ScheduleExpression expr = new ScheduleExpression().year(2008).month(1).dayOfMonth(20)
-				.dayOfWeek("sun").hour("6/3").minute(30).start(new Date(0));
+				.hour("6/3").minute(30).start(new Date(0));
 		EJBCronTrigger trigger = new EJBCronTrigger(expr);
 
 		// Should fire on Sunday, January 20th, first at 6:30
@@ -127,20 +127,35 @@ public class EJBCronTriggerTest {
         assertEquals(new GregorianCalendar(2011, 1, 5, 0, 0, 5).getTime(), trigger.getFireTimeAfter(new GregorianCalendar(2011, 1, 5, 0, 0, 4).getTime()));
         assertEquals(new GregorianCalendar(2011, 1, 5, 0, 1, 5).getTime(), trigger.getFireTimeAfter(new GregorianCalendar(2011, 1, 5, 0, 0, 6).getTime()));
 	}
+	
 
-	@Test(timeout = 5000000)
+	@Test(timeout = 5000)
     public void testBothDayOfMonthAndDayOfWeekA() throws ParseException {
         ScheduleExpression expr = new ScheduleExpression().dayOfMonth("5").dayOfWeek("6").year(2010).start(new Date(0));
         EJBCronTrigger trigger = new EJBCronTrigger(expr);
         assertEquals(new GregorianCalendar(2010, 6, 3, 0, 0, 0).getTime(), trigger.getFireTimeAfter(new GregorianCalendar(2010, 6, 1, 0, 0, 0).getTime()));
     }
 
-	@Test(timeout = 5000000)
+	@Test(timeout = 5000)
     public void testBothDayOfMonthAndDayOfWeekB() throws ParseException {
         ScheduleExpression expr = new ScheduleExpression().dayOfMonth("last").dayOfWeek("3").year(2011).start(new Date(0));
         EJBCronTrigger trigger = new EJBCronTrigger(expr);
         assertEquals(new GregorianCalendar(2011, 4, 11, 0, 0, 0).getTime(), trigger.getFireTimeAfter(new GregorianCalendar(2011, 4, 7, 0, 0, 0).getTime()));
     }
+	
+   @Test(timeout = 5000)
+    public void testBothDayOfMonthAndDayOfWeekC() throws ParseException {
+        ScheduleExpression expr = new ScheduleExpression().year(2011).dayOfMonth("18").dayOfWeek("3").hour(23).minute(59).second(58).start(new Date(0));
+        EJBCronTrigger trigger = new EJBCronTrigger(expr);
+        assertEquals(new GregorianCalendar(2011, 4, 25, 23, 59, 58).getTime(), trigger.getFireTimeAfter(new GregorianCalendar(2011, 4, 18, 23, 59, 59).getTime()));
+    }	
+   
+   @Test(timeout = 5000)
+   public void testBothDayOfMonthAndDayOfWeekD() throws ParseException {
+       ScheduleExpression expr = new ScheduleExpression().year(2011).dayOfMonth("19").dayOfWeek("3").hour(23).minute(59).second(59).start(new GregorianCalendar(2011, 4, 18, 23, 59, 58).getTime());
+       EJBCronTrigger trigger = new EJBCronTrigger(expr);
+       assertEquals(new GregorianCalendar(2011, 4, 18, 23, 59, 59).getTime(), trigger.getFireTimeAfter(new GregorianCalendar(2011, 4, 18, 23, 59, 58).getTime()));
+   }
 
 	@Test(timeout = 5000)
     public void testLastDayOfMonthA() throws ParseException {