package io.trygvis.test; import io.trygvis.async.AsyncService; import io.trygvis.queue.Queue; import io.trygvis.queue.QueueService; import io.trygvis.queue.Task; import io.trygvis.queue.TaskEffect; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.bridge.SLF4JBridgeHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionTemplate; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import static java.lang.System.*; import static java.lang.Thread.sleep; @Component public class Main { private static final Logger log = LoggerFactory.getLogger(Main.class); public static void main(String[] args) throws Exception { SLF4JBridgeHandler.install(); String username = getProperty("user.name"); setProperty("database.url", getProperty("jdbc.url", "jdbc:postgresql://localhost/" + username)); setProperty("database.username", username); setProperty("database.password", username); log.info("Starting context"); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); log.info("Started context"); try { context.getBean(Main.class).run(); // log.info("Sleeping"); // sleep(1000 * 1000); } catch (Exception e) { e.printStackTrace(System.out); } log.info("Stopping context"); context.stop(); log.info("Stopped context"); exit(0); } @Autowired private TransactionTemplate transactionTemplate; @Autowired private AsyncService asyncService; @Autowired private QueueService queueService; @Autowired @Qualifier("createArticle") private TaskEffect createArticleCallable; @Autowired @Qualifier("updateArticle") private TaskEffect updateArticleCallable; public void run() throws Exception { log.info("Main.run"); final Queue q = null; // queueService.lookupQueue(c, "create-article", 1); QueueService.TaskExecutionRequest req = new QueueService.TaskExecutionRequest(100, true); asyncService.registerQueue(q, req, createArticleCallable); // log.info("queue registered: ref = {}", q); // asyncService.registerQueue("update-queue", 1, updateArticleCallable); // q = asyncService.lookupQueue("create-queue"); final List tasks = new ArrayList<>(); final int count = 1; log.info("Creating {} tasks", count); // transactionTemplate.execute(new TransactionCallbackWithoutResult() { // protected void doInTransactionWithoutResult(TransactionStatus status) { // for (int i = 0; i < count; i++) { // tasks.add(asyncService.schedule(q)); // } // } // }); log.info("Created {} tasks", count); while (true) { sleep(10000); log.info("Checking for status of {} tasks", tasks.size()); for (Iterator iterator = tasks.iterator(); iterator.hasNext(); ) { Task task = iterator.next(); task = asyncService.update(task); // log.info("task = {}", task); if (task.isDone()) { iterator.remove(); } } if (tasks.isEmpty()) { log.info("No more tasks"); break; } } } }