IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

Vous �tes nouveau sur Developpez.com ? Cr�ez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et �tre connect� pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Cr�ez-en un en quelques instants, c'est enti�rement gratuit !

Si vous disposez d�j� d'un compte et qu'il est bien activ�, connectez-vous � l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oubli� ?
Cr�er un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Spring 5.0 M2 est disponible, le conteneur l�ger Java apporte un nouveau framework web fonctionnel
Qui est bas� sur la programmation r�active

Le , par Annonces

2.4KPARTAGES

7  0 
Juergen Hoeller, ing�nieur principal chez Pivotal Inc et leader du projet Spring Framework, a annonc� la sortie de Spring 5.0 M2, le conteneur l�ger pour construire et d�finir l�infrastructure d�une application Java.

Pour rappel, dans le document Introduction au framework Spring, Erik Gollot avan�ait que Spring est effectivement un conteneur dit � l�ger �, c�est-�-dire une infrastructure similaire � un serveur d'applications Java EE. Il prend donc en charge la cr�ation d�objets et la mise en relation d�objets par l�interm�diaire d�un fichier de configuration qui d�crit les objets � fabriquer et les relations de d�pendances entre ces objets. Le gros avantage par rapport aux serveurs d�application est qu�avec Spring, les classes n�ont pas besoin d�impl�menter une quelconque interface pour �tre prises en charge par le framework (au contraire des serveur d'applications Java EE et des EJBs). C�est en ce sens que Spring est qualifi� de conteneur � l�ger �.

Cette version apporte un nouveau framework web fonctionnel qui est bas� sur la programmation r�active qui a �t� apport�e dans Spring 5.0 M1. C�est Arjen Poutsma, un ing�nieur qui fait �galement partie du projet, qui s�est charg� de pr�senter quelques extraits des b�n�fices de ce framework avec l��chantillon d�application qui est disponible sur GitHub. Ci-dessous, un d�p�t r�actif qui expose des objets Person. Il ressemble en de nombreux points � un d�p�t traditionnel non r�actif, en dehors du fait qu�il retourne Flux<Person> o� vous aurez retourn� List<Person> et Mono<Person> o� vous aurez retourn� Person. Ici Mono<Void> est utilis� en guise de compl�tion du signal afin de signaler lorsque la sauvegarde est termin�e.

Code : S�lectionner tout
1
2
3
4
5
public interface PersonRepository {
  Mono<Person> getPerson(int id);
  Flux<Person> allPeople();
  Mono<Void> savePerson(Mono<Person> person);
}
Voici comment est expos� ce d�p�t avec le nouveau framework web fonctionnel :

Code : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
RouterFunction<?> route = route(GET("/person/{id}"),
  request -> {
    Mono<Person> person = Mono.justOrEmpty(request.pathVariable("id"))
      .map(Integer::valueOf)
      .then(repository::getPerson);
    return Response.ok().body(fromPublisher(person, Person.class));
  })
  .and(route(GET("/person"),
    request -> {
      Flux<Person> people = repository.allPeople();
      return Response.ok().body(fromPublisher(people, Person.class));
    }))
  .and(route(POST("/person"),
    request -> {
      Mono<Person> person = request.body(toMono(Person.class));
      return Response.ok().build(repository.savePerson(person));
    }));
Et voici comment il est ex�cut�, dans le cas d�esp�ce dans Reactor Netty :

Code : S�lectionner tout
1
2
3
4
5
HttpHandler httpHandler = RouterFunctions.toHttpHandler(route);
ReactorHttpHandlerAdapter adapter =
  new ReactorHttpHandlerAdapter(httpHandler);
HttpServer server = HttpServer.create("localhost", 8080);
server.startAndAwait(adapter);
Les composantes principales du framework sont sont HandlerFunction, RouterFunction et FilterFunction.

HandlerFunction : le point de d�part de ce nouveau framework est HandlerFunction<T>, qui est essentiellement une Function<Request, Response<T>>, o� Request et Response sont des interfaces nouvellement d�finies et non permutables qui offrent un DSL JDK-8 friendly aux messages HTTP sous-jacents. Voici un exemple simple d�une HandlerFunction qui retourne une r�ponse avec un statut 200.

Code : S�lectionner tout
1
2
HandlerFunction<String> helloWorld =
  request -> Response.ok().body(fromObject("Hello World"));
RouterFunction : les requ�tes entrantes sont achemin�es vers les HandlerFunction par une RouterFunction<T>. Les objectifs de la RouterFunction pr�sentent des similitudes � ceux de l�annotation @RequestMapping mais RouterFunction offre plus de flexibilit�. Notons que deux fonctions d�acheminement peuvent composer une nouvelle fonction d�acheminement. Dans ce cas, cette nouvelle fonction va se comporter comme une structure conditionnelle et �valuer la seconde fonction si le chemin de la premi�re ne correspondait pas.

Code : S�lectionner tout
1
2
3
4
5
RouterFunction<?> route =
  route(path("/hello-world"),
    request -> Response.ok().body(fromObject("Hello World")))
  .and(route(path("/the-answer"),
    request -> Response.ok().body(fromObject("42"))));
Dans cet exemple, si le chemin correspond � "/hello-world", la fonction va afficher �Hello World�, dans le cas contraire elle va �valuer la seconde fonction. Si aucun des deux chemins ne correspond, un vide Optional est retourn�.

FilterFunction : les chemins mapp�s par une fonction d�acheminement peuvent �tre filtr�s en faisant appel � RouterFunction.filter(FilterFunction<T, R>), o� FilterFunction<T,R> est essentiellement une BiFunction<Request, HandlerFunction<T>, Response<R>>. La fonction Handler en param�tre repr�sente le prochain �l�ment de la cha�ne. Notons qu�une autre FilterFunction peut �tre appliqu�e � sa place si de multiples filtres sont requis.

Et comment ex�cuter ces fonctions sur un serveur HTTP ? En appelant une autre fonction : HttpHandler. Il est possible de convertir une fonction d�acheminement en HttpHandler en se servant de RouterFunctions.toHttpHandler().

En gros, dans ce nouveau framework web propos� par Spring, ce que nous pouvons retenir c�est que :
  • les fonctions de gestion (Handler) s�occupent des requ�tes en retournant des r�ponses ;
  • les fonctions d�acheminement font parvenir les requ�tes entrantes aux fonctions de gestion et peuvent �tre compos�es de plusieurs fonctions d�acheminement ;
  • les fonctions d�acheminement peuvent �tre filtr�es par des fonctions de filtrage ;
  • les fonctions d�acheminement peuvent �tre ex�cut�es dans un environnement d�ex�cution web r�actif.

exemple illustratif de projet utilisant ce nouveau framework (GitHub)

Source : blog Spring

Voir aussi :

Quels modules de Spring utilisez-vous en 2016 ? Venez partager votre exp�rience
Vous avez lu gratuitement 0 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer � vous proposer des publications.

Une erreur dans cette actualit� ? Signalez-nous-la !