Successfully reported this slideshow.
Your SlideShare is downloading. ×

Introduction to Apache Camel

Ad

Introduction to
                 Apache Camel


Bosanac Dejan
January 2011




                            A Progress Soft...

Ad

About me

 Bosanac Dejan
 Senior Software Engineer at FUSESource - http://
  fusesource.com
 Apache ActiveMQ committer ...

Ad

What is Apache Camel?



      Apache Camel is a powerful Open Source Integration
    Framework based on known Enterprise ...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 33 Ad
1 of 33 Ad

More Related Content

Slideshows for you (19)

Introduction to Apache Camel

  1. 1. Introduction to Apache Camel Bosanac Dejan January 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 Action 2 © 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 Patterns 3 © 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 logic 4 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  5. 5. Route example Content Based Router 5 © 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.html 8 © 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/400 9 © 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 xslt 10 © 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 XQuery 12 © 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) --> B 13 © 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 ... others 14 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  15. 15. Running Camel Java Application CamelContext 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 Enterprise 16 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  17. 17. Developer Web Console 17 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company
  18. 18. FuseSource Rider 18 © 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-integration 19 © 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 1 20 © 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 2 21 © 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 2 22 © 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/ibsen 31 © 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/fusenews 32 © 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/fusenews 32 © 2010 FuseSource, a Progress Software Company. All rights reserved. A Progress Software Company

×