From 9e22f3a23666431196da8be73744f275b33628cc Mon Sep 17 00:00:00 2001 From: arpit728 Date: Sun, 15 Jul 2018 13:36:33 +0530 Subject: [PATCH] Fixed timezone issue while executing job with timezone --- .../org/redisson/RedissonExecutorService.java | 69 ++++--------------- .../org/redisson/executor/CronExpression.java | 27 ++++---- .../executor/RemoteExecutorService.java | 4 +- .../executor/RemoteExecutorServiceAsync.java | 4 +- .../redisson/executor/TasksRunnerService.java | 27 ++++---- 5 files changed, 44 insertions(+), 87 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonExecutorService.java b/redisson/src/main/java/org/redisson/RedissonExecutorService.java index 15c2ffbed..1efc9efc9 100644 --- a/redisson/src/main/java/org/redisson/RedissonExecutorService.java +++ b/redisson/src/main/java/org/redisson/RedissonExecutorService.java @@ -15,61 +15,18 @@ */ package org.redisson; -import java.io.DataInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.ref.ReferenceQueue; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.concurrent.atomic.AtomicReference; - -import org.redisson.api.CronSchedule; -import org.redisson.api.ExecutorOptions; -import org.redisson.api.RAtomicLong; -import org.redisson.api.RExecutorBatchFuture; -import org.redisson.api.RExecutorFuture; -import org.redisson.api.RFuture; -import org.redisson.api.RRemoteService; -import org.redisson.api.RScheduledExecutorService; -import org.redisson.api.RScheduledFuture; -import org.redisson.api.RSemaphore; -import org.redisson.api.RTopic; -import org.redisson.api.RemoteInvocationOptions; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.util.concurrent.FutureListener; +import io.netty.util.internal.PlatformDependent; +import org.redisson.api.*; import org.redisson.api.listener.MessageListener; import org.redisson.client.codec.Codec; import org.redisson.client.codec.LongCodec; import org.redisson.client.protocol.RedisCommands; import org.redisson.command.CommandExecutor; import org.redisson.connection.ConnectionManager; -import org.redisson.executor.RedissonExecutorBatchFuture; -import org.redisson.executor.RedissonExecutorFuture; -import org.redisson.executor.RedissonExecutorFutureReference; -import org.redisson.executor.RedissonExecutorRemoteService; -import org.redisson.executor.RedissonScheduledFuture; -import org.redisson.executor.RemoteExecutorService; -import org.redisson.executor.RemoteExecutorServiceAsync; -import org.redisson.executor.RemotePromise; -import org.redisson.executor.ScheduledTasksService; -import org.redisson.executor.TasksBatchService; -import org.redisson.executor.TasksRunnerService; -import org.redisson.executor.TasksService; +import org.redisson.executor.*; import org.redisson.misc.Injector; import org.redisson.misc.PromiseDelegator; import org.redisson.misc.RPromise; @@ -80,10 +37,14 @@ import org.redisson.remote.ResponseEntry.Result; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; -import io.netty.util.concurrent.FutureListener; -import io.netty.util.internal.PlatformDependent; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.ref.ReferenceQueue; +import java.lang.reflect.Modifier; +import java.util.*; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicReference; /** * @@ -854,7 +815,7 @@ public class RedissonExecutorService implements RScheduledExecutorService { throw new IllegalArgumentException("Wrong cron expression! Unable to calculate start date"); } long startTime = startDate.getTime(); - RemotePromise result = (RemotePromise) asyncScheduledServiceAtFixed.schedule(task.getClass().getName(), classBody, state, startTime, cronSchedule.getExpression().getCronExpression(), executorId, null); + RemotePromise result = (RemotePromise) asyncScheduledServiceAtFixed.schedule(task.getClass().getName(), classBody, state, startTime, cronSchedule.getExpression(), executorId, null); addListener(result); RedissonScheduledFuture f = new RedissonScheduledFuture(result, startTime) { public long getDelay(TimeUnit unit) { diff --git a/redisson/src/main/java/org/redisson/executor/CronExpression.java b/redisson/src/main/java/org/redisson/executor/CronExpression.java index 862b41c4d..babff2df8 100644 --- a/redisson/src/main/java/org/redisson/executor/CronExpression.java +++ b/redisson/src/main/java/org/redisson/executor/CronExpression.java @@ -32,24 +32,21 @@ package org.redisson.executor; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonProperty; + import java.io.Serializable; import java.text.ParseException; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; -import java.util.SortedSet; -import java.util.StringTokenizer; -import java.util.TimeZone; -import java.util.TreeSet; +import java.util.*; + +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY; /** * @author Sharada Jambula, James House * @author Contributions from Mads Henderson * @author Refactoring from CronTrigger to CronExpression by Aaron Craven */ +@JsonAutoDetect(creatorVisibility = ANY, fieldVisibility = ANY) public final class CronExpression implements Serializable, Cloneable { private static final long serialVersionUID = 12423409423L; @@ -111,19 +108,19 @@ public final class CronExpression implements Serializable, Cloneable { public static final int MAX_YEAR = Calendar.getInstance().get(Calendar.YEAR) + 100; /** - * Constructs a new CronExpression based on the specified + * Constructs a new CronExpression based on the specified * parameter. - * + * * @param cronExpression String representation of the cron expression the * new object should represent */ - public CronExpression(String cronExpression) { + public CronExpression(@JsonProperty("cronExpression") String cronExpression) { if (cronExpression == null) { throw new IllegalArgumentException("cronExpression cannot be null"); } - + this.cronExpression = cronExpression.toUpperCase(Locale.US); - + try { buildExpression(this.cronExpression); } catch (ParseException e) { diff --git a/redisson/src/main/java/org/redisson/executor/RemoteExecutorService.java b/redisson/src/main/java/org/redisson/executor/RemoteExecutorService.java index da6015740..6ecd1b17f 100644 --- a/redisson/src/main/java/org/redisson/executor/RemoteExecutorService.java +++ b/redisson/src/main/java/org/redisson/executor/RemoteExecutorService.java @@ -33,7 +33,7 @@ public interface RemoteExecutorService { void scheduleAtFixedRate(String className, byte[] classBody, byte[] state, long startTime, long period, String executorId, String requestId); void scheduleWithFixedDelay(String className, byte[] classBody, byte[] state, long startTime, long delay, String executorId, String requestId); - - void schedule(String className, byte[] classBody, byte[] state, long startTime, String cronExpression, String executorId, String requestId); + + void schedule(String className, byte[] classBody, byte[] state, long startTime, CronExpression cronExpression, String executorId, String requestId); } diff --git a/redisson/src/main/java/org/redisson/executor/RemoteExecutorServiceAsync.java b/redisson/src/main/java/org/redisson/executor/RemoteExecutorServiceAsync.java index f4d7b7517..dde2d2bab 100644 --- a/redisson/src/main/java/org/redisson/executor/RemoteExecutorServiceAsync.java +++ b/redisson/src/main/java/org/redisson/executor/RemoteExecutorServiceAsync.java @@ -37,7 +37,7 @@ public interface RemoteExecutorServiceAsync { RFuture scheduleAtFixedRate(String className, byte[] classBody, byte[] state, long startTime, long period, String executorId, String requestId); RFuture scheduleWithFixedDelay(String className, byte[] classBody, byte[] state, long startTime, long delay, String executorId, String requestId); - - RFuture schedule(String className, byte[] classBody, byte[] state, long startTime, String cronExpression, String executorId, String requestId); + + RFuture schedule(String className, byte[] classBody, byte[] state, long startTime, CronExpression cronExpression, String executorId, String requestId); } diff --git a/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java b/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java index 31148d255..4c4e4c03d 100644 --- a/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java +++ b/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java @@ -15,13 +15,12 @@ */ package org.redisson.executor; -import java.io.IOException; -import java.util.Arrays; -import java.util.Date; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.TimeUnit; - +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.util.Timeout; +import io.netty.util.TimerTask; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.FutureListener; import org.redisson.Redisson; import org.redisson.RedissonExecutorService; import org.redisson.RedissonShutdownException; @@ -38,12 +37,12 @@ import org.redisson.misc.Injector; import org.redisson.remote.RequestId; import org.redisson.remote.ResponseEntry; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import io.netty.util.Timeout; -import io.netty.util.TimerTask; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.FutureListener; +import java.io.IOException; +import java.util.Arrays; +import java.util.Date; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; /** * Executor service runs Callable and Runnable tasks. @@ -119,7 +118,7 @@ public class TasksRunnerService implements RemoteExecutorService { } @Override - public void schedule(String className, byte[] classBody, byte[] state, long startTime, String cronExpression, String executorId, String requestId) { + public void schedule(String className, byte[] classBody, byte[] state, long startTime, CronExpression cronExpression, String executorId, String requestId) { Date nextStartDate = new CronExpression(cronExpression).getNextValidTimeAfter(new Date()); RFuture future = null; if (nextStartDate != null) {