diff --git a/launch.sh b/launch.sh index 5e7c6ab..b7edd11 100755 --- a/launch.sh +++ b/launch.sh @@ -1,2 +1,2 @@ #!/bin/bash -mvn package && java -jar target/rufus-1.0-SNAPSHOT.jar server config.yml +mvn package && java -jar target/rufus-1.0-SNAPSHOT.jar db1 migrate config.yml --migrations src/main/resources/migrations.xml && java -jar target/rufus-1.0-SNAPSHOT.jar db2 migrate config.yml --migrations src/main/resources/migrationshsqldb.xml && java -jar target/rufus-1.0-SNAPSHOT.jar server config.yml diff --git a/src/main/java/com/tanza/rufus/RufusApplication.java b/src/main/java/com/tanza/rufus/RufusApplication.java index 7bc57ed..85cfcbc 100644 --- a/src/main/java/com/tanza/rufus/RufusApplication.java +++ b/src/main/java/com/tanza/rufus/RufusApplication.java @@ -10,6 +10,7 @@ import com.tanza.rufus.feed.FeedProcessorImpl; import com.tanza.rufus.feed.FeedUtils; import com.tanza.rufus.jobs.UserForklift; +import com.tanza.rufus.jobs.ConsistencyCheckerUsers; import com.tanza.rufus.resources.ArticleResource; import com.tanza.rufus.resources.UserResource; @@ -134,6 +135,7 @@ public void run(RufusConfiguration conf, Environment env) throws Exception { .buildAuthFilter() )); this.runUserForklift(jdbi, jdbi2); + this.runUserConsistencyChecker(jdbi, jdbi2); } public void runUserForklift(DBI h2jdbi, DBI hsqldbjdbi) throws Exception { @@ -162,5 +164,31 @@ public void runUserForklift(DBI h2jdbi, DBI hsqldbjdbi) throws Exception { } + public void runUserConsistencyChecker(DBI h2jdbi, DBI hsqldbjdbi) throws Exception { + + try{ + Scheduler sched = StdSchedulerFactory.getDefaultScheduler(); + + sched.start(); + + JobDetail ccUsers = newJob(ConsistencyCheckerUsers.class).withIdentity("ccUsers", "group2").build(); + + SimpleTrigger ccUsersTrigger = newTrigger().withIdentity("ccUsersTrigger", "group2").startNow() + .withSchedule(simpleSchedule().withIntervalInSeconds(10).repeatForever()).build(); + + + ccUsers.getJobDataMap().put(ConsistencyCheckerUsers.H2DB, h2jdbi); + ccUsers.getJobDataMap().put(ConsistencyCheckerUsers.HSQLDB, hsqldbjdbi); + + sched.scheduleJob(ccUsers, ccUsersTrigger); + Thread.yield(); + + + }catch (SchedulerException se) { + se.printStackTrace(); + } + + } + } diff --git a/src/main/java/com/tanza/rufus/jobs/ConsistencyCheckerUsers.java b/src/main/java/com/tanza/rufus/jobs/ConsistencyCheckerUsers.java new file mode 100644 index 0000000..e9362b5 --- /dev/null +++ b/src/main/java/com/tanza/rufus/jobs/ConsistencyCheckerUsers.java @@ -0,0 +1,71 @@ +package com.tanza.rufus.jobs; + +import java.util.ArrayList; +import java.util.List; + +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import org.skife.jdbi.v2.DBI; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.impl.StdSchedulerFactory; + +import com.tanza.rufus.core.User; +import com.tanza.rufus.db.UserDao; + +import static org.quartz.SimpleScheduleBuilder.*; + +import static org.quartz.JobBuilder.*; +import static org.quartz.TriggerBuilder.*; + +public class ConsistencyCheckerUsers implements org.quartz.Job { + public static final String H2DB = "h2db"; + public static final String HSQLDB = "hsqldb"; + + public ConsistencyCheckerUsers() { + + } + + public void execute(JobExecutionContext context) throws JobExecutionException { + System.out.println("Consistency check for rufususer start"); + JobDataMap data = context.getJobDetail().getJobDataMap(); + + int inconsistencies=0; + + DBI h2jdbi = (DBI) data.get(H2DB); + DBI hsqldbjdbi = (DBI) data.get(HSQLDB); + + UserDao userDao = h2jdbi.open(UserDao.class); + + List usersOldDb = userDao.getAll(); + + UserDao userDao2 = hsqldbjdbi.open(UserDao.class); + List usersNewDb= userDao2.getAll(); + + if (!usersNewDb.isEmpty()){ + for (User user : usersNewDb){ + //If the new database contains a record + //not found in the old database (inconsistency) delete it from the old database then run forklift + if(!usersOldDb.contains(user)) + userDao2.deleteUser(user.getEmail()); + } + //refresh list + usersNewDb = userDao2.getAll(); + } + + //Forklift + if (!usersOldDb.isEmpty()){ + for (User user : usersOldDb){ + if(!usersNewDb.contains(user)) + userDao2.insertUser(user); + } + } + + userDao.close(); + userDao2.close(); + } + +} +