Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EAI War Stories

EAI War Stories

Slides for our talk at #OOP2014

Aba82ecdcf1e1534f2c579d124d8cd35?s=128

Alexander Heusingfeld

February 04, 2014
Tweet

Transcript

  1. We take care of it - personally! © 2014 innoQ

    Deutschland GmbH EAI War Stories Praxisbeispiele zu EAI-Pattern und Lessons Learned ! Alexander Heusingfeld, @goldstift Martin Huber, @waterback
  2. © 2014 innoQ Deutschland GmbH EAI Pattern in 2013? Nobody

    uses them anymore!
  3. © 2014 innoQ Deutschland GmbH That’s THE problem!

  4. © 2014 innoQ Deutschland GmbH Multitude of potential service consumers

    Integration is ubiquitous CRM Application
  5. © 2014 innoQ Deutschland GmbH Multitude of potential service consumers

    Integration is ubiquitous CRM Application ERP Application
  6. © 2014 innoQ Deutschland GmbH Multitude of potential service consumers

    Integration is ubiquitous CRM Application ?
  7. © 2014 innoQ Deutschland GmbH Multitude of potential service consumers

    Integration is ubiquitous CRM Application
  8. We take care of it - personally! © 2014 innoQ

    Deutschland GmbH Integration Styles
  9. © 2014 innoQ Deutschland GmbH File Transfer http://www.eaipatterns.com/FileTransferIntegration.

  10. © 2014 innoQ Deutschland GmbH Shared Database http://www.eaipatterns.com/SharedDataBaseIntegration.

  11. © 2014 innoQ Deutschland GmbH Remote Procedure Invocation http://www.eaipatterns.com/EncapsulatedSynchronousIntegration.

  12. © 2014 innoQ Deutschland GmbH Messaging http://www.eaipatterns.com/Messaging.h

  13. © 2013 innoQ Deutschland GmbH Messaging? http://bit.ly/PtrhWy

  14. © 2014 innoQ Deutschland GmbH Searching for a book? Enterprise

    Integration Patterns (Hohpe & Woolf), 2003 www.eaipatterns.com Swiss-army knife for asynchronous messaging
  15. We take care of it - personally! © 2014 innoQ

    Deutschland GmbH Theories in practice
  16. © 2014 innoQ Deutschland GmbH Simple order management system (CRUD)

    Real Life Scenario order management system
  17. © 2014 innoQ Deutschland GmbH Simple ChangeRequest order management system

  18. © 2014 innoQ Deutschland GmbH Simple ChangeRequest We need an

    importer! order management system
  19. © 2013 innoQ Deutschland GmbH A Java EE servlet to

    the rescue @WebServlet(urlPatterns = {"/order/import"})! public class ImporterServlet extends HttpServlet {! ! @Inject OrderBean bean;! @Inject CsvDataParser parser;! ! @Override! protected void doPost(HttpServletRequest request,! HttpServletResponse response)! throws ServletException, IOException {! String data = request.getParameter("csvdata");! List<Order> orders = parser.transform(data);! for (Order order : orders) {! bean.persist(order);! }! }! }
  20. © 2014 innoQ Deutschland GmbH System Simple Change done order

    management system HTTP csv Transfor Business Partner
  21. © 2014 innoQ Deutschland GmbH Integrate the system of a

    forwarder System Change happens order management system HTTP csv Transfor Business Partner forwarder system FTP SMTP SOAP WSSE REST
  22. © 2014 innoQ Deutschland GmbH What are the lessons learned?

  23. © 2014 innoQ Deutschland GmbH Recognize an integration task when

    it‘s staring in your face?
  24. © 2013 innoQ Deutschland GmbH EASY! http://www.flickr.com/photos/wespionage/184793114

  25. © 2014 innoQ Deutschland GmbH Build an easy and maintainable

    solution for multiple integration challenges?
  26. © 2013 innoQ Deutschland GmbH NO PROBLEM! http://www.flickr.com/p

  27. © 2014 innoQ Deutschland GmbH Any help in the toolbox?

  28. © 2013 innoQ Deutschland GmbH ADAPTERS? http://www.flickr.com/photo Property of ChinBuye

    Limited. http://bit.ly/xBKwGw
  29. © 2013 innoQ Deutschland GmbH EAI Frameworks Apache Camel Spring

    Integration
  30. © 2013 innoQ Deutschland GmbH Pipes and Filters divide your

    task into small steps
  31. © 2011 innoQ Deutschland GmbH Camel-XML with Spring <beans> ...

    <CamelContext id=“mycoolCamelContext“> <route> <from uri="file://Users/martinh/temp/sample1"/> <bean ref="orderTransform" method="transformOrder"/> <bean ref="orderCheckBean" method="validateOrder"/> <to uri="jms:queue:order.process"/> </route> </CamelContext> ! <bean id="orderTransform" class="con.innoq.sample.OrderTransform"> <property name="company" value="acme" /> </bean> ! <bean id="orderCheckBean" class="con.innoq.sample.OrderCheck"> </bean> </beans>
  32. © 2011 innoQ Deutschland GmbH Camel fluent API in Java

    public class PipelineExample extends RouteBuilder { ! @Override public void configure() throws Exception { from("file://Users/martinh/temp/sample1") .to("bean:orderTransform?method=transformOrder") .to("bean:orderCheckBean?method=validateOrder") .to("jms:queue:order.process"); } }
  33. © 2011 innoQ Deutschland GmbH Pipes & Filters public class

    PipesFiltersExample extends RouteBuilder { ! @Override public void configure() throws Exception { from("jms:queue:order.in?maxConcurrentConsumers=5") .to("bean:decryptBean") .to("seda:authenticate"); ! from("seda:authenticate") .process(new AuthenticationProcessor()) .to("seda:dedup"); ! from("seda:dedup") .process(new DeDupProcessor() .to("jms:queue:order.processfurther"); ! } }
  34. © 2011 innoQ Deutschland GmbH from("seda:authenticate")! .process(new AuthenticationProcessor())! .to("seda:dedup");! public

    class AuthenticationProcessor implements Processor {! ! @Override! ! public void process(Exchange exchange) throws Exception {! MyOrder order = (MyOrder)exchange.getIn().getBody();! String type = exchange.getIn().getHeader("orderType");! ! }! } Pipes & Filters
  35. © 2014 innoQ Deutschland GmbH All you need are the

    right tools for the job?
  36. © 2013 innoQ Deutschland GmbH ALMOST http://www.flickr.com/p

  37. © 2014 innoQ Deutschland GmbH OracleDB + AQ Admin UI

    Real-life scenario: Control Bus xml-route- EAI-Node EAI-Node EAI-Node ctrl-queue Tomcat Embedded Jetty
  38. © 2014 innoQ Deutschland GmbH OracleDB + AQ Real-life scenario:

    Control Bus xml-route- EAI-Node database connection EAI-Node EAI-Node ctrl-queue Initial Node configuration node type (command line arg) Admin UI
  39. © 2014 innoQ Deutschland GmbH OracleDB + AQ Real-life scenario:

    Control Bus xml-route- EAI-Node subscribe to control queue EAI-Node EAI-Node ctrl-queue 1. Server startup Admin UI
  40. © 2014 innoQ Deutschland GmbH OracleDB + AQ Real-life scenario:

    Control Bus xml-route- EAI-Node load node-type specific config EAI-Node EAI-Node ctrl-queue subscribe to control queue 1. Server startup Admin UI
  41. © 2014 innoQ Deutschland GmbH OracleDB + AQ Config change

    @Runtime xml-route- EAI-Node EAI-Node EAI-Node ctrl-queue 2. during runtime route config is changed Admin UI
  42. © 2014 innoQ Deutschland GmbH OracleDB + AQ Config change

    @Runtime xml-route- EAI-Node EAI-Node EAI-Node ctrl-queue route config is changed publish config update message Admin UI 2. during runtime
  43. © 2014 innoQ Deutschland GmbH OracleDB + AQ Config change

    @Runtime xml-route- EAI-Node interpret relevance of control message EAI-Node EAI-Node ctrl-queue 3. upon control message arrival Admin UI
  44. © 2014 innoQ Deutschland GmbH OracleDB + AQ Config change

    @Runtime xml-route- EAI-Node affected nodes reload configuration EAI-Node EAI-Node ctrl-queue interpret relevance of control message Admin UI 3. upon control message arrival
  45. © 2014 innoQ Deutschland GmbH OracleDB + AQ Admin UI

    Lessons Learned? xml-route- EAI-Node EAI-Node EAI-Node ctrl-queue
  46. © 2014 innoQ Deutschland GmbH Testbarkeit vs. Konfigurierbarkeit?

  47. © 2014 innoQ Deutschland GmbH Testbarkeit und Konfigurierbarkeit

  48. © 2013 innoQ Deutschland GmbH Message Ordering

  49. © 2013 innoQ Deutschland GmbH Message Ordering

  50. © 2013 innoQ Deutschland GmbH from(“ibmmq:QUEUE.IN“).noAutoStartup() .transacted() .policy(required) .routeId(BasicRouteBuilder .stdfromRouteId(this.componentBaseName))

    .process(vslHeadersProcessor) .setHeader(HDR_DUMMYCOMPLCHK_IBR, constant(PASSEDMSG)) .bean(inboundTargetDispatcherBean) .wireTap("seda:inboundRouter.log"); Message Ordering
  51. © 2013 innoQ Deutschland GmbH Message Ordering

  52. © 2013 innoQ Deutschland GmbH Message Ordering

  53. © 2013 innoQ Deutschland GmbH SpringTransactionPolicy required = lookup("PROPAGATION_REQUIRED", SpringTransactionPolicy.class);

    for (int i = 0; i < NROFROUTES; i++) { String iasS = String.valueOf(i); from(fromEndpoint.replaceAll("§", iasS)).noAutoStartup() .transacted() .policy(required) .routeId(KONTO_ZP_PREROUTEID + iasS) .process(new CheckRedeliveryProcessor()) .process(new ZahlplanFacetConverter()) .bean(zpBean, "process") .to("bean:kontostatctr?method=stopCounter") .wireTap(logEndpoint); } Message Ordering
  54. © 2014 innoQ Deutschland GmbH Does it save money?

  55. © 2014 innoQ Deutschland GmbH Does it save money?

  56. © 2014 innoQ Deutschland GmbH Backward compatibility via EAI

  57. © 2013 innoQ Deutschland GmbH Transformation mit BPMN-System (1)

  58. © 2013 innoQ Deutschland GmbH Transformation für BPMN-System (2)

  59. © 2013 innoQ Deutschland GmbH Transformation für BPMN-System (2)

  60. © 2013 innoQ Deutschland GmbH Transformation für BPMN-System (2)

  61. © 2013 innoQ Deutschland GmbH Transformation für BPMN-System (3)

  62. © 2014 innoQ Deutschland GmbH

  63. © 2014 innoQ Deutschland GmbH Should I always use an

    EAI-Framework?
  64. © 2014 innoQ Deutschland GmbH Should I always use an

    EAI-Framework? It depends!
  65. © 2014 innoQ Deutschland GmbH Scenario: Kilogramm vs. Stück

  66. © 2014 innoQ Deutschland GmbH Lagerverwalt- ungssystem Touren- planung Ein

    Integrationsproblem? Produktions system
  67. © 2014 innoQ Deutschland GmbH Lagerverwalt- ungssystem Touren- planung Ein

    Integrationsproblem? Produktions system Kg Kg Kg Kg Stck
  68. © 2014 innoQ Deutschland GmbH Lagerverwalt- ungssystem Touren- planung Kein

    Integrationsproblem Produktions system Kg Kg Stck Stck Stck
  69. © 2014 innoQ Deutschland GmbH Further tips considering EAI

  70. © 2014 innoQ Deutschland GmbH Further tips considering EAI small

    building blocks
  71. © 2014 innoQ Deutschland GmbH Further tips considering EAI small

    building blocks no shared mutable state
  72. © 2014 innoQ Deutschland GmbH Further tips considering EAI small

    building blocks no shared mutable state use immutable DTOs
  73. © 2014 innoQ Deutschland GmbH Further tips considering EAI small

    building blocks no shared mutable state use immutable DTOs => increased scalability
  74. © 2014 innoQ Deutschland GmbH Further tips considering EAI small

    building blocks no shared mutable state use immutable DTOs => increased scalability advanced: see “SEDA” & “actor model”
  75. We take care of it - personally! © 2014 innoQ

    Deutschland GmbH Alexander Heusingfeld, @goldstift alexander.heusingfeld@innoq.com Martin Huber, @waterback martin.huber@innoq.com http://www.innoq.com/de/talks Vielen Dank!