package org.myeslib.example.hazelcast; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.apache.camel.CamelContext; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.SimpleRegistry; import org.apache.camel.main.Main; import org.myeslib.example.hazelcast.modules.CamelModule; import org.myeslib.example.hazelcast.modules.DatabaseModule; import org.myeslib.example.hazelcast.modules.HazelcastModule; import org.myeslib.example.hazelcast.modules.InventoryItemModule; import org.myeslib.example.hazelcast.routes.HzConsumeCommandsRoute; import org.myeslib.example.hazelcast.routes.HzConsumeEventsRoute; import org.myeslib.example.hazelcast.routes.ReceiveCommandsAsJsonRoute; import com.google.inject.Guice; import com.google.inject.Injector; import com.hazelcast.core.HazelcastInstance; @Slf4j public class HzExample { final Main main; final SimpleRegistry registry; final CamelContext context; static int jettyMinThreads; static int jettyMaxThreads; static int dbPoolMinConnections; static int dbPoolMaxConnections; static int eventsQueueConsumers; static int writeDelaySeconds; public static void main(String[] args) throws Exception { log.info("starting..."); jettyMinThreads = args.length ==0 ? 10 : new Integer(args[0]); jettyMaxThreads = args.length <=1 ? 100 : new Integer(args[1]); dbPoolMinConnections = args.length <=2 ? 10 : new Integer(args[2]); dbPoolMaxConnections = args.length <=3 ? 100 : new Integer(args[3]); eventsQueueConsumers = args.length <=4 ? 50 : new Integer(args[4]); writeDelaySeconds = args.length <=5 ? 0 : new Integer(args[5]) ; log.info("jettyMinThreads = {}", jettyMinThreads); log.info("jettyMaxThreads = {}", jettyMaxThreads); log.info("dbPoolMinConnections = {}", dbPoolMinConnections); log.info("dbPoolMaxConnections = {}", dbPoolMaxConnections); log.info("eventsQueueConsumers = {}", eventsQueueConsumers); log.info("writeDelaySeconds = {} ({})", writeDelaySeconds, writeDelaySeconds>0 ? "write-behind" : "write-through"); Injector injector = Guice.createInjector(new CamelModule(jettyMinThreads, jettyMaxThreads, eventsQueueConsumers), new DatabaseModule(dbPoolMinConnections, dbPoolMaxConnections), new HazelcastModule(writeDelaySeconds), new InventoryItemModule()); HzExample example = injector.getInstance(HzExample.class); example.main.run(); } @Inject HzExample(final HazelcastInstance hazelcastInstance, ReceiveCommandsAsJsonRoute receiveCommandsRoute, HzConsumeCommandsRoute consumeCommandsRoute, HzConsumeEventsRoute consumeEventsRoute ) throws Exception { this.main = new Main() ; this.main.enableHangupSupport(); this.registry = new SimpleRegistry(); this.context = new DefaultCamelContext(registry); context.addRoutes(receiveCommandsRoute); context.addRoutes(consumeCommandsRoute); context.addRoutes(consumeEventsRoute); main.getCamelContexts().clear(); main.getCamelContexts().add(context); main.setDuration(-1); /* Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { log.warn("stopping Camel..."); try { context.stop(); } catch (Exception e) { log.error(e.getMessage()); } finally { log.warn("stopping Hazelcast..."); hazelcastInstance.shutdown(); } } });*/ main.start(); log.info("started..."); } }