Author: rmannibucau
Date: Tue Aug  7 07:43:28 2012
New Revision: 1370130

URL: http://svn.apache.org/viewvc?rev=1370130&view=rev
Log:
testing jobdatamap serialization

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/timer/EjbTimerImplSerializableTest.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java?rev=1370130&r1=1370129&r2=1370130&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java
 Tue Aug  7 07:43:28 2012
@@ -271,7 +271,7 @@ public class EjbTimerServiceImpl impleme
      * @param timerData the timer that was cancelled
      */
     public void cancelled(TimerData timerData) {
-        // make sure it was removed from the strore
+        // make sure it was removed from the store
         timerStore.removeTimer(timerData.getId());
     }
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/timer/EjbTimerImplSerializableTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/timer/EjbTimerImplSerializableTest.java?rev=1370130&r1=1370129&r2=1370130&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/timer/EjbTimerImplSerializableTest.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/timer/EjbTimerImplSerializableTest.java
 Tue Aug  7 07:43:28 2012
@@ -19,9 +19,11 @@ package org.apache.openejb.timer;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.MethodContext;
 import org.apache.openejb.core.timer.CalendarTimerData;
+import org.apache.openejb.core.timer.EjbTimeoutJob;
 import org.apache.openejb.core.timer.EjbTimerService;
 import org.apache.openejb.core.timer.EjbTimerServiceImpl;
 import org.apache.openejb.core.timer.ScheduleData;
+import org.apache.openejb.core.timer.TimerData;
 import org.apache.openejb.jee.Empty;
 import org.apache.openejb.jee.StatelessBean;
 import org.apache.openejb.junit.ApplicationComposer;
@@ -30,8 +32,9 @@ import org.apache.openejb.loader.SystemI
 import org.apache.openejb.spi.ContainerSystem;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.quartz.JobDataMap;
+import org.quartz.impl.triggers.AbstractTrigger;
 
-import javax.ejb.EJB;
 import javax.ejb.Schedule;
 import javax.ejb.Stateless;
 import java.io.ByteArrayInputStream;
@@ -44,23 +47,20 @@ import static org.hamcrest.core.IsInstan
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 @RunWith(ApplicationComposer.class)
 public class EjbTimerImplSerializableTest {
     @Test
     public void serializeDeserialize() throws Exception {
-        final BeanContext context = 
SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext("EJBWithTimer");
-        final EjbTimerService timer = context.getEjbTimerService();
+        final EjbTimerService timer = timerService();
         assertNotNull(timer);
         assertThat(timer, instanceOf(EjbTimerServiceImpl.class));
 
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(baos);
-        oos.writeObject(timer);
+        final byte[] serial = serialize(timer);
+        final EjbTimerService timerDeserialized = (EjbTimerService) 
deserialize(serial);
 
-        final ByteArrayInputStream bais = new 
ByteArrayInputStream(baos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bais);
-        final EjbTimerService timerDeserialized = (EjbTimerService) 
ois.readObject();
         assertThat(timerDeserialized, instanceOf(EjbTimerServiceImpl.class));
 
         assertEqualsByReflection(timer, timerDeserialized, "deployment");
@@ -70,19 +70,11 @@ public class EjbTimerImplSerializableTes
 
     @Test
     public void serializationOfCalendarData() throws Exception {
-        final BeanContext context = 
SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext("EJBWithTimer");
-        final EjbTimerService timer = context.getEjbTimerService();
-        final MethodContext ctx = 
context.getMethodContext(EJBWithTimer.class.getMethod("doSthg"));
-        final ScheduleData sd = ctx.getSchedules().iterator().next();
-        final CalendarTimerData data = new CalendarTimerData(1, 
(EjbTimerServiceImpl) timer, context.getDeploymentID().toString(), null, 
ctx.getBeanMethod(), sd.getConfig(), sd.getExpression());
+        final CalendarTimerData data = timerData();
 
-        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        final ObjectOutputStream oos = new ObjectOutputStream(baos);
-        oos.writeObject(data);
+        final byte[] serial = serialize(data);
+        final CalendarTimerData dataDeserialized = (CalendarTimerData) 
deserialize(serial);
 
-        final ByteArrayInputStream bais = new 
ByteArrayInputStream(baos.toByteArray());
-        final ObjectInputStream ois = new ObjectInputStream(bais);
-        final CalendarTimerData dataDeserialized = (CalendarTimerData) 
ois.readObject();
         assertThat(dataDeserialized, instanceOf(CalendarTimerData.class));
 
         assertEqualsByReflection(data, dataDeserialized, "id");
@@ -91,7 +83,46 @@ public class EjbTimerImplSerializableTes
         assertEqualsByReflection(data, dataDeserialized, "info");
     }
 
-    private void assertEqualsByReflection(final Object o1, final Object o2, 
final String name) throws Exception {
+    @Test
+    public void jobDataMapSerial() throws Exception {
+        final CalendarTimerData data = timerData();
+        final EjbTimerServiceImpl timerService = (EjbTimerServiceImpl) 
timerService();
+
+        data.setScheduler(timerService.getScheduler());
+        // small hack for the test
+        final Field preventSynch = 
TimerData.class.getDeclaredField("synchronizationRegistered");
+        preventSynch.setAccessible(true);
+        preventSynch.set(data, true);
+        data.newTimer();
+
+        final AbstractTrigger<?> trigger = (AbstractTrigger<?>) 
data.getTrigger();
+        trigger.setJobName("my-job");
+        trigger.setJobGroup("my-group");
+
+        final JobDataMap triggerDataMap = trigger.getJobDataMap();
+        triggerDataMap.put(EjbTimeoutJob.EJB_TIMERS_SERVICE, timerService);
+        triggerDataMap.put(EjbTimeoutJob.TIMER_DATA, data);
+
+        final byte[] serial = serialize(triggerDataMap);
+        final JobDataMap map = (JobDataMap) deserialize(serial);
+        assertTrue(map.containsKey(EjbTimeoutJob.EJB_TIMERS_SERVICE));
+        assertTrue(map.containsKey(EjbTimeoutJob.TIMER_DATA));
+    }
+
+    private static Object deserialize(final byte[] serial) throws Exception {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(serial);
+        final ObjectInputStream ois = new ObjectInputStream(bais);
+        return ois.readObject();
+    }
+
+    private static byte[] serialize(final Object data) throws Exception {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        final ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(data);
+        return baos.toByteArray();
+    }
+
+    private static void assertEqualsByReflection(final Object o1, final Object 
o2, final String name) throws Exception {
         Class<?> clazz = o1.getClass();
         Field field = null;
         while (!Object.class.equals(clazz) && clazz.getSuperclass() != null && 
field == null) {
@@ -104,14 +135,28 @@ public class EjbTimerImplSerializableTes
             clazz = clazz.getSuperclass();
         }
 
+        if (field == null) {
+            fail();
+        }
+
         final Object v1 = field.get(o1);
         final Object v2 = field.get(o2);
 
         assertEquals(name, v1, v2);
     }
 
-    @EJB
-    private EJBWithTimer stateless;
+    private static EjbTimerService timerService() {
+        final BeanContext context = 
SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext("EJBWithTimer");
+        return context.getEjbTimerService();
+    }
+
+    public static CalendarTimerData timerData() throws Exception {
+        final BeanContext context = 
SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext("EJBWithTimer");
+        final EjbTimerService timer = context.getEjbTimerService();
+        final MethodContext ctx = 
context.getMethodContext(EJBWithTimer.class.getMethod("doSthg"));
+        final ScheduleData sd = ctx.getSchedules().iterator().next();
+        return new CalendarTimerData(1, (EjbTimerServiceImpl) timer, 
context.getDeploymentID().toString(), null, ctx.getBeanMethod(), 
sd.getConfig(), sd.getExpression());
+    }
 
     @Module
     public StatelessBean bean() {


Reply via email to