Presentation shows by example (IPT Polling Demo JAXRS20 HATEOAS, https://github.com/iproduct/IPT-Polling-Demo-JAXRS20-HATEOAS/wiki) the novelties in JAX-RS 2.0 and REST HATEOAS:
- Standardized REST Client API;
- Client and server-side asynchronous HTTP request processing;
- Integration of declarative validation using JSR 349: Bean Validation 1.1;
- Improved server-suggested content negotiation;
- Aspect-oriented extensibility of request/response processing using Filters and Interceptors;
- Dynamic extension registration using DynamicFeature interface;
- Hypermedia As The Engine Of Application State (HATEOAS) REST architectural constraint support using state transition links (support for new HTTP Link header as well as JAXB serialization of resource links).
[IPT, http://iproduct.org]
This presentation gives a high level concepts and more of code to take a stab at developing a simple Restful server. I targeted people who would like to build a simple RESTFul server from scratch and experiment.
JSON_TO_HIVE_SCHEMA_GENERATOR is a tool that effortlessly converts your JSON data to Hive schema, which then can be used with HIVE to carry out processing of data. It is designed to automatically generate hive schema from JSON Data. It keeps into account various issues(multiple JSON objects per file, NULL Values, the absence of certain fields etc..) and can parse millions of records and obtain a schema definition for data i:e nested structures.
Follow : https://github.com/jainpayal12/Json_To_HiveSchema_Generator.git
Representational State Transfer (REST) and HATEOASGuy K. Kloss
Lecture from Auckland University of Technology in the Service-Oriented Architecture for the Master's course in Service-Oriented Computing (semester 2, 2013)
This presentation gives a high level concepts and more of code to take a stab at developing a simple Restful server. I targeted people who would like to build a simple RESTFul server from scratch and experiment.
JSON_TO_HIVE_SCHEMA_GENERATOR is a tool that effortlessly converts your JSON data to Hive schema, which then can be used with HIVE to carry out processing of data. It is designed to automatically generate hive schema from JSON Data. It keeps into account various issues(multiple JSON objects per file, NULL Values, the absence of certain fields etc..) and can parse millions of records and obtain a schema definition for data i:e nested structures.
Follow : https://github.com/jainpayal12/Json_To_HiveSchema_Generator.git
Representational State Transfer (REST) and HATEOASGuy K. Kloss
Lecture from Auckland University of Technology in the Service-Oriented Architecture for the Master's course in Service-Oriented Computing (semester 2, 2013)
Building Serverless Backends with AWS Lambda and Amazon API GatewayAmazon Web Services
AWS Lambda is a compute service that runs your code without provisioning or managing servers. Amazon API Gateway is a fully managed service that makes it easy for developers to publish, maintain, monitor, and secure APIs at any scale.
This session will familiarize you with the basics of AWS Lambda and Amazon API Gateway and demonstrate how to build web, mobile, and IoT backends using these services. You will learn how to setup API endpoints that trigger AWS Lambda functions to handle mobile, web, IoT, and 3rd party API requests. You will also learn how to use Lambda to read and write to Amazon DynamoDB. We will run through a demo of setting up a simple serverless blogging web application that allows user authentication and the ability to create posts and comments.
MVC 1.0 is an action-oriented framework building on experience with previous frameworks such as Struts, Spring MVC, VRaptor etc. It is based on JAX-RS, CDI and BeanValidation JavaEE technologies and provides a standard, view specification neutral way to build web applications. Among supported view template frameworks are: JSP, Facelets, Freemarker, Handlebars, Jade, Mustache, Velocity, Thymeleaf, etc.
NOTE: MVC 1.0 JavaEE 8 API Specification is in early draft stage, and is subject to change based on open community process.
A Social network and Learning Centre is designed to help users to meet new friends, maintain existing relationships and at the same time enhance their concepts related to Java. The main goal of our website is to make your social life more active and stimulating. This project helps you to connect People, share your ideas and enhance your Programming Concepts related to Java, Android & Windows .
In this project a new class of resource available where you can Read, Write, Compile and Run Java Program with webface Online Compiler. Lecture Notes Available With Example. Your Personal Image, Music & Video Gallery, That makes Complete Platform For Everyone.
• Language Used : JSP & Servlet.
• Designing : Html, CSS, JavaScript
• IDE : NetBeans 8.0.2
• Database : MySQL 5.1.
# Complete project report Made By abhishek Kumar
Presentation is highlighting novelties in SPA development with Angular 2 (+Ionic 2 demo) with real code examples.
We created together simple Ng2 application with Angular CLI.
All the code is available on GitHub (link to demos is at the end of presentation).
Prerequisites:
1. Install NodeJS. It is better to install version 6 or 4x. Read about NPM.
2. Install TypeScript + editor (Visual Studio Code or Sublime 3).
3. Install Angular 2 Command Line Interface (Angular CLI):
npm install -g angular-cli
Fullstack Interview Questions and Answers.pdfcsvishnukumar
Global Companies are hiring for full stack developers with diverse skills to work on the entire application development. The number of Full Stack developer jobs will increase from 135,000 to over 853,000 by 2024 based on US Bureau of Labor Statistics. To handle the entire project independently, Full Stack developers are in demand with many opportunities.
Reactive Java Robotics & IoT with Spring ReactorTrayan Iliev
On April 4-th, 2017 in cosmos coworking camp – Sofia, Trayan Iliev will talk about “Reactive Java Robotics and IoT with Spring Reactor” (http://robolearn.org/reactive-java-robotics-iot-spring-reactor/).
The event is organized by DEV.BG and it is part from the user group Internet of Things.
Program:
1. Robotics, IoT & Complexity. Domain-Driven Design (DDD). Reactive programming. Reactive Streams (java.util.concurrent.Flow);
2. High performance non-blocking asynchronous programming on JVM using Reactor project (using Disruptor/RingBuffer);
3. Implementig reactive hot event streams processing with Reactor: Flux & Mono, Processors;
4. End-to-end reactive web applications and services: Reactor IO (REST, WebSocket) + RxJS + Angular 2;
5. IPTPI robot demo – reactive hot event streams processing on Raspberry Pi 2 + Arduino with embedded and mobile interfaces: http://robolearn.org/
For the lecturer: Trayan Iliev
– founder and manager of IPT – Intellectual Products & Technologies (http://iproduct.org/) – company for IT trainings and consultancy, specialized in Java, Fullstack JavaScipt, web and mobile technologies
– 15+ years training and consulting experience
– lecturer on the conferences, organized by BGJUG and BGOUG – 9 presentations
– organizer of hackathons on Java robotics & IoT in Sofia and Plovdiv
– presenter on international developer conferences: jPrime, jPofessionals, Voxxed Days
Making Machine Learning Easy with H2O and WebFluxTrayan Iliev
Machine learning is becoming a must for many business domains and applications. H2O is a best-of-breed, open source, distributed machine learning library written in Java. The presentation shows how to create and train machine learning models easily using H2O Flow web interface, including Deep Learning Neural Networks (DNNs). The session provides a tutorial how to develop and deploy fullstack-reactive face recognition demo using React + RxJS WebSocket front-end, OpenCV, Caffe CNN for image segmentation, OpenFace CNN for feature extraction, H20 Flow for face recognition interactive model training and export as POJO. The trained POJO model is incorporated in a real-time streaming web service implemented using Spring 5 Web Flux and Spring Boot. All demo is 100% Java!
Rapid Web API development with Kotlin and KtorTrayan Iliev
Introduction to Kotlin and Ktor with flow, async and channel examples. Ktor is an async web framework with minimal ceremony that leverages the advantages of Kotlin like coroutines and extensible functional DSLs..
Sensor data is streamed in realtime from Arduino + accelerometeres, gyroscopes & compass 3D, ultrasound distance sensor, etc. using UDP protocol. The data processing is done with reactive Java alterantive implementations: callbacks, CompletableFutures and using Spring 5 Reactor library. The web 3D visualization with Three.js is streamed using Server Sent Events (SSE).
A video for the IoT demo is available @YouTube: https://www.youtube.com/watch?v=AB3AWAfcy9U
All source code of the demo is freely available @GitHub: https://github.com/iproduct/reactive-demos-iot
There are more reactive Java demos in the same repository - callbacks, CompletableFuture, realtime event streaming. Soon I'll add a description how to build the device and upload Arduino sketch, as well as describe CompletableFuture and Reactor demos and 3D web visualization part with Three.js. Please stay tuned :)
Learning Programming Using Robots - Sofia University Conference 2018 Trayan Iliev
Learn information technologies by creating your own robots and IoT projects. Robotics and IoT offer rich opportunities for practical and active learning of core information technologies, programming languages and software architectures. Presentation includes examples of teaching practices and robotics projects, and offers suggestions why and how to use them to achieve better students' motivation, engagement, creativity, and connection between theory and practice.
Active Learning Using Connected Things - 2018 (in Bulgarian)Trayan Iliev
Learn about active learning methods and practices using Robotics, IoT, and "smart things" projects. Includes examples of teaching practices and robotics projects, and offers suggestions why and how to use them to achieve better students' motivation, engagement, creativity, and connection between theory and practice. Several blended learning models are compared - Flipped Classroom, Stations/Labs Rotation, Flex model. Project support for individual learning styles is discussed.
Spring 5 Webflux - Advances in Java 2018Trayan Iliev
Brief introduction to distributed stream processing, reactive programming, and novelties in Spring 5, Spring Boot 2, and reactive Spring Data + programming examples in GitHub. More information will be provided during upcoming Spring 5 course: http://iproduct.org/en/courses/spring-mvc-rest/
Fog Computing – between IoT Devices and The Cloud presentation covers following topics:
- Edge, Fog, Mist & Cloud Computing
- Fog domains and fog federation, wireless sensor networks, - multi-layer IoT architecture
- Fog computing standards and specifications
- Practical use-case scenarios & advantages of fog
- Fog analytics and intelligence on the edge
- Technologies for distributed asynchronous event processing - and analytics in real time
- Lambda architecture – Spark, Storm, Kafka, Apex, Beam, Spring - Reactor & WebFlux
- Eclipse IoT platform
Microservices with Spring 5 Webflux - jProfessionalsTrayan Iliev
Spring 5 introduces new functional and reactive programming model for building web applications and (micro-)services.
The session @jProfessionals dev conference demonstrates how to build REST microservices using Spring WebFlux and Spring Boot using code examples on GitHub. It includes:
- Introduction to reactive programming, Reactive Streams specification, and project Reactor (as WebFlux infrastructure);
- Comparison between annotation-based and functional reactive ;programming approaches for building REST services with WebFlux;
- Router, handler and filter functions;
- Using reactive repositories and reactive database access with Spring Data;
- Building end-to-end non-blocking reactive web services using Netty-based web runtime;
- Reactive WebClients and integration testing;
- Realtime event streaming to WebClients using JSON Streams, and to JS client using SSE.
Reactive Microservices with Spring 5: WebFlux Trayan Iliev
On November 27 Trayan Iliev from IPT presented “Reactive microservices with Spring 5: WebFlux” @Dev.bg in Betahaus Sofia. IPT – Intellectual Products & Technologies has been organizing Java & JavaScript trainings since 2003.
Spring 5 introduces a new model for end-to-end functional and reactive web service programming with Spring 5 WebFlow, Spring Data & Spring Boot. The main topics include:
– Introduction to reactive programming, Reactive Streams specification, and project Reactor (as WebFlux infrastructure)
– REST services with WebFlux – comparison between annotation-based and functional reactive programming approaches for building.
– Router, handler and filter functions
– Using reactive repositories and reactive database access with Spring Data. Building end-to-end non-blocking reactive web services using Netty-based web runtime
– Reactive WebClients and integration testing. Reactive WebSocket support
– Realtime event streaming to WebClients using JSON Streams, and to JS client using SSE.
Presentation from BGOUG conference Nov 17, 2017.
Since September 2017, Java 9 is generally available. It offers many enhancements:
• Modularity – provides clear separation between public and private APIs, stronger encapsulation & dependency management.
• JShell – using and customizing Java 9 interactive shell by example
• Process API updates – feature-rich, async OS process management and statistics
• Reactive Streams, CompletableFuture and Stream API updates
• Building asynchronous HTTP/2 and WebSocket pipelines using HTTP/2 Client and CompletableFuture composition
• Collection API updates
• Stack walking, and other language enhancements (Project Coin)
Discussed topics are accompanied by live demos available for further review @ github.com/iproduct.
Presentation from Angular Sofia Meetup event focuses on integration between state-of-the-art Angular, component libraries and supporting technologies, necessary to build a scalable and performant single-page apps. Topics include:
- Composing NGRX Reducers, Selectors and Middleware;
- Computing derived data using Reselect-style memoization with RxJS;
- NGRX Router integration;
- Normalization/denormalization and keeping data locally in IndexedDB;
- Processing Observable (hot) streams of async actions, and isolating the side effects using @Effect decorator with NGRX/RxJS reactive transforms;
- Integration of Material Design with third party component libraries like PrimeNG;
- more: lazy loading, AOT...
Stream Processing with CompletableFuture and Flow in Java 9Trayan Iliev
Stream based data / event / message processing becomes preferred way of achieving interoperability and real-time communication in distributed SOA / microservice / database architectures.
Beside lambdas, Java 8 introduced two new APIs explicitly dealing with stream data processing:
- Stream - which is PULL-based and easily parallelizable;
- CompletableFuture / CompletionStage - which allow composition of PUSH-based, non-blocking, asynchronous data processing pipelines.
Java 9 will provide further support for stream-based data-processing by extending the CompletableFuture with additional functionality – support for delays and timeouts, better support for subclassing, and new utility methods.
More, Java 9 provides new java.util.concurrent.Flow API implementing Reactive Streams specification that enables reactive programming and interoperability with libraries like Reactor, RxJava, RabbitMQ, Vert.x, Ratpack, and Akka.
The presentation will discuss the novelties in Java 8 and Java 9 supporting stream data processing, describing the APIs, models and practical details of asynchronous pipeline implementation, error handling, multithreaded execution, asyncronous REST service implementation, interoperability with existing libraries.
There are provided demo examples (code on GitHub) using Completable Future and Flow with:
- JAX-RS 2.1 AsyncResponse, and more importantly unit-testing the async REST service method implementations;
- CDI 2.0 asynchronous observers (fireAsync / @ObservesAsync);
Presentation discusses the best practices when writing higher order components (HOCs), and presents examples how to write them according to React recommendations.
Topics include: maximizing HOC factories composability, using ES7 decorators, wrapping context DI in HOCs, handling async state changes using RxJS Observanels and separation of concerns between presentation and business logic components. Examples (@GitHub projects - referenced in the presentation) are given using react, redux, react-router-redux, redux-observable, recompose, and reselect.
IPT presentation @ jProfessionals 2016 on Java and JavaScipt Reactive Robotics and IoT including: Domain Driven Design (DDD), high-performance reactive micro-services development using Spring Reactor, state-of-the-art component-based client side MVVM implementation with Angular 2, ngrx (Redux pattern), TypeScript and reactive WebSockets.
My jPrime 2016 presentation shows example of Domain-Driven Design (DDD), Event Sourcing (ES) and Functional Reactive Programming (FRP) using Reactor and Redux in a showcase of Java robotics - two small robots IPTPI (Raspberry Pi 2 + Ardiuno) and LeJaRo (LeJOS).
IPT High Performance Reactive Programming with JAVA 8 and JavaScriptTrayan Iliev
Presentation @ jProfessionals BGJUG Conference
Sofia, November 22, 2015 by IPT – IT Education Evolved, High Performance Reactive Programming Workshop - Dec 15-17,2015 http://iproduct.org/en/course-reactive-java-js/
You are welcome to join us!
Low-latency, high-throughput reactive and functional programming in Java using Spring Reactor, RxJava, RxJS, Facebook React, Angular 2, Reactive Streams, Disruptor (ring buffer), Reactor & Proactor design patterns, benchmarking & comparison of concurrency implementations. December 15 - 17, 2015 - Workshop: High Performance Reactive Programming with JAVA 8 and JavaScript - http://iproduct.org/en/course-reactive-java-js/
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Novelties in Java EE 7: JAX-RS 2.0 + IPT REST HATEOAS Polling Demo @ BGOUG Conference, Pravets 2014
1. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Novelties in Java™ EE 7: JAX – RS 2.0
Trayan Iliev
IPT – Intellectual Products & Technologies
e-mail: tiliev@iproduct.org
web: http://www.iproduct.org
Oracle®, Java™ and JavaScript™ are trademarks or registered trademarks of Oracle and/or its affiliates.
Other names may be trademarks of their respective owners.
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 1
Unported License
2. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Agenda I
Service Oriented Architecture (SOA), REST & HATEOAS
Richardson Maturity Model of Web Applications
IPT Proposal: Separation of Query & Command Representations &
dynamically generated meta-data for RESTful resources
Novelties in Java™ EE 7: Java API for RESTful Web Services –
JAX-RS 2.0 (JSR 339)
Standardized REST Client API;
Client-side and server-side asynchronous HTTP request processing
Integration of declarative validation of resources, response entities,
method parameters, and fields using JSR 349: Bean Validation 1.1
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 2
Unported License
3. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Agenda II
Improved server-suggested content negotiation in addition to that
suggested by client
Aspect-oriented extensibility of request/response processing using
Filters (non wrapping) and Interceptors (wrapping) client and server
extensions
Dynamic extension registration using DynamicFeature interface;
Hypermedia As The Engine Of Application State (HATEOAS) REST
architectural constraint support using state transition links (support
for new HTTP Link header as well as JAXB serialization of resource
links).
Let's try it (IPT Polling Demo + hands-on)
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 3
Unported License
4. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Question 1
How many people know what
REST means?
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 4
Unported License
5. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Question 2
How many know what HATEOAS
stays for?
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 5
Unported License
6. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Question 3
How many people have
developed at least one RESTful
service with JAX-RS?
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 6
Unported License
7. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Software Architecture – Definitions [1]
Almost everybody feels at peace with nature: listening to the ocean
waves against the shore, by a still lake, in a field of grass, on a
windblown heath. One day, when we have learned the timeless way
again, we shall feel the same about our towns, and we shall feel as
much at peace in them, as we do today walking by the ocean, or
stretched out in the long grass of a meadow.
— Christopher Alexander, The Timeless Way of Building (1979)
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 7
Unported License
8. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Software Architecture – Definitions [2]
According to Dr. Roy Thomas Fielding [Architectural Styles and
the Design of Network-based Software Architectures, 2000]:
A software architecture is an abstraction of the run-time
elements of a software system during some phase of its
operation. A system may be composed of many levels of
abstraction and many phases of operation,each with its own
software architecture.
A software architecture is defined by a configuration of
architectural elements - components, connectors, and data -
constrained in their relaionships in order to achieve a desired set
of architectural properties.
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 8
Unported License
9. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Software Architecture – Definitions [3]
According to Dr. Roy Thomas Fielding [Architectural Styles and
the Design of Network-based Software Architectures, 2000]:
An architectural style is a coordinated set of architectural
constraints that restricts the roles/features of architectural
elements and the allowed relationships among those elements
within any architecture that conforms to that style.
The primary distinction between Network-based architectures
and software architectures in general is that communication
between components is restricted to message passing, or the
equivalent of message passing if a more efficient mechanism can
be selected at runtime based on the location of components.
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 9
Unported License
10. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Architectural Properties
According to Dr. Roy Thomas Fielding [Architectural Styles and
the Design of Network-based Software Architectures, 2000]:
Performance
Scalability
Reliability
Simplicity
Extensibility
Dynamic evolvability
Cusomizability
Configurability
Visibility
All of them should be present in a desired Web Architecture
and REST architectural style tries to preserve them by
consistently applying several architectural constraints
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 10
Unported License
11. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Service Oriented Architecture (SOA) –
Definitions
Thomas Erl: SOA represents an open, agile, extensible,
federated, composable architecture comprised of autonomous,
QoS-capable, vendor diverse, interoperable, discoverable, and
potentially reusable services, implemented as Web services. SOA
can establish an abstraction of business logic and technology,
resulting in a loose coupling between these domains. SOA is an
evolution of past platforms, preserving successful characteristics
of traditional architectures, and bringing with it distinct principles
that foster service-orientation in support of a service-oriented
enterprise. SOA is ideally standardized throughout an enterprise,
but achieving this state requires a planned transition and the
support of a still evolving technology set
References: Erl, Thomas. Serviceorientation.org – About the Principles, 2005–06
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 11
Unported License
12. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
SOA == SOAP + WSDL?
Web Services are:
Semantic
Models
components for building distributed
applications in SOA architectural style
communicate using open protocols
are self-descriptive and self-content
can be searched and found using
UDDI or ebXML registries (and more
recent specifications – WSIL &
Semantic Web Services)
Mapping
WSDL
Messages
Source: http://en.wikipedia.org/wiki/File:Webservices.png, Author: H. Voormann
License: Creative Commons Attribution 3.0 Unported
WSDL
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 12
Unported License
13. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Service Oriented Architecture (SOA)
Java EE 6
Architecture
Source: http://en.wikipedia.org/wiki/File:SO A_Detailed_Diagram.png,
Author: JamesLWilliams2010, License: Creative Commons Attribution 3.0 Unported
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 13
Unported License
14. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
SOA Implemetation - Java SE/EE 7 APIs
According to Java™ EE Specification:
Web Services (SOAP)
Java API for XML Web Services (JAX-WS)
Java Architecture for XML Binding (JAXB)
SOAP with Attachments API for Java (SAAJ)
Java API for XML Registries (JAXR)
RESTful Web Services
Java API for RESTful Web Services - JAX-RS
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 14
Unported License
15. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Representational State Transfer (REST) [1]
REpresentational State Transfer (REST) is an architecture
for accessing distributed hypermedia web-services
The resources are identified by URIs and are accessed and
manipulated using an HHTP interface base methods (GET,
POST, PUT, DELETE, OPTIONS, HEAD, PATCH)
Information is exchanged using representations of these
resources
Lightweight alternative to SOAP+WSDL -> HTTP + Any
representation format (e.g. JavaScript™ Object Notation –
JSON)
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 15
Unported License
16. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Representational State Transfer (REST) [2]
Identification of resources – URIs
Representation of resources – e.g. HTML, XML, JSON, etc.
Manipulation of resources through these representations
Self-descriptive messages - Internet media type (MIME type)
provides enough information to describe how to process the
message. Responses also explicitly indicate their cacheability.
Hypermedia as the engine of application state (aka HATEOAS)
Application contracts are expressed as media types and
[semantic] link realtions (rel attribute - RFC5988, "Web Linking")
[Source: http://en.wikipedia.org/wiki/Representational_state_transfer]
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 16
Unported License
17. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Advantages of REST
Scalability of component interactions – through layering the client
server-communication and enabling load-balancing, shared
caching, security policy enforcement;
Generality of interfaces – allowing simplicity, reliability, security
and improved visibility by intermediaries, easy configuration,
robustness, and greater efficiency by fully utilizing the
capabilities of HTTP protocol;
Independent development and evolution of components,
dynamic evolvability of services, without breaking existing
clients.
Fault tolerat, Recoverable, Secure, Loosely coupled
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 17
Unported License
18. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Richardson's Maturity Model of Web Services
According to Leonard Richardson [Talk at QCon, 2008 -
http://www.crummy.com/writing/speaking/2008-QCon/act3.html]:
Level 0 – POX: Single URI (XML-RPC, SOAP)
Level 1 – Resources: Many URIs, Single Verb (URI Tunneling)
Level 2 – HTTP Verbs: Many URIs, Many Verbs (CRUD – e.g
Amazon S3)
Level 3 – Hypermedia Links Control the Application State =
HATEOAS (Hypertext As The Engine Of Application State)
=== truely RESTful Services
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 18
Unported License
19. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Is There A Level 4 for WebApp Maturity?
Considerations:
Command Query Responsibility Segregation (CQRS):
http://martinfowler.com/bliki/CQRS.html (gentle introduction by
Martin Fowler) & ReportingDatabases:
http://martinfowler.com/bliki/ReportingDatabase.html
A single representation type can not be optimal for both
reading (Query) and updating the application state
(Command)
We may prefer to model Query and Command as separate
resources / representation types
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 19
Unported License
20. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
What About Meta-Data?
Very important for a RESTful applications where resources and
resource states are dynamically discoverable / changeable
But what we have?
For SOAP services there is a WSDL (XML Schema based data
type descriptions)
REST should have the same -> Welcome WADL !
But is it really a good thing to have a static description of
dynamically changeable resources and valid resource state
change transitions?
Static model can be evil in a Live World!
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 20
Unported License
21. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Web Application Description Language (WADL)
XML-based file format providing machine-readable description
of HTTP-based web application resources – typically RESTful
web services
WADL is a W3C Member Submission
Multiple resources
Inter-connections between resources
HTTP methods that can be applied accessing each resource
Expected inputs, outputs and their data-type formats
XML Schema data-type formats for representing the RESTful
resources
But WADL resource description is static ... let's make it
dynamic!
Източник: http://en.wikipedia.org/wiki/File:Webservices.png, автор: H. Voormann
Лиценз: Creative Commons Attribution 3.0 Unported
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 21
Unported License
22. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
The New Kids on the Block: JSON, JSON Schema &
Hyper Schema, Microformats
There are good use cases for WADL (REST resource metadata
descriptions): automatic generation of client code & functional
REST service tests, client data validation, building of generic
REST clients.
WADL is XML (and relies on XML Schema Definitions) – this is
a limitation for JavaScript Clients
Welcome JSON Schema & JSON Hyper-Schema !
But there are also Microformats (XHTML Meta Data Profiles –
XMDP): e.g. hCard, hReview, hProduct, hCalendar ...
Talking about meta-data: W3C Resource Description
Framework (RDF) and Web Ontology Language (OWL)
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 22
Unported License
23. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Metadata-Representations Proposal (& Questions)
Meta-data can be very useful for generic REST clients and
agents crawling the Web!
Meta-data should be dynamically generated
... but can be more stable than the data it describes
Separation of data and meta-data representations (different
life-cycles – allows optional retrieval, caching)
Meta-data should be dynamically discoverable using hyper
links in resource representations (rel= type/ describedby/ lrdd?)
Separation of Command and Query representations ->
optimal representations for each task (possibly with separate
MIME types – application/vnd.*+json/xml?)
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 23
Unported License
24. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Java API for RESTful Web Service (JAX-RS 2.0)
Allows modelling (and more importantly decoupling) of RESTful
resource controllers, models and representations – enables
HATEOAS: Level 3 in Richardson WebApp Maturity Model
Resource Controllers are modelled as Plain Old Java Objects
(POJO) + declarative annotations mapping HTTP request &
response URIs / Headers / Body / Parameters / Cookies/ to
Java Classes / Methods / Method Arguments / Sub-resources
Models are again POJO + (eventually) some XML / JSON
mapping annotations – e.g. JAX-B / Jackson / Jettison / MOXy
Representations – custom HATEOAS resource
representations can be easily build using provided Link class
and @XmlJavaTypeAdapter(JaxbAdapter.class) annotation
Източник: http://Licensed en.wikipedia.under org/the wiki/Creative File:Commons Webservices.Attribution-png, автор: NonCommercial-H. Voormann
NoDerivs 3.0 Slide 24
Лиценз: Creative Unported Commons License
Attribution 3.0 Unported
25. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Java API for RESTful Web Service (JAX-RS)
Packages: javax.ws.rs, javax.ws.rs.core, javax.ws.rs.ext
Basic annotations:
@Path
@PathParam
@QueryParam
@FormParam
@HeaderParam
@CookieParam
@MatrixParam
@DefaultValue
@Encoded
@Produces
@Consumes,
@HttpMethod
@GET
@POST
@PUT
@DELETE
@Provider
@Context
Източник: http://en.wikipedia.org/wiki/File:Webservices.png, автор: H. Voormann
Лиценз: Creative Commons Attribution 3.0 Unported
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 25
Unported License
26. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Implementing REST Resources using JAX-RS [1]
@Stateless
@Path("courses")
@TransactionManagement(TransactionManagementType.BEAN)
public class CoursesResource extends
AbstractFacade<Course> {
@PersistenceContext(unitName = "IPTCourseManagerPU")
private EntityManager em;
@Context
private UriInfo context;
@Resource
UserTransaction utx;
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 26
Unported License
27. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Implementing REST Resources using JAX-RS [2]
@POST
@Consumes({"application/json", "application/xml"})
public Response createCourse(Course entity){
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 27
Unported License
try {
utx.begin();
super.create(entity);
utx.commit();
return
Response.created(UriBuilder.fromUri(context.getAbsolutePa
th()).path(entity.getId().toString()).build()).build();
} catch (Exception ex) {
throw new WebApplicationException(ex);
}
}
28. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Implementing REST Resources using JAX-RS [3]
@GET
@Produces({"application/xml", "application/json"})
public CoursesRepresentation getAllCourses() {
return new CoursesRepresentation(super.findAll());
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 28
Unported License
}
@Path("{id}")
public CourseResource getCourseResource(
@PathParam("id") Integer id) {
return new CourseResource(id, em, utx);
}
Sub-resource
29. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Novelties in JAX-RS 2.0 by Example:
IPT Polling Demo
You can clone (or download) IPT RESTful Polling Demo at GitHub:
https://github.com/iproduct/IPT-Polling-Demo-JAXRS20-HATEOAS
The demo shows how to integrate multiple Java EE 7 technologies:
EJB 3.1, CDI 1.1, JPA 2 + EclipseLink, JTA, Bean Validation.
It is a Maven project and can be deployed as Web application
(.WAR) or started from command line, as simple as:
mvn embedded-glassfish:run (in project's root folder)
I demonstrates also how to develelop functional/integration tests
using embedded GlassFish 4 and maven-surefire / maven-failsafe
plugins; to start the integration tests from command line: mvn verify
There is also a project Wiki page discussing the details of the demo:
https://github.com/iproduct/IPT-Polling-Demo-JAXRS20-HATEOAS/wiki
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 29
Unported License
34. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Some Open Source WS Implementation Stacks
Glassfish Metro – http://metro.java.net/ – JAX-WS (SOAP
+ WSDL) Reference Implementation
Glassfish Jersey – http://jersey.java.net/ – JAX-RS
(JSR 311) Reference Implementation for building
RESTful Web services
RESTEasy – http://resteasy.jboss.org/ – JBoss JAX-RS
implementation
Apache CXF – http://cxf.apache.org/ – JAX-WS & JAX-RS
Apache Axis 2 – http://axis.apache.org/axis2/java/core/ –
SOAP & REST web services
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 34
Unported License
35. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
JAX-RS 2.0: Standardized REST Client API
Java Client API is important for:
RESTful services integration – building composite RESTful
services and server-side mashups
Functional & integration testing of web applications – using JUnit/
TestNG for testing integration scenarios
Load / Perfomance / Stress testing of REST services
Building GUI clients – could utilize rich interface capabilities of
Swing & Java FX
Before Java EE 7 each of JAX-RS implementations had its
own client API
Now the client code can be standardized and portable between
implementations
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 35
Unported License
36. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Standardized REST Client API Example (1)
public class PollsResourceTest {
public static final String BASE_URI =
"http://localhost:8080/polling/resources/polls";
private static WebTarget target;
...
@BeforeClass
public static void setUpClass() {
// Initialize base REST client and target
URI uri = UriBuilder.fromUri(BASE_URI).build();
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
target = client.target(uri);
setupResources();
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 36
Unported License
}
38. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Standardized REST Client API Example (3)
@Test
public void testGetAllPollsJSONReturnsNotNull() {
List<Poll> allPolls = target.request(APPLICATION_JSON)
.get(new GenericType<List<Poll>>(){});
assertNotNull(allPolls);
}
@Test
public void testGetPollByIdReturns404ForNonexisitingResource() {
Response resp =target.path(Long.toString(NONEXISTING_POLL_ID))
.request(APPLICATION_JSON).get();
assertEquals("Status code not 404", 404, resp.getStatus());
assertThat("Response does not contain espected string: '" ,
resp.readEntity(String.class), containsString(
NONEXISTING_POLL_ID + " does not exist"));
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 38
Unported License
}
39. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Asynchronous HTTP Request Processing
Allows for efficient non-blocking concurrency
Useful for long running business operations – e.g. DB queries
AsyncResponse generation can be suspended till results are
ready and then resumed
Both client and server side APIs available
Different types of callback listeners can be registered to
suspended response on server side:
ResumeCallback – onResume() method
CompletionCallback – onComplete(), onError() methods
ConnectionCallback – onDisconnect() method
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 39
Unported License
40. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
AsyncResponse Main Methods
boolean cancel(Date retryAfter) – cancels processing
boolean isCancelled() - checks if processing canceled
boolean isDone() - checks if processing finished
Collection<Class<?>> register(Class<?> callback)
Collection<Class<?>> register(Object callback) - register
asynchronous processing callback
boolean resume(Object response) – resume suspended resp.
boolean resume(Throwable response) – resume + exception
boolean setTimeout(long time, TimeUnit unit) – set timeout
void setTimeoutHandler(TimeoutHandler handler)
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 40
Unported License
41. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Asynch Server-Side Processing Example (1)
@GET @Produces(value = {APPLICATION_XML, APPLICATION_JSON})
@Asynchronous
public void getAllPolls(@Suspended final AsyncResponse
asyncResponse) {
asyncResponse.setTimeoutHandler(
(AsyncResponse aResp) -> {
if(isBusy()) aResp.resume(
new WebApplicationException(
"Server is too busy. Try again later.",
SERVICE_UNAVAILABLE));
//aResp.cancel(300);
else aResp.setTimeout(10, SECONDS);
});
asyncResponse.setTimeout(10, TimeUnit.SECONDS);
asyncResponse.resume(doGetAllPolls(selfLink));
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 41
Unported License
}
45. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Declarative Validation Using Bean Validation 1.1
Method parameters:
@GET
@Path("/{id}")
@Produces({APPLICATION_XML, APPLICATION_JSON})
public Response getPollById(
@PathParam("id") @NotNull @Min(1) Long id) { ... }
Beans fields & properties:
@NotNull
@Size(min = 1, max = 255)
@Email
@Basic(optional = false)
private String email;
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 45
Unported License
46. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Declarative Validation Using Bean Validation 1.1
Declarative validation annotations can be attached to:
Request entity body
@POST
@Consumes({APPLICATION_XML, APPLICATION_JSON})
public Response addPoll(@Valid Poll poll) { ... }
Response entity:
@GET
@Path("/count")
@Produces(TEXT_PLAIN)
@Pattern(regexp = "d+")
public String getPollsCount() {
return Integer.toString(pollController.getPollCount());
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 46
Unported License
}
47. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Improved Server-Suggested Content Negotiation
Client driven content negotiation has been traditional capability
of HTTP protocol – for example:
GET /polling/resources/polls HTTP/1.1
Host: localhost:8080
Accept: application/xml; q=0.5, application/json; q=0.4
Cache-Control: no-cache
But when client does not specify Accept header preference?
- Server can:
@GET
@Produces(value = {APPLICATION_XML + "; qs=0.75",
APPLICATION_JSON + "; qs=0.9"})
public Collection<Poll> getAllPolls() { ...}
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 47
Unported License
48. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Filters & Interceptors – Client & Server
Aspect-oriented extensibility of request/response processing
Resource Filters – very similar to “classical” HttpServlet filters, non
wrapping, do not invoke next processors in the chain directly, can filter
HttpRequest (ContainerRequestFilter, ClientRequestFilter) or
HttpResponse (ContainerResponseFilter, ClientResponseFilter). can
bypass the next filters and resources by calling:
ContainerRequestContext.abortWith(javax.ws.rs.core.Response)
Resource Interceptors – they “wrap” the call to the entity readers/writers
by explicitly calling [Reader/Writer]InterceptorContext.proceed() to pass
the input stream or entity body read / written by next interceptor / resource/
sub-resource method in the chain.
Filters & interceptors can manipulate headers and entity body. The main
difference is that filters can change the requested resource URI (if
@PreMatching), while interceptors can not (they are executed after
resource processing method has been matched).
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 48
Unported License
49. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Filters & Interceptors – Client & Server
Aspect-oriented extensibility of request/response processing
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 49
Unported License
52. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
@Logged + @NameBinding Example (1)
@NameBinding
@Retention(value = RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Logged {
}
@GET
@Logged
@Profiled
@Path("/{id}")
@Produces({APPLICATION_XML, APPLICATION_JSON})
public Response getPollById(
@PathParam("id") @NotNull @Min(1) Long id) { ... }
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 52
Unported License
53. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
AddSelfLinkInterceptor Example (1)
@Provider
@SelfLinked
public class AddSelfLinkInterceptor implementsWriterInterceptor{
@Context UriInfo uriInfo;
@Override
public void aroundWriteTo(WriterInterceptorContext
responseContext)throws WebApplicationException, IOException{
List<Object> links = responseContext.getHeaders().get("Link");
if(links == null) links = new ArrayList<>();
links.add("<" + uriInfo.getAbsolutePath() + ">; rel=self");
responseContext.getHeaders().put("Link", links);
responseContext.proceed();
}
}
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 53
Unported License
54. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Dynamic extension registration using
DynamicFeature interface
Allows dynamic programmatic registration of post-matching
providers during JAX-RS setup at deployment time
public void configure(ResourceInfo resourceInfo,
FeatureContext context) method called for each resource
allows to dynamically decide during application configuration
phase which ContainerRequestFilter,
ContainerResponseFilter, ReaderInterceptor,
WriterInterceptor, and Feature classes to register for that
resource / subresource class / method (based on annotations
provided for the method for example)
May be annotated with @Provider annotation to be
dynamically discovered
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 54
Unported License
55. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
DynamicFeature Example (1)
@Provider
public class SelfLinkingDynamicFeature implements DynamicFeature{
@Override
public void configure(ResourceInfo resourceInfo,
FeatureContext context) {
if(resourceInfo.getResourceMethod()
.isAnnotationPresent(GET.class)
||resourceInfo.getResourceMethod()
.isAnnotationPresent(POST.class) ){
context.register(AddSelfLinkInterceptor.class);
}
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 55
Unported License
}
}
56. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Hypermedia As The Engine Of Application State
(HATEOAS) – Document Links Example (1)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="poll")
public class PollRepresentationDocumentLinks {
private Long id;
private PollStatus status = PollStatus.CREATED;
private String title; private String question;
private Date start; private Date end;
@XmlElementWrapper(name = "_embedded")
@XmlElement(name = "alternative")
private List<Alternative> alternatives;
@XmlElementWrapper(name = "_links")
@XmlElement(name = "link")
@XmlJavaTypeAdapter(JaxbAdapter.class)
private Collection<Link> links;
...
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 56
Unported License
57. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Hypermedia As The Engine Of Application State
(HATEOAS) – New Link Header (RFC 5988) (2)
Response resp = Response.ok(
new PollRepresentationHeaderLinks(poll))
.links(links.toArray(new Link[]{}));
Content-Length →1656
Content-Type →application/xml
Link →<http://localhost:8080/polling/resources/polls/629>; rel="prev";
type="application/json"; title="Previous poll",
<http://localhost:8080/polling/resources/polls/632>; rel="next";
type="application/json"; title="Next poll",
<http://localhost:8080/polling/resources/polls>; rel="collection";
type="application/json"; title="Polls collection",
<http://localhost:8080/polling/resources/polls>; rel="collection up";
type="application/json"; title="Root resource",
<http://localhost:8080/polling/resources/polls/630>; rel="self";
type="application/json"; title="Self link",
<http://localhost:8080/polling/resources/polls/630>; rel=self
Server →GlassFish Server Open Source Edition 4.1
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 57
Unported License
58. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Want to Learn More?
Welcome to IPT Java™ trainings [http://iproduct.org/]:
Programming in Java Language - 3 modules
Web Programming with Java Technology: Servlet 3.1, JSP, JSTL, EL, JSF
2.2, Facelets & Templating, AJAX, JSON, WebSocket, SSE, WebRTC
Java Enterprise Technologies (Java EE 7) – EJB 3.2, JSF 2.2, JAX-RS 2.0,
Web Services, WebSocket, JMS, CDI, Bean Validation, JPA, JTA, Batch
and Concurrency
Service Oriented Architecture (SOA) & Contemporary Standards for
Business Process Modeling (BPM) – Apache AXIS 2 & CXF, Glassfish
Metro & Jersey, JBoss RESTEasy, SoapUI & Service Testing, SOAP,
WSDL 2.0, WS-*, SOA, SCA, SDO, BPMN, WS-BPEL
Java™ Portlet Development with JSR 286: Portlet 2.0 API, Liferay® 6 &
GateIn 3 – JSP™, JSF 2.2, Spring & AJAX Portlets
Oracle®, Java™ and JavaScript™ are trademarks or registered trademarks of Oracle and/or its affiliates.
Liferay® is a registered trademark of Liferay, Inc. Other names may be trademarks of their respective owners.
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 58
Unported License
59. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
References
R. Fielding, Architectural Styles and the Design of Networkbased
Software Architectures, PhD Thesis, University of California, Irvine,
2000
Fielding's blog discussing REST –
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
Representational state transfer (REST) in Wikipedia –
http://en.wikipedia.org/wiki/Representational_state_transfer
Hypermedia as the Engine of Application State (HATEOAS) in
Wikipedia – http://en.wikipedia.org/wiki/HATEOAS
JavaScript Object Notation (JSON) – http://www.json.org/
JAX-RS 2.0 (JSR 339) Reference Implementation for building
RESTful Web services – http://jersey.java.net/
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 59
Unported License
60. IPT – Intellectual Products & Technologies
Trayan Iliev, http://www.iproduct.org/
BGOUG Meeting – Pravets
November 14, 2014
Thanks for Your Attention!
Questions?
Licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Slide 60
Unported License