This document contains information about Josh Long, including his contact details, links to his work, and information about the Spring IO platform. It includes diagrams showing the architecture of Spring IO and its various modules. It also contains slides from one of Josh Long's presentations promoting Spring IO and its features, including Spring Boot, reactive programming, Java 8 support, REST design, security, and mobile development.
The document discusses strategies for building scalable applications. It introduces the concept of a "scale cube" with three axes: horizontal duplication for scaling stateless apps, data partitioning, and bounded contexts. It provides examples of using various technologies like RabbitMQ, Redis, MongoDB, Neo4j, Couchbase, Hadoop, and Spring XD to address different areas of the scale cube. The document emphasizes that building adaptive, scalable applications is challenging and recommends approaches like microservices and separating applications into bounded contexts.
Multi Client Development with Spring for SpringOne 2GX 2013 with Roy ClarksonJoshua Long
The document discusses Representational State Transfer (REST), an architectural style for building distributed hypermedia systems. It describes REST as being based on HTTP and having no hard rules, instead focusing on using HTTP verbs like GET, POST, PUT, DELETE and status codes to transfer representations of resources between clients and servers. It also discusses content negotiation, HATEOAS, the Richardson Maturity Model for grading RESTful implementations, and how Spring frameworks like Spring MVC, Spring Data REST, and Spring Security can be used to build RESTful services and clients.
Spring, now part of Pivotal, continues to innovate and support next generation workloads. In this talk, I introduce some of the exciting new Spring technologies supporting websockets, Java 8, Java EE 7, data ingestion and stream processing, NoSQL and Hadoop, and production-ready REST, _and_ I introduce tools designed to expedite ramp-up time for teams who want to deliver, quickly.
Slides from my talk introducing Spring Boot. Unfortunately, this talk is 90% live-coding, so I'll post the relevant video recording here when it's available.
The document discusses tailoring Spring for custom usage. It explores extension points in the Spring framework and how to exploit lesser known but powerful hooks. The agenda includes demos of introducing the tool chain, basic dependency injection, BeanPostProcessor, AspectJ, life cycle callbacks, scopes, FactoryBeans, Spring Expression Language, profiles, proxies, resources, object to XML marshalling, REST, transactions, caching, custom views and view resolvers, writing adapters in Spring Integration, and more. QA is also on the agenda.
Josh Long is a Spring Developer Advocate at Pivotal. He discusses various Spring and microservices related topics including:
- The single responsibility principle and how it relates to microservices and Unix tools.
- Exposing services simply using REST which has no strict rules but embraces HTTP verbs and status codes.
- The Richardson Maturity Model for grading APIs on their REST compliance from Level 0 to Level 3.
- Security topics like OAuth, SSL/TLS, and ensuring applications are production ready with monitoring and management.
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Matt Raible
JavaScript MVC Frameworks are all the rage these days. They’ve taken the web development world by storm. This session explores the various features of the three hottest JavaScript MVC frameworks: AngularJS, Ember.js and React.js. It also compares client-side templating vs. server-side templating and how well each framework supports Isomorphic JavaScript (code that can run both client-side and server-side). Finally, it ranks each framework on 10 different criteria using Yevgeniy Brikman’s framework scorecard.
Video on InfoQ: https://www.infoq.com/presentations/comparing-angular-ember-react
The document discusses strategies for building scalable applications. It introduces the concept of a "scale cube" with three axes: horizontal duplication for scaling stateless apps, data partitioning, and bounded contexts. It provides examples of using various technologies like RabbitMQ, Redis, MongoDB, Neo4j, Couchbase, Hadoop, and Spring XD to address different areas of the scale cube. The document emphasizes that building adaptive, scalable applications is challenging and recommends approaches like microservices and separating applications into bounded contexts.
Multi Client Development with Spring for SpringOne 2GX 2013 with Roy ClarksonJoshua Long
The document discusses Representational State Transfer (REST), an architectural style for building distributed hypermedia systems. It describes REST as being based on HTTP and having no hard rules, instead focusing on using HTTP verbs like GET, POST, PUT, DELETE and status codes to transfer representations of resources between clients and servers. It also discusses content negotiation, HATEOAS, the Richardson Maturity Model for grading RESTful implementations, and how Spring frameworks like Spring MVC, Spring Data REST, and Spring Security can be used to build RESTful services and clients.
Spring, now part of Pivotal, continues to innovate and support next generation workloads. In this talk, I introduce some of the exciting new Spring technologies supporting websockets, Java 8, Java EE 7, data ingestion and stream processing, NoSQL and Hadoop, and production-ready REST, _and_ I introduce tools designed to expedite ramp-up time for teams who want to deliver, quickly.
Slides from my talk introducing Spring Boot. Unfortunately, this talk is 90% live-coding, so I'll post the relevant video recording here when it's available.
The document discusses tailoring Spring for custom usage. It explores extension points in the Spring framework and how to exploit lesser known but powerful hooks. The agenda includes demos of introducing the tool chain, basic dependency injection, BeanPostProcessor, AspectJ, life cycle callbacks, scopes, FactoryBeans, Spring Expression Language, profiles, proxies, resources, object to XML marshalling, REST, transactions, caching, custom views and view resolvers, writing adapters in Spring Integration, and more. QA is also on the agenda.
Josh Long is a Spring Developer Advocate at Pivotal. He discusses various Spring and microservices related topics including:
- The single responsibility principle and how it relates to microservices and Unix tools.
- Exposing services simply using REST which has no strict rules but embraces HTTP verbs and status codes.
- The Richardson Maturity Model for grading APIs on their REST compliance from Level 0 to Level 3.
- Security topics like OAuth, SSL/TLS, and ensuring applications are production ready with monitoring and management.
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Matt Raible
JavaScript MVC Frameworks are all the rage these days. They’ve taken the web development world by storm. This session explores the various features of the three hottest JavaScript MVC frameworks: AngularJS, Ember.js and React.js. It also compares client-side templating vs. server-side templating and how well each framework supports Isomorphic JavaScript (code that can run both client-side and server-side). Finally, it ranks each framework on 10 different criteria using Yevgeniy Brikman’s framework scorecard.
Video on InfoQ: https://www.infoq.com/presentations/comparing-angular-ember-react
Java REST API Framework Comparison - UberConf 2021Matt Raible
Use Spring Boot! No, use Micronaut!! Nooooo, Quarkus is the best!!!
There's a lot of developers praising the hottest, and fastest, Java REST frameworks: Micronaut, Quarkus, and Spring Boot. In this session, you'll learn how to do the following with each framework:
✅ Build a REST API
✅ Secure your API with OAuth 2.0
✅ Optimize for production with Docker and GraalVM
I'll also share some performance numbers and pretty graphs to compare community metrics.
Related blog post: https://developer.okta.com/blog/2021/06/18/native-java-framework-comparison
How to Develop a Rich, Native-quality User Experience for Mobile Using Web St...David Kaneda
This document discusses how to build rich mobile user experiences using web standards like HTML5, CSS3, and JavaScript. It covers various HTML5 features such as new elements, forms, video/audio, geolocation and caching. It also discusses CSS techniques including transforms, transitions, animations and vendor-specific properties. Challenges with fixed positioning, touch events and performance are addressed. The document promotes building web apps that are native-like using frameworks like jQTouch and Sencha Touch.
The document discusses lessons learned from examining popular jQuery plugins. It summarizes 30 top plugins, describing why each was created and how it grew. Key takeaways are that authors build plugins to make something better, for fun/exploration, or client needs. Managing features and user feedback is challenging. The best plugins have great demos, documentation, browser support testing, and are fun. The author is available for questions.
This document provides an overview of developing RESTful web services with JAX-RS. It defines REST and compares it to SOAP, describes the principles of REST including giving resources IDs, standard methods, linking resources, content negotiation, and stateless communication. Code samples are provided to demonstrate JAX-RS annotations for resources, content negotiation, and processing form posts.
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015Matt Raible
Many Spring projects exist that leverage XML for their configuration and bean definitions. Most Java web applications use a web.xml to configure their servlets, filters and listeners. This session shows you how you can eliminate XML by configuring your Spring beans with JavaConfig and annotations. It also shows how you can remove your web.xml and configure your web components with Java.
Developing, Testing and Scaling with Apache Camel - UberConf 2015Matt Raible
Apache Camel is an integration framework that allows you to define routing and mediation rules in a number of domain-specific languages. This presentation shows how I used Apache Camel to replace IBM Message Broker on a project. It includes information on how routes were developed using Camel’s Java API and how Camel can be integrated with Spring Boot. It also covers unit, integration and load testing (using Gatling) of these services. Finally, it touches on monitoring with hawtio and New Relic.
The document discusses various security vulnerabilities in Ajax applications including CSRF, login CSRF, JavaScript hijacking, XSS, and history stealing. It provides examples of how these attacks can be carried out and emphasizes the importance of validating and sanitizing user input to prevent scripts from being executed maliciously on a site. The document also recommends techniques for protecting against these attacks, such as using authentication tokens and disabling client-side script evaluation for untrusted sources.
Spark IT 2011 - Developing RESTful Web services with JAX-RSArun Gupta
JAX-RS is a Java API for building RESTful web services. It uses annotations to simplify development of RESTful resources and defines standards for request/response formats and links between resources. JAX-RS services can be deployed to Java EE servers or standalone using implementations like Jersey. The future of JAX-RS includes enhancements to the client API, support for hypermedia formats, and tighter integration with Java EE technologies.
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Matt Raible
Building a modern web (or mobile) application requires a lot of tools, frameworks and techniques. This session shows how JHipster unites popular frameworks like AngularJS, Spring Boot and Bootstrap. Using Yeoman, a scaffolding tool for modern webapps, JHipster will generate a project that uses Java 8, SQL or NoSQL databases, Spring profiles, Maven or Gradle, Gulp.js, WebSockets and BrowserSync. It also supports a number of different authentication mechanisms: classic session-based auth, OAuth 2.0, or token-based authentication. For cloud deployments, JHipster includes out-of-the-box support for Cloud Foundry and Heroku.
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Matt Raible
This document discusses the JHipster project, which is a development tool that uses Spring Boot and AngularJS to generate and scaffold Java web applications. It highlights features of JHipster like authentication, metrics dashboards, and support for SQL and NoSQL databases. The document also demos generating a sample blog application using JHipster and shows how much code is generated for entities and the user interface. It promotes staying up to date with trends in Java and web development.
React is a UI library that is changing the way web applications are written. While there are many benefits to using React, managing an application's complexity as it scales is one of the most powerful.
1. Common routing pitfalls in Ember.js include incorrectly using resources vs routes, not understanding the validation vs setup phase of routing, and assuming route nesting matches template nesting.
2. Other common mistakes include forgetting to use the property helper with computed properties, not passing actions correctly to components, and having invalid JSON that silently fails in Ember Data.
3. Debugging challenges include swallowed promise errors and not using the debugger, console.log, or Ember Inspector tools effectively. Understanding function scope, native array methods, and action bubbling in CoffeeScript can also trip developers up.
Web Developers are excited to use HTML 5 features but sometimes they need to explain to their non-technical boss what it is and how it can benefit the company. This presentation provides just enough information to share the capabilities of this new technologies without overwhelming the audience with the technical details.
"What is HTML5?" covers things you might have seen on other websites and wanted to add on your own website but you didn't know it was a feature of HTML 5. After viewing this slideshow you will probably give your web developer the "go ahead" to upgrade your current HTML 4 website to HTML 5.
You will also understand why web developers don't like IE (Internet Explorer) and why they always want you to keep your browser updated to latest version. "I have seen the future. It's in my browser" is the slogan used by many who have joined the HTML 5 revolution.
High Performance JavaScript (CapitolJS 2011)Nicholas Zakas
High Performance JavaScript provides techniques for optimizing JavaScript performance. It discusses how JavaScript execution blocks the browser UI thread, preventing responsive user experiences. It recommends limiting individual JavaScript jobs to under 50ms to avoid unresponsiveness. The document then provides techniques to improve load time performance such as dynamically loading scripts, and runtime techniques like timers and web workers to avoid blocking the UI thread during long-running processes.
This document summarizes Konrad Malawski's talk on reactive programming and related topics. Konrad discusses reactive streams, Akka toolkit for building concurrent applications, actors model for concurrency, and how circuit breakers can be used as a substitute for flow control. He also talks about the origins and development of reactive streams specification to provide a common set of semantics for backpressure.
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Matt Raible
Building a modern web (or mobile) application requires a lot of tools, frameworks and techniques. This session shows how JHipster unites popular frameworks like AngularJS, Spring Boot and Bootstrap. Using Yeoman, a scaffolding tool for modern webapps, JHipster will generate a project that uses Java 8, SQL or NoSQL databases, Spring profiles, Maven or Gradle, Gulp.js, WebSockets and BrowserSync. It also supports a number of different authentication mechanisms: classic session-based auth, OAuth 2.0, or JWT. For cloud deployments, JHipster includes out-of-the-box support for Cloud Foundry and Heroku.
The document discusses the capabilities of the Spring Framework component model and how it can be used to add functionality to POJO-based applications. It provides an overview of the Spring component model, services, patterns, integration capabilities, and portability. It describes how technologies like dependency injection and AOP enable simple POJO-based programming. It highlights several value adds provided out of the box by Spring, including exporting remote endpoints, JMX support, auditing with aspects, and user extension points. It also discusses XML configuration extensions introduced in Spring 2.0 for higher level abstraction and grouping related beans.
This document discusses the evolution of web service APIs from REST in the 1990s to a potential future Activity Oriented Architecture (AOA). It argues that as more non-human users like intelligent agents start accessing APIs, the focus should shift from resources and hypermedia to activities that achieve user goals. The document proposes supporting auto-discovery of relevant activities, activity search, and activity templates to enable intelligent agents to perform useful tasks on behalf of users. Feedback on this vision for a future AOA is welcomed.
The document discusses recommendations for computer science students before graduating, including taking programming courses focused on object-oriented principles and design patterns, finding internships that involve programming work, learning English, studying microeconomics, completing sample applications to demonstrate skills, and being active in online communities. It also emphasizes the importance of documentation, graduating quickly, avoiding dismissing non-IT courses, and focusing on skills rather than specific future jobs.
Java REST API Framework Comparison - UberConf 2021Matt Raible
Use Spring Boot! No, use Micronaut!! Nooooo, Quarkus is the best!!!
There's a lot of developers praising the hottest, and fastest, Java REST frameworks: Micronaut, Quarkus, and Spring Boot. In this session, you'll learn how to do the following with each framework:
✅ Build a REST API
✅ Secure your API with OAuth 2.0
✅ Optimize for production with Docker and GraalVM
I'll also share some performance numbers and pretty graphs to compare community metrics.
Related blog post: https://developer.okta.com/blog/2021/06/18/native-java-framework-comparison
How to Develop a Rich, Native-quality User Experience for Mobile Using Web St...David Kaneda
This document discusses how to build rich mobile user experiences using web standards like HTML5, CSS3, and JavaScript. It covers various HTML5 features such as new elements, forms, video/audio, geolocation and caching. It also discusses CSS techniques including transforms, transitions, animations and vendor-specific properties. Challenges with fixed positioning, touch events and performance are addressed. The document promotes building web apps that are native-like using frameworks like jQTouch and Sencha Touch.
The document discusses lessons learned from examining popular jQuery plugins. It summarizes 30 top plugins, describing why each was created and how it grew. Key takeaways are that authors build plugins to make something better, for fun/exploration, or client needs. Managing features and user feedback is challenging. The best plugins have great demos, documentation, browser support testing, and are fun. The author is available for questions.
This document provides an overview of developing RESTful web services with JAX-RS. It defines REST and compares it to SOAP, describes the principles of REST including giving resources IDs, standard methods, linking resources, content negotiation, and stateless communication. Code samples are provided to demonstrate JAX-RS annotations for resources, content negotiation, and processing form posts.
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015Matt Raible
Many Spring projects exist that leverage XML for their configuration and bean definitions. Most Java web applications use a web.xml to configure their servlets, filters and listeners. This session shows you how you can eliminate XML by configuring your Spring beans with JavaConfig and annotations. It also shows how you can remove your web.xml and configure your web components with Java.
Developing, Testing and Scaling with Apache Camel - UberConf 2015Matt Raible
Apache Camel is an integration framework that allows you to define routing and mediation rules in a number of domain-specific languages. This presentation shows how I used Apache Camel to replace IBM Message Broker on a project. It includes information on how routes were developed using Camel’s Java API and how Camel can be integrated with Spring Boot. It also covers unit, integration and load testing (using Gatling) of these services. Finally, it touches on monitoring with hawtio and New Relic.
The document discusses various security vulnerabilities in Ajax applications including CSRF, login CSRF, JavaScript hijacking, XSS, and history stealing. It provides examples of how these attacks can be carried out and emphasizes the importance of validating and sanitizing user input to prevent scripts from being executed maliciously on a site. The document also recommends techniques for protecting against these attacks, such as using authentication tokens and disabling client-side script evaluation for untrusted sources.
Spark IT 2011 - Developing RESTful Web services with JAX-RSArun Gupta
JAX-RS is a Java API for building RESTful web services. It uses annotations to simplify development of RESTful resources and defines standards for request/response formats and links between resources. JAX-RS services can be deployed to Java EE servers or standalone using implementations like Jersey. The future of JAX-RS includes enhancements to the client API, support for hypermedia formats, and tighter integration with Java EE technologies.
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Matt Raible
Building a modern web (or mobile) application requires a lot of tools, frameworks and techniques. This session shows how JHipster unites popular frameworks like AngularJS, Spring Boot and Bootstrap. Using Yeoman, a scaffolding tool for modern webapps, JHipster will generate a project that uses Java 8, SQL or NoSQL databases, Spring profiles, Maven or Gradle, Gulp.js, WebSockets and BrowserSync. It also supports a number of different authentication mechanisms: classic session-based auth, OAuth 2.0, or token-based authentication. For cloud deployments, JHipster includes out-of-the-box support for Cloud Foundry and Heroku.
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Matt Raible
This document discusses the JHipster project, which is a development tool that uses Spring Boot and AngularJS to generate and scaffold Java web applications. It highlights features of JHipster like authentication, metrics dashboards, and support for SQL and NoSQL databases. The document also demos generating a sample blog application using JHipster and shows how much code is generated for entities and the user interface. It promotes staying up to date with trends in Java and web development.
React is a UI library that is changing the way web applications are written. While there are many benefits to using React, managing an application's complexity as it scales is one of the most powerful.
1. Common routing pitfalls in Ember.js include incorrectly using resources vs routes, not understanding the validation vs setup phase of routing, and assuming route nesting matches template nesting.
2. Other common mistakes include forgetting to use the property helper with computed properties, not passing actions correctly to components, and having invalid JSON that silently fails in Ember Data.
3. Debugging challenges include swallowed promise errors and not using the debugger, console.log, or Ember Inspector tools effectively. Understanding function scope, native array methods, and action bubbling in CoffeeScript can also trip developers up.
Web Developers are excited to use HTML 5 features but sometimes they need to explain to their non-technical boss what it is and how it can benefit the company. This presentation provides just enough information to share the capabilities of this new technologies without overwhelming the audience with the technical details.
"What is HTML5?" covers things you might have seen on other websites and wanted to add on your own website but you didn't know it was a feature of HTML 5. After viewing this slideshow you will probably give your web developer the "go ahead" to upgrade your current HTML 4 website to HTML 5.
You will also understand why web developers don't like IE (Internet Explorer) and why they always want you to keep your browser updated to latest version. "I have seen the future. It's in my browser" is the slogan used by many who have joined the HTML 5 revolution.
High Performance JavaScript (CapitolJS 2011)Nicholas Zakas
High Performance JavaScript provides techniques for optimizing JavaScript performance. It discusses how JavaScript execution blocks the browser UI thread, preventing responsive user experiences. It recommends limiting individual JavaScript jobs to under 50ms to avoid unresponsiveness. The document then provides techniques to improve load time performance such as dynamically loading scripts, and runtime techniques like timers and web workers to avoid blocking the UI thread during long-running processes.
This document summarizes Konrad Malawski's talk on reactive programming and related topics. Konrad discusses reactive streams, Akka toolkit for building concurrent applications, actors model for concurrency, and how circuit breakers can be used as a substitute for flow control. He also talks about the origins and development of reactive streams specification to provide a common set of semantics for backpressure.
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - GeekOut 2016Matt Raible
Building a modern web (or mobile) application requires a lot of tools, frameworks and techniques. This session shows how JHipster unites popular frameworks like AngularJS, Spring Boot and Bootstrap. Using Yeoman, a scaffolding tool for modern webapps, JHipster will generate a project that uses Java 8, SQL or NoSQL databases, Spring profiles, Maven or Gradle, Gulp.js, WebSockets and BrowserSync. It also supports a number of different authentication mechanisms: classic session-based auth, OAuth 2.0, or JWT. For cloud deployments, JHipster includes out-of-the-box support for Cloud Foundry and Heroku.
The document discusses the capabilities of the Spring Framework component model and how it can be used to add functionality to POJO-based applications. It provides an overview of the Spring component model, services, patterns, integration capabilities, and portability. It describes how technologies like dependency injection and AOP enable simple POJO-based programming. It highlights several value adds provided out of the box by Spring, including exporting remote endpoints, JMX support, auditing with aspects, and user extension points. It also discusses XML configuration extensions introduced in Spring 2.0 for higher level abstraction and grouping related beans.
This document discusses the evolution of web service APIs from REST in the 1990s to a potential future Activity Oriented Architecture (AOA). It argues that as more non-human users like intelligent agents start accessing APIs, the focus should shift from resources and hypermedia to activities that achieve user goals. The document proposes supporting auto-discovery of relevant activities, activity search, and activity templates to enable intelligent agents to perform useful tasks on behalf of users. Feedback on this vision for a future AOA is welcomed.
The document discusses recommendations for computer science students before graduating, including taking programming courses focused on object-oriented principles and design patterns, finding internships that involve programming work, learning English, studying microeconomics, completing sample applications to demonstrate skills, and being active in online communities. It also emphasizes the importance of documentation, graduating quickly, avoiding dismissing non-IT courses, and focusing on skills rather than specific future jobs.
1) The document discusses REST (Representational State Transfer), its constraints, and the Richardson Maturity Model for classifying RESTful web services.
2) It introduces JSON API as a standard for building RESTful hypermedia APIs and describes how the Katharsis library implements JSON API in Java applications.
3) An example is provided of using Spring Boot and Katharsis to build a RESTful web service with a Project and Task domain that follows the JSON API standard.
The document discusses the new JSON REST API for WordPress, which provides a modern REST API for WordPress sites using JSON instead of the outdated XML-RPC format. It allows users to create, read, update and delete WordPress content like posts, pages, users and media through HTTP requests. The API can be accessed through plugins or by making requests directly to the /wp-json/ endpoints. It also supports features like authentication, pagination and filtering to build powerful applications that interact with WordPress content and data.
The document discusses REST (Representational State Transfer) and compares it to other architectural styles like WS-* and SOAP. REST is an architectural style that uses HTTP methods like GET, PUT, POST and DELETE to operate on resources identified by URIs. It emphasizes stateless communication and returning representations of resources in response to requests. Popular REST APIs and implementations include Google's GData and OpenSocial, as well as Amazon S3 and SimpleDB.
Building Node.js based APIs in minutes. Achieve full-stack JavaScript, Offline Sync, Geolocation, REST API / JSON, ORM and API Management in open source. Write your own connectors, work on express.js. Create MEAN stack applications connecting Angular to Node to MongoDB. Presented at the Connect.js conference in Atlanta
The document discusses REST (Representational State Transfer) architectural styles and best practices for designing web services. It covers topics like RESTful principles of using URIs and HTTP methods to manipulate resources, statelessness, hypermedia as the engine of application state, and JSON and XML media types for representing resources. It also discusses REST maturity levels, security, versioning, and error handling in RESTful web services.
The document discusses Representational State Transfer (REST) as an architectural style for building distributed hypermedia systems. It describes key REST principles such as giving every resource an identifier, linking resources together through hyperlinks, using standard HTTP methods like GET, PUT, POST and DELETE, and communicating statelessly. The document also compares REST to other styles like WS-* and contrasts how REST uses URIs and HTTP while WS-* uses SOAP. It provides examples of companies and projects using REST.
Using REST to aid WS-* proposes building a RESTful SOA registry using Atom and AtomPub protocols to publish, retrieve, and manage SOA metadata and artifacts like WSDLs, schemas, and policies. The registry treats everything as resources accessible through URIs, supports standard CRUD operations, and shows dependencies between services, schemas, and other artifacts. Content handlers can intercept operations to perform validation and manage lifecycles. The approach aims to unify human and machine interfaces for the registry.
The document describes Napster's REST API. Napster provides a REST API for developers to access its music catalog and build applications. The API allows searching, retrieving metadata and streaming music. The API team is small with 6 members and started the project in July, releasing the first version in January for the CES event. The API documentation is available at http://developer.napster.com/docs/.
Picking the Right Node.js Framework for Your Use CaseJimmy Guerrero
Picking the Right Node.js Framework for Your Use Case with Shubhra Kar.
Topics covered in this webinar:
* Understanding the evolution of frameworks by design patterns
* Express
* Hapi
* Sails.js
* LoopBack.io
* Microservices
* IoT
While REST and WS-* both aim to enable web services, there are some important differences between them. WS-* specifications, such as WS-Security and WS-ReliableMessaging, provide standardized solutions for challenges like secure messaging and reliable delivery that can be difficult to achieve with REST alone. However, WS-* is also more complex than REST with HTTP and can require additional middleware. A standard WS-* profile is emerging that provides interoperability, but REST approaches using specifications like Atom Publishing Protocol are also gaining adoption for building distributed applications and APIs.
Eclipse Day India 2015 - Rest with Java (jax rs) and jerseyEclipse Day India
This document discusses REST APIs using Java (JAX-RS) and Jersey. It provides an overview of REST concepts and the JAX-RS and Jersey frameworks. It demonstrates how to create a basic Jersey project in Eclipse and implement CRUD operations. It also discusses using Swagger to generate documentation for RESTful APIs from JAX-RS annotations.
The document compares service oriented architectures (SOA) that use WS-* standards to resource oriented architectures (ROA) that follow REST principles. SOA uses HTTP as a transport protocol, defines interfaces with WSDL, and focuses on XML. ROA uses HTTP as a service platform, defines interfaces as URLs, and focuses on JSON. The document then discusses how to design a web of things application called "Spots" to follow REST principles by defining resources with URIs, using formats like JSON and XHTML for representations, and using HTTP methods like GET and POST to interact with resources in a uniform way.
Handlers are components that can intercept and process incoming and outgoing web service messages. There are two types of handlers - protocol handlers that work on SOAP headers and bodies, and logical handlers that work on message payloads independent of protocol. Handlers are used for tasks like logging, monitoring, and throttling. For interoperability, issues can arise from data type mismatches, platform differences, and inconsistencies in how SOAP headers and bindings are implemented across platforms.
This document provides an introduction and overview of REST and Jersey. It begins with an introduction of the presenter and their background and interests. It then provides brief definitions and discussions of REST, highlighting some of its key aspects like being stateless, using standard HTTP methods, and having resources with multiple representations. It introduces the Jersey framework and discusses some of its features. It maps out the topics to be covered, including explanations of REST concepts like resources having unique IDs, linking resources together, and implementing the hypermedia constraint. It also provides a demonstration of a sample REST application called Notem and discusses challenges in implementing REST concepts like generating links between resources.
The document discusses the future of server-side JavaScript. It provides reasons for using JavaScript on the server, including that it is the lingua franca of the web, allows for code reuse between server and client, and supports asynchronous programming well. It also discusses JavaScript engines, CommonJS modules and packages, environments like Node.js and RingoJS, and trends like wider adoption and cloud-based IDEs.
Web services can be accessed over a network and are called using HTTP. There are two main types: SOAP uses XML and is language/platform independent; REST uses URI to expose resources and can use JSON. Java has JAX-WS for SOAP and JAX-RS for RESTful services. REST is faster and uses less bandwidth than SOAP. The document discusses implementing REST services in Java using JAX-RS and Jersey, including using annotations and returning Response objects.
Josh Long presents on Spring Boot, an approach to building stand-alone, production-grade Spring based applications. He discusses how Spring Boot makes it easy to create Spring applications with embedded Tomcat, Jetty or Undertow with minimum fuss. The presentation also covers how to easily add RESTful services, security, production-ready features like metrics, health checks and externalized configuration using Spring Boot.
This talk introduces Spring's REST stack - Spring MVC, Spring HATEOAS, Spring Data REST, Spring Security OAuth and Spring Social - while refining an API to move higher up the Richardson maturity model
This document summarizes Josh Long's presentation on updates to the Spring framework. It discusses:
- Spring Framework versions 3.1, 3.2, and the upcoming 4.0 release
- New features in Spring 3.1 including environment profiles, Java-based configuration, caching, and Servlet 3.0 support
- Plans for Spring 3.2 including a Gradle build, contribution model on GitHub, and asynchronous MVC processing
- Changes to plans for Spring 3.2 where support for Java EE 7 and Java SE 8 was postponed due to delays in those projects. Spring 3.2 will instead focus on core framework refinements with Java 8 and EE 7 features planned for Spring 3.
The document discusses Spring Framework updates including versions 3.1, 3.2, and 3.3. Key features of Spring 3.1 include environment profiles for activating bean definitions in different environments, Java-based application configuration, and declarative caching. Spring 3.2 will include a Gradle build system and GitHub contributions. Spring 3.3 will add support for Java SE 8 features like lambda expressions and the Java EE 7 API. The document provides code examples of using these new Spring features.
Today's applications don't live in a vacuum - you need to take the applications to where your users are. Let Spring's REST support along with its powerful client-side technology support, help you get there faster.
Integration and Batch Processing on Cloud FoundryJoshua Long
This talk explores the new possibilities for scale by using Spring Integration, Spring Batch and RabbitMQ on Cloud Foundry, the open source PaaS from VMWare.
using Spring and MongoDB on Cloud FoundryJoshua Long
This talk introduces how to build MongoDB applications with Spring Data MongoDB on Cloud Foundry. Spring Data provides rich support for easily building applications that work on multiple data stores.
The document provides an overview of getting started with Cloud Foundry. It discusses registering for a Cloud Foundry account, installing the vmc CLI tool on Windows and Mac, and the various ways Cloud Foundry can be used to deploy applications. It also covers key Cloud Foundry features like choice of runtimes, choice of cloud providers, scaling applications, developing applications using Eclipse/STS, and using services in applications.
Spring provides tools for building multi-client web applications, including support for mobile clients and REST APIs. It includes the Spring MVC framework for building web UIs, the RestTemplate for consuming REST services, and tools like Spring Android for building native Android apps that integrate with REST backends. Demos show consuming a Spring REST service from a web UI, Android app, and HTML5 app to demonstrate support for multiple client types from a single backend.
A Walking Tour of (almost) all of Springdom Joshua Long
this is the deck for my 3+ hour walking tour talk that I give as a workshop at various conferences. This talk introduces practically everything in Spring -- come into the talk unaware of the concepts or frameworks and leave with a working knowledge of all the frameworks, and of all the applications for the technologies.
This talk introduces the role that Spring MVC and REST can play as a service-side endpoint model that can be connected to from mobile, rich, and desktop applications.
A Spring Batch bootcamp! Spring Batch is the open source batch processing framework from SpringSource, makes of the Spring framework. http://www.springsource.org/spring-batch
The Cloud Foundry Bootcamp document provides an overview of a Cloud Foundry bootcamp presented in Portland in 2012. It was written by Chris Richardson and presented by Monica Wilkinson and Josh Long. The agenda covers why Platform as a Service (PaaS) matters to developers, an overview of Cloud Foundry, getting started with Cloud Foundry, the Cloud Foundry architecture, using Micro Cloud Foundry, and consuming Cloud Foundry services.
Spring in the Cloud - using Spring with Cloud FoundryJoshua Long
This talk's about using the power of the Spring framework with Cloud Foundry, the open source PaaS (platform as-a-service) from VMware. This is a bit more deep an introduction than my other Spring and Cloud Foundry talk, and so I've kept both, while encouraging people to check this one out, first.
Spring and Cloud Foundry; a Marriage Made in HeavenJoshua Long
Spring and Cloud Foundry: a Marriage Made in Heaven. This talk introduces how to build Spring applications on top of Cloud Foundry, the open source PaaS from VMware
The Spring framework packs a lot of punch, out of the box! The surface-level component model's extraordinarily flexible, and works well with in most situations, but the real power of Spring lays just underneath, in the numerous SPIs that Spring exposes, so that you can tailor the component model to your own use cases. Spring's SPI's are a great example of what Bob Martin describes as the open-closed principle, and it provides the solid underpinnings upon which the other Spring frameworks, including Spring Integration, Spring MVC and Spring Batch are built. In this talk, Josh Long, the Spring developer advocate from SpringSource, provides a walking tour of Spring's extension points.
In this talk, originally presented at JavaZone, in Oslo, Norway, I introduce the broad swath of supported inversion-of-control options in Spring's component model, and then introduce some more advanced features of the component model.
Enterprise Integration and Batch Processing on Cloud FoundryJoshua Long
Spring Integration, RabbitMQ and Spring Batch are natural vehicles for building bigger, better, more powerful applications on top of the scale that only Cloud Foundry can provide. This is the deck from my Spring IO 2012 talk.
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Speck&Tech
ABSTRACT: A prima vista, un mattoncino Lego e la backdoor XZ potrebbero avere in comune il fatto di essere entrambi blocchi di costruzione, o dipendenze di progetti creativi e software. La realtà è che un mattoncino Lego e il caso della backdoor XZ hanno molto di più di tutto ciò in comune.
Partecipate alla presentazione per immergervi in una storia di interoperabilità, standard e formati aperti, per poi discutere del ruolo importante che i contributori hanno in una comunità open source sostenibile.
BIO: Sostenitrice del software libero e dei formati standard e aperti. È stata un membro attivo dei progetti Fedora e openSUSE e ha co-fondato l'Associazione LibreItalia dove è stata coinvolta in diversi eventi, migrazioni e formazione relativi a LibreOffice. In precedenza ha lavorato a migrazioni e corsi di formazione su LibreOffice per diverse amministrazioni pubbliche e privati. Da gennaio 2020 lavora in SUSE come Software Release Engineer per Uyuni e SUSE Manager e quando non segue la sua passione per i computer e per Geeko coltiva la sua curiosità per l'astronomia (da cui deriva il suo nickname deneb_alpha).
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
OpenID AuthZEN Interop Read Out - AuthorizationDavid Brossard
During Identiverse 2024 and EIC 2024, members of the OpenID AuthZEN WG got together and demoed their authorization endpoints conforming to the AuthZEN API
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/building-and-scaling-ai-applications-with-the-nx-ai-manager-a-presentation-from-network-optix/
Robin van Emden, Senior Director of Data Science at Network Optix, presents the “Building and Scaling AI Applications with the Nx AI Manager,” tutorial at the May 2024 Embedded Vision Summit.
In this presentation, van Emden covers the basics of scaling edge AI solutions using the Nx tool kit. He emphasizes the process of developing AI models and deploying them globally. He also showcases the conversion of AI models and the creation of effective edge AI pipelines, with a focus on pre-processing, model conversion, selecting the appropriate inference engine for the target hardware and post-processing.
van Emden shows how Nx can simplify the developer’s life and facilitate a rapid transition from concept to production-ready applications.He provides valuable insights into developing scalable and efficient edge AI solutions, with a strong focus on practical implementation.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Project Management Semester Long Project - Acuityjpupo2018
Acuity is an innovative learning app designed to transform the way you engage with knowledge. Powered by AI technology, Acuity takes complex topics and distills them into concise, interactive summaries that are easy to read & understand. Whether you're exploring the depths of quantum mechanics or seeking insight into historical events, Acuity provides the key information you need without the burden of lengthy texts.
2. I AM…
Josh Long (⻰龙之春)
Spring Developer Advocate
@starbuxman
Jean Claude
van Damme!
| josh.long@springsource.com
Java mascot Duke
some thing’s I’ve authored...
3. THE SPRING IO PLATFORM (SOME “MARCHITECTURE”)
Deploy to Cloud
or on premise
Big,
Fast,
Flexible
Data
GemFire
Core
Model
Web,
Integration,
Batch
4. THE SPRING IO PLATFORM (SOME ARCHITECTURE)
XD
BOOT
GRAILS
Stream, Taps, Jobs
Bootable, Minimal, Ops-Ready
Full-stack, Web
INTEGRATION
BATCH
BIG DATA
WEB
Channels, Adapters,
Filters, Transformers
Jobs, Steps,
Readers, Writers
Ingestion, Export,
Orchestration, Hadoop
Controllers, REST,
WebSocket
DATA
RELATIONAL
NON-RELATIONAL
CORE
FRAMEWORK
SECURITY
GROOVY
REACTOR
21. JAVA CONFIGURATION
Java
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext( ServiceConfiguration.class);
!
!
// ServiceConfiguration.java
@Configuration
@ComponentScan
@Import(DataSourceConfiguration.class)
@EnableTransactionManagement
class ServiceConfiguration {
!
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) throws Exception {
return new JdbcTemplate( dataSource );
}
@Bean
public PlatformTransactionManager jdbcTransactionManager(DataSource dataSource){
return new JdbcTransactionManager (dataSource );
}
22. SPRING 4 IS JAVA 8 READY
a quick note on
Java 8
...
!
Delayed again! from 09/2013 to as late as 03/2014!
Meanwhile, even
C++ has lambas...
23. BUT ARE THE IDES JAVA 8 READY?
a quick note on
Java 8
IDE Support:
IntelliJ IDEA has had Java 8 support for a year
Eclipse won’t have any until June 2014 (..!!)
Eclipse-based Spring Tool Suite (STS) has beta Java 8 support.
!
!
24. JAVA 8 METHOD REFERENCES ARE A GREAT FIT FOR SPRING
a quick note on
Java 8
Spring 4.0 to be GA against Developer Preview by end of 2013.
!
Method references are a great fit for Spring!
JdbcTemplate jdbcTemplate;
!
// method references
private Customer map(ResultSet rs, int rowNum)
throws SQLException {
return new Customer( rs.getString("name"), rs.getInt("age") );
}
!
// let it satisfy the `RowMapper` functional interface
Customer customer = jdbcTemplate.queryForObject(
"select name, age from customers ",
this::map);
25. JAVA 8 LAMBAS ARE A GREAT FIT FOR SPRING
a quick note on
Java 8
Spring 4.0 to be GA against Developer Preview by end of 2014.
!
lambas are a great fit for Spring and Twitter!
26. SPRING 4 AND JAVA 8
a quick note on
Java 8
JSR-310 - Date and Time
// declarative date format
import java.time.*;
import org.springframework.format.annotation.*;
!
public class Customer {
!
!
!
}
@DateTimeFormat(iso=ISO.DATE)
private LocalDate birthDate;
@DateTimeFormat(pattern="M/d/yy h:mm")
private LocalDateTime lastContact;
27. SPRING 4 AND JAVA 8
a quick note on
Java 8
Repeatable Annotations
@Scheduled(cron = "0 0 12 * * ?")
@Scheduled(cron = "0 0 18 * * ?")
public void performTempFileCleanup() {
...
}
28. REST DESIGN WITH SPRING
LET’S TURN OUR GAZE TO A TIME, LONG AGO, WHEN…
dumb clients roamed the earth... like dinosaurs
33. SO HOW DO OUR SMART CLIENTS CONNECT TO OUR SERVICES?
when someone uses SOAP because it’s “simple”
34. USE REST, OF COURSE!
REST Is..
!
• URI’s identify resources
• HTTP verbs describe a limited set of operations that can be used to manipulate
a resource
– GET
– DELETE
– PUT
– POST
– less used other verbs
• Headers help describe the messages
35. WHAT IS REST? (…BABY DON’T HURT ME, NO MORE…)
The Richardson Maturity Model
Level 0: swamp of POX
Uses HTTP mainly as a tunnel through one URI
e.g., SOAP, XML-RPC
Usually features on HTTP verb (POST)
http://martinfowler.com/articles/richardsonMaturityModel.html
36. LEVEL 1: URIS TO DISTINGUISH NOUNS
The Richardson Maturity Model
Level 1: resources
Multiple URIs to distinguish related nouns
e.g., /articles/1, /articles/2, vs. just /articles
http://martinfowler.com/articles/richardsonMaturityModel.html
37. LEVEL 2: GROUND ZERO USING SPRING MVC
The Richardson Maturity Model
Level 2: HTTP verbs
leverage transport-native properties to enhance service
e.g., HTTP GET and PUT and DELETE and POST
Uses idiomatic HTTP controls like status codes, headers
http://martinfowler.com/articles/richardsonMaturityModel.html
38. TANGENT: A QUICK PRIMER ON SPRING MVC
incoming
requests
delegate
request
DispatcherServlet
return
response
model
delegate
rendering of
response
model
return
control
render
response
view
template
controller
39. REST DESIGN WITH SPRING
import static ...RequestMethod.* ;
import static ...MediaType.* ;
!
@RestController
@RequestMapping (value = “/users/”)
class UserController {
!
@RequestMapping (method = DELETE, value = “/{user}”)
User delete(@PathVariable Long user) {
return crmService.removeUser(user);
}
@RequestMapping (method = GET, value = “/{user}”)
User read(@PathVariable Long user) {
return crmService.findById(user);
}
..
}
42. LEVEL 3: HATEOAS, OR THE UNPRONOUNCEABLE ACRONYM
The Richardson Maturity Model
Level 3: Hypermedia Controls (aka, HATEOAS)
No a priori knowledge of service required
Navigation options are provided by service and hypermedia controls
Promotes longevity through a uniform interface
http://martinfowler.com/articles/richardsonMaturityModel.html
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
43. METADATA == LINKS
The Richardson Maturity Model
Level 3: Hypermedia Controls (aka, HATEOAS)
Links provide possible navigations from a given resource
Links are dynamic, based on resource state.
!
<link href=“http://...:8080/users/232/customers”
rel= “customers”/>
http://martinfowler.com/articles/richardsonMaturityModel.html
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
44. REST DESIGN WITH SPRING
import static ...RequestMethod.* ;
import static ...MediaType.* ;
!
@RestController
@RequestMapping (value = “/users/” )
class UserController {
!
!
@Inject ResourceAssembler<User, Resource<User>> userResourceAssembler;
@RequestMapping (method = DELETE, value = “/{user}”)
Resource<User> delete(@PathVariable Long user) {
return userResourceAssembler.toResource( crmService.removeUser(user) );
}
@RequestMapping (method = DELETE, value = “/{user}”)
Resource<User> read(@PathVariable Long user) {
return userResourceAssembler.toResource( crmService.findById(user));
}
..
45. !
REST DESIGN WITH SPRING
@Component
class UserResourceAssembler implements ResourceAssembler<User, Resource<User>> {
!
!
public Resource<User> toResource(User user) {
Resource<User> userResource = new Resource<User>(user);
Collection<Link> links = new ArrayList<Link>();
Link toPhoto = linkTo( methodOn(UserProfilePhotoController.class)
.loadUserProfilePhoto( user.getId() ))
.withRel(“photos”);
Link toSelf = linkTo( methodOn( UserController.class))
.loadUser( user.getId() ))
.withSelfRel();
Resource<User> userResource =
new Resource<User>(user, Arrays.asList(toSelf, toPhoto));
54. SECURITY
Spring Security is a modern
security framework for a
modern age
!
• OAuth
• sign in / out & “Remember Me” support
• Kerbreros
• CAS
• pam
• ActiveDirectory / LDAP
• Encryption (TLS/SSL integration)
• x509 certificates
• OpenID
55. SECURITY
Spring Security is a modern security
framework for a modern age
!
Yes
client submits
authentication
credentials
Authentication
Mechanism
collects the details
No - retry!
Authentication is
valid?
Store Authentication in
SecurityContextHolder
process original request
56. SECURITY
Spring Security is a modern security
framework for a modern age
!
Yes
client submits
authentication
credentials
Authentication
Mechanism
collects the details
Authentication
Store Authentication in
SecurityContextHolder
Authentication is
valid?
Mechanism collects the details!
!
No AuthenticationRequest is sent to AuthenticationManager!
- retry!
!
(passes it through a chain of AuthenticationProviders)!
!
AuthenticationProvider asks a UserDetailsService for a UserDetails!
!
The UserDetails object is used to build an Authentication object!
!
!
process original request
57. SECURITY
!
Spring Security features a
clean Java configuration
API
@Configuration
@EnableWebSecurity
class SecurityConfig extends WebSecurityConfigurerAdapter {
!
!
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/api/*").authenticated();
http.formLogin()
.loginPage("/login")
.passwordParameter("pw")
.usernameParameter("user");
http.x509();
}
58. A CONNECTED WORLD WITH SPRING SOCIAL
* source: visual.ly/60-seconds-social-media
A Connected World in 00:60 seconds
700ksent
messages
1090
visitors
2000
checkins
175k
tweets
7610
searches
2MM
videos viewed
3125
photos uploaded
7630sent
messages
63. REST DESIGN WITH SPRING
Setting up Spring Social
@Configuration
@EnableJdbcConnectionRepository
@EnableFacebook(appId="${facebook.clientId}",
appSecret="${facebook.clientSecret}")
@EnableTwitter(appId=“${twitter.consumerKey}",
appSecret="${twitter.consumerSecret}")
@EnableLinkedIn(appId="${linkedin.consumerKey}",
appSecret="${linkedin.consumerSecret}")
public class SocialConfig {
// ...
64. REST DESIGN WITH SPRING
Setting up Spring Social
@Controller
class FacebookFriendsController {
!
!
}
!
@Inject Facebook facebook;
@RequestMapping(value="/facebook/friends", method=GET)
public String showFeed(Model model) {
model.addAttribute("friends", facebook.friendOperations().getFriendProfiles());
return "facebook/friends";
}
65. DEMO:
C O N N E C T I N G A P P L I C AT I O N S T O
USERS WITH SPRING SOCIAL
67. MOBILE FIRST APPLICATIONS
units (in millions) of units of each type of platform shipped
Linux Phone
BlackBerry
Symbian
Windows Mobile
iOS
Android
2Q 2012
2Q 2013
0
50
100
150
http://www.idc.com/getdoc.jsp?containerId=prUS24257413
200
71. SPRING SUPPORTS JAVA EE
Spring works well in Java EE environments
!Supports Java EE 7: Date/Time API, JTA 1.2, JMS 2.0, JPA 2.1, Bean
Validation 1.1, the new concurrency API in JSR-236, Servlet 3.1, and
WebSockets (JSR 356)
!
Even participated in a few JSRs: the websocket JSR (356) and the
Batch JSR (352)
73. SPRING PROFILES MAKE IT EASY TO ADAPT
@Configuration
@Profile("cloud")
public class CloudConfig {
!
@Bean public Cloud cloud() throws CloudException {
CloudFactory cloudFactory = new CloudFactory();
return cloudFactory.getCloud();
}
@Bean public DataSource dataSource() {
return cloud().getSingletonServiceConnector(DataSource.class, null);
}
}
76. …AND A RICH ECOSYSTEM OF THIRD PARTY INTEGRATIONS
77. SPRING IS THE LEADING COMPONENT MODEL
Glassfish
Websphere
WebLogic
JBoss
Jetty
Apache Tomcat
% of survey of 1800
Java developers.
Multiple choices.
0
15
30
45
Source: ZeroTurnaround Developer Productivity Report 2012
60
78. SPRING INTEGRATION MAKES EIP EASY
Integration
• ! hard to get right
• patterned after “EIP book” patterns
• supports numerous adapters and gateways for external
systems
82. BATCH AND INTEGRATION
Batch Processing...
• ! avoids idle computing resources
• allows the system to use different priorities for batch and
interactive work
• supports numerous sinks and sources
• supports JSR 352 - Batch Applications
86. DEMO:
U S I N G S P R I N G B AT C H &
I N T E G R AT I O N
87.
88. SPRING SUPPORTS ALL THE DATA!
Spring supports all the SQLs:
NoSQL, NOSQL, and SQL
!
89. REST DESIGN WITH SPRING
!
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.repository.annotation.RestResource;
!
import java.util.List;
!
@RestResource (path = "users", rel = "users")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
!
// select * from users where username = ?
User findByUsername(@Param("username") String username);
!
!
}
// select * from users where firstName =? or lastName = ? or username = ?
List<User> findUsersByFirstNameOrLastNameOrUsername(
@Param("firstName") String firstName,
@Param("lastName") String lastName,
@Param("username") String username);
90. PROJECT REACTOR
The future is Reactive
!
Reactor: foundational
library. Drives drivers,
servers, data integration
libraries, domain
integration libraries, and
evented architectures
!
Used in: Spring
Integration, websocket =>
STOMP support, Grails,
etc.
101. “
china
on 11/11/2012 (the “Double Sticks” promotion
day), Tmall and Taobao witnessed 147 million
user visits, purchases of 30 million people and
nearly 100 million paid orders. At 0:00, more
than 10 million users were concurrently online
”
* source: http://www.infoq.com/news/2012/12/interview-taobao-tmall
http://spring.io/blog/2013/03/04/spring-at-china-scale-alibaba-group-alipay-taobao-and-tmall/
102. Spring and RabbitMQ:
powering India’s 1.2 B Person Biometric DB
• 1.2 billion residents
• ~75% literacy
• less than 3% pay incomes taxes
• less than 20% banking
• 800 million mobile, ~200-300 million migrant
workers
!
• Government spends about $25-40 billion on
direct attributes
• residents have no standard identity
• most programs plagued with ghost and multiple
identities causing leakage of 30-40%
india
103. japan
• traded on JASDAQ
• largest Java consultancy in Japan
• Spring Batch
– handles customer profile information and real-time ad matching system
• Spring is agile enabler
– production control system
– just-in-time production is really the heart of manufacturing
– cost decreased 30%
104. china
• 1.3 billion people in China
• Google is either mostly blocked or - from Hong
Kong - very slow
!
• Baidu has its own Android operating system, cloud
services (like GMail, Dogs, etc.)
!
• Built micro service architecture that builds on top of
Spring
!
• Custom web frameworks using Spring XML
namespaces as global integration API