SlideShare une entreprise Scribd logo
Jakarta EE 8
Principales Nouveautés
Jakarta EE 8
Les nouveautés
2
Historique
3
Usage de Jakarta EE
4
Serveurs d’applications Microservices
Les grandes familles de nouveautés
5
●Rafraîchissement global
Prise en compte Java SE 8, alignement entres modules
●Intégration des nouveaux standards Web
Server Sent Events
JSON-Patch
●Nouveaux modules
Security
Server Sent Events
6
Permet de faire du push
●Plus rustique que les web sockets mais HTTP
●Unidirectionnel (Serveur vers client)
●Connexion HTTP non fermée
●Content-Type « text/event-stream »
●Messages séparés par nn
event: stock
id: 1
data: {"dateTime":"2019-02-21T18:06:00.285","id":1,
"name":"GOOG","price":75.7119}
2 nouvelles classes JAX-RS
7
Sse
●Classe utilitaire sert à créer des messages et des broadcasters
●Injecté avec @Context
●Pas de contrainte (variable de classe, paramètre)
●SseEventSink
●Représente une connexion (HTTP) à un client précis
●Injecté avec @Context
●Uniquement en paramètre de méthode de type « SSE »
Server Sent Events : API Java
8
@Path("prices")
public class StockTicker {
@Resource private ManagedExecutorService executor;
@Context private Sse sse;
@GET @Produces(MediaType.SERVER_SENT_EVENTS)
public void getQuotes(@Context SseEventSink sink) {
executor.execute(() -> {
...
sink.send(sse.newEvent(stockqoute));
...
});
}
}
Server Sent Events : SseBroadcaster
9
Broadcast à plusieurs clients (SseEventSink)
1.this.sseBroadcaster = sse.newBroadcaster();
2.this.sseBroadcaster.register(sseEventSink);
3.this.sseBroadcaster.broadcast(sseEvent);
JSON-Patch
10
Règle le problème de la mise à jour partielle
●Modifie une partie d’un document JSON
●S’utilise conjointement avec HTTP Patch
●RFC : https://tools.ietf.org/html/rfc6902
●6 opérations
●add
●replace
●remove
●move
●copy
●test
JSON-Patch : Exemple
11
{
"baz": "qux",
"foo": "bar"
}
{
"baz": "boo",
"hello": ["world"]
}
[
{ "op": "replace", "path": "/baz", "value": "boo" },
{ "op": "add", "path": "/hello", "value": ["world"] },
{ "op": "remove", "path": "/foo" }
]
JSON-Patch : API Java
12
JsonPatchBuilder builder = new JsonPatchBuilder();
JsonArray result = builder.replace("/0/phones/mobile",
"650-111-2222")
.remove("/1")
.apply(target);
Java EE Security
13
La sécurité est l’aspect le moins standardisé de Java EE
●Pourtant beaucoup de standards JASPIC, JAAC, JAAS
●Mais les pratiques et les mécanismes évoluent vite
●Un bout coté application, un autre coté serveur
●Avant Java EE 8, la définition du stockage des utilisateurs n’était pas
portable
Java EE Security : le principe
14
●Définition de l’IdentityStore
●@DataBaseIdentityStoreDefinition
●@LdapIdentityStoreDefinition
●Ou personnalisé
●Définition de l’AuthenticationMechanism
●@BasicAuthenticationMechanismDefinition
●@FormAuthenticationMechanismDefinition
●Ou personnalisé
IdentityStore par configuration
15
@DataBaseIdentityStoreDefinition (
dataSourceLookup="java:global/primaryDB",
callerQuery=
"SELECT password FROM usr WHERE username=?",
groupsQuery="SELECT role FROM roles where
username=?", ...)
@LdapIdentityStoreDefinition(
url = "ldap://localhost:33389/",
callerBaseDn = "ou=caller,dc=jsr375,dc=net",
groupSearchBase = "ou=group,dc=jsr375,dc=net"
)
Security : Custom IdentityStore
16
@ApplicationScoped
public class MyIdentityStore implements IdentityStore {
@Override
public CredentialValidationResult validate(
Credential credential) {
// Validate credentials using the user service.
}
}
AuthenticationMechanism
17
@FormAuthenticationMechanismDefinition(
loginToContinue = @LoginToContinue(
loginPage="/login-servlet",
errorPage="/error",
useForwardToLoginExpression="$
{appConfig.forward}"
)
)
Security : Custom Mechanism
18
@ApplicationScoped
public class MyAM implements HttpAuthenticationMechanism {
@Inject
private IdentityStoreHandler idStoreHandler;
@Override
public AuthenticationStatus
validateRequest(HttpServletRequest req, HttpServletResponse res,
HttpMessageContext context) {
CredentialValidationResult result =
idStoreHandler.validate(new UsernamePasswordCredential(
req.getParameter("name"), req.getParameter("password")));
if (result.getStatus() == VALID) {
return context.notifyContainerAboutLogin(result);
} else {
return context.responseUnauthorized();
}
}
}
Merci

Contenu connexe

PPTX
MIC QRS "JWT, la superstar pour sécuriser vos WebAPI"
Denis Voituron
 
PPTX
Introduction à Angular JS
Antoine Rey
 
ODP
LemonLDAP::NG et le support SAML2
Clément OUDOT
 
PDF
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
PPTX
Workshop Spring - Session 1 - L'offre Spring et les bases
Antoine Rey
 
PDF
Sécurité MySQL
Damien Seguy
 
PDF
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
PPTX
Retours Devoxx France 2016
Antoine Rey
 
MIC QRS "JWT, la superstar pour sécuriser vos WebAPI"
Denis Voituron
 
Introduction à Angular JS
Antoine Rey
 
LemonLDAP::NG et le support SAML2
Clément OUDOT
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Antoine Rey
 
Sécurité MySQL
Damien Seguy
 
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
Retours Devoxx France 2016
Antoine Rey
 

Tendances (20)

ODP
LemonLDAP::NG et le support SAML2 (RMLL 2010)
Clément OUDOT
 
PPTX
Introduction à ajax
Abdoulaye Dieng
 
PDF
Agenda formation OpenAM
Pascal Flamand
 
PPTX
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
PDF
Introduction aux Web components (DNG Consulting)
DNG Consulting
 
PPTX
Marzouk jsp
abderrahim marzouk
 
PPT
Présentation GWT et HTML 5 pour l'Offline
DNG Consulting
 
PPTX
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
MongoDB
 
PDF
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
PPTX
Quoi de neuf à Devoxx France 2017 ?
Antoine Rey
 
PDF
Mettez du temps réel dans votre Drupal avec Node JS
Matthieu Guillermin
 
PPTX
Workshop Spring - Session 5 - Spring Integration
Antoine Rey
 
PPTX
WebSocket avec Java EE 7
Florian Beaufumé
 
PDF
Agenda formation OpenIdm
Pascal Flamand
 
PDF
Node.js et les nouvelles technologies javascript
Khalid Jebbari
 
PDF
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Nuxeo
 
PPTX
Workshop Spring - Session 4 - Spring Batch
Antoine Rey
 
PPTX
2014.12.11 - TECH CONF #3 - Présentation Node.js
TelecomValley
 
PDF
Tp java ee.pptx
Eric Bourdet
 
PDF
Architecture java j2 ee a partager
aliagadir
 
LemonLDAP::NG et le support SAML2 (RMLL 2010)
Clément OUDOT
 
Introduction à ajax
Abdoulaye Dieng
 
Agenda formation OpenAM
Pascal Flamand
 
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
Introduction aux Web components (DNG Consulting)
DNG Consulting
 
Marzouk jsp
abderrahim marzouk
 
Présentation GWT et HTML 5 pour l'Offline
DNG Consulting
 
Plus de flexibilité et de scalabilité chez Bouygues Télécom grâce à MongoDB
MongoDB
 
Support Web Services SOAP et RESTful Mr YOUSSFI
ENSET, Université Hassan II Casablanca
 
Quoi de neuf à Devoxx France 2017 ?
Antoine Rey
 
Mettez du temps réel dans votre Drupal avec Node JS
Matthieu Guillermin
 
Workshop Spring - Session 5 - Spring Integration
Antoine Rey
 
WebSocket avec Java EE 7
Florian Beaufumé
 
Agenda formation OpenIdm
Pascal Flamand
 
Node.js et les nouvelles technologies javascript
Khalid Jebbari
 
Importer des données dans Nuxeo Platform - Nuxeo Tour 2014 - workshop
Nuxeo
 
Workshop Spring - Session 4 - Spring Batch
Antoine Rey
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
TelecomValley
 
Tp java ee.pptx
Eric Bourdet
 
Architecture java j2 ee a partager
aliagadir
 
Publicité

Similaire à Les Z'ApéroTech Toulouse #2 - Présentation des nouveautés de JakartaEE 8 (20)

PDF
HTML5, Spring, NoSQL et mobilité
Julien Dubois
 
PDF
12-Factor
Luc Juggery
 
PDF
Audit Applications Javaee Solutions Linux Ow2
OW2
 
PDF
Audit Applications Javaee Solutions Linux Ow2
Catherine Nuel
 
PPTX
HTML5 en projet
Normandy JUG
 
PDF
De l'Open Source à l'Open API (in French)
Restlet
 
PPTX
Symfony with angular.pptx
Esokia
 
PDF
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
Horacio Gonzalez
 
PPTX
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier
 
PPTX
Java dans Windows Azure: l'exemple de Jonas
Microsoft
 
ODP
REST JUG Toulouse 20100615
JUG Toulouse
 
KEY
Introduction aux RIA (Rich Internet Applications)
Tugdual Grall
 
PDF
La plateforme de services dynamiques OSGi
Didier Donsez
 
PDF
Panel de solutions javascript
jp_mouton
 
PDF
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
 
PDF
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Julien Dubois
 
PDF
Play framework - Human Talks Grenoble - 12.02.2013
Xavier NOPRE
 
PDF
Nouveau look pour une nouvelle vie, version spéciale Ippon
Julien Dubois
 
ODP
#2 Architecture OSGi
Guillaume Sauthier
 
PPTX
Aperçu de RequireJS
VISEO
 
HTML5, Spring, NoSQL et mobilité
Julien Dubois
 
12-Factor
Luc Juggery
 
Audit Applications Javaee Solutions Linux Ow2
OW2
 
Audit Applications Javaee Solutions Linux Ow2
Catherine Nuel
 
HTML5 en projet
Normandy JUG
 
De l'Open Source à l'Open API (in French)
Restlet
 
Symfony with angular.pptx
Esokia
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
Horacio Gonzalez
 
Java dans Windows Azure, l'exemple de JOnAS
Guillaume Sauthier
 
Java dans Windows Azure: l'exemple de Jonas
Microsoft
 
REST JUG Toulouse 20100615
JUG Toulouse
 
Introduction aux RIA (Rich Internet Applications)
Tugdual Grall
 
La plateforme de services dynamiques OSGi
Didier Donsez
 
Panel de solutions javascript
jp_mouton
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et Mobile
Ippon
 
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Julien Dubois
 
Play framework - Human Talks Grenoble - 12.02.2013
Xavier NOPRE
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Julien Dubois
 
#2 Architecture OSGi
Guillaume Sauthier
 
Aperçu de RequireJS
VISEO
 
Publicité

Plus de DocDoku (14)

PDF
Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019
DocDoku
 
PDF
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
DocDoku
 
PDF
Les ZAPeroTech #4 : découverte de Flutter
DocDoku
 
PDF
Les ZAPeroTech #3 : à la découverte de NBitcoin en C#
DocDoku
 
PDF
Les ZAperoTech #3 : présentation AWS IoT Greengrass
DocDoku
 
PDF
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle
DocDoku
 
PDF
Les Z'ApéroTech Toulouse #2 - Présentation Garden Helaer
DocDoku
 
PDF
DocDokuPLM: Domain Specific PaaS and Business Oriented API
DocDoku
 
PDF
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDoku
 
PDF
Présentation DocDoku
DocDoku
 
PDF
Generic Open Source PLM solution
DocDoku
 
PPTX
DocDoku - Mobile Monday Toulouse 1ère : la NFC
DocDoku
 
PDF
DocDoku - Les enjeux du back-office mobile
DocDoku
 
PDF
Strategies et developpements mobiles multi-plates-formes.
DocDoku
 
Meetup Aperotech 4 : retour d'expérience Oracle Code One 2019
DocDoku
 
Les ZAPeroTech #4 : REX Oracle Code One 2019 sur l'éco-système Java
DocDoku
 
Les ZAPeroTech #4 : découverte de Flutter
DocDoku
 
Les ZAPeroTech #3 : à la découverte de NBitcoin en C#
DocDoku
 
Les ZAperoTech #3 : présentation AWS IoT Greengrass
DocDoku
 
Les Z'ApéroTech Toulouse #2 - Présentation de l'agilité à l'échelle
DocDoku
 
Les Z'ApéroTech Toulouse #2 - Présentation Garden Helaer
DocDoku
 
DocDokuPLM: Domain Specific PaaS and Business Oriented API
DocDoku
 
DocDokuPLM presentation - OW2Con 2015 Community Award winner
DocDoku
 
Présentation DocDoku
DocDoku
 
Generic Open Source PLM solution
DocDoku
 
DocDoku - Mobile Monday Toulouse 1ère : la NFC
DocDoku
 
DocDoku - Les enjeux du back-office mobile
DocDoku
 
Strategies et developpements mobiles multi-plates-formes.
DocDoku
 

Les Z'ApéroTech Toulouse #2 - Présentation des nouveautés de JakartaEE 8

  • 2. Jakarta EE 8 Les nouveautés 2
  • 4. Usage de Jakarta EE 4 Serveurs d’applications Microservices
  • 5. Les grandes familles de nouveautés 5 ●Rafraîchissement global Prise en compte Java SE 8, alignement entres modules ●Intégration des nouveaux standards Web Server Sent Events JSON-Patch ●Nouveaux modules Security
  • 6. Server Sent Events 6 Permet de faire du push ●Plus rustique que les web sockets mais HTTP ●Unidirectionnel (Serveur vers client) ●Connexion HTTP non fermée ●Content-Type « text/event-stream » ●Messages séparés par nn event: stock id: 1 data: {"dateTime":"2019-02-21T18:06:00.285","id":1, "name":"GOOG","price":75.7119}
  • 7. 2 nouvelles classes JAX-RS 7 Sse ●Classe utilitaire sert à créer des messages et des broadcasters ●Injecté avec @Context ●Pas de contrainte (variable de classe, paramètre) ●SseEventSink ●Représente une connexion (HTTP) à un client précis ●Injecté avec @Context ●Uniquement en paramètre de méthode de type « SSE »
  • 8. Server Sent Events : API Java 8 @Path("prices") public class StockTicker { @Resource private ManagedExecutorService executor; @Context private Sse sse; @GET @Produces(MediaType.SERVER_SENT_EVENTS) public void getQuotes(@Context SseEventSink sink) { executor.execute(() -> { ... sink.send(sse.newEvent(stockqoute)); ... }); } }
  • 9. Server Sent Events : SseBroadcaster 9 Broadcast à plusieurs clients (SseEventSink) 1.this.sseBroadcaster = sse.newBroadcaster(); 2.this.sseBroadcaster.register(sseEventSink); 3.this.sseBroadcaster.broadcast(sseEvent);
  • 10. JSON-Patch 10 Règle le problème de la mise à jour partielle ●Modifie une partie d’un document JSON ●S’utilise conjointement avec HTTP Patch ●RFC : https://tools.ietf.org/html/rfc6902 ●6 opérations ●add ●replace ●remove ●move ●copy ●test
  • 11. JSON-Patch : Exemple 11 { "baz": "qux", "foo": "bar" } { "baz": "boo", "hello": ["world"] } [ { "op": "replace", "path": "/baz", "value": "boo" }, { "op": "add", "path": "/hello", "value": ["world"] }, { "op": "remove", "path": "/foo" } ]
  • 12. JSON-Patch : API Java 12 JsonPatchBuilder builder = new JsonPatchBuilder(); JsonArray result = builder.replace("/0/phones/mobile", "650-111-2222") .remove("/1") .apply(target);
  • 13. Java EE Security 13 La sécurité est l’aspect le moins standardisé de Java EE ●Pourtant beaucoup de standards JASPIC, JAAC, JAAS ●Mais les pratiques et les mécanismes évoluent vite ●Un bout coté application, un autre coté serveur ●Avant Java EE 8, la définition du stockage des utilisateurs n’était pas portable
  • 14. Java EE Security : le principe 14 ●Définition de l’IdentityStore ●@DataBaseIdentityStoreDefinition ●@LdapIdentityStoreDefinition ●Ou personnalisé ●Définition de l’AuthenticationMechanism ●@BasicAuthenticationMechanismDefinition ●@FormAuthenticationMechanismDefinition ●Ou personnalisé
  • 15. IdentityStore par configuration 15 @DataBaseIdentityStoreDefinition ( dataSourceLookup="java:global/primaryDB", callerQuery= "SELECT password FROM usr WHERE username=?", groupsQuery="SELECT role FROM roles where username=?", ...) @LdapIdentityStoreDefinition( url = "ldap://localhost:33389/", callerBaseDn = "ou=caller,dc=jsr375,dc=net", groupSearchBase = "ou=group,dc=jsr375,dc=net" )
  • 16. Security : Custom IdentityStore 16 @ApplicationScoped public class MyIdentityStore implements IdentityStore { @Override public CredentialValidationResult validate( Credential credential) { // Validate credentials using the user service. } }
  • 18. Security : Custom Mechanism 18 @ApplicationScoped public class MyAM implements HttpAuthenticationMechanism { @Inject private IdentityStoreHandler idStoreHandler; @Override public AuthenticationStatus validateRequest(HttpServletRequest req, HttpServletResponse res, HttpMessageContext context) { CredentialValidationResult result = idStoreHandler.validate(new UsernamePasswordCredential( req.getParameter("name"), req.getParameter("password"))); if (result.getStatus() == VALID) { return context.notifyContainerAboutLogin(result); } else { return context.responseUnauthorized(); } } }
  • 19. Merci