SlideShare a Scribd company logo
1 of 75
Download to read offline
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

Event Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsEvent Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsDavide Mauri
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To MicroservicesLalit Kale
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecturetyrantbrian
 
12 factor app - Core Guidelines To Cloud Ready Solutions
12 factor app - Core Guidelines To Cloud Ready Solutions12 factor app - Core Guidelines To Cloud Ready Solutions
12 factor app - Core Guidelines To Cloud Ready SolutionsKashif Ali Siddiqui
 
stupid-simple-kubernetes-final.pdf
stupid-simple-kubernetes-final.pdfstupid-simple-kubernetes-final.pdf
stupid-simple-kubernetes-final.pdfDaniloQueirozMota
 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesYevgeniy Brikman
 
Micro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoniMicro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoniSandeep Soni
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2Dmitry Skaredov
 
Exposing services with Azure API Management
Exposing services with Azure API ManagementExposing services with Azure API Management
Exposing services with Azure API ManagementCallon Campbell
 
Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.Richard Langlois P. Eng.
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQAraf Karsh Hamid
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitecturePaul Mooney
 
Combining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observabilityCombining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observabilityElasticsearch
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven ArchitectureStefan Norberg
 
Getting Started with Infrastructure as Code
Getting Started with Infrastructure as CodeGetting Started with Infrastructure as Code
Getting Started with Infrastructure as CodeWinWire Technologies Inc
 

What's hot (20)

Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
 
Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
Event Hub & Azure Stream Analytics
Event Hub & Azure Stream AnalyticsEvent Hub & Azure Stream Analytics
Event Hub & Azure Stream Analytics
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
12 factor app - Core Guidelines To Cloud Ready Solutions
12 factor app - Core Guidelines To Cloud Ready Solutions12 factor app - Core Guidelines To Cloud Ready Solutions
12 factor app - Core Guidelines To Cloud Ready Solutions
 
stupid-simple-kubernetes-final.pdf
stupid-simple-kubernetes-final.pdfstupid-simple-kubernetes-final.pdf
stupid-simple-kubernetes-final.pdf
 
Reusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modulesReusable, composable, battle-tested Terraform modules
Reusable, composable, battle-tested Terraform modules
 
Micro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoniMicro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoni
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2
 
Exposing services with Azure API Management
Exposing services with Azure API ManagementExposing services with Azure API Management
Exposing services with Azure API Management
 
Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQ
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Combining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observabilityCombining logs, metrics, and traces for unified observability
Combining logs, metrics, and traces for unified observability
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
 
Getting Started with Infrastructure as Code
Getting Started with Infrastructure as CodeGetting Started with Infrastructure as Code
Getting Started with Infrastructure as Code
 

Viewers also liked

Software architecture also needs agile
Software architecture also needs agileSoftware architecture also needs agile
Software architecture also needs agileBoyan Mihaylov
 
Software Architecture taxonomies - Integration patterns
Software Architecture taxonomies - Integration patternsSoftware Architecture taxonomies - Integration patterns
Software Architecture taxonomies - Integration patternsJose Emilio Labra Gayo
 
Refactoring for Software Architecture Smells
Refactoring for Software Architecture SmellsRefactoring for Software Architecture Smells
Refactoring for Software Architecture SmellsGanesh Samarthyam
 
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 DevelopersDan Douglas
 
User Driven Software Architecture
User Driven Software ArchitectureUser Driven Software Architecture
User Driven Software ArchitectureSimon Guest
 
Software Architecture Patterns
Software Architecture PatternsSoftware Architecture Patterns
Software Architecture PatternsAssaf Gannon
 
Software Architecture: Design Decisions
Software Architecture: Design DecisionsSoftware Architecture: Design Decisions
Software Architecture: Design DecisionsHenry Muccini
 
Principles of software architecture design
Principles of software architecture designPrinciples of software architecture design
Principles of software architecture designLen 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 viewpointsHenry Muccini
 
Fundamentals Of Software Architecture
Fundamentals Of Software ArchitectureFundamentals Of Software Architecture
Fundamentals Of Software ArchitectureMarkus Voelter
 
Practices of Good Software Architects
Practices of Good Software ArchitectsPractices of Good Software Architects
Practices of Good Software ArchitectsEberhard Wolff
 
Software Architecture for Cloud Infrastructure
Software Architecture for Cloud InfrastructureSoftware Architecture for Cloud Infrastructure
Software Architecture for Cloud InfrastructureTapio 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 overviewWinton 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

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 interactionOleksii Duhno
 
01/2009 - Portral development with liferay
01/2009 - Portral development with liferay01/2009 - Portral development with liferay
01/2009 - Portral development with liferaydaveayan
 
Frameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic ReviewFrameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic Reviewnetc2012
 
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 1Henry 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 MEANJeff 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 introSonic 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.0WSO2
 
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 ArchitectureVin Dahake
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyComsysto Reply GmbH
 
Architectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyArchitectural Decisions: Smoothly and Consistently
Architectural Decisions: Smoothly and ConsistentlyComsysto Reply GmbH
 
FlexDeploy Product Technical Overview
FlexDeploy Product Technical OverviewFlexDeploy Product Technical Overview
FlexDeploy Product Technical OverviewDalibor Blazevic
 
Microservices, Spring Cloud & Cloud Foundry
Microservices, Spring Cloud & Cloud FoundryMicroservices, Spring Cloud & Cloud Foundry
Microservices, Spring Cloud & Cloud FoundryEmilio 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 SecuritySam Bowne
 
8. Software Development Security
8. Software Development Security8. Software Development Security
8. Software Development SecuritySam Bowne
 
Presentation 1 Web--dev
Presentation 1 Web--devPresentation 1 Web--dev
Presentation 1 Web--devaltsav
 

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 2023Sam 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 2022Sam 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 2019Sam 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 2019Sam 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 JVMSam 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.2Sam 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 beyondSam Brannen
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An IntroductionSam Brannen
 
Testing with Spring 4.x
Testing with Spring 4.xTesting with Spring 4.x
Testing with Spring 4.xSam Brannen
 
Spring Framework 4.1
Spring Framework 4.1Spring Framework 4.1
Spring Framework 4.1Sam 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 ApplicationsSam 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.2Sam 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.1Sam 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 2013Sam 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 NewSam 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 - 4DevelopersSam 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 - 4DevelopersSam 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 - SDC2012Sam 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 2012Sam 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 SupportSam 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

Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 

Recently uploaded (20)

Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 

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