SlideShare a Scribd company logo
Composable Software Architecture
with Spring
Sam Brannen
@sam_brannen
Java Breeze | Odessa, Ukraine | 18 May 2013
2
Sam Brannen
•  Spring and Java Consultant @ Swiftmind (Zurich)
•  Developing Java for over 15 years
•  Spring Framework Core Committer since 2007
•  Spring Trainer
•  Presenter on Spring, Java, OSGi, and testing
3
Swiftmind
Your experts for Enterprise Java
Areas of expertise
•  Spring Framework
•  Java EE
•  OSGi
•  Agile Methodologies
•  Software Engineering Best Practices
Headquarters
•  Zurich, Switzerland
•  @swiftmind
•  http://www.swiftmind.com
4
Agenda
•  Enterprise Applications
•  What we’ve learned as a community
•  Composable Software Architecture
•  Java EE + Open Source
•  How Spring fits into the picture
•  Spring 4.0 Roadmap
5
Modern Enterprise Applications
6
What does "enterprise" mean?
Enterprise software is software used in organizations, such
as in a business or government, as opposed to software
used by individuals. Enterprise software is an integral part of
a (computer based) Information System.
-Wikipedia
7
OK, sure... but what does that mean to developers?
8
Furthermore …
Enterprise software typically has interfaces to other
enterprise software and is centrally managed.
- Wikipedia
9
Ahh, now we’re getting somewhere!
10
Typical Enterprise Application
•  Supports enterprise business process
•  Is relatively large
•  Should be robust, scalable, and offer high performance
•  Does not run in isolation
•  Interacts with multiple external systems and services …
11
RDBMS
12
LDAP
13
SMTP
14
FTP, FTP, SSH
15
JMS, AMQP
16
SOAP Web Services, REST Web Services
17
Web and Mobile clients, etc.
18
But each of these has its own APIs and potentially different
protocols and exchange formats!
19
So how should we design such enterprise applications?
20
What we’ve learned as a community
21
Things to avoid
•  Tight coupling to the container or frameworks
•  Tight coupling to protocols and exchange formats in our
service layer
•  Monolithic deployment units
•  Anemic domain models
•  Bloated transaction scripts
•  Code tangling and scattering
22
What we should aim for
•  Modularity
•  Layered architecture with
–  a canonical domain model
–  a dedicated orchestration layer
•  Separation of concerns
•  Externalized environment-specific configuration
•  Design for testability
23
How we achieve it
•  OOA / OOD / OOP
•  (@)POJO Programming Model
•  Marshaling and automatic type conversion
•  Dependency Injection (DI)
•  Inversion of Control (IoC)
•  AOP / Interceptor Model
•  Automated out-of-container testing and CI
24
Composable Software Architecture
25
Composability
Composability is a system design principle that deals with
the inter-relationships of components. A highly
composable system provides recombinant components that
can be selected and assembled in various combinations
to satisfy specific user requirements. (Wikipedia)
•  Self-contained (modular)
•  Typically stateless
26
But it's not just about modularity and statelessness.
27
It's a different way of thinking,
28
a different way of designing,
29
a different kind of architecture,
30
with new possibilities…
31
if done right.
32
Think about different ways the same components can be...
33
reused…
34
repurposed…
35
and composed…
36
to meet different business requirements
37
or to interact with different systems.
38
Composable Architecture Visualized
Infrastructure
Repository
Service
Orchestration
DomainModel
39
How is this new?
•  To be honest, it’s not really new,
–  if you just look at the diagram…
•  The web tier or presentation layer has always effectively
been a type of orchestration layer.
•  The difference is that we re-use all of the other layers
with multiple types of orchestration simultaneously!
40
Orchestration Layer
•  Lies at the heart of a composable architecture
•  Orchestrates all interactions with the service layer
–  potentially interacting directly with repositories (e.g.,
in batch processing)
•  Handles external protocols
•  Converts from external formats into our canonical domain
model
•  Thereby… allowing application services to be composed in
a multitude of different ways!
41
Common Types of Orchestration
•  Web controller
–  HTTP, HTTPS :: HTTP request and response
•  REST or SOAP Web Service endpoint
–  HTTP/HTTPS :: XML, JSON, binary, …
•  JMS or AMQP listener (or message listener container)
–  JMS Message types, domain entities, …
•  Messaging endpoint (e.g., gateway + service activator)
–  Web service, FTP, file system, email, …
•  Batch component (e.g., reader, writer, processor)
–  Files, SQL, …
42
Java EE + Open Source
43
What's good about Java EE?
•  Set of common enterprise standards for Java
•  Consistent across containers and vendors (mostly)
•  Great tooling and build support
•  Catching up with innovation in open source
–  Hibernate à JPA
–  Spring DI / Guice / Seam à CDI
44
Java EE is a one stop shop
45
which is great…
46
if everything you need is in that shop.
47
But if Java EE doesn’t offer what you need…
48
use open source frameworks
49
either in a Java EE container
50
or in an alternative light-weight container.
51
Open Source Frameworks fill the Gaps
•  Web frameworks and UI components
•  NoSQL
•  Big Data
•  AMQP
•  Mobile
•  Social Media
•  Batch
•  Enterprise Integration (EAI)
•  …
52
How Spring fits into the picture
53
Core Spring (Framework)
•  DI + IoC + AOP
•  Declarative
–  transactions, caching, validation, formatting
•  Spring MVC and REST
•  JMS Message Listener Container
–  Message-driven POJOs
•  Testing framework
54
Dependency Injection and Inversion of Control collectively
decouple application code from the deployment environment
55
DI + IoC à POJO Programming Model
56
POJO Programming Model + AOP à Composability
57
Spring is an Ecosystem
•  Spring MVC
•  Spring REST
•  Spring Web Flow
•  Spring Security
•  Spring Web Services
•  Spring Batch
•  Spring Integration
•  Spring Data
•  Spring Mobile
•  Spring Social
•  Spring AMQP
•  …
58
Spring MVC and REST
•  @Controller annotated components serve as MVC
handler methods and REST endpoints
•  Automatic type conversion
•  Data binding to domain entities
•  Marshaling
–  JSON, JAXB, Castor, XMLBeans, JiBX, XStream, …
•  Handler methods and endpoints orchestrate the service
layer
59
Spring Web Services
•  @Endpoint annotated components serve as SOAP Web
Service endpoints
•  Marshaling (OXM)
–  JAXB, Castor, XMLBeans, JiBX, XStream
•  Endpoint methods orchestrate the service layer
60
Spring JMS
•  Message listener containers (MLC) support
–  JMS MessageListener API
–  Message-driven POJOs
•  Automatic type conversion from JMS Message types into
–  String, Map, Object, byte[]
–  Customer converters also supported
•  Marshaling
–  Spring OXM, customer solutions, etc.
•  MLC orchestrates the service layer
61
Spring Integration
•  Inbound and outbound messaging gateways
–  Handle external protocols and APIs
–  Too many to mention here!
•  Automatic type conversion for method arguments and
return types in Service Activators
•  Marshaling and custom type conversion also supported
•  The service layer can be orchestrated via declarative
configuration (e.g., service activators in XML)
62
And the list goes on …
63
Composable Architecture – with Spring
Infrastructure
Repository
Service
DomainModel
Spring REST
Spring MVC
Spring JMS
Spring Integration
Spring Batch
Spring WS
64
Composable Architecture Checklist
þ  Modularity
þ  Layered architecture
þ Canonical Domain Model
þ Orchestration: web, batch, integration, web services
þ Service
þ Repository
þ Infrastructure
þ  POJO programming model
þ  Separation of concerns
þ  Externalized environment-specific configuration
þ  Testability, automated testing, and CI
65
Roadmap for Spring 4.0
66
1st Class Support for Java 8 based apps
•  Language features such as lambda expressions
–  for callbacks with templates
–  for concurrent execution
•  think fork/join, map/reduce, etc.
•  APIs such as JSR-310 Date and Time
–  Alongside Spring’s existing support for JodaTime
67
Configuring Spring with Groovy 2
•  Configuring and implementing Spring-style applications
using Groovy 2.x
•  Groovy-based bean definitions
•  Groovy as the language of choice for an entire
application, as a direct and straightforward alternative to
Java source files
•  Groovy 2.0's static compilation support completes the
picture here
68
Support for Key Java EE 7 Technologies
•  JMS 2.0
•  JPA 2.1
•  Bean Validation 1.1
•  Servlet 3.1
•  And fully covering JCache 1.0
69
Enabling WebSocket-style Architectures
•  Support for JSR-356 compliant runtimes
•  Also supporting related technologies
70
Fine-grained Eventing and Messaging
•  Introducing fine-grained eventing and messaging within
the application
•  Building on our existing application event mechanism
•  Aligned with our JMS message listener mechanism
71
Pruning and Dependency Upgrades
•  Removing a variety of deprecated packages across the
framework
–  See Spring Framework 3.2's deprecations!
•  Raising minimum dependencies to Java 6+
–  Java SE 6+ and Java EE 6+
–  with some compromises for EE 5++ servers
72
In Closing…
73
Further Resources
•  Spring Projects
–  http://www.springsource.org/projects
–  Reference Manuals
–  Javadoc
•  Spring Forums
–  http://forum.springframework.org
•  Spring JIRA
–  http://jira.springframework.org
•  GitHub Repositories
–  https://github.com/SpringSource
74
Blogs
•  Swiftmind Team Blog
–  http://www.swiftmind.com/blog/
•  SpringSource Team Blog
–  http://blog.springsource.com/
75
Q & A
Sam Brannen
twitter: @sam_brannen
www.slideshare.net/sbrannen
www.swiftmind.com

More Related Content

What's hot

Implementing zero trust in IBM Cloud Pak for Integration
Implementing zero trust in IBM Cloud Pak for IntegrationImplementing zero trust in IBM Cloud Pak for Integration
Implementing zero trust in IBM Cloud Pak for Integration
Kim Clark
 
DATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupDATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backup
Saewoong Lee
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
The Software House
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
Araf Karsh Hamid
 
The Ideal Approach to Application Modernization; Which Way to the Cloud?
The Ideal Approach to Application Modernization; Which Way to the Cloud?The Ideal Approach to Application Modernization; Which Way to the Cloud?
The Ideal Approach to Application Modernization; Which Way to the Cloud?
Codit
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Ryan Riley
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
Amazon Web Services
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
Araf Karsh Hamid
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Harsh Jegadeesan
 
Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to Hero
Fabrício Rissetto
 
Microservices
MicroservicesMicroservices
Microservices
Đức Giang Nguyễn
 
Cloud governance - theory and tools
Cloud governance - theory and toolsCloud governance - theory and tools
Cloud governance - theory and tools
Antti Arnell
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
Paul Mooney
 
Event-driven Architecture
Event-driven ArchitectureEvent-driven Architecture
Event-driven Architecture
Centric Consulting
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
Araf Karsh Hamid
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
Lourens Naudé
 
Domain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesDomain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and Microservices
Radosław Maziarka
 
What are Microservices | Microservices Architecture Training | Microservices ...
What are Microservices | Microservices Architecture Training | Microservices ...What are Microservices | Microservices Architecture Training | Microservices ...
What are Microservices | Microservices Architecture Training | Microservices ...
Edureka!
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
MahmoudZidan41
 
Introduction to Enterprise Architecture
Introduction to Enterprise Architecture Introduction to Enterprise Architecture
Introduction to Enterprise Architecture
Leo Shuster
 

What's hot (20)

Implementing zero trust in IBM Cloud Pak for Integration
Implementing zero trust in IBM Cloud Pak for IntegrationImplementing zero trust in IBM Cloud Pak for Integration
Implementing zero trust in IBM Cloud Pak for Integration
 
DATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupDATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backup
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
 
The Ideal Approach to Application Modernization; Which Way to the Cloud?
The Ideal Approach to Application Modernization; Which Way to the Cloud?The Ideal Approach to Application Modernization; Which Way to the Cloud?
The Ideal Approach to Application Modernization; Which Way to the Cloud?
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design: Zero to Hero
Domain Driven Design: Zero to HeroDomain Driven Design: Zero to Hero
Domain Driven Design: Zero to Hero
 
Microservices
MicroservicesMicroservices
Microservices
 
Cloud governance - theory and tools
Cloud governance - theory and toolsCloud governance - theory and tools
Cloud governance - theory and tools
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Event-driven Architecture
Event-driven ArchitectureEvent-driven Architecture
Event-driven Architecture
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
 
Domain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and MicroservicesDomain Driven Design - Strategic Patterns and Microservices
Domain Driven Design - Strategic Patterns and Microservices
 
What are Microservices | Microservices Architecture Training | Microservices ...
What are Microservices | Microservices Architecture Training | Microservices ...What are Microservices | Microservices Architecture Training | Microservices ...
What are Microservices | Microservices Architecture Training | Microservices ...
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Introduction to Enterprise Architecture
Introduction to Enterprise Architecture Introduction to Enterprise Architecture
Introduction to Enterprise Architecture
 

Viewers also liked

Software architecture also needs agile
Software architecture also needs agileSoftware architecture also needs agile
Software architecture also needs agile
Boyan Mihaylov
 
Software Architecture taxonomies - Integration patterns
Software Architecture taxonomies - Integration patternsSoftware Architecture taxonomies - Integration patterns
Software Architecture taxonomies - Integration patterns
Jose Emilio Labra Gayo
 
Refactoring for Software Architecture Smells
Refactoring for Software Architecture SmellsRefactoring for Software Architecture Smells
Refactoring for Software Architecture Smells
Ganesh Samarthyam
 
Software architecture
Software architectureSoftware architecture
Software architecture
Ahmad Raza Aslam
 
Basics of Software Architecture for .NET Developers
Basics of Software Architecture for .NET DevelopersBasics of Software Architecture for .NET Developers
Basics of Software Architecture for .NET Developers
Dan Douglas
 
User Driven Software Architecture
User Driven Software ArchitectureUser Driven Software Architecture
User Driven Software Architecture
Simon Guest
 
Software Architecture Patterns
Software Architecture PatternsSoftware Architecture Patterns
Software Architecture Patterns
Assaf Gannon
 
Software Architecture: Design Decisions
Software Architecture: Design DecisionsSoftware Architecture: Design Decisions
Software Architecture: Design Decisions
Henry Muccini
 
Principles of software architecture design
Principles of software architecture designPrinciples of software architecture design
Principles of software architecture design
Len Bass
 
Software Architecture vs design
Software Architecture vs design Software Architecture vs design
Software Architecture vs design
Arslan Anwar
 
Software Architecture: views and viewpoints
Software Architecture: views and viewpointsSoftware Architecture: views and viewpoints
Software Architecture: views and viewpoints
Henry Muccini
 
Fundamentals Of Software Architecture
Fundamentals Of Software ArchitectureFundamentals Of Software Architecture
Fundamentals Of Software Architecture
Markus Voelter
 
Practices of Good Software Architects
Practices of Good Software ArchitectsPractices of Good Software Architects
Practices of Good Software Architects
Eberhard Wolff
 
Software Architecture for Cloud Infrastructure
Software Architecture for Cloud InfrastructureSoftware Architecture for Cloud Infrastructure
Software Architecture for Cloud Infrastructure
Tapio Rautonen
 
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overviewEnterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Winton Winton
 

Viewers also liked (15)

Software architecture also needs agile
Software architecture also needs agileSoftware architecture also needs agile
Software architecture also needs agile
 
Software Architecture taxonomies - Integration patterns
Software Architecture taxonomies - Integration patternsSoftware Architecture taxonomies - Integration patterns
Software Architecture taxonomies - Integration patterns
 
Refactoring for Software Architecture Smells
Refactoring for Software Architecture SmellsRefactoring for Software Architecture Smells
Refactoring for Software Architecture Smells
 
Software architecture
Software architectureSoftware architecture
Software architecture
 
Basics of Software Architecture for .NET Developers
Basics of Software Architecture for .NET DevelopersBasics of Software Architecture for .NET Developers
Basics of Software Architecture for .NET Developers
 
User Driven Software Architecture
User Driven Software ArchitectureUser Driven Software Architecture
User Driven Software Architecture
 
Software Architecture Patterns
Software Architecture PatternsSoftware Architecture Patterns
Software Architecture Patterns
 
Software Architecture: Design Decisions
Software Architecture: Design DecisionsSoftware Architecture: Design Decisions
Software Architecture: Design Decisions
 
Principles of software architecture design
Principles of software architecture designPrinciples of software architecture design
Principles of software architecture design
 
Software Architecture vs design
Software Architecture vs design Software Architecture vs design
Software Architecture vs design
 
Software Architecture: views and viewpoints
Software Architecture: views and viewpointsSoftware Architecture: views and viewpoints
Software Architecture: views and viewpoints
 
Fundamentals Of Software Architecture
Fundamentals Of Software ArchitectureFundamentals Of Software Architecture
Fundamentals Of Software Architecture
 
Practices of Good Software Architects
Practices of Good Software ArchitectsPractices of Good Software Architects
Practices of Good Software Architects
 
Software Architecture for Cloud Infrastructure
Software Architecture for Cloud InfrastructureSoftware Architecture for Cloud Infrastructure
Software Architecture for Cloud Infrastructure
 
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overviewEnterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
Enterprise Architecture for Dummies - TOGAF 9 enterprise architecture overview
 

Similar to Composable Software Architecture with Spring

Node.js architecture (EN)
Node.js architecture (EN)Node.js architecture (EN)
Node.js architecture (EN)
Timur Shemsedinov
 
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
WSO2
 
Cross-platform interaction
Cross-platform interactionCross-platform interaction
Cross-platform interaction
Oleksii Duhno
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferay
daveayan
 
Frameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic ReviewFrameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic Review
netc2012
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
Henry S
 
After the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANAfter the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEAN
Jeff Fox
 
Prominent Back-end frameworks to consider in 2022!
Prominent Back-end frameworks to consider in 2022!Prominent Back-end frameworks to consider in 2022!
Prominent Back-end frameworks to consider in 2022!
Shelly Megan
 
170215 msa intro
170215 msa intro170215 msa intro
170215 msa intro
Sonic leigh
 
Introduction to g reg 4.6.0
Introduction to g reg 4.6.0Introduction to g reg 4.6.0
Introduction to g reg 4.6.0
WSO2
 
A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...
A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...
A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...
Ram G Athreya
 
Monolithic to Microservices Architecture
Monolithic to Microservices ArchitectureMonolithic to Microservices Architecture
Monolithic to Microservices Architecture
Vin Dahake
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
Comsysto Reply GmbH
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
Comsysto Reply GmbH
 
FlexDeploy Product Technical Overview
FlexDeploy Product Technical OverviewFlexDeploy Product Technical Overview
FlexDeploy Product Technical Overview
Dalibor Blazevic
 
Microservices, Spring Cloud & Cloud Foundry
Microservices, Spring Cloud & Cloud FoundryMicroservices, Spring Cloud & Cloud Foundry
Microservices, Spring Cloud & Cloud Foundry
Emilio Garcia
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
Dmitry Buzdin
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
Sam Bowne
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
Sam Bowne
 
Presentation 1 Web--dev
Presentation 1 Web--devPresentation 1 Web--dev
Presentation 1 Web--dev
altsav
 

Similar to Composable Software Architecture with Spring (20)

Node.js architecture (EN)
Node.js architecture (EN)Node.js architecture (EN)
Node.js architecture (EN)
 
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...WSO2 Intro Webinar -  Simplifying Enterprise Integration with Configurable WS...
WSO2 Intro Webinar - Simplifying Enterprise Integration with Configurable WS...
 
Cross-platform interaction
Cross-platform interactionCross-platform interaction
Cross-platform interaction
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferay
 
Frameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic ReviewFrameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic Review
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
 
After the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEANAfter the LAMP, it's time to get MEAN
After the LAMP, it's time to get MEAN
 
Prominent Back-end frameworks to consider in 2022!
Prominent Back-end frameworks to consider in 2022!Prominent Back-end frameworks to consider in 2022!
Prominent Back-end frameworks to consider in 2022!
 
170215 msa intro
170215 msa intro170215 msa intro
170215 msa intro
 
Introduction to g reg 4.6.0
Introduction to g reg 4.6.0Introduction to g reg 4.6.0
Introduction to g reg 4.6.0
 
A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...
A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...
A Public Cloud Based SOA Workflow for Machine Learning Based Recommendation A...
 
Monolithic to Microservices Architecture
Monolithic to Microservices ArchitectureMonolithic to Microservices Architecture
Monolithic to Microservices Architecture
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and Consistently
 
FlexDeploy Product Technical Overview
FlexDeploy Product Technical OverviewFlexDeploy Product Technical Overview
FlexDeploy Product Technical Overview
 
Microservices, Spring Cloud & Cloud Foundry
Microservices, Spring Cloud & Cloud FoundryMicroservices, Spring Cloud & Cloud Foundry
Microservices, Spring Cloud & Cloud Foundry
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development Security
 
Presentation 1 Web--dev
Presentation 1 Web--devPresentation 1 Web--dev
Presentation 1 Web--dev
 

More from Sam Brannen

Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Sam Brannen
 
Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022
Sam Brannen
 
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
Sam Brannen
 
JUnit 5: What's New and What's Coming - Spring I/O 2019
JUnit 5: What's New and What's Coming - Spring I/O 2019JUnit 5: What's New and What's Coming - Spring I/O 2019
JUnit 5: What's New and What's Coming - Spring I/O 2019
Sam Brannen
 
JUnit 5 - New Opportunities for Testing on the JVM
JUnit 5 - New Opportunities for Testing on the JVMJUnit 5 - New Opportunities for Testing on the JVM
JUnit 5 - New Opportunities for Testing on the JVM
Sam Brannen
 
Get the Most out of Testing with Spring 4.2
Get the Most out of Testing with Spring 4.2Get the Most out of Testing with Spring 4.2
Get the Most out of Testing with Spring 4.2
Sam Brannen
 
JUnit 5 - from Lambda to Alpha and beyond
JUnit 5 - from Lambda to Alpha and beyondJUnit 5 - from Lambda to Alpha and beyond
JUnit 5 - from Lambda to Alpha and beyond
Sam Brannen
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
Sam Brannen
 
Testing with Spring 4.x
Testing with Spring 4.xTesting with Spring 4.x
Testing with Spring 4.x
Sam Brannen
 
Spring Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1
Sam Brannen
 
Testing Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsTesting Spring MVC and REST Web Applications
Testing Spring MVC and REST Web Applications
Sam Brannen
 
Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2
Sam Brannen
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1
Sam Brannen
 
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Sam Brannen
 
Spring Framework 3.2 - What's New
Spring Framework 3.2 - What's NewSpring Framework 3.2 - What's New
Spring Framework 3.2 - What's New
Sam Brannen
 
Spring 3.1 and MVC Testing Support - 4Developers
Spring 3.1 and MVC Testing Support - 4DevelopersSpring 3.1 and MVC Testing Support - 4Developers
Spring 3.1 and MVC Testing Support - 4Developers
Sam Brannen
 
Effective out-of-container Integration Testing - 4Developers
Effective out-of-container Integration Testing - 4DevelopersEffective out-of-container Integration Testing - 4Developers
Effective out-of-container Integration Testing - 4Developers
Sam Brannen
 
Spring 3.1 to 3.2 in a Nutshell - SDC2012
Spring 3.1 to 3.2 in a Nutshell - SDC2012Spring 3.1 to 3.2 in a Nutshell - SDC2012
Spring 3.1 to 3.2 in a Nutshell - SDC2012
Sam Brannen
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Sam Brannen
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing Support
Sam Brannen
 

More from Sam Brannen (20)

Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
Testing with Spring, AOT, GraalVM, and JUnit 5 - Spring I/O 2023
 
Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022
 
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
JUnit 5 - Evolution and Innovation - SpringOne Platform 2019
 
JUnit 5: What's New and What's Coming - Spring I/O 2019
JUnit 5: What's New and What's Coming - Spring I/O 2019JUnit 5: What's New and What's Coming - Spring I/O 2019
JUnit 5: What's New and What's Coming - Spring I/O 2019
 
JUnit 5 - New Opportunities for Testing on the JVM
JUnit 5 - New Opportunities for Testing on the JVMJUnit 5 - New Opportunities for Testing on the JVM
JUnit 5 - New Opportunities for Testing on the JVM
 
Get the Most out of Testing with Spring 4.2
Get the Most out of Testing with Spring 4.2Get the Most out of Testing with Spring 4.2
Get the Most out of Testing with Spring 4.2
 
JUnit 5 - from Lambda to Alpha and beyond
JUnit 5 - from Lambda to Alpha and beyondJUnit 5 - from Lambda to Alpha and beyond
JUnit 5 - from Lambda to Alpha and beyond
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
 
Testing with Spring 4.x
Testing with Spring 4.xTesting with Spring 4.x
Testing with Spring 4.x
 
Spring Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1
 
Testing Spring MVC and REST Web Applications
Testing Spring MVC and REST Web ApplicationsTesting Spring MVC and REST Web Applications
Testing Spring MVC and REST Web Applications
 
Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2Testing Web Apps with Spring Framework 3.2
Testing Web Apps with Spring Framework 3.2
 
Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1Spring Framework 4.0 to 4.1
Spring Framework 4.0 to 4.1
 
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
Spring Framework 4.0 - The Next Generation - Soft-Shake 2013
 
Spring Framework 3.2 - What's New
Spring Framework 3.2 - What's NewSpring Framework 3.2 - What's New
Spring Framework 3.2 - What's New
 
Spring 3.1 and MVC Testing Support - 4Developers
Spring 3.1 and MVC Testing Support - 4DevelopersSpring 3.1 and MVC Testing Support - 4Developers
Spring 3.1 and MVC Testing Support - 4Developers
 
Effective out-of-container Integration Testing - 4Developers
Effective out-of-container Integration Testing - 4DevelopersEffective out-of-container Integration Testing - 4Developers
Effective out-of-container Integration Testing - 4Developers
 
Spring 3.1 to 3.2 in a Nutshell - SDC2012
Spring 3.1 to 3.2 in a Nutshell - SDC2012Spring 3.1 to 3.2 in a Nutshell - SDC2012
Spring 3.1 to 3.2 in a Nutshell - SDC2012
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
 
Spring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing SupportSpring 3.1 and MVC Testing Support
Spring 3.1 and MVC Testing Support
 

Recently uploaded

How Generative AI is Shaping the Future of Software Application Development
How Generative AI is Shaping the Future of Software Application DevelopmentHow Generative AI is Shaping the Future of Software Application Development
How Generative AI is Shaping the Future of Software Application Development
MohammedIrfan308637
 
The two flavors of Python 3.13 - PyHEP 2024
The two flavors of Python 3.13 - PyHEP 2024The two flavors of Python 3.13 - PyHEP 2024
The two flavors of Python 3.13 - PyHEP 2024
Henry Schreiner
 
Three available editions of Windows Servers crucial to your organization’s op...
Three available editions of Windows Servers crucial to your organization’s op...Three available editions of Windows Servers crucial to your organization’s op...
Three available editions of Windows Servers crucial to your organization’s op...
Q-Advise
 
How to Secure Your Kubernetes Software Supply Chain at Scale
How to Secure Your Kubernetes Software Supply Chain at ScaleHow to Secure Your Kubernetes Software Supply Chain at Scale
How to Secure Your Kubernetes Software Supply Chain at Scale
Anchore
 
UW Cert degree offer diploma
UW Cert degree offer diploma UW Cert degree offer diploma
UW Cert degree offer diploma
dakyuhe
 
01. Ruby Introduction - Ruby Core Teaching
01. Ruby Introduction - Ruby Core Teaching01. Ruby Introduction - Ruby Core Teaching
01. Ruby Introduction - Ruby Core Teaching
quanhoangd129
 
09. Ruby Object Oriented Programming - Ruby Core Teaching
09. Ruby Object Oriented Programming - Ruby Core Teaching09. Ruby Object Oriented Programming - Ruby Core Teaching
09. Ruby Object Oriented Programming - Ruby Core Teaching
quanhoangd129
 
240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf
240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf
240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf
CS Kwak
 
The Politics of Agile Development.pptx
The  Politics of  Agile Development.pptxThe  Politics of  Agile Development.pptx
The Politics of Agile Development.pptx
NMahendiran
 
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdfApplitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools
 
Understanding Automated Testing Tools for Web Applications.pdf
Understanding Automated Testing Tools for Web Applications.pdfUnderstanding Automated Testing Tools for Web Applications.pdf
Understanding Automated Testing Tools for Web Applications.pdf
kalichargn70th171
 
B.Sc. Computer Science Department PPT 2024
B.Sc. Computer Science Department PPT 2024B.Sc. Computer Science Department PPT 2024
B.Sc. Computer Science Department PPT 2024
vmsdeptcom
 
Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...
Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...
Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...
OnePlan Solutions
 
daily-improvements-with-sqdc-process.pdf
daily-improvements-with-sqdc-process.pdfdaily-improvements-with-sqdc-process.pdf
daily-improvements-with-sqdc-process.pdf
sayma33
 
Mastering MicroStation DGN: How to Integrate CAD and GIS
Mastering MicroStation DGN: How to Integrate CAD and GISMastering MicroStation DGN: How to Integrate CAD and GIS
Mastering MicroStation DGN: How to Integrate CAD and GIS
Safe Software
 
03. Ruby Variables & Regex - Ruby Core Teaching
03. Ruby Variables & Regex - Ruby Core Teaching03. Ruby Variables & Regex - Ruby Core Teaching
03. Ruby Variables & Regex - Ruby Core Teaching
quanhoangd129
 
CrushFTP 10.4.0.29 PC Software - WhizNews
CrushFTP 10.4.0.29 PC Software - WhizNewsCrushFTP 10.4.0.29 PC Software - WhizNews
CrushFTP 10.4.0.29 PC Software - WhizNews
Eman Nisar
 
Test Polarity: Detecting Positive and Negative Tests (FSE 2024)
Test Polarity: Detecting Positive and Negative Tests (FSE 2024)Test Polarity: Detecting Positive and Negative Tests (FSE 2024)
Test Polarity: Detecting Positive and Negative Tests (FSE 2024)
Andre Hora
 
04. Ruby Operators Slides - Ruby Core Teaching
04. Ruby Operators Slides - Ruby Core Teaching04. Ruby Operators Slides - Ruby Core Teaching
04. Ruby Operators Slides - Ruby Core Teaching
quanhoangd129
 
08. Ruby Enumerable - Ruby Core Teaching
08. Ruby Enumerable - Ruby Core Teaching08. Ruby Enumerable - Ruby Core Teaching
08. Ruby Enumerable - Ruby Core Teaching
quanhoangd129
 

Recently uploaded (20)

How Generative AI is Shaping the Future of Software Application Development
How Generative AI is Shaping the Future of Software Application DevelopmentHow Generative AI is Shaping the Future of Software Application Development
How Generative AI is Shaping the Future of Software Application Development
 
The two flavors of Python 3.13 - PyHEP 2024
The two flavors of Python 3.13 - PyHEP 2024The two flavors of Python 3.13 - PyHEP 2024
The two flavors of Python 3.13 - PyHEP 2024
 
Three available editions of Windows Servers crucial to your organization’s op...
Three available editions of Windows Servers crucial to your organization’s op...Three available editions of Windows Servers crucial to your organization’s op...
Three available editions of Windows Servers crucial to your organization’s op...
 
How to Secure Your Kubernetes Software Supply Chain at Scale
How to Secure Your Kubernetes Software Supply Chain at ScaleHow to Secure Your Kubernetes Software Supply Chain at Scale
How to Secure Your Kubernetes Software Supply Chain at Scale
 
UW Cert degree offer diploma
UW Cert degree offer diploma UW Cert degree offer diploma
UW Cert degree offer diploma
 
01. Ruby Introduction - Ruby Core Teaching
01. Ruby Introduction - Ruby Core Teaching01. Ruby Introduction - Ruby Core Teaching
01. Ruby Introduction - Ruby Core Teaching
 
09. Ruby Object Oriented Programming - Ruby Core Teaching
09. Ruby Object Oriented Programming - Ruby Core Teaching09. Ruby Object Oriented Programming - Ruby Core Teaching
09. Ruby Object Oriented Programming - Ruby Core Teaching
 
240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf
240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf
240717 ProPILE - Probing Privacy Leakage in Large Language Models.pdf
 
The Politics of Agile Development.pptx
The  Politics of  Agile Development.pptxThe  Politics of  Agile Development.pptx
The Politics of Agile Development.pptx
 
Applitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdfApplitools Autonomous 2.0 Sneak Peek.pdf
Applitools Autonomous 2.0 Sneak Peek.pdf
 
Understanding Automated Testing Tools for Web Applications.pdf
Understanding Automated Testing Tools for Web Applications.pdfUnderstanding Automated Testing Tools for Web Applications.pdf
Understanding Automated Testing Tools for Web Applications.pdf
 
B.Sc. Computer Science Department PPT 2024
B.Sc. Computer Science Department PPT 2024B.Sc. Computer Science Department PPT 2024
B.Sc. Computer Science Department PPT 2024
 
Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...
Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...
Bring Strategic Portfolio Management to Monday.com using OnePlan - Webinar 18...
 
daily-improvements-with-sqdc-process.pdf
daily-improvements-with-sqdc-process.pdfdaily-improvements-with-sqdc-process.pdf
daily-improvements-with-sqdc-process.pdf
 
Mastering MicroStation DGN: How to Integrate CAD and GIS
Mastering MicroStation DGN: How to Integrate CAD and GISMastering MicroStation DGN: How to Integrate CAD and GIS
Mastering MicroStation DGN: How to Integrate CAD and GIS
 
03. Ruby Variables & Regex - Ruby Core Teaching
03. Ruby Variables & Regex - Ruby Core Teaching03. Ruby Variables & Regex - Ruby Core Teaching
03. Ruby Variables & Regex - Ruby Core Teaching
 
CrushFTP 10.4.0.29 PC Software - WhizNews
CrushFTP 10.4.0.29 PC Software - WhizNewsCrushFTP 10.4.0.29 PC Software - WhizNews
CrushFTP 10.4.0.29 PC Software - WhizNews
 
Test Polarity: Detecting Positive and Negative Tests (FSE 2024)
Test Polarity: Detecting Positive and Negative Tests (FSE 2024)Test Polarity: Detecting Positive and Negative Tests (FSE 2024)
Test Polarity: Detecting Positive and Negative Tests (FSE 2024)
 
04. Ruby Operators Slides - Ruby Core Teaching
04. Ruby Operators Slides - Ruby Core Teaching04. Ruby Operators Slides - Ruby Core Teaching
04. Ruby Operators Slides - Ruby Core Teaching
 
08. Ruby Enumerable - Ruby Core Teaching
08. Ruby Enumerable - Ruby Core Teaching08. Ruby Enumerable - Ruby Core Teaching
08. Ruby Enumerable - Ruby Core Teaching
 

Composable Software Architecture with Spring

  • 1. Composable Software Architecture with Spring Sam Brannen @sam_brannen Java Breeze | Odessa, Ukraine | 18 May 2013
  • 2. 2 Sam Brannen •  Spring and Java Consultant @ Swiftmind (Zurich) •  Developing Java for over 15 years •  Spring Framework Core Committer since 2007 •  Spring Trainer •  Presenter on Spring, Java, OSGi, and testing
  • 3. 3 Swiftmind Your experts for Enterprise Java Areas of expertise •  Spring Framework •  Java EE •  OSGi •  Agile Methodologies •  Software Engineering Best Practices Headquarters •  Zurich, Switzerland •  @swiftmind •  http://www.swiftmind.com
  • 4. 4 Agenda •  Enterprise Applications •  What we’ve learned as a community •  Composable Software Architecture •  Java EE + Open Source •  How Spring fits into the picture •  Spring 4.0 Roadmap
  • 6. 6 What does "enterprise" mean? Enterprise software is software used in organizations, such as in a business or government, as opposed to software used by individuals. Enterprise software is an integral part of a (computer based) Information System. -Wikipedia
  • 7. 7 OK, sure... but what does that mean to developers?
  • 8. 8 Furthermore … Enterprise software typically has interfaces to other enterprise software and is centrally managed. - Wikipedia
  • 9. 9 Ahh, now we’re getting somewhere!
  • 10. 10 Typical Enterprise Application •  Supports enterprise business process •  Is relatively large •  Should be robust, scalable, and offer high performance •  Does not run in isolation •  Interacts with multiple external systems and services …
  • 16. 16 SOAP Web Services, REST Web Services
  • 17. 17 Web and Mobile clients, etc.
  • 18. 18 But each of these has its own APIs and potentially different protocols and exchange formats!
  • 19. 19 So how should we design such enterprise applications?
  • 20. 20 What we’ve learned as a community
  • 21. 21 Things to avoid •  Tight coupling to the container or frameworks •  Tight coupling to protocols and exchange formats in our service layer •  Monolithic deployment units •  Anemic domain models •  Bloated transaction scripts •  Code tangling and scattering
  • 22. 22 What we should aim for •  Modularity •  Layered architecture with –  a canonical domain model –  a dedicated orchestration layer •  Separation of concerns •  Externalized environment-specific configuration •  Design for testability
  • 23. 23 How we achieve it •  OOA / OOD / OOP •  (@)POJO Programming Model •  Marshaling and automatic type conversion •  Dependency Injection (DI) •  Inversion of Control (IoC) •  AOP / Interceptor Model •  Automated out-of-container testing and CI
  • 25. 25 Composability Composability is a system design principle that deals with the inter-relationships of components. A highly composable system provides recombinant components that can be selected and assembled in various combinations to satisfy specific user requirements. (Wikipedia) •  Self-contained (modular) •  Typically stateless
  • 26. 26 But it's not just about modularity and statelessness.
  • 27. 27 It's a different way of thinking,
  • 28. 28 a different way of designing,
  • 29. 29 a different kind of architecture,
  • 32. 32 Think about different ways the same components can be...
  • 36. 36 to meet different business requirements
  • 37. 37 or to interact with different systems.
  • 39. 39 How is this new? •  To be honest, it’s not really new, –  if you just look at the diagram… •  The web tier or presentation layer has always effectively been a type of orchestration layer. •  The difference is that we re-use all of the other layers with multiple types of orchestration simultaneously!
  • 40. 40 Orchestration Layer •  Lies at the heart of a composable architecture •  Orchestrates all interactions with the service layer –  potentially interacting directly with repositories (e.g., in batch processing) •  Handles external protocols •  Converts from external formats into our canonical domain model •  Thereby… allowing application services to be composed in a multitude of different ways!
  • 41. 41 Common Types of Orchestration •  Web controller –  HTTP, HTTPS :: HTTP request and response •  REST or SOAP Web Service endpoint –  HTTP/HTTPS :: XML, JSON, binary, … •  JMS or AMQP listener (or message listener container) –  JMS Message types, domain entities, … •  Messaging endpoint (e.g., gateway + service activator) –  Web service, FTP, file system, email, … •  Batch component (e.g., reader, writer, processor) –  Files, SQL, …
  • 42. 42 Java EE + Open Source
  • 43. 43 What's good about Java EE? •  Set of common enterprise standards for Java •  Consistent across containers and vendors (mostly) •  Great tooling and build support •  Catching up with innovation in open source –  Hibernate à JPA –  Spring DI / Guice / Seam à CDI
  • 44. 44 Java EE is a one stop shop
  • 46. 46 if everything you need is in that shop.
  • 47. 47 But if Java EE doesn’t offer what you need…
  • 48. 48 use open source frameworks
  • 49. 49 either in a Java EE container
  • 50. 50 or in an alternative light-weight container.
  • 51. 51 Open Source Frameworks fill the Gaps •  Web frameworks and UI components •  NoSQL •  Big Data •  AMQP •  Mobile •  Social Media •  Batch •  Enterprise Integration (EAI) •  …
  • 52. 52 How Spring fits into the picture
  • 53. 53 Core Spring (Framework) •  DI + IoC + AOP •  Declarative –  transactions, caching, validation, formatting •  Spring MVC and REST •  JMS Message Listener Container –  Message-driven POJOs •  Testing framework
  • 54. 54 Dependency Injection and Inversion of Control collectively decouple application code from the deployment environment
  • 55. 55 DI + IoC à POJO Programming Model
  • 56. 56 POJO Programming Model + AOP à Composability
  • 57. 57 Spring is an Ecosystem •  Spring MVC •  Spring REST •  Spring Web Flow •  Spring Security •  Spring Web Services •  Spring Batch •  Spring Integration •  Spring Data •  Spring Mobile •  Spring Social •  Spring AMQP •  …
  • 58. 58 Spring MVC and REST •  @Controller annotated components serve as MVC handler methods and REST endpoints •  Automatic type conversion •  Data binding to domain entities •  Marshaling –  JSON, JAXB, Castor, XMLBeans, JiBX, XStream, … •  Handler methods and endpoints orchestrate the service layer
  • 59. 59 Spring Web Services •  @Endpoint annotated components serve as SOAP Web Service endpoints •  Marshaling (OXM) –  JAXB, Castor, XMLBeans, JiBX, XStream •  Endpoint methods orchestrate the service layer
  • 60. 60 Spring JMS •  Message listener containers (MLC) support –  JMS MessageListener API –  Message-driven POJOs •  Automatic type conversion from JMS Message types into –  String, Map, Object, byte[] –  Customer converters also supported •  Marshaling –  Spring OXM, customer solutions, etc. •  MLC orchestrates the service layer
  • 61. 61 Spring Integration •  Inbound and outbound messaging gateways –  Handle external protocols and APIs –  Too many to mention here! •  Automatic type conversion for method arguments and return types in Service Activators •  Marshaling and custom type conversion also supported •  The service layer can be orchestrated via declarative configuration (e.g., service activators in XML)
  • 62. 62 And the list goes on …
  • 63. 63 Composable Architecture – with Spring Infrastructure Repository Service DomainModel Spring REST Spring MVC Spring JMS Spring Integration Spring Batch Spring WS
  • 64. 64 Composable Architecture Checklist þ  Modularity þ  Layered architecture þ Canonical Domain Model þ Orchestration: web, batch, integration, web services þ Service þ Repository þ Infrastructure þ  POJO programming model þ  Separation of concerns þ  Externalized environment-specific configuration þ  Testability, automated testing, and CI
  • 66. 66 1st Class Support for Java 8 based apps •  Language features such as lambda expressions –  for callbacks with templates –  for concurrent execution •  think fork/join, map/reduce, etc. •  APIs such as JSR-310 Date and Time –  Alongside Spring’s existing support for JodaTime
  • 67. 67 Configuring Spring with Groovy 2 •  Configuring and implementing Spring-style applications using Groovy 2.x •  Groovy-based bean definitions •  Groovy as the language of choice for an entire application, as a direct and straightforward alternative to Java source files •  Groovy 2.0's static compilation support completes the picture here
  • 68. 68 Support for Key Java EE 7 Technologies •  JMS 2.0 •  JPA 2.1 •  Bean Validation 1.1 •  Servlet 3.1 •  And fully covering JCache 1.0
  • 69. 69 Enabling WebSocket-style Architectures •  Support for JSR-356 compliant runtimes •  Also supporting related technologies
  • 70. 70 Fine-grained Eventing and Messaging •  Introducing fine-grained eventing and messaging within the application •  Building on our existing application event mechanism •  Aligned with our JMS message listener mechanism
  • 71. 71 Pruning and Dependency Upgrades •  Removing a variety of deprecated packages across the framework –  See Spring Framework 3.2's deprecations! •  Raising minimum dependencies to Java 6+ –  Java SE 6+ and Java EE 6+ –  with some compromises for EE 5++ servers
  • 73. 73 Further Resources •  Spring Projects –  http://www.springsource.org/projects –  Reference Manuals –  Javadoc •  Spring Forums –  http://forum.springframework.org •  Spring JIRA –  http://jira.springframework.org •  GitHub Repositories –  https://github.com/SpringSource
  • 74. 74 Blogs •  Swiftmind Team Blog –  http://www.swiftmind.com/blog/ •  SpringSource Team Blog –  http://blog.springsource.com/
  • 75. 75 Q & A Sam Brannen twitter: @sam_brannen www.slideshare.net/sbrannen www.swiftmind.com