Skip to content

Commit 2c172f2

Browse files
committed
Added Scheduler and Job support
1 parent d88625e commit 2c172f2

File tree

3 files changed

+87
-0
lines changed

3 files changed

+87
-0
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
<artifactId>Templating-Engine</artifactId>
3232
<version>1.0-SNAPSHOT</version>
3333
</dependency>
34+
<dependency>
35+
<groupId>org.javawebstack</groupId>
36+
<artifactId>Scheduler</artifactId>
37+
<version>1.0-SNAPSHOT</version>
38+
</dependency>
3439
<dependency>
3540
<groupId>org.apache.commons</groupId>
3641
<artifactId>commons-email</artifactId>

src/main/java/org/javawebstack/framework/WebApplication.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@
2727
import org.javawebstack.orm.wrapper.MySQL;
2828
import org.javawebstack.orm.wrapper.SQL;
2929
import org.javawebstack.orm.wrapper.SQLite;
30+
import org.javawebstack.scheduler.job.JobQueue;
31+
import org.javawebstack.scheduler.job.JobWorker;
32+
import org.javawebstack.scheduler.job.local.LocalJobQueue;
33+
import org.javawebstack.scheduler.job.redis.RedisJobQueue;
34+
import org.javawebstack.scheduler.job.sql.SQLJobQueue;
35+
import org.javawebstack.scheduler.scheduler.Schedule;
36+
import org.javawebstack.scheduler.scheduler.Scheduler;
37+
import org.javawebstack.scheduler.scheduler.local.LocalSchedule;
38+
import org.javawebstack.scheduler.scheduler.redis.RedisSchedule;
39+
import org.javawebstack.scheduler.scheduler.sql.SQLSchedule;
40+
import redis.clients.jedis.Jedis;
3041

3142
import java.io.IOException;
3243
import java.util.*;
@@ -46,6 +57,8 @@ public abstract class WebApplication {
4657
private final CommandSystem commandSystem = new CommandSystem();
4758
private final Map<String, Seeder> seeders = new HashMap<>();
4859
private final I18N translation = new I18N();
60+
private JobQueue jobQueue;
61+
private Schedule schedule;
4962

5063
public WebApplication() {
5164
injector = new SimpleInjector();
@@ -96,6 +109,26 @@ public WebApplication() {
96109
setupInjection(injector);
97110
modules.forEach(m -> m.setupInjection(this, injector));
98111

112+
switch (config.get("schedule.driver")) {
113+
case "DATABASE":
114+
jobQueue = new SQLJobQueue(sql, config.get("schedule.jobs.name", "default"));
115+
schedule = new SQLSchedule(sql, config.get("schedule.jobs.name", "default"));
116+
break;
117+
case "REDIS":
118+
jobQueue = new RedisJobQueue(new Jedis(config.get("redis.host", "localhost"), config.getInt("redis.port", 6379)), config.get("schedule.jobs.name", "default"));
119+
schedule = new RedisSchedule(new Jedis(config.get("redis.host", "localhost"), config.getInt("redis.port", 6379)), config.get("schedule.jobs.name", "default"));
120+
break;
121+
case "LOCAL":
122+
default:
123+
jobQueue = new LocalJobQueue();
124+
schedule = new LocalSchedule();
125+
break;
126+
}
127+
128+
129+
injector.setInstance(JobQueue.class, jobQueue);
130+
injector.setInstance(Schedule.class, schedule);
131+
99132
server = new HTTPServer()
100133
.port(config.getInt("http.server.port", 80));
101134
injector.setInstance(HTTPServer.class, server);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.javawebstack.framework.command.schedule;
2+
3+
import org.javawebstack.command.Command;
4+
import org.javawebstack.command.CommandResult;
5+
import org.javawebstack.command.CommandSystem;
6+
import org.javawebstack.framework.WebApplication;
7+
import org.javawebstack.injector.Inject;
8+
import org.javawebstack.scheduler.Worker;
9+
import org.javawebstack.scheduler.job.JobQueue;
10+
import org.javawebstack.scheduler.job.JobWorker;
11+
import org.javawebstack.scheduler.scheduler.Schedule;
12+
import org.javawebstack.scheduler.scheduler.Scheduler;
13+
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.Timer;
17+
import java.util.TimerTask;
18+
19+
public class WorkCommand implements Command {
20+
@Inject
21+
private WebApplication webApplication;
22+
23+
@Inject
24+
private JobQueue jobQueue;
25+
26+
@Inject
27+
private Schedule schedule;
28+
29+
public CommandResult execute(CommandSystem commandSystem, List<String> list, Map<String, List<String>> map) {
30+
31+
Worker worker = new Worker();
32+
worker.addWork(new JobWorker(jobQueue), new Scheduler(schedule, jobQueue));
33+
34+
int delay = 6000;
35+
36+
if (list.size() > 0) {
37+
delay = Integer.parseInt(list.get(0));
38+
}
39+
40+
Timer timer = new Timer();
41+
timer.schedule(new TimerTask() {
42+
public void run() {
43+
worker.run();
44+
}
45+
}, delay, delay);
46+
47+
return null;
48+
}
49+
}

0 commit comments

Comments
 (0)