package org.myeslib.example.jdbi.modules; import javax.inject.Singleton; import lombok.AllArgsConstructor; import org.myeslib.example.jdbi.routes.InventoryItemCmdProcessor; import org.myeslib.example.jdbi.routes.JdbiConsumeCommandsRoute; import org.myeslib.example.jdbi.routes.JdbiConsumeEventsRoute; import org.myeslib.example.jdbi.routes.ReceiveCommandsAsJsonRoute; import org.myeslib.util.gson.CommandFromStringFunction; import org.myeslib.util.hazelcast.HzJobLocker; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.name.Named; import com.hazelcast.core.HazelcastInstance; @AllArgsConstructor public class CamelModule extends AbstractModule { int jettyMinThreads; int jettyMaxThreads; @Provides @Singleton @Named("commandsDestinationUri") public String commandsDestinationUri() { return "direct:processCommand"; } @Provides @Singleton public ReceiveCommandsAsJsonRoute receiveCommandsRoute(@Named("commandsDestinationUri") String commandsDestinationUri, CommandFromStringFunction commandFromStringFunction) { String sourceUri = String.format("jetty:http://localhost:8080/inventory-item-command?minThreads=%d&maxThreads=%d", jettyMinThreads, jettyMaxThreads); return new ReceiveCommandsAsJsonRoute(sourceUri, commandsDestinationUri, commandFromStringFunction); } @Provides @Singleton public JdbiConsumeCommandsRoute jdbiConsumeCommandsRoute(@Named("commandsDestinationUri") String commandsDestinationUri, InventoryItemCmdProcessor inventoryItemCmdProcessor) { return new JdbiConsumeCommandsRoute(commandsDestinationUri, inventoryItemCmdProcessor); } @Provides @Singleton public HzJobLocker jobLocker(HazelcastInstance hzInstance) { return new HzJobLocker(hzInstance, "consumeEventsJob", "10s"); } @Override protected void configure() { bind(JdbiConsumeEventsRoute.class); bind(CommandFromStringFunction.class); } }