Upload
alexandre-porcelli
View
1.381
Download
0
Tags:
Embed Size (px)
Citation preview
Integration
&
DSL#TDC2011
Alexandre Porcelli
Writer
Alexandre Porcelli
Organizer
Alexandre Porcelli
Commiter / Parser Developer
Alexandre Porcelli
Founder
Alexandre PorcelliAPI Designer / Developer
@porcelli
integration
THE reference
cloud
problems...
silos
3443
#facts
✓ #1 OPEN SOURCE ESB✓ OVER 1.5 MILLION DOWNLOADS✓ 2500+ PRODUCTION DEPLOYMENTS✓ PERFORMANCE: 10000 TPS✓ SCALABLE: 13000 DEPLOYED SERVERS✓ 100+ CONNECTORS APPS & PROTOCOLS✓ CLOUD CONNECTORS
enterprise...
High-performance ESB
Access to source code
Community extensions
Management Console
High availability
Premium Connectors
Self-healing connections
Technical Support
Knowledge Base
Service packs / hot patches
QA
Enterprise documentation
Enterprise license
Mule ESBCommunity
Mule ESBEnterprise
customers...
mule studio!
tech spec...
cloud connectors...
POJO!@Connector(namespacePrefix="my-push")public class MyPushCloudConnector { /** * Hostname of My Push Notification Gateway */ @Property private String host;
@Operation public void send(String deviceToken, @Parameter(optional=true)
String alert, @Parameter(optional=true) String sound, @Parameter(optional=true, defaultValue="-1") int badge, @Parameter(optional=true) Map<String,String> fields) {
... }}
<flow name="Hello World"> <composite-source> <!-- Incoming HTTP requests --> <inbound-endpoint address="http://localhost:8888" transformer-refs="HttpRequestToNameString" exchange-pattern="request-response"> <not-filter> <wildcard-filter pattern="/favicon.ico"/> </not-filter> </inbound-endpoint>
<!-- Incoming Servlet requests --> <inbound-endpoint address="servlet://name" transformer-refs="HttpRequestToNameString" exchange-pattern="request-response"> <not-filter> <wildcard-filter pattern="/favicon.ico"/> </not-filter> </inbound-endpoint>
<!-- Incoming VM requests --> <vm:inbound-endpoint path="greeter" transformer-refs="StringToNameString" exchange-pattern="request-response"/> </composite-source>
<component class="org.mule.example.hello.Greeter"/>
<choice> <when expression="payload instanceof org.mule.example.hello.NameString" evaluator="groovy"> <vm:outbound-endpoint path="chitchatter" exchange-pattern="request-response"/> </when> <when expression="payload instanceof java.lang.Exception" evaluator="groovy"> <vm:outbound-endpoint path="userErrorHandler" exchange-pattern="request-response"/> </when> </choice>
<!-- Route unexpected errors to separate error handler --> <default-exception-strategy> <vm:outbound-endpoint path="systemErrorHandler" exchange-pattern="one-way"/> </default-exception-strategy> </flow>
xml?
so what?
MuleContex context = Mule.newMuleContext();
Flow myFlow = new Flow();
myFlow.setName("MyFlow");
InboundEndpoint myIn = new GenericInboundEndpoint();myIn.setURL("file:///Users/porcelli/in");
OutboundEndpoint myOut = new GenericOutboundEndpoint();myIn.setURL("file:///Users/porcelli/out");
myFlow.setInbound(myIn);myFlow.addMessageProcessor(myOut);
context.addFlow(myFlow);
muleContext.start(); ok?
NO!
DSL!
➡ Expressive & Natural➡ Easy to Use & Learn➡ Hard to Misuse➡ Extensible
goals...
Mule.newMuleContext(new AbstractModule() { @Override public void configure() { flow("MyFlow") .from("file:///Users/porcelli/in") .send("file:///Users/porcelli/out"); } }).start();
MuleContex context = Mule.newMuleContext();
Flow myFlow = new Flow();
myFlow.setName("MyFlow");
InboundEndpoint myIn = new GenericInboundEndpoint();myIn.setURL("file:///Users/porcelli/in");
OutboundEndpoint myOut = new GenericOutboundEndpoint();myIn.setURL("file:///Users/porcelli/out");
myFlow.setInbound(myIn);myFlow.addMessageProcessor(myOut);
context.addFlow(myFlow);
muleContext.start();
remember?
feedback?
cloud...
final TwitterConnector twitterConnector = new TwitterConnector();twitterConnector.setConsumerKey("key");twitterConnector.setConsumerSecret("secret");twitterConnector.setOathToken("token");
Mule.newMuleContext(new AbstractModule() { @Override public void configure() { flow("MyFlow") .from("file:///Users/porcelli/tweet") .transformTo(String.class) .process(twitterConnector.statusesUpdate(payload())); }}).start();
demo
questions?
Thanks!
@porcelli
linkedin.com/in/alexandreporcelli
porcelli.com.br
github.com/porcelli
about.me/porcelli