Upload
vuanh
View
243
Download
2
Embed Size (px)
Citation preview
mule
and m
ess
age-b
ase
d
inte
gra
tion -
using a
n e
sbdrger
ald
loeffler
, m
ba
senior arc
hitec
t/dev
eloper
objectlabfinancial ltd
http://w
ww.ger
ald
-loeffler
.net/d
ownload/m
ule_javaaben
d_2007-10-2
2.pdf
refe
rences and reso
urc
es
•m
ule res
ourc
es
▫[1] web
site/
wiki/guid
es http://w
ww.m
uleso
urc
e.org
▫m
ailin
g list
▫ex
am
ples (!)
2
▫so
urc
e co
de (!)
•[2
] "p
atter
ns of en
terp
rise
integra
tion arc
hitec
ture
", gre
gor
hohpeet al.
▫[3
] http://w
ww.eaip
attern
s.co
m/
•[4
] "C
om
bin
ing Ser
vice-Orien
ted A
rchitec
ture
and E
ven
t-Driven
Arc
hitec
ture
using an E
nterp
rise
Ser
vice Bus", jean-
louis
mare
chaux, ibm
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
conte
nts
•m
ule by exam
ple
•m
essa
ge-base
d integra
tion
•in
troduction to esb
sand m
ule
•m
ule’s core
abstra
ctions
3
•m
ule’s core
abstra
ctions
•a close
r look at th
e ex
am
ple
•gotchas/ id
iom
s /p
atter
ns
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
4
startin
g/s
toppin
g, co
nfigura
tion, dep
loym
ent options
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
5
jms, sto
re-a
nd-forw
ard
mes
sagin
g, pip
es-a
nd-filters arc
hitec
ture
s,
enterp
rise
integra
tion patter
ns
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
mess
agin
g-a
bst
ractions and jm
ste
rmin
olo
gy
•m
essa
ge
▫hea
der
▫body
•m
essa
ge des
tination
6
▫queu
e, topic
•m
essa
ge pro
duce
r
▫queu
e se
nder
, to
pic publish
er
•m
essa
ge co
nsu
mer
▫queu
e re
ceiver
, to
pic subsc
riber
•de-co
upling of pro
duce
r and consu
mer
▫addre
ss space
/jvm
, tim
e, language
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
store
-and-f
orw
ard
vs.
client-
serv
er m
ess
agin
g7
mes
sage
pro
duce
rQ1
mes
sage
consu
mer
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
mes
sage
pro
duce
rQ1
Q1
mes
sage
consu
mer
filter
pip
es-
and-f
ilte
rs a
rchitectu
re
8
pip
efilter
pip
e
messageproducer
messageconsumer
messageconsumer
messageproducer
filter
mes
sage
pro
duce
r
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
pip
efilter
pipepip
e
messageproducer
messageconsumer
messageconsumer
messageproducer
ente
rprise
inte
gra
tion p
att
ern
s
9
content-base
d router
mes
sage filter
dynam
ic router
routing slip
pro
cess
manager
envelope wra
pper
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
dynam
ic router
recipient list
splitter
aggre
gato
r
rese
quen
cer
envelope wra
pper
content en
rich
er
content filter
claim
chec
k
norm
alize
r
sourc
e: w
ww.eaip
atter
ns.co
m/ G. Hohpeet al.
10
what’s an esb
?, m
ule
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
esb
–patt
ern
or pro
duct?
•"A
n E
nterp
rise
Ser
vice Bus is an architectural patternand
can be im
plem
ented by m
any different productswithin
the
org
anization, and ass
embled together
to act as a federated
bus. M
ore
and m
ore
ven
dors are
now offer
ing a complete
product
to fulfill enterprise integrationnee
ds." [4
]
11
product
to fulfill enterprise integrationnee
ds." [4
]
•"c
om
bin
es event-driven
and service orientedappro
ach
es to
sim
plify integra
tion of busines
s units, bridgin
g
heter
ogen
eous platform
s and environm
ents. The ESB acts
as an interm
ediary
layer
to enable communicationbetwee
n
differe
nt applica
tion pro
cess
es." [4]
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
esb
–patt
ern
or pro
duct?
•"facilitates and sim
plifies
busines
s in
tegra
tion thro
ugh
transport, event and mediation services
. It connec
ts and
med
iates all com
munications and intera
ctions betwee
n
heter
ogen
eous nodes
, both
in a Ser
vice-Orien
ted
Arc
hitec
ture
(sy
nch
ronous one-to
-one appro
ach
) and an
12
Arc
hitec
ture
(sy
nch
ronous one-to
-one appro
ach
) and an
Even
t-Driven
Arc
hitec
ture
(asy
nch
ronous m
any-to-m
any
appro
ach
)." [4
]
•es
bch
ara
cter
istics
/fea
ture
s:
▫su
pports sy
nch
ronous and asy
nch
ronous in
tera
ction
▫m
essa
ge ro
uting and tra
nsform
ation
▫transp
ort m
ediation
▫distributed /feder
ated?
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
mule
1/2
•ev
ent-base
d open
-sourc
e es
b
▫ev
ent ≈ m
essa
ge
•m
atu
re, pro
prietary
(non-jbi) arc
hitec
ture
•active co
mm
unity
13
•active co
mm
unity
•in
tegra
tes nicely w
ith spring
•su
pports m
any tra
nsp
orts/
pro
toco
ls
▫ejbin
voca
tion (jrm
p, iiop), em
ail (sm
tp, pop3, im
ap), file, ftp
, http/h
ttps, jdbc, jm
s, ipm
ulticast, tcp/ipin
cl. ss
l, udp,
soap/w
sdl(v
ia axis1, xfire
, glu
e), xm
pp, in
tern
al in
-mem
ory
("vm
") [1]
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
mule
2/2
•dep
loym
ent stand-a
lone or in
app ser
ver
(also as ra
r)
•fram
ework
for and im
plem
entations of
▫transform
ers
▫ro
uters
14
▫sp
litter
s/aggre
gato
rs
•transa
ction dem
arc
ation (loca
l and xa, plu
ggable)
•th
read, queu
e and pool m
anagem
ent
•cu
rren
tly 1.4.3
▫2.0
(late 2007) will be tightly integra
ted w
ith spring 2.x
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
15
even
t/m
essa
ge, connec
tor, endpoin
t, com
ponen
t, router, tra
nsform
er,
interc
epto
r, spring integra
tion
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
event and m
ess
age
•UM
OEven
t
▫all data sen
t or re
ceived
within
the m
ule environm
ent will be
pass
ed betwee
n com
ponen
ts as an U
MOEven
t
▫has a U
MOM
essa
ge
•UM
OM
essa
ge/ UM
OM
essa
geA
dapter
16
•UM
OM
essa
ge/ UM
OM
essa
geA
dapter
▫abstra
cts m
essa
ge im
plem
entations (jm
s, ftp
, file, so
ap, ...)
▫has a (typed
) payload and pro
per
ties
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
connecto
r: file
<connector
connector
connector
connectorname="file_connector"
className="org.mule.providers.file.FileConnector
FileConnector
FileConnector
FileConnector">
<properties>
<property name="moveToDirectory" value="${submitted_dir}" />
<property name="moveToPattern"
value="${ORIGINALNAME}.${DATE:yyyy-MM-dd_HH-mm-ss-SSS}" />
17
value="${ORIGINALNAME}.${DATE:yyyy-MM-dd_HH-mm-ss-SSS}" />
<property name="binary" value="false" />
<property name="autoDelete" value="false" />
</properties>
</connector
/connector
/connector
/connector>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•was unable to configure
it to
not m
ove/
delete files when
outb
ound com
munication fails
▫m
ake outb
ound com
munication im
poss
ible to fail
connecto
r: e
jb(s
lsb)
<connector
connector
connector
connectorname="ejb_connector"
className="org.mule.providers.ejb.EjbConnector
EjbConnector
EjbConnector
EjbConnector">
<properties>
<property name="jndiInitialFactory"
value="${jndi_initial_factory}" />
<property name="jndiProviderUrl" value="${jndi_provider_url}" />18
<property name="jndiProviderUrl" value="${jndi_provider_url}" />
<property name="securityPolicy" value="security.policy" />
</properties>
</connector
connector
connector
connector>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•fo
r ca
llin
g slsbm
ethod thro
ugh m
ule endpoin
ts
▫from
outb
ound or nes
ted routers (but pre
fer sp
ring to latter
)
•ejbco
ntain
er context is an "ea
rly bin
din
g" alter
native
•undocu
men
ted lookup/c
ach
ing beh
aviour fails on rec
onnec
t
▫pre
fer sp
ring jee:remote-slsbwhen
ever
poss
ible
jmsconnecto
r
<connector
connector
connector
connectorname="jms_connector"
className="org.mule.providers.jms.JmsConnector
JmsConnector
JmsConnector
JmsConnector">
<properties>
<property name="jndiInitialFactory"
value="${jndi_initial_factory}" />
<property name="jndiProviderUrl" value="${jndi_provider_url}" />19
<property name="jndiProviderUrl" value="${jndi_provider_url}" />
<property name="connectionFactoryJndiName"
value="ConnectionFactory" />
<property name="jndiDestinations" value="true" />
<property name="forceJndiDestinations" value="true" />
<property name="persistentDelivery" value="true" />
<property name="specification" value="1.1" />
<property name="maxRedelivery" value="5" />
</properties>
</connector
/connector
/connector
/connector>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
endpoin
ts
<global
global
global
global- ---endpoints
endpoints
endpoints
endpoints>
<endpoint name="to_submit_dir" address="file://${to_submit_dir}"
connector="file_connector" transformers="f2s" />
<endpoint name="z_reviews_csv" address="vm://z_reviews_csv" />
<endpoint name="review"
address="ejb:/ReviewSLSBean?method=addReview"
20
address="ejb:/ReviewSLSBean?method=addReview"
connector="ejb_connector" remoteSync="true" />
<endpoint name="invalid_msg"
address="jms://queue/INT.INVALID_MESSAGE"
connector="jms_connector" transformers="o2jms" />
</global
/global
/global
/global- ---endpoints
endpoints
endpoints
endpoints>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•ce
ntral veh
icle for m
ules pro
toco
l/transp
ort abstra
ction
•bes
t defin
ed as global en
dpoin
ts
•only defin
e fixed
tra
nsform
ers =
> can am
end later
transf
orm
ers
<transformers
transformers
transformers
transformers>
<transformer name="f2s"
className="org.mule.providers.file.transformers.FileToString" />
<transformer name="o2jms" className=
"org.mule.providers.jms.transformers.ObjectToJMSMessage" />
</transformers
/transformers
/transformers
/transformers>
21
</transformers
/transformers
/transformers
/transformers>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•in
frastru
ctura
l, tec
hnical transform
ers pro
vid
ed by m
ule
•m
ore
busines
s-re
lated tra
nsform
ers written
in pro
jects
▫ex
tend org
.mule.tra
nsform
ers.A
bstra
ctTra
nsform
er
▫not a spring bea
n if co
nfigure
d via m
ule xm
l
�sim
ple tra
nsform
ation =
> tra
nsform
er, co
mplex =
> com
ponen
t
com
ponent and route
rs 1
<mule
mule
mule
mule- ---descriptor
descriptor
descriptor
descriptorname="z_filedrop"
implementation="org.mule.components.simple.PassThroughComponent
PassThroughComponent
PassThroughComponent
PassThroughComponent">
<inbound-router>
<global-endpoint name="to_submit_dir" />
</inbound-router>
<outbound-router>
22
<outbound-router>
<router className=
"org.mule.routing.outbound.OutboundPassThroughRouter">
<global-endpoint name="z_reviews_csv" />
</router>
</outbound-router>
<interceptor name="default" />
</mule
/mule
/mule
/mule- ---descriptor
descriptor
descriptor
descriptor>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
com
ponent and route
rs 2
<mule
mule
mule
mule- ---descriptor
descriptor
descriptor
descriptorname="splitter" implementation=
"org.mule.components.simple.PassThroughComponent
PassThroughComponent
PassThroughComponent
PassThroughComponent">
<inbound-router>
<global-endpoint name="z_reviews_csv" />
</inbound-router>
<outbound-router>
23
<outbound-router>
<router className="util.esb.mule.LineSplitter
util.esb.mule.LineSplitter
util.esb.mule.LineSplitter
util.esb.mule.LineSplitter">
<global-endpoint name="z_review_csv" />
<properties>
<property name="preserveHeader" value="true" />
</properties>
</router>
</outbound-router>
<interceptor name="default" />
</mule
/mule
/mule
/mule- ---descriptor
descriptor
descriptor
descriptor>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
com
ponent and route
rs 3
<mule
mule
mule
mule- ---descriptor
descriptor
descriptor
descriptorname="transformer"
implementation="zReviewCsvToReviewTransformer
zReviewCsvToReviewTransformer
zReviewCsvToReviewTransformer
zReviewCsvToReviewTransformer">
<inbound-router>
<global-endpoint name="z_review_csv" />
</inbound-router>
<outbound-router>
24
<outbound-router>
<router className=
"org.mule.routing.outbound.OutboundPassThroughRouter">
<global-endpoint name="review" />
</router>
</outbound-router>
<interceptor name="default" />
</mule
/mule
/mule
/mule- ---descriptor
descriptor
descriptor
descriptor>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
conta
iner conte
xt and spring inte
gra
tion
<container
container
container
container- ---context
context
context
context
className='org.mule.extras.spring.SpringContainerContext
SpringContainerContext
SpringContainerContext
SpringContainerContext'>
<properties>
<property name="configFile"
value="springContext-monolith.xml" />
</properties>
25
</properties>
</container
/container
/container
/container- ---context
context
context
context>
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•m
ule contain
ers are
extern
al co
mponen
t (!) factories
▫object/b
eans re
fere
nce
d w
ith implementationattribute
•oth
er contain
er context im
plem
entations
▫jn
ditree
, se
ssion ejbs, pico, plexus, hivem
ind[1]
•m
ule can also be co
nfigure
d and launch
ed entire
ly fro
m a
spring context (w
ithout a m
ule configxm
l)!
com
ponent exception str
ate
gy
<exception
exception
exception
exception- ---strategy
strategy
strategy
strategy
className="util.esb.mule.ExceptionAwareExceptionStrategy">
<global-endpoint name="invalid_msg" />
<global-endpoint name="manual_intervention" />
</exception
exception
exception
exception- ---strategy
strategy
strategy
strategy>
26
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•handles ex
ceptions th
rown by com
ponen
ts
▫usu
ally busines
s ex
ceptions, i.e. pro
ject-d
epen
den
t
▫a spec
ial fo
rm of sy
nch
ronous co
ntent-base
d routing for
exce
ptions
public class ExceptionAwareExceptionStrategy
implements
ExceptionListener
{
public void exceptionThrown(Exception e) {...}
}
inte
rcepto
rs
<interceptor
interceptor
interceptor
interceptor- ---stack
stack
stack
stackname="default">
<interceptor className="util.esb.mule.LoggingInterceptor" />
</interceptor
/interceptor
/interceptor
/interceptor- ---stack
stack
stack
stack>
27
public class LoggingInterceptor
extends EnvelopeInterceptor
{
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
•cf. aoparo
und advice
•applies
to com
ponen
t in
voca
tions
▫not in
voked
for BridgeC
om
ponen
t
�use
Pass
Thro
ughCom
ponen
tin
stea
d
•fo
r deb
uggin
g, but also for m
essa
ge store
/histo
ry/a
udit
@Override public void before(Invocation i) {...}
@Override public void after(Invocation i) {...}
}
28
real-live m
ule configura
tion
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
gotc
has
•alw
ays co
nsu
lt javadocs
or so
urc
e
•m
ule-intern
al co
nfigof th
reads/
queu
es/tim
eouts
•tx
handling acr
oss
tra
nsp
orts (a
void
)
•jm
sco
nnec
tor num
ber
of se
ssions
30
•jm
sco
nnec
tor num
ber
of se
ssions
•co
mponen
t ex
ception handling and txro
llback
s
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007
esb
/m
ule
design idio
ms/
patt
ern
s
•use
global en
dpoin
ts
•kee
p it sim
ple and use
spring w
her
e poss
ible
•database
acc
ess from
a m
ule node?
what db? how?
•leave re
mote oper
ations to
mes
sagin
g back
bone
31
•leave re
mote oper
ations to
mes
sagin
g back
bone
•isolate synch
ronous oper
ations
•tie in
to cep
/esp
(com
plex even
t pro
cess
ing/e
ven
t stre
am
pro
cess
ing) libra
ry like es
per
for ca
lculating statistics over
and analyzing/q
uer
yin
g m
essa
ge flows
▫statistics over
num
ber
/size/
type of m
essa
ges
per
tim
e unit/s
ender
▫re
al-tim
e outlier detec
tion in ter
ms of m
essa
ge size
/type
▫QoSm
onitoring
mule and m
essa
ge-
base
d integra
tion | ger
ald
loeffler | javaaben
d vienna | oct 2007