package com.megatim.apifdxweb.service.impl.camel; import com.megatim.apifdxweb.service.impl.camel.config.CamelRouteConfiguration; import com.megatim.apifdxweb.service.impl.camel.routes.in.FichierIntegrationLocalRoute; import com.megatim.apifdxweb.service.impl.camel.routes.in.FichierIntegrationRemoteRoute; import com.megatim.apifdxweb.service.impl.camel.routes.out.FdxStandaloneRoute; import com.megatim.apifdxweb.service.impl.camel.routes.out.FileIntegrationRoute; import com.megatim.apifdxweb.service.impl.camel.routes.in.TokenAuthentificationRoute; import com.megatim.apifdxweb.service.impl.camel.routes.in.ReferentielIntegrationLocalRoute; import com.megatim.apifdxweb.service.impl.camel.routes.in.ReferentielIntegrationRemoteRoute; import com.megatim.apifdxweb.service.impl.camel.routes.in.UserActionsRoute; import com.megatim.apifdxweb.service.impl.camel.routes.timers.DataIntegrationTimerRoute; import com.megatim.apifdxweb.service.impl.camel.routes.timers.DeleteConsumedFilesTimer; import com.megatim.apifdxweb.service.impl.camel.routes.timers.DeleteExpiredTokensTimer; import com.megatim.apifdxweb.service.impl.camel.routes.timers.MergeTypeFichierBatchDataTimer; import com.megatim.apifdxweb.tools.AppContext; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.enterprise.event.Observes; import javax.inject.Inject; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.camel.cdi.CdiCamelConfiguration; import org.apache.camel.cdi.CdiCamelContext; import org.apache.camel.component.jdbc.JdbcComponent; import org.apache.camel.component.rabbitmq.RabbitMQComponent; @Singleton @Startup public class CamelBootstrap { @Inject private CdiCamelContext camelContext; @Resource(lookup = AppContext.JNDI_NAME) private DataSource dataSource; @Inject private FdxStandaloneRoute fdxStandaloneRoute; @Inject private FileIntegrationRoute fileIntegrationRoute; @Inject private TokenAuthentificationRoute tokenAuthentificationRoute; @Inject private UserActionsRoute userActionsRoute; @Inject private FichierIntegrationLocalRoute fichierIntegrationLocalRoute; @Inject private ReferentielIntegrationLocalRoute referentielIntegrationLocalRoute; @Inject private FichierIntegrationRemoteRoute fichierIntegrationRemoteRoute; @Inject private ReferentielIntegrationRemoteRoute referentielIntegrationRemoteRoute; @Inject private DataIntegrationTimerRoute dataIntegrationTimerRoute; @Inject private MergeTypeFichierBatchDataTimer mergeBatchDataTimer; @Inject private DeleteConsumedFilesTimer deleteConsumedFilesTimer; @Inject private DeleteExpiredTokensTimer deleteExpiredTokensTimer; @PostConstruct public void init() { try { addDataSourceToContext(); addRabbitMQComponent(); loadJMSRoutes(); loadIntegrationRoutes(); loadTimers(); } catch (Exception ex) { Logger.getLogger(CamelBootstrap.class.getName()).log(Level.SEVERE, null, ex); } } private void loadIntegrationRoutes() throws Exception { CamelRouteConfiguration camelRouteConfiguration = new CamelRouteConfiguration(AppContext.PROPERTY_FILE_PATH); if (camelRouteConfiguration.hasCorrectLocalConfig()) { loadLocalIntegrationRoutes(); if (camelRouteConfiguration.hasCorrectStfpConfig()) { loadRemoteIntegrationRoutes(); } } } private void loadRemoteIntegrationRoutes() throws Exception { camelContext.addRoutes(fichierIntegrationRemoteRoute); camelContext.addRoutes(referentielIntegrationRemoteRoute); } private void loadLocalIntegrationRoutes() throws Exception { camelContext.addRoutes(fichierIntegrationLocalRoute); camelContext.addRoutes(referentielIntegrationLocalRoute); camelContext.addRoutes(fdxStandaloneRoute); } private void loadJMSRoutes() throws Exception { camelContext.addRoutes(fileIntegrationRoute); camelContext.addRoutes(tokenAuthentificationRoute); camelContext.addRoutes(userActionsRoute); } private void loadTimers() throws Exception { camelContext.addRoutes(dataIntegrationTimerRoute); camelContext.addRoutes(mergeBatchDataTimer); camelContext.addRoutes(deleteConsumedFilesTimer); camelContext.addRoutes(deleteExpiredTokensTimer); } private void addDataSourceToContext() throws NamingException { JdbcComponent jdbcComponent = new JdbcComponent(); jdbcComponent.setDataSource(dataSource); camelContext.addComponent("jdbc", jdbcComponent); } private void addRabbitMQComponent() throws NamingException { // Add RabbitMQ Component with connection details RabbitMQComponent rabbitMQComponent = new RabbitMQComponent(); rabbitMQComponent.setHostname("localhost"); rabbitMQComponent.setPortNumber(5672); rabbitMQComponent.setPortNumber(5672); rabbitMQComponent.setUsername("guest"); rabbitMQComponent.setPassword("guest"); camelContext.addComponent("rabbitmq", rabbitMQComponent); } public static void configuration(@Observes CdiCamelConfiguration configuration) { configuration.autoConfigureRoutes(false); } }