You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/09/04 14:04:04 UTC
svn commit: r1519990 - in /tomee/tomee/trunk/container/openejb-core/src:
main/java/org/apache/openejb/core/timer/
test/java/org/apache/openejb/timer/ test/resources/
Author: rmannibucau
Date: Wed Sep 4 12:04:04 2013
New Revision: 1519990
URL: http://svn.apache.org/r1519990
Log:
correct serializability for TimerData and related expressions
Removed:
tomee/tomee/trunk/container/openejb-core/src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/GetTimerTest.java
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java?rev=1519990&r1=1519989&r2=1519990&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EJBCronTrigger.java Wed Sep 4 12:04:04 2013
@@ -21,6 +21,7 @@ import org.apache.openejb.util.Logger;
import org.quartz.impl.triggers.CronTriggerImpl;
import javax.ejb.ScheduleExpression;
+import java.io.Serializable;
import java.text.DateFormatSymbols;
import java.util.ArrayList;
import java.util.Calendar;
@@ -576,7 +577,7 @@ public class EJBCronTrigger extends Cron
}
- private abstract static class FieldExpression {
+ private abstract static class FieldExpression implements Serializable {
protected static final Calendar CALENDAR = new GregorianCalendar(Locale.US); // For getting min/max field values
@@ -624,14 +625,8 @@ public class EJBCronTrigger extends Cron
}
protected boolean isValidResult(Calendar calendar, Integer result){
-
- if (result!=null && result>=calendar.getActualMinimum(field) && result <=calendar.getActualMaximum(field)){
- return true;
- }
-
- return false;
-
- }
+ return result != null && result >= calendar.getActualMinimum(field) && result <= calendar.getActualMaximum(field);
+ }
/**
* Returns the next allowed value in this calendar for the given
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java?rev=1519990&r1=1519989&r2=1519990&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java Wed Sep 4 12:04:04 2013
@@ -125,6 +125,7 @@ public abstract class TimerData implemen
out.writeObject(primaryKey);
out.writeObject(timerService);
out.writeObject(info);
+ out.writeObject(trigger);
out.writeUTF(timeoutMethod.getName());
}
@@ -143,12 +144,14 @@ public abstract class TimerData implemen
primaryKey = in.readObject();
timerService = (EjbTimerServiceImpl) in.readObject();
info = in.readObject();
+ trigger = AbstractTrigger.class.cast(in.readObject());
} catch (ClassNotFoundException e) {
throw new IOException(e);
}
final String mtd = in.readUTF();
final BeanContext beanContext = SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext(deploymentId);
+ scheduler = timerService.getScheduler();
for (Iterator<Map.Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
final MethodContext methodContext = it.next().getValue();
/* this doesn't work in all cases
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/GetTimerTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/GetTimerTest.java?rev=1519990&r1=1519989&r2=1519990&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/GetTimerTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/GetTimerTest.java Wed Sep 4 12:04:04 2013
@@ -29,13 +29,16 @@ import javax.ejb.EJB;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Schedule;
+import javax.ejb.ScheduleExpression;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
+import java.util.Calendar;
import java.util.Collection;
+import java.util.concurrent.Semaphore;
import static org.junit.Assert.assertEquals;
@@ -54,6 +57,8 @@ public class GetTimerTest {
assertEquals(0, bean.timers().size());
bean.newTimer();
assertEquals(1, bean.timers().size());
+ bean.awaitTimeout();
+ assertEquals(1, bean.timers().size());
}
@Singleton
@@ -61,17 +66,27 @@ public class GetTimerTest {
@Lock(LockType.READ)
public static class TimerLister {
@Resource
- private TimerService ts;
+ private TimerService timerService;
private Timer timer = null;
+ private Semaphore sema = new Semaphore(0);
@Timeout
public void timeout(final Timer timer) {
- // no-op: not important for that test
+ System.out.println("@Timeout");
+ sema.release();
+ }
+
+ public void awaitTimeout() {
+ try {
+ sema.acquire();
+ } catch (final InterruptedException e) {
+ // no-op
+ }
}
public Collection<Timer> timers() {
- return ts.getTimers();
+ return timerService.getTimers();
}
@PreDestroy
@@ -87,7 +102,17 @@ public class GetTimerTest {
}
public void newTimer() {
- timer = ts.createIntervalTimer(3000, 1000, new TimerConfig(System.currentTimeMillis(), false));
+ final TimerConfig tc = new TimerConfig("my-timer", true);
+ final ScheduleExpression se = new ScheduleExpression();
+ final Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.SECOND, 2);
+ se.second(calendar.get(Calendar.SECOND) + "/3");
+ se.minute("*");
+ se.hour("*");
+ se.dayOfMonth("*");
+ se.dayOfWeek("*");
+ se.month("*");
+ timer = timerService.createCalendarTimer(se, tc);
}
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java?rev=1519990&r1=1519989&r2=1519990&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/timer/QuartzPersistenceForEJBTimersTest.java Wed Sep 4 12:04:04 2013
@@ -34,16 +34,19 @@ import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Schedule;
+import javax.ejb.ScheduleExpression;
import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
+import java.util.Calendar;
import java.util.Collection;
import java.util.Properties;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
@RunWith(ApplicationComposer.class)
public class QuartzPersistenceForEJBTimersTest {
@@ -52,10 +55,17 @@ public class QuartzPersistenceForEJBTime
@Test
public void doTest() {
- assertNotNull(bean);
assertEquals(0, bean.timers().size());
bean.newTimer();
assertEquals(1, bean.timers().size());
+ while (!bean.awaitTimeout()) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // no-op
+ }
+ }
+ assertEquals(1, bean.timers().size());
}
@Module
@@ -99,10 +109,10 @@ public class QuartzPersistenceForEJBTime
.p("QuartzPersistenceForEJBTimersDB.UserName", "SA")
.p("QuartzPersistenceForEJBTimersDB.Password", "")
- // see src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx.sql for the init script
+ // see src/test/resources/import-QuartzPersistenceForEJBTimersDBNoTx-.sql for the init script
.p("QuartzPersistenceForEJBTimersDBNoTx", "new://Resource?type=DataSource")
.p("QuartzPersistenceForEJBTimersDBNoTx.JtaManaged", "false")
- .p("QuartzPersistenceForEJBTimersDBNoTx.JdbcUrl", "jdbc:hsqldb:mem:QuartzPersistenceForEJBTimersDBNoTx")
+ .p("QuartzPersistenceForEJBTimersDBNoTx.JdbcUrl", "jdbc:hsqldb:mem:QuartzPersistenceForEJBTimersDB")
.p("QuartzPersistenceForEJBTimersDBNoTx.UserName", "SA")
.p("QuartzPersistenceForEJBTimersDBNoTx.Password", "")
.build();
@@ -111,17 +121,28 @@ public class QuartzPersistenceForEJBTime
@Singleton
public static class MyTimedEjb {
@Resource
- private TimerService ts;
+ private TimerService timerService;
private Timer timer = null;
+ private Semaphore sema = new Semaphore(0);
@Timeout
public void timeout(final Timer timer) {
- // no-op: not important for that test
+ System.out.println("@Timeout on " + timer.getInfo());
+ sema.release();
+ }
+
+ public boolean awaitTimeout() {
+ try {
+ return sema.tryAcquire(1, TimeUnit.SECONDS);
+ } catch (final InterruptedException e) {
+ // no-op
+ }
+ return false;
}
public Collection<Timer> timers() {
- return ts.getTimers();
+ return timerService.getTimers();
}
@PreDestroy
@@ -137,7 +158,17 @@ public class QuartzPersistenceForEJBTime
}
public void newTimer() {
- timer = ts.createIntervalTimer(3000, 1000, new TimerConfig(System.currentTimeMillis(), false));
+ final TimerConfig tc = new TimerConfig("my-timer", true);
+ final ScheduleExpression se = new ScheduleExpression();
+ final Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.SECOND, 2);
+ se.second(calendar.get(Calendar.SECOND) + "/3");
+ se.minute("*");
+ se.hour("*");
+ se.dayOfMonth("*");
+ se.dayOfWeek("*");
+ se.month("*");
+ timer = timerService.createCalendarTimer(se, tc);
}
}
}