Introduction to Apache Camel

7,599 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,599
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
274
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Introduction to Apache Camel

  1. 1. Introduction to Apache CamelBosanac DejanJanuary 2011 A Progress Software Company
  2. 2. About me Bosanac Dejan Senior Software Engineer at FUSESource - http:// fusesource.com Apache ActiveMQ committer and PMC member Co-author of ActiveMQ in Action2 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  3. 3. What is Apache Camel? Apache Camel is a powerful Open Source Integration Framework based on known Enterprise Integration Patterns3 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  4. 4. Why Apache Camel? Integration can be messy - variety of protocols and data formats Framework hides all complexity so you can focus on your business logic4 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  5. 5. Route example Content Based Router5 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  6. 6. Content based Router - XML <camelContext> <route> <from uri="activemq:NewOrders"/> <choice> <when> <xpath>/order/product = widget</xpath> <to uri="activemq:Orders.Widgets"/> </when> <otherwise> <to uri="activemq:Orders.Gadgets"/> </otherwise> </choice> </route> </camelContext>6 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  7. 7. Content Based Router - Java DSL from("activemq:NewOrders") .choice() .when().xpath(“/order/product = widget”) .to(“activemq:Orders.Widget”) .otherwise() .to(“activemq:Orders.Gadget”);7 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  8. 8. 50 Enterprise Integration Patterns http://camel.apache.org/enterprise-integration-patterns.html8 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  9. 9. 80 Components http://camel.apache.org/components.html activemq cxf flatpack jasypt activemq-journal cxfrs freemarker javaspace amqp dataset ftp/ftps/sftp jbi atom db4o gae jcr bean direct hdfs jdbc bean validation ejb hibernate jetty browse esper hl7 jms cache event http jmx cometd exec ibatis jpa crypto file irc jt/4009 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  10. 10. 80 Components http://camel.apache.org/components.html language properties seda stream ldap quartz servlet string-template mail/imap/pop3 quickfix sip test mina ref smooks timer mock restlet smpp validation msv rmi snmp velocity nagios rnc spring-integration vm netty rng spring-security xmpp nmr rss spring-ws xquery printer scalate sql xslt10 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  11. 11. 19 Data Formats http://camel.apache.org/data-format.html bindy protobuf castor serialization csv soap crypto syslog dozer tidy markup flatpack xml beans gzip xml security hl7 xstream jaxb zip json from("activemq:QueueWithJavaObjects”) .marshal().jaxb() .to("mq:QueueWithXmlMessages");11 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  12. 12. 14 Expression Languaes http://camel.apache.org/languages.html BeanShell PHP EL Python Groovy Ruby JavaScript Simple JSR 223 SQL OGNL XPath MVEL XQuery12 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  13. 13. DSL in 3 programming Languages Java from(A).filter(isWidget).to(B);XML<route> <from ref="A"/> <filter> <xpath>/quote/product = ‘widget’</xpath> <to ref="B"/> </filter></route> Scala from(A) filter(isWidget) --> B13 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  14. 14. Running Camel Known Containers Deployment Strategy Apache ServiceMix • No container dependency • Lightweight Apache ActiveMQ • Embeddable Apache Tomcat Deployment Options Jetty • Standalone JBoss • WAR • Spring IBM WebSphere • J2EE Oracle WebLogic • JBI Oracle OC4j • OSGi • Cloud Glassfish Google App Engine ... others14 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  15. 15. Running Camel Java ApplicationCamelContext context = new DefaultCamelContext();context.addRoutes(new MyRouteBuilder());context.start(); Spring Application<camelContext> <package>com.acme</package></camelContext>15 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  16. 16. Managing Camel JMX API REST API Fuse HQ SOA management and monitoring system based on Hyperic HQ Enterprise16 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  17. 17. Developer Web Console17 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  18. 18. FuseSource Rider18 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  19. 19. Rider Auto Parts Example by Jonathan Anstey http://architects.dzone.com/articles/apache-camel-integration19 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  20. 20. Rider Auto Parts Example by Jonathan Anstey http://architects.dzone.com/articles/apache-camel-integration 120 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  21. 21. Rider Auto Parts Example by Jonathan Anstey http://architects.dzone.com/articles/apache-camel-integration 1 221 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  22. 22. Rider Auto Parts Example by Jonathan Anstey http://architects.dzone.com/articles/apache-camel-integration 1 3 222 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  23. 23. Rider Example - Spring Configuration <broker xmlns="http://activemq.apache.org/schema/core" persistent="false"> <transportConnectors> <transportConnectoruri="tcp://localhost:61616" /> </transportConnectors> </broker> <bean id="jms" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="brokerURL" value="tcp://localhost:61616"/> </bean> <bean id="helper" class="org.fusesource.camel.OrderHelper"/> <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> <package>org.fusesource.camel</package> </camelContext>  23 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  24. 24. Rider Example - Route 1 public class Route1 extends RouteBuilder { public void configure() throws Exception { from("ftp:user@rider.com?password=secret") .to("activemq:queue:incoming"); } }24 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  25. 25. Rider Example - Route 2 public class Route2 extends RouteBuilder { public void configure() throws Exception { from("jetty:http://localhost:8080/orders") .inOnly("activemq:queue:incoming") .transform().constant("OK"); } }25 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  26. 26. Rider Example - Route 3 public class Route3 extends RouteBuilder { public void configure() throws Exception { JaxbDataFormat jaxb = new JaxbDataFormat("com.rider"); BindyDataFormat bindy = new BindyDataFormat("com.rider"); from("activemq:queue:incoming") .convertBodyTo(String.class) .choice() .when().method("helper”, "isXml") .unmarshal(jaxb) .to("activemq:queue:order") .when().method("helper”, "isCsv") .unmarshal(bindy) .to("activemq:queue:order") } }26 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  27. 27. Rider Example - Data Samples XML Data <?xml version="1.0" encoding="UTF-8"?> <order name="motor" amount="1"/> CSV Data "name", "amount" "brake pad", "2"27 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  28. 28. Rider Example - Order helper public class OrderHelper { public boolean isCsv(String body) { return !body.contains("<?xml"); }   public boolean isXml(String body) { return body.contains("<?xml"); } }28 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  29. 29. Rider Example - Order Bean @XmlAccessorType(XmlAccessType.FIELD) public class Order implements Serializable { @XmlAttribute private String name; @XmlAttribute private int amount;   public Order() { }   public Order(String name, int amount) { this.name = name; this.amount = amount; }   @Override public String toString() { return "Order[" + name + " , " + amount + "]"; } }29 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  30. 30. What else is there? Error handling EIP annotations Test Kit Transactions Interceptors Security ...30 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  31. 31. More Information Where do I get more information? Camel website: http://camel.apache.org Camel article: http://architects.dzone.com/articles/apache-camel- integration Camel in Action book: http://manning.com/ibsen31 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  32. 32. Blog: http://www.nighttale.net/ Twitter: http://twitter.com/dejanb http://twitter.com/fusenews32 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  33. 33. Questions? Blog: http://www.nighttale.net/ Twitter: http://twitter.com/dejanb http://twitter.com/fusenews32 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company

×