2012 05 confess_camel_cloud_integration

63
Systems Integration in the Cloud Era Kai Wähner, MaibornWolff et al GmbH

description

Presentation from Java Conference Confess_2012 in Leogang, Salzburg (Austria)

Transcript of 2012 05 confess_camel_cloud_integration

Page 1: 2012 05 confess_camel_cloud_integration

Systems Integration in the Cloud Era Kai Wähner, MaibornWolff et al GmbH

Page 2: 2012 05 confess_camel_cloud_integration

Kai Wähner (MaibornWolff et al GmbH, Munich, Germany)

Consulting Developing Speaking Coaching Writing

Main Tasks Evaluation of Technologies and Products

Requirements Engineering Enterprise Architecture Management

Business Process Management Architecture and Development of Applications

Planning and Introduction of SOA Integration of Legacy Applications

Cloud Computing

Contact Email: [email protected] Blog: www.kai-waehner.de/blog

Twitter: @KaiWaehner Social Networks: Xing, LinkedIn

Page 3: 2012 05 confess_camel_cloud_integration

What is the Problem?

•  Applications

•  Interfaces

•  Technologies

•  Products

Growth

Page 4: 2012 05 confess_camel_cloud_integration

A new Era: Cloud Computing

Page 5: 2012 05 confess_camel_cloud_integration

Solution: Systems Integration

All Roads lead to Rome ...

Page 6: 2012 05 confess_camel_cloud_integration

Wishes

•  Standardized Modeling •  Efficient Realization •  Automatic Testing

Page 7: 2012 05 confess_camel_cloud_integration

Systems Integration in the Cloud Era

Page 8: 2012 05 confess_camel_cloud_integration

What is the Key Message?

Page 9: 2012 05 confess_camel_cloud_integration

Key Messages

The Cloud already arrived, and must be integrated!

Page 10: 2012 05 confess_camel_cloud_integration

Key Messages

The Cloud already arrived, and must be integrated!

Cloud Integration is already possible!

Page 11: 2012 05 confess_camel_cloud_integration

Key Messages

The Cloud already arrived, and must be integrated!

Cloud Integration is already possible!

Apache Camel helps a lot!

Page 12: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 13: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 14: 2012 05 confess_camel_cloud_integration

Cloud Computing

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

Organisa5on#has#control#

Control##is#shared#

Vendor#has#control#

So;ware#as#a#Service#

(SaaS)#On#Premise#

On#Premise#hosted#

Infrastructure#as#a#Service#

(IaaS)#

PlaCorm##as#a#Service#

(PaaS)#

Page 15: 2012 05 confess_camel_cloud_integration

Every Vendor offers Cloud Products

Page 16: 2012 05 confess_camel_cloud_integration

Upcoming Procedure

• Overview of Alternatives • Concepts of chosen Product • Code Example • Live Demo

Page 17: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 18: 2012 05 confess_camel_cloud_integration

Alternatives for Systems Integration

Complexity+of+Integra2on+

Low+ High+

Integra(on*Framework*

Enterprise*Service*Bus*(ESB)*

No+Tool+

Page 19: 2012 05 confess_camel_cloud_integration

Alternatives for Systems Integration

Complexity+of+Integra2on+

Low+ High+

Integra(on*Framework*

Enterprise*Service*Bus*(ESB)*

No+Tool+

Apache#Camel*vs.*Spring*Integra(on*vs.*Mule*ESB#h>p://www.kaiAwaehner.de/blog/2012/01/10/spoiltAforAchoiceAwhichAintegra(onAframeworkAtoAuseAspringAintegra(onAmuleAesbAorAapacheAcamel/*

Page 20: 2012 05 confess_camel_cloud_integration

Enterprise Integration Patterns (EIP)

Apache Camel Implements the EIPs

Page 21: 2012 05 confess_camel_cloud_integration

Enterprise Integration Patterns (EIP)

Page 22: 2012 05 confess_camel_cloud_integration

Enterprise Integration Patterns (EIP)

Page 23: 2012 05 confess_camel_cloud_integration

Apache Camel

h>p://java.dzone.com/ar(cles/apacheAcamelAintegra(on*

Page 24: 2012 05 confess_camel_cloud_integration

Choose your favorite DSL

XML#

Page 25: 2012 05 confess_camel_cloud_integration

Choose your required Components

HTTP*

FTP*

File*

XSLT*

MQ*

JDBC

Akka*

TCP*SMTP*

RSS*Quartz*

Log*

LDAP*

JMS*

EJB*

AMQP*

Atom*AWS-S3*

Bean-Validation*

CXF*

IRC*

Jetty*

JMX*

Lucene*

Netty*

RMI*

SQL*

Many many more*Custom Components

Page 26: 2012 05 confess_camel_cloud_integration

Deploy it wherever you need

Standalone

OSGi

Application Server

Web Container

Spring Container

Cloud

Page 27: 2012 05 confess_camel_cloud_integration

Enterprise-ready

Page 28: 2012 05 confess_camel_cloud_integration

Live Demo

Apache Camel in Action

Page 29: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 30: 2012 05 confess_camel_cloud_integration

Cloud Computing

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

Organisa5on#has#control#

Control##is#shared#

Vendor#has#control#

So;ware#as#a#Service#

(SaaS)#On#Premise#

On#Premise#hosted#

Infrastructure#as#a#Service#

(IaaS)#

PlaCorm##as#a#Service#

(PaaS)#

Page 31: 2012 05 confess_camel_cloud_integration

IaaS Overview

Page 32: 2012 05 confess_camel_cloud_integration

IaaS Concepts

Compute Amazon Elastic Compute Cloud (EC2) Amazon Elastic MapReduce (EMR)

Storage Amazon Simple Storage Service (S3) Amazon Elastic Block Store (EBS) SimpleDB (SDB)

Database Amazon Relational Database Service (RDS) Amazon DynamoDB (DDB) Amazon ElastiCache

Application Services Amazon Simple Workflow Service (SWF) Amazon Simple Queue Service (SQS) Amazon Simple Notification Service (SNS) Amazon Simple Email Service (SES)

Many more ...

Page 33: 2012 05 confess_camel_cloud_integration

Code Example - AWS S3 (Java API)

AmazonS3*s3*=*new*AmazonS3Client(new*Proper(esCreden(als(*********S3Sample.class.getResourceAsStream("AwsCreden(als.proper(es")));*

String*bucketName#=*"myAfirstAs3AbucketA"*+*UUID.randomUUID();*String*key*=*"MyObjectKey";*

try*{*

****s3.createBucket(bucketName);*****s3.putObject(new*PutObjectRequest(bucketName,*key,*createSampleFile()));*

****S3Object*object*=*s3.getObject(new*GetObjectRequest(bucketName,*key));*

****ObjectLis(ng*objectLis(ng*=*s3.listObjects(new*ListObjectsRequest()*************.withBucketName(bucketName)*************.withPrefix("My"));*

****s3.deleteObject(bucketName,*key);*******s3.deleteBucket(bucketName);*

}*catch*(AmazonServiceExcep(on*ase)*{****//*error*handling...*}*catch*(AmazonClientExcep(on*ace)*{****//*error*handling...****}*

Page 34: 2012 05 confess_camel_cloud_integration

Code Example - Camel AWS Component

// Producer from("direct:startToS3") .setHeader(S3Constants.KEY, simple(“order.txt")) .to("aws-s3://myBucket?accessKey=" + myAccessKey + "&secretKey= " + mySecretKey)

// Consumer from("aws-s3://myBucket?accessKey=“myAccessKey + "&secretKey=" + mySecretKey) .to("log:S3logging")

Page 35: 2012 05 confess_camel_cloud_integration

Live Demo

IaaS Integration in Action

Page 36: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 37: 2012 05 confess_camel_cloud_integration

Cloud Computing

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

Organisa5on#has#control#

Control##is#shared#

Vendor#has#control#

So;ware#as#a#Service#

(SaaS)#On#Premise#

On#Premise#hosted#

Infrastructure#as#a#Service#

(IaaS)#

PlaCorm##as#a#Service#

(PaaS)#

Page 38: 2012 05 confess_camel_cloud_integration

PaaS Overview

Elastic Beanstalk

Page 39: 2012 05 confess_camel_cloud_integration

PaaS Concepts

Application Deployment Easy Deployment Automatic Scaling

Development Restrictions JRE Class White List Workarounds for Frameworks No „naked“ Domains No „write once run everywhere“ Quotas and Limits

Services Push Queue Pull Queue URL Fetch Accounts Mail Memcache XMPP Images Datastore Cloud Storage Cloud SQL

Page 40: 2012 05 confess_camel_cloud_integration

Hint

Google*App*Engine*is*a*complex*scenario*for*Apache*Camel*due*to*its*many*restric(ons!*

Other*„more*open“*PaaS*solu(ons**such*as*OpenShid*or*Heroku*are*easier*to*use*...*

Page 41: 2012 05 confess_camel_cloud_integration

Code Example - Google App Engine (Java API)

public*class*GAEJCreateTaskServlet*extends*HLpServlet#{**public*void*doGet(H>pServletRequest*req,*H>pServletResponse*resp)*throws*IOExcep(on*{*

*String*strCallResult*=*"";**resp.setContentType("text/plain");**try*{*

* *String*strEmailId*=*req.getParameter("emailid");*

* *if*(strEmailId*==*null)*throw*new*Excep(on*("Email*Id*field*cannot*be*empty.");*

* *strEmailId*=*strEmailId.trim();** *if*(strEmailId.length()*==*0)*throw*new*Excep(on("Email*Id*field*cannot*be*empty.");*

* *Queue#queue#=#QueueFactory.getQueue("subscrip5onUqueue");#* *queue.add(TaskOp5ons.Builder.url(“/signupsubscriber").param("emailid",strEmailId));#

* *strCallResult*=*"Successfully*created*a*Task*in*the*Queue";** *resp.getWriter().println(strCallResult);** *}*

*catch*(Excep(on*ex)*{** *strCallResult*=*"Fail:*"*+*ex.getMessage();** *resp.getWriter().println(strCallResult);*

}**}*}*

Page 42: 2012 05 confess_camel_cloud_integration

Code Example – Camel GAE Component

Page 43: 2012 05 confess_camel_cloud_integration

Code Example – Camel GAE Component

Page 44: 2012 05 confess_camel_cloud_integration

Live Demo

PaaS Integration in Action

Page 45: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 46: 2012 05 confess_camel_cloud_integration

Cloud Computing

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

App#

VM#

Network#

Server#

Storage#

Organisa5on#has#control#

Control##is#shared#

Vendor#has#control#

So;ware#as#a#Service#

(SaaS)#On#Premise#

On#Premise#hosted#

Infrastructure#as#a#Service#

(IaaS)#

PlaCorm##as#a#Service#

(PaaS)#

Page 47: 2012 05 confess_camel_cloud_integration

SaaS Overview

Page 48: 2012 05 confess_camel_cloud_integration

SaaS Concepts

Apex Visualforce

REST SOAP

Client APIs (Java, etc.)

Software (CRM) Sales Service Social Data.com AppExchange ... more ...

Development Online-Development (even the Compiler is in the Cloud!) Own Addons Force.com (PaaS) Integration of Interfaces

Page 49: 2012 05 confess_camel_cloud_integration

Code Example – Salesforce (Java API)

ConnectorConfig#config*=*new*ConnectorConfig();*******config.setUsername(userId);*******config.setPassword(passwd);*******config.setAuthEndpoint(authEndPoint);*******connec(on*=*new*EnterpriseConnec5on(config);*

******GetUserInfoResult#userInfo#=#connec5on.getUserInfo();#******System.out.println("User*Full*Name:*"*+*userInfo.getUserFullName());*

***QueryResult#qResult*=*null;*

***String*soqlQuery#=*"SELECT*FirstName,*LastName*FROM*Contact";*//*SOQL#

***qResult*=#connec5on.query(soqlQuery);#***boolean*done*=*false;****if*(qResult.getSize()*>*0)*{******System.out.println("LoggedAin*user*can*see*"*+*************qResult.getRecords().length*+*************"*contact*records."********);********while*(!*done)*{**********SObject[]#records#=#qResult.getRecords();#*********for*(*int*i*=*0;*i*<*records.length;*++i*)*{**##########Contact#con#=#(Contact)#records[i];#***********String*fName*=*con.getFirstName();************String*lName*=*con.getLastName();** *//*...*more*stuff*here*...*

Page 50: 2012 05 confess_camel_cloud_integration

Code Example – Camel Salesforce Component

// Producer from("direct:toSalesforce“) .to("salesforce://Article__c?user=myUser&password=myPasswordj&item=myItem");

// Consumer from("salesforce://Article__c?user=myUser&password=myPassword") .to("mock:fromSalesforce");

Page 51: 2012 05 confess_camel_cloud_integration

Live Demo

SaaS Integration in Action

Page 52: 2012 05 confess_camel_cloud_integration

Agenda

1) Introduction to Cloud Computing

2) Introduction to Apache Camel

3) IaaS Integration (Amazon Web Services)

4) PaaS Integration (Google App Engine)

5) SaaS Integration (Salesforce)

6) Custom Cloud Components

Page 53: 2012 05 confess_camel_cloud_integration

Custom Cloud Components

Component#

Endpoint#

Producer#Consumer#

Creates

Page 54: 2012 05 confess_camel_cloud_integration

Live Demo

Custom Cloud Component in Action

Page 55: 2012 05 confess_camel_cloud_integration

Alternative for Custom Cloud Components

•  SOAP •  REST

Page 56: 2012 05 confess_camel_cloud_integration

Code Example – Salesforce REST (HTTP)

// Salesforce Query (SOQL) via REST API from("direct:salesforceViaHttpLIST") .setHeader("X-PrettyPrint", 1)

.setHeader("Authorization", accessToken) .setHeader(Exchange.CONTENT_TYPE, "application/json") .to("https://na14.salesforce.com/services/data/v20.0/query?q=SELECT+name+from

+Article__c")

// Salesforce CREATE via REST API from("direct:salesforceViaHttpCREATE") .setHeader("X-PrettyPrint", 1) .setHeader("Authorization", accessToken)

.setHeader(Exchange.CONTENT_TYPE, "application/json“) .to("https://na14.salesforce.com/services/data/v20.0/sobjects/Article__c")

Page 57: 2012 05 confess_camel_cloud_integration

Live Demo

Cloud Integration via REST in Action

Page 58: 2012 05 confess_camel_cloud_integration

Did you get the Key Message?

Page 59: 2012 05 confess_camel_cloud_integration

Key Messages

The Cloud already arrived, and must be integrated!

Cloud Integration is already possible!

Apache Camel helps a lot!

Page 60: 2012 05 confess_camel_cloud_integration

Did you get the Key Message?

Page 61: 2012 05 confess_camel_cloud_integration

Whet your Appetite?

Page 62: 2012 05 confess_camel_cloud_integration

Become a Part of the Open Source Community

Page 63: 2012 05 confess_camel_cloud_integration

Thank you for your Attention. Any Questions?

Kai Wähner

MaibornWolff et al: www.mwea.de

Email: [email protected] Twitter: @KaiWaehner Blog: www.kai-waehner.de/blog Social: LinkedIn / Xing