+ All Categories
Home > Documents > Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · •...

Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · •...

Date post: 19-Apr-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
63
© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission. Ramnivas Laddad Jennifer Hickey Scott Andrews VMware Cloud Foundry Team Cloud Foundry With Spring Part Two: Services Thursday, October 27, 2011
Transcript
Page 1: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission.

Ramnivas LaddadJennifer HickeyScott Andrews

VMware Cloud Foundry Team

Cloud Foundry With SpringPart Two: Services

Thursday, October 27, 2011

Page 2: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Agenda

• Introduction to Cloud Foundry Services• Auto-Reconfiguration• Cloud Namespace• Profile Support• Java Configuration• External Service Access

2

Thursday, October 27, 2011

Page 3: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Cloud Foundry Services

3

Clou

d Pr

ovid

er In

terf

aceApplication Service Interface

Private Clouds

PublicClouds

MicroCloud Foundry

Data Services

Other Services

Msg Services

.js

Thursday, October 27, 2011

Page 4: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Services: Developerʼs perspective

• Use services that meet applicationʼs needs• Trivial provisioning of services

– vmc create-service mongodb documents-db– vmc bind-service inventory-app documents-db

• Build service-focused polyglot apps– Change languages and framework as needed

• Not worry about operating services!

4

Thursday, October 27, 2011

Page 5: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Services offered today

• Relational database– Postgres– MySQL

• Key-value store– Redis

• Document store– MongoDB

• Messaging– RabbitMQ

5

Thursday, October 27, 2011

Page 6: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Services inside Cloud Foundry

6

VMService Instance

Service NodeService

Gateway

Cloud Controller

Thursday, October 27, 2011

Page 7: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Exposing services

• VCAP_* environment variables provide configuration to applications

• VCAP_SERVICES with service connection info

7

{ "name": "inventory-db", "label": "mysql-5.1", "plan": "free", "credentials": { "node_id": "mysql_node_4", "hostname": "192.168.2.35", "port": 45678, "password": "dfdsf89414", "name": "kjkrewqr90", "user": "hwerkjewk" }}

Thursday, October 27, 2011

Page 8: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Agenda

• Introduction to Cloud Foundry Services• Auto-Reconfiguration• Cloud Namespace• Profile Support• Java Configuration• External Service Access

8

Thursday, October 27, 2011

Page 9: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: Getting Started

• Deploy Spring apps to the cloud without changing a single line of code

• Cloud Foundry automatically re-configures bean definitions to bind to cloud services

• Works with spring and grails frameworks

9

Thursday, October 27, 2011

Page 10: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: Relational DB

• Detects beans of type javax.sql.DataSource• Connects to MySQL or PostgreSQL services

– Specifies driver, url, username, password, validation query• Creates Commons DBCP or Tomcat DataSource

10

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">

<property name="driverClassName" value="org.h2.Driver" />" <property name="url" value="jdbc:h2:mem:" />" <property name="username" value="sa" />" <property name="password" value="" /></bean>

Thursday, October 27, 2011

Page 11: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: ORM

• Adjusts Hibernate Dialect• Changes hibernate.dialect property to MySQLDialect

(MyISAM) or PostgreSQLDialect– org.springframework.orm.jpa.AbstractEntityManagerFactoryBean– org.springframework.orm.hibernate3.AbstractSessionFactoryBean (Spring

2.5 and 3.0)– org.springframework.orm.hibernate3.SessionFactoryBuilderSupport

(Spring 3.1)

11

<bean class="org.sf.orm.jpa.LocalContainerEntityManagerFactoryBean"id="entityManagerFactory">

<property name="dataSource" ref="dataSource"/></bean>

Thursday, October 27, 2011

Page 12: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: NoSQL

• Works with Spring Data• Connects to MongoDB service (Document Store)• Connects to Redis service (Key-Value Store)

12

Thursday, October 27, 2011

Page 13: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

What is Spring Data?

• Umbrella of projects embracing the various new data access technologies– Non-relational DBs– Map-Reduce frameworks– Cloud-based data services

• Enhances developer productivity– Removes API noise, boiler-plate code and resource

management– Offers a consistent programming model

• Builds on top of existing Spring features and projects– e.g. Inversion of control, life-cycle management, type

conversion, portable data access exceptions, caching– Easy to add to your application

13

Thursday, October 27, 2011

Page 14: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: MongoDB

• Detects beans of type org.springframework.data.document.mongodb.MongoDbFactory

• Requires Spring Data MongoDB 1.0 M4• Creates SimpleMongoDbFactory

– Specifies host, port, username, password, database name

14

<mongo:db-factory id="mongoDbFactory" dbname="pwdtest" host="127.0.0.1"port="1234" username="test_user" password="efgh"/>

Thursday, October 27, 2011

Page 15: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: Redis

• Detects beans of type org.springframework.data.redis.connection.RedisConnectionFactory

• Requires Spring Data Redis 1.0 M4• Creates JedisConnectionFactory

– Specifies host, port, password– Requires Jedis jar– JRedis and RJC implementations may be supported in the

future

15

<bean id="redis"class="org.sf.data.redis.connection.jedis.JedisConnectionFactory” p:hostName="localhost" p:port="6379"/>

Thursday, October 27, 2011

Page 16: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: RabbitMQ

• Works with Spring AMQP 1.0– Provides publishing, multithreaded consumer generation,

and message converters– Facilitates management of AMQP resources while promoting

DI and declarative configuration• Detects beans of type

org.springframework.amqp.rabbit.connection.ConnectionFactory

• Connects to Rabbit Service– Specifies host, virtual host, port, username, password

• Creates CachingConnectionFactory

16

<rabbit:connection-factory id="rabbitConnectionFactory" host="localhost" password="testpwd" port="1238" username="testuser" virtual-host="virthost" />

Thursday, October 27, 2011

Page 17: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission.

Demo

Stalker Auto-Reconfiguration

17

Thursday, October 27, 2011

Page 18: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: How It Works

• Cloud Foundry installs a BeanFactoryPostProcessor in your application context during staging– Adds jar to your application– Modifies web.xml to load BFPP

• Adds context file to contextConfigLocation– web-app context-param– Spring MVC DispatcherServlet init-param

• Adds PostgreSQL and MySQL driver jars as needed for DataSource reconfiguration

18

Thursday, October 27, 2011

Page 19: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: Limitations

• Exactly one service of a given type bound to application– e.g. Only one relational DB service (MySQL or PostgreSQL)

• Exactly one bean of matching type in application– e.g. Only one bean of type javax.sql.DataSource

• Auto-Reconfiguration is skipped if limitations not met• Custom configuration is not preserved

– e.g. Pool sizes, caching or connection properties• Use cloud namespace instead

19

Thursday, October 27, 2011

Page 20: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Auto-Reconfiguration: Opting Out

• Two ways to explicitly disable auto-reconfiguration:– Choose framework “JavaWeb” when deploying application

• Application remains unchanged during staging• Unable to take advantage of profile feature

– Use any <cloud> element that creates a bean representing a service

• Explicit control of service bindings implies that auto-reconfiguration is unnecessary

20

Thursday, October 27, 2011

Page 21: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

But Wait, Thereʼs More...

• Lift– Auto-reconfiguration for Scala Lift apps– Writes MySQL connection properties to webapps/ROOT/

WEB-INF/classes/props/<username>.<hostname>.props– Requires only one service of type bound to app– PostgreSQL support coming soon

• Rails– Writes MySQL or PostgreSQL connection properties to

config/database.yml– If multiple services found, selects one named /^.*production

$/ or /^.*prod$/

21

Thursday, October 27, 2011

Page 22: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Agenda

• Introduction to Cloud Foundry Services• Auto-Reconfiguration• Cloud Namespace• Profile Support• Java Configuration• External Service Access

22

Thursday, October 27, 2011

Page 23: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Introducing... the Cloud Namespace

• <cloud:> namespace for use in Spring app contexts• Provides application-level control of bean service bindings• Recommended for development of new cloud apps• Use when:

– You have multiple services of the same type– You have multiple connecting beans of the same type

• e.g. DataSource, MongoDBFactory– You have custom bean configuration

• e.g. DataSource pool size, connection properties

23

Thursday, October 27, 2011

Page 24: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Including Cloud Namespace in Your App

• Declare Maven Dependency and Repository• Add namespace declaration to app context files

24

<dependencies><dependency>

<groupId>org.cloudfoundry</groupId><artifactId>cloudfoundry-runtime</artifactId><version>0.8.1</version>

" </dependency>......<repositories>

<repository>" <id>org.springframework.milestone</id>

" " <name>Spring Framework Milestone Repository</name>" " <url>http://maven.springframework.org/milestone</url>

</repository>......

Thursday, October 27, 2011

Page 25: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:service-scan>

• Scans all services bound to the application and creates a bean of an appropriate type for each– Same bean types as auto-reconfiguration

• Useful during early development phases

25

<beans" ... xmlns:cloud="http://schema.cloudfoundry.org/spring"" xsi:schemaLocation="http://schema.cloudfoundry.org/spring http://schema.cloudfoundry.org/spring/cloudfoundry-spring-0.8.xsd" ...">

<cloud:service-scan/>

</beans>

Thursday, October 27, 2011

Page 26: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:service-scan> Autowire Dependencies

• Created beans can be autowired as dependencies• Use @Qualifier with service name if multiple services of

same type bound to app

26

@Autowired(required=false)private ConnectionFactory rabbitConnectionFactory;

@Autowiredprivate RedisConnectionFactory redisConnectionFactory;

@Autowired@Qualifier("test_mysql_database")private DataSource mysqlDataSource;

@Autowired(required=false)@Qualifier("test_postgres_database")private DataSource postgresDataSource;

Thursday, October 27, 2011

Page 27: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:service-scan> Declare Dependencies

• Created beans ids will match service names• Use service name in dependency declarations

27

<!-- Connects to cloud service named "contacts-db" --><bean class="org.sf.orm.jpa.LocalContainerEntityManagerFactoryBean"

id="entityManagerFactory"> <property name="dataSource" ref="contacts-db"/></bean>

<!-- Connects to cloud service named "tweet-cache" --><bean id= "redisTemplate" class= "org.sf.data.redis.core.RedisTemplate" > " <property name="connectionFactory" ref="tweet-cache"/>

....</bean>

Thursday, October 27, 2011

Page 28: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission.

Demo

Stalker Service Scan

28

Thursday, October 27, 2011

Page 29: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:data-source>

• Configures a DataSource bean– Commons DBCP or Tomcat DataSource

• Basic attributes:– id: defaults to service name– service-name: only needed if you have multiple relational

database services bound to the app

29

<cloud:data-source id="dataSource"/>

<bean class="org.sf.orm.jpa.LocalContainerEntityManagerFactoryBean"id="entityManagerFactory">

<property name="dataSource" ref="dataSource"/></bean>

Thursday, October 27, 2011

Page 30: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

DataSource Advanced Settings: Pool

• <cloud:pool> options

30

Attribute Description Type Default

pool-size Either the maximum number of connections in the pool or a range specifying minimum and maximum size separated by a dash.

int DBCP or Tomcat pool defaults (initialSize, minIdle, maxActive)

max-wait-time The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception. -1 indicates unlimited wait

int DBCP or Tomcat pool default

Thursday, October 27, 2011

Page 31: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

DataSource Advanced Settings: Connection

• <cloud:connection> options

31

Attribute Description Typeproperties The connection properties that will be sent to the

JDBC driver when establishing new connections.Format of the string must be [propertyName=property;]

String

Thursday, October 27, 2011

Page 32: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:data-source> Example

32

<cloud:data-source id="dataSource" service-name="mySQLSvc"><cloud:pool pool-size="1-5"/><cloud:connection properties="charset=utf-8"/>

</cloud:data-source>

<bean class="org.sf.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> <property name="dataSource" ref="dataSource"/></bean>

Thursday, October 27, 2011

Page 33: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:mongo-db-factory>

• Configures a MongoDB connection factory• Basic attributes:

– id: defaults to service name– service-name: only needed if you have multiple MongoDB

services bound to the app– write-concern:

33

Value DescriptionNONE No exceptions are raised, even for network issuesNORMAL Exceptions are raised for network issues, not server errorsSAFE Exceptions are raised for network issues and server errors;

waits on a server for the write operationFSYNC_SAFE Exceptions are raised for network issues and server errors;

write operation waits for the server to flush the data to disk

Thursday, October 27, 2011

Page 34: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Mongo Advanced Settings

• <cloud:mongo-options> options

34

Attribute Description Type Default

connections-per-host

The maximum number of connections allowed per host for the Mongo instance. Those connections will be kept in a pool when idle. Once the pool is exhausted, any operation requiring a connection will block waiting for an available connection.

int Mongo driver default of 10

max-wait-time The maximum wait time in ms that a thread may wait for a connection to become available.

int Mongo driver default of 120000

Thursday, October 27, 2011

Page 35: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:mongo-db-factory> Example

35

<cloud:mongo-db-factory id="mongoDbFactory"service-name="mongoSvc" write-concern="FSYNC_SAFE">

<cloud:mongo-options connections-per-host="10" max-wait-time="2000" />

</cloud:mongo-db-factory>

Thursday, October 27, 2011

Page 36: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:redis-connection-factory>

• Configures a Jedis connection factory• Basic attributes:

– id: defaults to service name– service-name: only needed if you have multiple Redis

services bound to the app

36

<cloud:redis-connection-factory id="redis"/> <bean id= "redisTemplate" class= "org.sf.data.redis.core.RedisTemplate">" <property name="connectionFactory" ref="redis"/>" ...</bean>

Thursday, October 27, 2011

Page 37: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Redis Advanced Settings

• <cloud:pool> options

37

Attribute Description Type Default

pool-size Either the maximum number of connections in the pool or a range specifying minimum and maximum size separated by a dash.

int Jedis pool defaults, 0 min, 8 max

max-wait-time The maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception. -1 indicates unlimited wait

int Jedis pool default, -1

Thursday, October 27, 2011

Page 38: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:redis-connection-factory> Example

38

<cloud:redis-connection-factory id="redis" service-name="redisSvc" > <cloud:pool pool-size="1-5" max-wait-time="30000"/></cloud:redis-connection-factory> <bean id= "redisTemplate" class= "org.sf.data.redis.core.RedisTemplate" >" <property name="connectionFactory" ref="redis"/>" ....</bean>

Thursday, October 27, 2011

Page 39: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:rabbit-connection-factory>

• Configures a RabbitMQ connection factory• Basic attributes:

– id: defaults to service name– service-name: only needed if you have multiple RabbitMQ

services bound to the app

39

<cloud:rabbit-connection-factory id="rabbitConnectionFactory" /> <rabbit:template id="rabbitTemplate"" connection-factory="rabbitConnectionFactory" />

Thursday, October 27, 2011

Page 40: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Rabbit Advanced Settings

• <cloud:rabbit-options> options

40

Attribute Description Type Default

channel-cache-size

The size of the channel cache int Spring AMQP default of 1

Thursday, October 27, 2011

Page 41: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:rabbit-connection-factory> Example

41

<cloud:rabbit-connection-factory id="rabbitConnectionFactory"><cloud:rabbit-options channel-cache-size="10" />

</cloud:rabbit-connection-factory> <rabbit:template id="rabbitTemplate"" connection-factory="rabbitConnectionFactory" />

Thursday, October 27, 2011

Page 42: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

<cloud:properties>

• Exposes basic information about services that can be consumed with Springʼs property placeholder support

• Basic attributes:– id: the name of the properties bean

• Properties automatically available when deploying Spring 3.1 applications

42

<cloud:properties id="cloudProperties" />

<context:property-placeholder properties-ref="cloudProperties"/>

<bean class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user"" " " value="${cloud.services.mysql.connection.username}" />

...</bean>

Thursday, October 27, 2011

Page 43: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission.

Demo

Stalker with Cloud Namespace

43

Thursday, October 27, 2011

Page 44: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Agenda

• Introduction to Cloud Foundry Services• Auto-Reconfiguration• Cloud Namespace• Profile Support• Java Configuration• External Service Access

44

Thursday, October 27, 2011

Page 45: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Spring 3.1 Environment Abstraction

• Bean definitions for a specific environment (Profiles)– e.g. development, testing, production– Possibly different deployment environments– Activate profiles by name

• spring.profiles.active system property• Other means outside deployment unit • “default” profile activates if no other profiles specified

• Custom resolution of placeholders– Dependent on the actual environment – Ordered property sources

• Requires Spring 3.1 (or later)

45

Thursday, October 27, 2011

Page 46: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Isolating Cloud Foundry Configuration

• Switch between local, testing and Cloud Foundry deployments with Profiles

• “cloud” profile automatically activates on Cloud Foundry– usage of the cloud namespace should occur within the cloud

profile block

46

Thursday, October 27, 2011

Page 47: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Isolating Cloud Foundry Configuration

47

<bean class="org.sf.orm.jpa.LocalContainerEntityManagerFactoryBean"id="entityManagerFactory">

<property name="dataSource" ref="dataSource"/></bean>

<beans profile="cloud">" <cloud:data-source id="dataSource" /></beans>"<beans profile="default">" <bean class="org.a.commons.dbcp.BasicDataSource" id="dataSource">

" <property name="url" value="jdbc:mysql://localhost/stalker" />" </bean></beans>

Thursday, October 27, 2011

Page 48: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission.

Demo

Stalker Profiles

48

Thursday, October 27, 2011

Page 49: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Using Profiles to Enable Features

• Use profiles to add features when deploying to Cloud Foundry– e.g. Using Send Grid to send email

49

<beans profile="cloud"><bean name="mailSender" class="example.SendGridMailSender">" <property name="apiUser" value="[email protected]" />

" " <property name="apiKey" value="secureSecret" />" </bean></beans>

Thursday, October 27, 2011

Page 50: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Cloud Properties

• Cloud Foundry uses Environment abstraction to automatically expose properties to Spring 3.1 apps– Basic information about the application, such as its name

and the cloud provider– Detailed connection information for bound services

• cloud.services.{service-name}.connection.{property}• aliases for service name created based on the service type

– e.g. “cloud.services.mysql.connection.{property}”– only if there is a single service for that type bound

50

Thursday, October 27, 2011

Page 51: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Cloud Properties Example

• Use service properties to create your own connection factories– e.g. c3p0 connection pool

51

<context:property-placeholder/>

<bean id="c3p0DataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="com.mysql.jdbc.Driver" />" <property name="jdbcUrl"" " value="jdbc:mysql://${cloud.services.mysql.connection.host}:${cloud.services.mysql.connection.port}/${cloud.services.mysql.connection.name}" />" <property name="user" value="${cloud.services.mysql.connection.username}" />" <property name="password"

value="${cloud.services.mysql.connection.password}" /></bean>

Thursday, October 27, 2011

Page 52: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Profile Support: How It Works

• Cloud Foundry installs a custom ApplicationContextInitializer in your app during staging– Modifies web.xml

• Adds to contextInitializerClasses context-param• Adds “cloud” as an active profile• Adds a PropertySource to the Environment

52

Thursday, October 27, 2011

Page 53: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Agenda

• Introduction to Cloud Foundry Services• Auto-Reconfiguration• Cloud Namespace• Profile Support• Java Configuration• External Service Access

53

Thursday, October 27, 2011

Page 54: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Java Configuration

• Alternative to <cloud:*> namespace– Spring Java Configuration– Non-Spring apps

• Programmatic creation of service connection factories– Using ServiceCreator and ServiceInfo classes

• CloudEnvironment class provides access to all cloud properties and service info without requiring JSON parsing

• Included in cloudfoundry-runtime lib

54

Thursday, October 27, 2011

Page 55: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Using ServiceCreator

55

//Provides access to CF service and application env infoCloudEnvironment environment = new CloudEnvironment();" "//Retrieve env info for bound service named "mysqlService"RdbmsServiceInfo mysqlSvc =

environment.getServiceInfo("mysqlService", RdbmsServiceInfo.class);" "//create a DataSource bound to the serviceRdbmsServiceCreator dataSourceCreator = new RdbmsServiceCreator();DataSource dataSource = dataSourceCreator.createService(mysqlSvc);

Thursday, October 27, 2011

Page 56: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Using ServiceInfo

56

//Provides access to CF service and application env infoCloudEnvironment environment = new CloudEnvironment();" "//Retrieve env info for bound service named "mongoService"MongoServiceInfo mongoSvc =

environment.getServiceInfo("mongoService", MongoServiceInfo.class);" "//create a Mongo DB bound to the serviceMongo mongoDB = new Mongo(mongoSvc.getHost(), mongoSvc.getPort());

Thursday, October 27, 2011

Page 57: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Agenda

• Introduction to Cloud Foundry Services• Auto-Reconfiguration• Cloud Namespace• Profile Support• Java Configuration• External Service Access

57

Thursday, October 27, 2011

Page 58: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Caldecott TCP over HTTP tunnel• Designed to run on PaaS• Raw http implementation• Forwards raw data (is not a protocol specific

proxy)

Local client• Starts local TCP server• Sends remote host:port info to vcc server • Read data from local port and PUT to vcc server• Comet style blocking GET from server, forwards

to local port

Remote server• Async sinatra and EM app • Connects to host:port passed in from client

vcc client caldecott server

remote service

e.g. mysqld

local client e.g. mysql

TCP (listen, accept)

HTTP

TCP (connect)

firew

all

Thursday, October 27, 2011

Page 59: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Multiple Services and Sessions

One vcc server instance• Manages multiple tunnels

One vcc client instance per service• Multiple local apps may share a client if they

connect to the same remote server:port • Each listens on different local port

vcc client

caldecott server

mysqld

mysqlnavicat

redis

vcc client

mysql

port N port M

firewall

Thursday, October 27, 2011

Page 60: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Future of Cloud Foundry Services

• Additional services being worked on– Community contribution: Neo4J– Blob storage

• STS integration with Caldecott– Expose services right from the IDE

• Simplified access to existing services in your own cloud

60

Thursday, October 27, 2011

Page 61: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Summary

• Comprehensive set of services• Spring developers served well

– Dependency injection proves the right approach, again!• Many simplifications to use services

– Auto-reconfig– Cloud namespace– Cloud profile

• Focus on your app; let us worry about services!

61

Thursday, October 27, 2011

Page 62: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

Cloud Foundry Services

62

Clou

d Pr

ovid

er In

terf

aceApplication Service Interface

Private Clouds

PublicClouds

MicroCloud Foundry

Data Services

Other Services

Msg Services

.js

Thursday, October 27, 2011

Page 63: Cloud Foundry With Springwhiteship.me/wp-content/uploads/2011/11/CloudFoundryWithSpring… · • Works with Spring AMQP 1.0 – Provides publishing, multithreaded consumer generation,

© 2011 SpringOne 2GX 2011. All rights reserved. Do not distribute without permission.

Q&A

63

Thursday, October 27, 2011


Recommended