package io.trygvis; import io.trygvis.queue.*; import org.hibernate.dialect.*; import org.slf4j.*; import org.slf4j.bridge.*; import org.springframework.beans.factory.annotation.*; import org.springframework.context.support.*; import org.springframework.stereotype.*; import java.util.*; import static java.lang.System.*; import static java.lang.Thread.*; @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); // setProperty("hibernate.showSql", "true"); setProperty("hibernate.hbm2ddl.auto", "create"); // create setProperty("hibernate.dialect", PostgreSQL82Dialect.class.getName()); 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 AsyncService asyncService; @Autowired @Qualifier("createArticle") private AsyncService.AsyncCallable createArticleCallable; @Autowired @Qualifier("createArticle") private AsyncService.AsyncCallable/*UpdateArticleCallable*/ updateArticleCallable; public void run() throws Exception { log.info("Main.run"); JpaAsyncService.JpaQueueRef queueRef = asyncService.registerQueue("create-queue", 10, createArticleCallable); log.info("queue registered: ref = {}", queueRef); // asyncService.registerQueue("update-queue", 1, updateArticeCallable); AsyncService.QueueRef queue = asyncService.getQueue("create-queue"); List refs = new ArrayList<>(); for (int i = 0; i < 10; i++) { refs.add(asyncService.schedule(queue)); } while (true) { log.info("size = {}", refs.size()); for (Iterator iterator = refs.iterator(); iterator.hasNext(); ) { AsyncService.ExecutionRef ref = iterator.next(); ref = asyncService.update(ref); log.info("ref = {}", ref); if (ref.isDone()) { iterator.remove(); } sleep(100); } if (refs.isEmpty()) { break; } } } }