package com.release11; import com.mysql.cj.jdbc.MysqlDataSource; import generated.MaterialType; import generated.MaterialTypeType; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.camel.*; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jms.JmsComponent; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.support.SimpleRegistry; import org.apache.log4j.BasicConfigurator; import org.apache.camel.converter.jaxb.JaxbDataFormat; import javax.xml.bind.*; import java.util.HashMap; public class Main { public static void main(String[] args) throws Exception { //to("log:?level=INFO&showHeaders=true&showBody=true") MysqlDataSource source = new MysqlDataSource(); String jacek = "jdbc:mysql://10.101.111.19:3306/camel_db"; source.setURL(jacek); source.setUser("root"); source.setPassword("admin"); SimpleRegistry registry = new SimpleRegistry(); registry.bind("source", MysqlDataSource.class, source); CamelContext context = new DefaultCamelContext(registry); BasicConfigurator.configure(); ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.101.111.19:8088"); connectionFactory.setUserName("admin"); connectionFactory.setPassword("admin"); context.addComponent("activemq", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); context.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { JaxbDataFormat xmlDataFormat = new JaxbDataFormat(); xmlDataFormat.setContextPath("generated"); JAXBContext jaxbContext = JAXBContext.newInstance(generated.MaterialType.class); xmlDataFormat.setContext(jaxbContext); from("direct:start") .setBody(constant("SELECT * FROM material")) .to("jdbc:source") .split(body()) .to("activemq:queue:RawMaterial"); from("direct:getPackages") .setHeader("material_id", simple("${body[id]}")) .setBody(simple("SELECT * FROM package WHERE material_id = :?material_id")) .to("jdbc:source?useHeadersAsParameters=true"); from("activemq:queue:RawMaterial") .enrich("direct:getPackages", new MyAggregator()) .marshal(xmlDataFormat) .to("activemq:queue:materialPackage") .to("log:?level=INFO&showBody=true"); } }); context.start(); ProducerTemplate template = context.createProducerTemplate(); template.sendBody("direct:start", null); Thread.sleep(1000); context.stop(); } }