Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
EAI War Stories
Search
Alexander Heusingfeld
February 04, 2014
Technology
0
380
EAI War Stories
Slides for our talk at #OOP2014
Alexander Heusingfeld
February 04, 2014
Tweet
Share
More Decks by Alexander Heusingfeld
See All by Alexander Heusingfeld
SEACon: Genervt von VUCA - Systems Architecture kann helfen
aheusingfeld
0
73
A Software Architects view on Digital Product Design
aheusingfeld
1
240
Lessons Learned from Software Modernization projects
aheusingfeld
0
430
Microservices Meet Real-World Projects: Lessons Learned @ Microservices-Meetup-Rhein-Main
aheusingfeld
0
500
Architekturmodernisierung mit SCS und Microservices
aheusingfeld
0
290
Microservices zur Architekturmodernisierung - JAX2016
aheusingfeld
0
210
Microservices meet Real-World Projects @ JavaLand
aheusingfeld
1
410
MicroXchg: Logging and Metrics in Microservice Architectures
aheusingfeld
0
230
When Microservices Meet Real-World Projects @ GOTOber
aheusingfeld
1
410
Other Decks in Technology
See All in Technology
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
6.8k
cdk initで生成されるあのファイル達は何なのか/cdk-init-generated-files
tomoki10
1
640
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
190
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
3
1.8k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
820
スタックチャン家庭用アシスタントへの道
kanekoh
0
120
助けて! XからWaylandに移行しないと新しいGNOMEが使えなくなっちゃう 2025-07-12
nobutomurata
2
190
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
10
130k
全部AI、全員Cursor、ドキュメント駆動開発 〜DevinやGeminiも添えて〜
rinchsan
10
4.7k
Cortexで加速する AI不動産投資 RENOSYのデータ活用 @Snowflake ACCELERATE
yuto16
0
100
Figma Dev Mode MCP Serverを用いたUI開発
zoothezoo
0
210
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.7k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
GraphQLとの向き合い方2022年版
quramy
49
14k
KATA
mclloyd
30
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
The World Runs on Bad Software
bkeepers
PRO
70
11k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
Building an army of robots
kneath
306
45k
Producing Creativity
orderedlist
PRO
346
40k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Transcript
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
© 2014 innoQ Deutschland GmbH EAI Pattern in 2013? Nobody
uses them anymore!
© 2014 innoQ Deutschland GmbH That’s THE problem!
© 2014 innoQ Deutschland GmbH Multitude of potential service consumers
Integration is ubiquitous CRM Application
© 2014 innoQ Deutschland GmbH Multitude of potential service consumers
Integration is ubiquitous CRM Application ERP Application
© 2014 innoQ Deutschland GmbH Multitude of potential service consumers
Integration is ubiquitous CRM Application ?
© 2014 innoQ Deutschland GmbH Multitude of potential service consumers
Integration is ubiquitous CRM Application
We take care of it - personally! © 2014 innoQ
Deutschland GmbH Integration Styles
© 2014 innoQ Deutschland GmbH File Transfer http://www.eaipatterns.com/FileTransferIntegration.
© 2014 innoQ Deutschland GmbH Shared Database http://www.eaipatterns.com/SharedDataBaseIntegration.
© 2014 innoQ Deutschland GmbH Remote Procedure Invocation http://www.eaipatterns.com/EncapsulatedSynchronousIntegration.
© 2014 innoQ Deutschland GmbH Messaging http://www.eaipatterns.com/Messaging.h
© 2013 innoQ Deutschland GmbH Messaging? http://bit.ly/PtrhWy
© 2014 innoQ Deutschland GmbH Searching for a book? Enterprise
Integration Patterns (Hohpe & Woolf), 2003 www.eaipatterns.com Swiss-army knife for asynchronous messaging
We take care of it - personally! © 2014 innoQ
Deutschland GmbH Theories in practice
© 2014 innoQ Deutschland GmbH Simple order management system (CRUD)
Real Life Scenario order management system
© 2014 innoQ Deutschland GmbH Simple ChangeRequest order management system
© 2014 innoQ Deutschland GmbH Simple ChangeRequest We need an
importer! order management system
© 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);! }! }! }
© 2014 innoQ Deutschland GmbH System Simple Change done order
management system HTTP csv Transfor Business Partner
© 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
© 2014 innoQ Deutschland GmbH What are the lessons learned?
© 2014 innoQ Deutschland GmbH Recognize an integration task when
it‘s staring in your face?
© 2013 innoQ Deutschland GmbH EASY! http://www.flickr.com/photos/wespionage/184793114
© 2014 innoQ Deutschland GmbH Build an easy and maintainable
solution for multiple integration challenges?
© 2013 innoQ Deutschland GmbH NO PROBLEM! http://www.flickr.com/p
© 2014 innoQ Deutschland GmbH Any help in the toolbox?
© 2013 innoQ Deutschland GmbH ADAPTERS? http://www.flickr.com/photo Property of ChinBuye
Limited. http://bit.ly/xBKwGw
© 2013 innoQ Deutschland GmbH EAI Frameworks Apache Camel Spring
Integration
© 2013 innoQ Deutschland GmbH Pipes and Filters divide your
task into small steps
© 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>
© 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"); } }
© 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"); ! } }
© 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
© 2014 innoQ Deutschland GmbH All you need are the
right tools for the job?
© 2013 innoQ Deutschland GmbH ALMOST http://www.flickr.com/p
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 2014 innoQ Deutschland GmbH OracleDB + AQ Admin UI
Lessons Learned? xml-route- EAI-Node EAI-Node EAI-Node ctrl-queue
© 2014 innoQ Deutschland GmbH Testbarkeit vs. Konfigurierbarkeit?
© 2014 innoQ Deutschland GmbH Testbarkeit und Konfigurierbarkeit
© 2013 innoQ Deutschland GmbH Message Ordering
© 2013 innoQ Deutschland GmbH Message Ordering
© 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
© 2013 innoQ Deutschland GmbH Message Ordering
© 2013 innoQ Deutschland GmbH Message Ordering
© 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
© 2014 innoQ Deutschland GmbH Does it save money?
© 2014 innoQ Deutschland GmbH Does it save money?
© 2014 innoQ Deutschland GmbH Backward compatibility via EAI
© 2013 innoQ Deutschland GmbH Transformation mit BPMN-System (1)
© 2013 innoQ Deutschland GmbH Transformation für BPMN-System (2)
© 2013 innoQ Deutschland GmbH Transformation für BPMN-System (2)
© 2013 innoQ Deutschland GmbH Transformation für BPMN-System (2)
© 2013 innoQ Deutschland GmbH Transformation für BPMN-System (3)
© 2014 innoQ Deutschland GmbH
© 2014 innoQ Deutschland GmbH Should I always use an
EAI-Framework?
© 2014 innoQ Deutschland GmbH Should I always use an
EAI-Framework? It depends!
© 2014 innoQ Deutschland GmbH Scenario: Kilogramm vs. Stück
© 2014 innoQ Deutschland GmbH Lagerverwalt- ungssystem Touren- planung Ein
Integrationsproblem? Produktions system
© 2014 innoQ Deutschland GmbH Lagerverwalt- ungssystem Touren- planung Ein
Integrationsproblem? Produktions system Kg Kg Kg Kg Stck
© 2014 innoQ Deutschland GmbH Lagerverwalt- ungssystem Touren- planung Kein
Integrationsproblem Produktions system Kg Kg Stck Stck Stck
© 2014 innoQ Deutschland GmbH Further tips considering EAI
© 2014 innoQ Deutschland GmbH Further tips considering EAI small
building blocks
© 2014 innoQ Deutschland GmbH Further tips considering EAI small
building blocks no shared mutable state
© 2014 innoQ Deutschland GmbH Further tips considering EAI small
building blocks no shared mutable state use immutable DTOs
© 2014 innoQ Deutschland GmbH Further tips considering EAI small
building blocks no shared mutable state use immutable DTOs => increased scalability
© 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”
We take care of it - personally! © 2014 innoQ
Deutschland GmbH Alexander Heusingfeld, @goldstift
[email protected]
Martin Huber, @waterback
[email protected]
http://www.innoq.com/de/talks Vielen Dank!