SlideShare a Scribd company logo
1 of 47
Download to read offline
SPRING.IO
Let’s meet up
Money,money,money...
mergerandAcquisition
?
● January 4, 2004 : EMC² acquires VMware
● August 10, 2009 : VMware acquires
Springsource
● March 20, 2012 : EMC² acquires Pivotal
Labs
● April 1, 2013 : Pivotal Software is
created
○ All of VMware's applications and
developer-oriented products,
including Spring, tc Server, Cloud
Foundry, RabbitMQ, GemFire, and
SQLFire were transferred to this
organization
● October 12, 2015 : Dell Inc announced its
intent to acquire EMC² in a cash-and-stock
deal valued at $67 billion
SpringEvolution
Someofboringspringreleasedates
● 1.0.0 released in March 2004
● 2.0.0 released in October 2006
● 2.5.0 released in November 2007
● 3.0.0 released in December 2009
● 3.1.0 released in December 2011
● 3.2.5 released in November 2013
● 4.0.0 released in December 2013
● 4.2.0 released in July 2015
Atthebeginning
● Core container
○ the core of IoC pattern
● Beans / Core
○ fundamental parts of the
framework
○ IoC / Dependency Injection
○ BeanFactory
● Context
○ Manage Spring context
○ I8N
○ EJB/JMX
○ caching/mailing/scheduling/
template engine
● SpEL
○ Extend unified EL
Atthebeginning
● AOP
○ AOP Alliance-compliant aspect-
oriented programming by proxying
spring beans
● Aspects
○ AspectJ integration
● Instrumentation
○ class instrumentation support
○ classloader implementation
● Messaging (Spring 4)
○ Abstraction for messaging-based
applications
○ Annotations for mapping messages
to methods
Atthebeginning
● JDBC
○ JDBC abstraction
● Transactions
○ Programmatic and declarative
transaction
● ORM
○ Integration layers for ORM (JPA,
JDO, Hibernate)
● OXM
○ Abstraction layer Object/XML
mapping (JAXB, Castor, XMLBeans,
JiBX, XStream)
● JMS
○ Integration with Messaging
Atthebeginning
● Servlet
○ Basic web integration
○ Web-oriented application context
● Web
○ Spring MVC
○ Rest Webservices
● WebSocket
○ Abstraction for websocket
integration
● Portlet
○ MVC implementation to be used in
a Portlet environment
Atthebeginning
● Test
○ Unit testing / integration
testing with JUnit or TestNG
○ Mock spring commons object
○ Consistent loading of Spring
ApplicationContexts and caching
of those context
Anddoesitmakethecofee?
Springsideprojects
● Based upon spring framework runtime
● 17 side projects
● Community Projects
○ Spring ROO
○ Spring Scala
● Pojects in the Attic
○ Spring BlaezDS Integration
○ Spring Loaded
○ Spring Shell
○ Rest Shell
SpringDATA
● Consitent Spring-based data access
● Main Modules
○ Spring Data commons
○ Spring Data JPA
○ Spring Data MongoDB
○ Spring Data Redis
○ Spring Data Solr
○ Spring Data Gemfire
○ Spring Data KeyValue
○ Spring Data REST
● Community modules
○ Spring Data JDBC Extensions
○ Spring for Apache Hadoop
● Interface driven, no more need of
implementation
SpringDATA
public interface SimpleUserRepository extends CrudRepository<User,
Long> {
User findByTheUsersName(String username);
List<User> findByLastname(String lastname);
@Query("select u from User u where u.firstname = ?")
List<User> findByFirstname(String firstname);
@Query("select u from User u where u.firstname = :name or
u.lastname = :name")
List<User> findByFirstnameOrLastname(@Param("name") String
name);
}
SpringXD
● BigData Spring solution
● Data ingestion
● Real time analytics
● Batch processing
● Data export
SpringXD
SpringBatch
● Transaction management
● Chunk based processing
● Declarative I/O
● Start / Stop / Restart
● Retry / Skip
● Web based administration interfaces
(Spring Batch Admin)
SpringBatch
@Configuration
@EnableBatchProcessing
@EnableAutoConfiguration
public class BatchConfiguration {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet(new Tasklet() {
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext){
return null;
}
}).build();
}
@Bean
public Job job(Step step1) throws Exception {
return jobBuilderFactory.get("job1")
.incrementer(new RunIdIncrementer())
.start(step1)
.build();
}
}
SpringSecurity
● Comprehensive and extensible support
for both Authentication and
Authorization
● Protection against attacks like
session fixation, clickjacking,
cross site request forgery, etc.
● Servlet API integration
● Optional integration with Spring Web
MVC
● Much more...
SpringSecurity
@EnableWebSecurity
public class SecurityConfig {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
SpringIntegration
● Implementation of most of the Entreprise
Integration Patterns
○ Endpoint
○ Channel (P2P and Publish/Subscribe)
○ Aggregator
○ Filter
○ Transformer
○ Control Bus
● Integration with External Systems
○ ReST/HTTP
○ FTP/SFTP
○ Twitter
○ Webservices (Soap and ReST)
○ TCP/UDP
○ JMS
○ RabbitMQ
○ Email
● Extensive JMX support
SpringIntegration
@Configuration
@SpringBootApplication
@IntegrationComponentScan
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
TempConverter converter = ctx.getBean(TempConverter.class);
System.out.println(converter.fahrenheitToCelcius(68.0f));
ctx.close();
}
@MessagingGateway
public interface TempConverter {
@Gateway(requestChannel = "convert.input")
float fahrenheitToCelcius(float fahren);
}
@Bean
public IntegrationFlow convert() {
return f -> f
.transform(payload ->
"<FahrenheitToCelsius xmlns="http://www.w3schools.com/webservices/">"
+ "<Fahrenheit>" + payload +"</Fahrenheit>"
+ "</FahrenheitToCelsius>")
.enrichHeaders(h -> h
.header(WebServiceHeaders.SOAP_ACTION,
"http://www.w3schools.com/webservices/FahrenheitToCelsius"))
.handle(new SimpleWebServiceOutboundGateway(
"http://www.w3schools.com/webservices/tempconvert.asmx"))
.transform(Transformers.xpath("/*[local-name()="FahrenheitToCelsiusResponse"]"
+ "/*[local-name()="FahrenheitToCelsiusResult"]"));
}
}
● Contract-First development
● Loose coupling between contract and
impl
● Powerful mappings
● XML Api support
● Support WS-Security
● Integrates with Spring Security
● Low activity in the repository
SpringWebServices
SpringWebServices
<beans xmlns="http://www.springframework.org/schema/beans">
<bean id="webServiceClient" class="WebServiceClient">
<property name="defaultUri" value="http://localhost:8080/WebService"/>
</bean>
</beans>
public class WebServiceClient {
private static final String MESSAGE =
"<message xmlns="http://tempuri.org">Hello World</message>";
private final WebServiceTemplate webServiceTemplate = new
WebServiceTemplate();
public void setDefaultUri(String defaultUri) {
webServiceTemplate.setDefaultUri(defaultUri);
}
// send to the configured default URI
public void simpleSendAndReceive() {
StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
webServiceTemplate.sendSourceAndReceiveToResult(source, result);
}
// send to an explicit URI
public void customSendAndReceive() {
StreamSource source = new StreamSource(new StringReader(MESSAGE));
StreamResult result = new StreamResult(System.out);
webServiceTemplate.sendSourceAndReceiveToResult("http://localhost:
8080/AnotherWebService",
source, result);
}
}
SpringWebFlow
● Allows implementing the “flows” of a
web application
● Clear start and end point
● User must go through a set of
screens in a specific order
● Changes not finalized until the last
step
SpringWebFlow
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow.
xsd">
<view-state id="step1" view="embeddedFlow/step1">
<transition on="next" to="step2"/>
<transition on="cancel" to="cancel"/>
</view-state>
<view-state id="step2" view="embeddedFlow/step2">
<transition on="previous" to="step1"/>
<transition on="finish" to="success"/>
<transition on="cancel" to="cancel"/>
</view-state>
<end-state id="success" view="embeddedFlow/success"/>
<end-state id="cancel" view="embeddedFlow/cancel"/>
</flow>
SpringHATEOAS
● HATEOAS : Hypermedia as the Engine
of Application State
● Model classes for link, resource
representation models
● Link builder API to create links
pointing to Spring MVC controller
methods
● Support for hypermedia formats like
HAL
SpringHATEOAS
class BookmarkResource extends ResourceSupport {
private final Bookmark bookmark;
public BookmarkResource(Bookmark bookmark) {
String username = bookmark.getAccount().getUsername();
this.bookmark = bookmark;
this.add(new Link(bookmark.getUri(), "bookmark-uri"));
this.add(linkTo(BookmarkRestController.class,
username).withRel("bookmarks"));
this.add(linkTo(methodOn(BookmarkRestController.class,
username).readBookmark(username, bookmark.getId())).
withSelfRel());
}
public Bookmark getBookmark() {
return bookmark;
}
}
SpringLDAP
● Provides LDAP template which eliminates
the need to worry about creating and
closing LdapContext and looping through
NamingEnumeration
● Contains classes for dynamically building
LDAP filters and Distinguished Names
● Client-side LDAP transaction management
SpringLDAP
LdapQuery query = query()
.base("dc=261consulting,dc=com")
.attributes("cn", "sn")
.where("objectclass").is("person")
.and("sn").is(lastName);
@Entry(objectClasses = { "person", "top" }, base="ou=someOu")
public class Person {
@Id
private Name dn;
@Attribute(name="cn")
@DnAttribute(value="cn", index=1)
private String fullName;
private String description;
@DnAttribute(value="ou", index=0)
@Transient
private String company;
@Transient
private String someUnmappedField;
// ...more attributes below
}
SpringSession
● API and implementations for managing a
user's session
● HttpSession - allows replacing the
HttpSession in an application container
(i.e. Tomcat) neutral way
○ Clustered Sessions
○ Multiple Browser Sessions
○ RESTful APIs
● WebSocket - provides the ability to keep
the HttpSession alive when receiving
WebSocket messages
SpringSession
@EnableRedisHttpSession
public class Config {
@Bean
public JedisConnectionFactory connectionFactory(){
return new JedisConnectionFactory();
}
}
MAGIC
SpringSocial
● Connect your Spring application to
social network
● Main projects
○ Facebook
○ Twitter
○ LinkedIn
● Incubator projects
○ Github
○ Tripit
● Community Projects (33)
○ Dropbox
○ Google
○ Flickr
○ etc...
SpringSocial
@Bean
public ConnectionFactoryLocator connectionFactoryLocator() {
ConnectionFactoryRegistry registry = new
ConnectionFactoryRegistry();
registry.addConnectionFactory(new
FacebookConnectionFactory(
environment.getProperty("facebook.clientId"),
environment.getProperty("facebook.clientSecret")
));
return registry;
}
@Inject
private Environment environment;
@RequestMapping(value="/", method=RequestMethod.GET)
public String home(Model model) {
List<Reference> friends = facebook.friendOperations().
getFriends();
model.addAttribute("friends", friends);
return "home";
}
SpringAMQP
● Advanced Message Queuing Protocol
Spring integration
● Listener container for asynchronous
processing of inbound messages
● RabbitTemplate for sending and
receiving messages
● RabbitAdmin for automatically
declaring queues, exchanges and
bindings
SpringAMQPpublic static void main(final String... args) throws Exception {
AbstractApplicationContext ctx =
new ClassPathXmlApplicationContext("context.xml");
RabbitTemplate template = ctx.getBean(RabbitTemplate.class);
template.convertAndSend("Hello, world!");
Thread.sleep(1000);
ctx.destroy();
}
<rabbit:connection-factory id="connectionFactory" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
exchange="myExchange" routing-key="foo.bar"/>
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:queue name="myQueue" />
<rabbit:topic-exchange name="myExchange">
<rabbit:bindings>
<rabbit:binding queue="myQueue" pattern="foo.*" />
</rabbit:bindings>
</rabbit:topic-exchange>
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener ref="foo" method="listen" queue-names="myQueue" />
</rabbit:listener-container>
public class Foo {
public void listen(String foo) {
System.out.println(foo);
}
}
SpringMobile
● A Device resolver abstraction for server-
side detection of mobile and tablet devices
● Site preference management that allows the
user to indicate if he or she prefers a
"normal", "mobile", or "tablet" experience
● A site switcher capable of switching the
user to the most appropriate site
● Device aware view management for organizing
and managing different views for specific
devices
SpringMobile
@Controller
public class DeviceDetectionController {
@RequestMapping("/detect-device")
public @ResponseBody String detectDevice(Device device)
{
String deviceType = "unknown";
if (device.isNormal()) {
deviceType = "normal";
} else if (device.isMobile()) {
deviceType = "mobile";
} else if (device.isTablet()) {
deviceType = "tablet";
}
return "Hello " + deviceType + " browser!";
}
}
SpringforAndroid
● A Rest Client for Android
● Auth support for accessing secure APIs
// The connection URL
String url = "https://ajax.googleapis.com/ajax/" +
"services/search/web?v=1.0&q={query}";
// Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate();
// Add the String message converter
restTemplate.getMessageConverters().add(new
StringHttpMessageConverter());
// Make the HTTP GET request, marshaling the response to a
String
String result = restTemplate.getForObject(url, String.class,
"Android");
SpringCloud
● Tools for developers to quickly
build distributed apps
○ Distributed/versioned configuration
○ Service registration and discovery`
○ Routing
○ Service-to-service calls
○ Load balancing
○ Circuit Breakers
○ Global locks
○ Leadership election and cluster state
○ Distributed messaging
● 16 sub-projects
● Integration with spring boot
SpringCloud
@Configuration
@EnableAutoConfiguration
@RestController
public class Application {
@Value("${config.name}")
String name = "World";
@RequestMapping("/")
public String home() {
"Hello " + name;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
SpringBoot
● Create stand-alone Spring
applications
● Embed Tomcat, Jetty or Undertow
directly (make JAR not WAR)
● Provide opinionated 'starter' POMs
to simplify your Maven configuration
● Automatically configure Spring
whenever possible
● Provide production-ready features
such as metrics, health checks and
externalized configuration
● Absolutely no code generation and no
requirement for XML configuration
SpringBoot
@Controller
@EnableAutoConfiguration
public class SampleController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception
{
SpringApplication.run(SampleController.class,
args);
}
}
Springioplatform
A consistent set of dependencies to
deploy easily spring project
Springdev
tooling
Spring.io
Spring.io

More Related Content

What's hot

Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
ZeroTurnaround
 
Adventures in Multithreaded Core Data
Adventures in Multithreaded Core DataAdventures in Multithreaded Core Data
Adventures in Multithreaded Core Data
Inferis
 

What's hot (20)

Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentation
 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational Changes
 
Spring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen HoellerSpring 4 on Java 8 by Juergen Hoeller
Spring 4 on Java 8 by Juergen Hoeller
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data Access
 
Lecture 7 Web Services JAX-WS & JAX-RS
Lecture 7   Web Services JAX-WS & JAX-RSLecture 7   Web Services JAX-WS & JAX-RS
Lecture 7 Web Services JAX-WS & JAX-RS
 
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source SummitMySQL 8.0 New Features -- September 27th presentation for Open Source Summit
MySQL 8.0 New Features -- September 27th presentation for Open Source Summit
 
JAX-RS 2.1 Reloaded @ Devoxx
JAX-RS 2.1 Reloaded @ DevoxxJAX-RS 2.1 Reloaded @ Devoxx
JAX-RS 2.1 Reloaded @ Devoxx
 
cPanel now supports MySQL 8.0 - My Top Seven Features
cPanel now supports MySQL 8.0 - My Top Seven FeaturescPanel now supports MySQL 8.0 - My Top Seven Features
cPanel now supports MySQL 8.0 - My Top Seven Features
 
MySQL JSON Functions
MySQL JSON FunctionsMySQL JSON Functions
MySQL JSON Functions
 
Adventures in Multithreaded Core Data
Adventures in Multithreaded Core DataAdventures in Multithreaded Core Data
Adventures in Multithreaded Core Data
 
A Walking Tour of (almost) all of Springdom
A Walking Tour of (almost) all of Springdom A Walking Tour of (almost) all of Springdom
A Walking Tour of (almost) all of Springdom
 
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
Longhorn PHP - MySQL Indexes, Histograms, Locking Options, and Other Ways to ...
 
Short intro to scala and the play framework
Short intro to scala and the play frameworkShort intro to scala and the play framework
Short intro to scala and the play framework
 
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love Story
 
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
Server Sent Events, Async Servlet, Web Sockets and JSON; born to work together!
 
20151010 my sq-landjavav2a
20151010 my sq-landjavav2a20151010 my sq-landjavav2a
20151010 my sq-landjavav2a
 
Practical ERSync
Practical ERSyncPractical ERSync
Practical ERSync
 
Java Configuration Deep Dive with Spring
Java Configuration Deep Dive with SpringJava Configuration Deep Dive with Spring
Java Configuration Deep Dive with Spring
 
COScheduler
COSchedulerCOScheduler
COScheduler
 

Similar to Spring.io

NSA for Enterprises Log Analysis Use Cases
NSA for Enterprises   Log Analysis Use Cases NSA for Enterprises   Log Analysis Use Cases
NSA for Enterprises Log Analysis Use Cases
WSO2
 
Storage Plug-ins
Storage Plug-ins Storage Plug-ins
Storage Plug-ins
buildacloud
 
Rapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 PlatformRapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 Platform
WSO2
 
Java Technology
Java TechnologyJava Technology
Java Technology
ifnu bima
 

Similar to Spring.io (20)

Spring in the Cloud - using Spring with Cloud Foundry
Spring in the Cloud - using Spring with Cloud FoundrySpring in the Cloud - using Spring with Cloud Foundry
Spring in the Cloud - using Spring with Cloud Foundry
 
NSA for Enterprises Log Analysis Use Cases
NSA for Enterprises   Log Analysis Use Cases NSA for Enterprises   Log Analysis Use Cases
NSA for Enterprises Log Analysis Use Cases
 
Practical OData
Practical ODataPractical OData
Practical OData
 
What’s new in WSO2 Enterprise Integrator 6.6
What’s new in WSO2 Enterprise Integrator 6.6What’s new in WSO2 Enterprise Integrator 6.6
What’s new in WSO2 Enterprise Integrator 6.6
 
Future of Serverless
Future of ServerlessFuture of Serverless
Future of Serverless
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
 
Python And The MySQL X DevAPI - PyCaribbean 2019
Python And The MySQL X DevAPI - PyCaribbean 2019Python And The MySQL X DevAPI - PyCaribbean 2019
Python And The MySQL X DevAPI - PyCaribbean 2019
 
Cloud State of the Union for Java Developers
Cloud State of the Union for Java DevelopersCloud State of the Union for Java Developers
Cloud State of the Union for Java Developers
 
Storage Plug-ins
Storage Plug-ins Storage Plug-ins
Storage Plug-ins
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
node.js: Javascript's in your backend
node.js: Javascript's in your backendnode.js: Javascript's in your backend
node.js: Javascript's in your backend
 
Rapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 PlatformRapid Application Development with WSO2 Platform
Rapid Application Development with WSO2 Platform
 
CloudStack Meetup Santa Clara
CloudStack Meetup Santa Clara CloudStack Meetup Santa Clara
CloudStack Meetup Santa Clara
 
NoSQL Endgame LWJUG 2021
NoSQL Endgame LWJUG 2021NoSQL Endgame LWJUG 2021
NoSQL Endgame LWJUG 2021
 
Dynamic Hadoop Clusters
Dynamic Hadoop ClustersDynamic Hadoop Clusters
Dynamic Hadoop Clusters
 
Java Technology
Java TechnologyJava Technology
Java Technology
 
Elements for an iOS Backend
Elements for an iOS BackendElements for an iOS Backend
Elements for an iOS Backend
 
Windows Azure and a little SQL Data Services
Windows Azure and a little SQL Data ServicesWindows Azure and a little SQL Data Services
Windows Azure and a little SQL Data Services
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking Tour
 
Solid fire cloudstack storage overview - CloudStack European User Group
Solid fire cloudstack storage overview - CloudStack European User GroupSolid fire cloudstack storage overview - CloudStack European User Group
Solid fire cloudstack storage overview - CloudStack European User Group
 

More from Cédric GILLET (6)

Agile
AgileAgile
Agile
 
GraphQL + relay
GraphQL + relayGraphQL + relay
GraphQL + relay
 
Java 8
Java 8Java 8
Java 8
 
GraphQL
GraphQLGraphQL
GraphQL
 
Le nouveau portail
Le nouveau portailLe nouveau portail
Le nouveau portail
 
Liquibase
LiquibaseLiquibase
Liquibase
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 

Spring.io

  • 3. mergerandAcquisition ? ● January 4, 2004 : EMC² acquires VMware ● August 10, 2009 : VMware acquires Springsource ● March 20, 2012 : EMC² acquires Pivotal Labs ● April 1, 2013 : Pivotal Software is created ○ All of VMware's applications and developer-oriented products, including Spring, tc Server, Cloud Foundry, RabbitMQ, GemFire, and SQLFire were transferred to this organization ● October 12, 2015 : Dell Inc announced its intent to acquire EMC² in a cash-and-stock deal valued at $67 billion
  • 5. Someofboringspringreleasedates ● 1.0.0 released in March 2004 ● 2.0.0 released in October 2006 ● 2.5.0 released in November 2007 ● 3.0.0 released in December 2009 ● 3.1.0 released in December 2011 ● 3.2.5 released in November 2013 ● 4.0.0 released in December 2013 ● 4.2.0 released in July 2015
  • 6. Atthebeginning ● Core container ○ the core of IoC pattern ● Beans / Core ○ fundamental parts of the framework ○ IoC / Dependency Injection ○ BeanFactory ● Context ○ Manage Spring context ○ I8N ○ EJB/JMX ○ caching/mailing/scheduling/ template engine ● SpEL ○ Extend unified EL
  • 7. Atthebeginning ● AOP ○ AOP Alliance-compliant aspect- oriented programming by proxying spring beans ● Aspects ○ AspectJ integration ● Instrumentation ○ class instrumentation support ○ classloader implementation ● Messaging (Spring 4) ○ Abstraction for messaging-based applications ○ Annotations for mapping messages to methods
  • 8. Atthebeginning ● JDBC ○ JDBC abstraction ● Transactions ○ Programmatic and declarative transaction ● ORM ○ Integration layers for ORM (JPA, JDO, Hibernate) ● OXM ○ Abstraction layer Object/XML mapping (JAXB, Castor, XMLBeans, JiBX, XStream) ● JMS ○ Integration with Messaging
  • 9. Atthebeginning ● Servlet ○ Basic web integration ○ Web-oriented application context ● Web ○ Spring MVC ○ Rest Webservices ● WebSocket ○ Abstraction for websocket integration ● Portlet ○ MVC implementation to be used in a Portlet environment
  • 10. Atthebeginning ● Test ○ Unit testing / integration testing with JUnit or TestNG ○ Mock spring commons object ○ Consistent loading of Spring ApplicationContexts and caching of those context
  • 12. Springsideprojects ● Based upon spring framework runtime ● 17 side projects ● Community Projects ○ Spring ROO ○ Spring Scala ● Pojects in the Attic ○ Spring BlaezDS Integration ○ Spring Loaded ○ Spring Shell ○ Rest Shell
  • 13. SpringDATA ● Consitent Spring-based data access ● Main Modules ○ Spring Data commons ○ Spring Data JPA ○ Spring Data MongoDB ○ Spring Data Redis ○ Spring Data Solr ○ Spring Data Gemfire ○ Spring Data KeyValue ○ Spring Data REST ● Community modules ○ Spring Data JDBC Extensions ○ Spring for Apache Hadoop ● Interface driven, no more need of implementation
  • 14. SpringDATA public interface SimpleUserRepository extends CrudRepository<User, Long> { User findByTheUsersName(String username); List<User> findByLastname(String lastname); @Query("select u from User u where u.firstname = ?") List<User> findByFirstname(String firstname); @Query("select u from User u where u.firstname = :name or u.lastname = :name") List<User> findByFirstnameOrLastname(@Param("name") String name); }
  • 15. SpringXD ● BigData Spring solution ● Data ingestion ● Real time analytics ● Batch processing ● Data export
  • 17. SpringBatch ● Transaction management ● Chunk based processing ● Declarative I/O ● Start / Stop / Restart ● Retry / Skip ● Web based administration interfaces (Spring Batch Admin)
  • 18. SpringBatch @Configuration @EnableBatchProcessing @EnableAutoConfiguration public class BatchConfiguration { @Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; @Bean public Step step1() { return stepBuilderFactory.get("step1") .tasklet(new Tasklet() { public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext){ return null; } }).build(); } @Bean public Job job(Step step1) throws Exception { return jobBuilderFactory.get("job1") .incrementer(new RunIdIncrementer()) .start(step1) .build(); } }
  • 19. SpringSecurity ● Comprehensive and extensible support for both Authentication and Authorization ● Protection against attacks like session fixation, clickjacking, cross site request forgery, etc. ● Servlet API integration ● Optional integration with Spring Web MVC ● Much more...
  • 20. SpringSecurity @EnableWebSecurity public class SecurityConfig { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("password").roles("USER"); } }
  • 21. SpringIntegration ● Implementation of most of the Entreprise Integration Patterns ○ Endpoint ○ Channel (P2P and Publish/Subscribe) ○ Aggregator ○ Filter ○ Transformer ○ Control Bus ● Integration with External Systems ○ ReST/HTTP ○ FTP/SFTP ○ Twitter ○ Webservices (Soap and ReST) ○ TCP/UDP ○ JMS ○ RabbitMQ ○ Email ● Extensive JMX support
  • 22. SpringIntegration @Configuration @SpringBootApplication @IntegrationComponentScan public class Application { public static void main(String[] args) { ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args); TempConverter converter = ctx.getBean(TempConverter.class); System.out.println(converter.fahrenheitToCelcius(68.0f)); ctx.close(); } @MessagingGateway public interface TempConverter { @Gateway(requestChannel = "convert.input") float fahrenheitToCelcius(float fahren); } @Bean public IntegrationFlow convert() { return f -> f .transform(payload -> "<FahrenheitToCelsius xmlns="http://www.w3schools.com/webservices/">" + "<Fahrenheit>" + payload +"</Fahrenheit>" + "</FahrenheitToCelsius>") .enrichHeaders(h -> h .header(WebServiceHeaders.SOAP_ACTION, "http://www.w3schools.com/webservices/FahrenheitToCelsius")) .handle(new SimpleWebServiceOutboundGateway( "http://www.w3schools.com/webservices/tempconvert.asmx")) .transform(Transformers.xpath("/*[local-name()="FahrenheitToCelsiusResponse"]" + "/*[local-name()="FahrenheitToCelsiusResult"]")); } }
  • 23. ● Contract-First development ● Loose coupling between contract and impl ● Powerful mappings ● XML Api support ● Support WS-Security ● Integrates with Spring Security ● Low activity in the repository SpringWebServices
  • 24. SpringWebServices <beans xmlns="http://www.springframework.org/schema/beans"> <bean id="webServiceClient" class="WebServiceClient"> <property name="defaultUri" value="http://localhost:8080/WebService"/> </bean> </beans> public class WebServiceClient { private static final String MESSAGE = "<message xmlns="http://tempuri.org">Hello World</message>"; private final WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); public void setDefaultUri(String defaultUri) { webServiceTemplate.setDefaultUri(defaultUri); } // send to the configured default URI public void simpleSendAndReceive() { StreamSource source = new StreamSource(new StringReader(MESSAGE)); StreamResult result = new StreamResult(System.out); webServiceTemplate.sendSourceAndReceiveToResult(source, result); } // send to an explicit URI public void customSendAndReceive() { StreamSource source = new StreamSource(new StringReader(MESSAGE)); StreamResult result = new StreamResult(System.out); webServiceTemplate.sendSourceAndReceiveToResult("http://localhost: 8080/AnotherWebService", source, result); } }
  • 25. SpringWebFlow ● Allows implementing the “flows” of a web application ● Clear start and end point ● User must go through a set of screens in a specific order ● Changes not finalized until the last step
  • 26. SpringWebFlow <?xml version="1.0" encoding="UTF-8"?> <flow xmlns="http://www.springframework.org/schema/webflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow. xsd"> <view-state id="step1" view="embeddedFlow/step1"> <transition on="next" to="step2"/> <transition on="cancel" to="cancel"/> </view-state> <view-state id="step2" view="embeddedFlow/step2"> <transition on="previous" to="step1"/> <transition on="finish" to="success"/> <transition on="cancel" to="cancel"/> </view-state> <end-state id="success" view="embeddedFlow/success"/> <end-state id="cancel" view="embeddedFlow/cancel"/> </flow>
  • 27. SpringHATEOAS ● HATEOAS : Hypermedia as the Engine of Application State ● Model classes for link, resource representation models ● Link builder API to create links pointing to Spring MVC controller methods ● Support for hypermedia formats like HAL
  • 28. SpringHATEOAS class BookmarkResource extends ResourceSupport { private final Bookmark bookmark; public BookmarkResource(Bookmark bookmark) { String username = bookmark.getAccount().getUsername(); this.bookmark = bookmark; this.add(new Link(bookmark.getUri(), "bookmark-uri")); this.add(linkTo(BookmarkRestController.class, username).withRel("bookmarks")); this.add(linkTo(methodOn(BookmarkRestController.class, username).readBookmark(username, bookmark.getId())). withSelfRel()); } public Bookmark getBookmark() { return bookmark; } }
  • 29. SpringLDAP ● Provides LDAP template which eliminates the need to worry about creating and closing LdapContext and looping through NamingEnumeration ● Contains classes for dynamically building LDAP filters and Distinguished Names ● Client-side LDAP transaction management
  • 30. SpringLDAP LdapQuery query = query() .base("dc=261consulting,dc=com") .attributes("cn", "sn") .where("objectclass").is("person") .and("sn").is(lastName); @Entry(objectClasses = { "person", "top" }, base="ou=someOu") public class Person { @Id private Name dn; @Attribute(name="cn") @DnAttribute(value="cn", index=1) private String fullName; private String description; @DnAttribute(value="ou", index=0) @Transient private String company; @Transient private String someUnmappedField; // ...more attributes below }
  • 31. SpringSession ● API and implementations for managing a user's session ● HttpSession - allows replacing the HttpSession in an application container (i.e. Tomcat) neutral way ○ Clustered Sessions ○ Multiple Browser Sessions ○ RESTful APIs ● WebSocket - provides the ability to keep the HttpSession alive when receiving WebSocket messages
  • 32. SpringSession @EnableRedisHttpSession public class Config { @Bean public JedisConnectionFactory connectionFactory(){ return new JedisConnectionFactory(); } } MAGIC
  • 33. SpringSocial ● Connect your Spring application to social network ● Main projects ○ Facebook ○ Twitter ○ LinkedIn ● Incubator projects ○ Github ○ Tripit ● Community Projects (33) ○ Dropbox ○ Google ○ Flickr ○ etc...
  • 34. SpringSocial @Bean public ConnectionFactoryLocator connectionFactoryLocator() { ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry(); registry.addConnectionFactory(new FacebookConnectionFactory( environment.getProperty("facebook.clientId"), environment.getProperty("facebook.clientSecret") )); return registry; } @Inject private Environment environment; @RequestMapping(value="/", method=RequestMethod.GET) public String home(Model model) { List<Reference> friends = facebook.friendOperations(). getFriends(); model.addAttribute("friends", friends); return "home"; }
  • 35. SpringAMQP ● Advanced Message Queuing Protocol Spring integration ● Listener container for asynchronous processing of inbound messages ● RabbitTemplate for sending and receiving messages ● RabbitAdmin for automatically declaring queues, exchanges and bindings
  • 36. SpringAMQPpublic static void main(final String... args) throws Exception { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml"); RabbitTemplate template = ctx.getBean(RabbitTemplate.class); template.convertAndSend("Hello, world!"); Thread.sleep(1000); ctx.destroy(); } <rabbit:connection-factory id="connectionFactory" /> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myExchange" routing-key="foo.bar"/> <rabbit:admin connection-factory="connectionFactory" /> <rabbit:queue name="myQueue" /> <rabbit:topic-exchange name="myExchange"> <rabbit:bindings> <rabbit:binding queue="myQueue" pattern="foo.*" /> </rabbit:bindings> </rabbit:topic-exchange> <rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener ref="foo" method="listen" queue-names="myQueue" /> </rabbit:listener-container> public class Foo { public void listen(String foo) { System.out.println(foo); } }
  • 37. SpringMobile ● A Device resolver abstraction for server- side detection of mobile and tablet devices ● Site preference management that allows the user to indicate if he or she prefers a "normal", "mobile", or "tablet" experience ● A site switcher capable of switching the user to the most appropriate site ● Device aware view management for organizing and managing different views for specific devices
  • 38. SpringMobile @Controller public class DeviceDetectionController { @RequestMapping("/detect-device") public @ResponseBody String detectDevice(Device device) { String deviceType = "unknown"; if (device.isNormal()) { deviceType = "normal"; } else if (device.isMobile()) { deviceType = "mobile"; } else if (device.isTablet()) { deviceType = "tablet"; } return "Hello " + deviceType + " browser!"; } }
  • 39. SpringforAndroid ● A Rest Client for Android ● Auth support for accessing secure APIs // The connection URL String url = "https://ajax.googleapis.com/ajax/" + "services/search/web?v=1.0&q={query}"; // Create a new RestTemplate instance RestTemplate restTemplate = new RestTemplate(); // Add the String message converter restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); // Make the HTTP GET request, marshaling the response to a String String result = restTemplate.getForObject(url, String.class, "Android");
  • 40. SpringCloud ● Tools for developers to quickly build distributed apps ○ Distributed/versioned configuration ○ Service registration and discovery` ○ Routing ○ Service-to-service calls ○ Load balancing ○ Circuit Breakers ○ Global locks ○ Leadership election and cluster state ○ Distributed messaging ● 16 sub-projects ● Integration with spring boot
  • 41. SpringCloud @Configuration @EnableAutoConfiguration @RestController public class Application { @Value("${config.name}") String name = "World"; @RequestMapping("/") public String home() { "Hello " + name; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } @Configuration @EnableAutoConfiguration @EnableDiscoveryClient @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
  • 42. SpringBoot ● Create stand-alone Spring applications ● Embed Tomcat, Jetty or Undertow directly (make JAR not WAR) ● Provide opinionated 'starter' POMs to simplify your Maven configuration ● Automatically configure Spring whenever possible ● Provide production-ready features such as metrics, health checks and externalized configuration ● Absolutely no code generation and no requirement for XML configuration
  • 43. SpringBoot @Controller @EnableAutoConfiguration public class SampleController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } }
  • 44. Springioplatform A consistent set of dependencies to deploy easily spring project