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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
82
A Software Architects view on Digital Product Design
aheusingfeld
1
270
Lessons Learned from Software Modernization projects
aheusingfeld
0
470
Microservices Meet Real-World Projects: Lessons Learned @ Microservices-Meetup-Rhein-Main
aheusingfeld
0
570
Architekturmodernisierung mit SCS und Microservices
aheusingfeld
0
310
Microservices zur Architekturmodernisierung - JAX2016
aheusingfeld
0
220
Microservices meet Real-World Projects @ JavaLand
aheusingfeld
1
430
MicroXchg: Logging and Metrics in Microservice Architectures
aheusingfeld
0
250
When Microservices Meet Real-World Projects @ GOTOber
aheusingfeld
1
420
Other Decks in Technology
See All in Technology
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
160
使いにくいの壁を突破する
sansantech
PRO
1
130
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
910
Webhook best practices for rock solid and resilient deployments
glaforge
1
280
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.7k
生成AI時代にこそ求められるSRE / SRE for Gen AI era
ymotongpoo
5
3k
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
0
340
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
150
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
220
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
140
Digitization部 紹介資料
sansan33
PRO
1
6.8k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
42k
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
300
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
How to train your dragon (web standard)
notwaldorf
97
6.5k
GraphQLとの向き合い方2022年版
quramy
50
14k
It's Worth the Effort
3n
188
29k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
170
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
300
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
430
Building Applications with DynamoDB
mza
96
6.9k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
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!