• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Integration & DSL
 

Integration & DSL

on

  • 1,642 views

 

Statistics

Views

Total Views
1,642
Views on SlideShare
1,633
Embed Views
9

Actions

Likes
2
Downloads
28
Comments
0

2 Embeds 9

http://us-w1.rockmelt.com 6
http://www.slideshare.net 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Integration & DSL Integration & DSL Presentation Transcript

    • Integration & DSL #TDC2011
    • @porcelli Alexandre Porcelli FounderAlexandre PorcelliWriter Alexandre Porcelli Organizer Alexandre Porcelli Commiter / Parser Developer Alexandre Porcelli API Designer / Developer
    • 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... Mule ESB Mule ESB Community 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 
    • 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); ok?muleContext.start();
    • NO!
    • DSL!
    • goals... ➡ Expressive & Natural ➡ Easy to Use & Learn ➡ Hard to Misuse ➡ Extensible
    • Mule.newMuleContext(new AbstractModule() { @Override public void configure() { flow("MyFlow") .from("file:///Users/porcelli/in") .send("file:///Users/porcelli/out"); }}).start();
    • remember?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();
    • 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! alexandre.porcelli@gmail.com github.com/porcelliabout.me/porcelli linkedin.com/in/alexandreporcelli @porcelli porcelli.com.br