OVH Cloud OVH Cloud

Continuations en Java

3 réponses
Avatar
Zouplaz
Bonjour, j'ai lu cet article (http://en.wikipedia.org/wiki/Continuation)
mais je ne vois pas très bien la mise en oeuvre en Java. Pourtant
certains framework proposent ce concept (Webwork je crois).

Auriez-vous un exemple simple dans le cadre d'une application web ?

Merci

3 réponses

Avatar
Ploc
Zouplaz wrote:
Bonjour, j'ai lu cet article (http://en.wikipedia.org/wiki/Continuation)
mais je ne vois pas très bien la mise en oeuvre en Java. Pourtant
certains framework proposent ce concept (Webwork je crois).

Auriez-vous un exemple simple dans le cadre d'une application web ?

Merci


Il y'en a un dans les liens en bas de la page.
"Continuations in pure Java from the RIFE web application framework"

Avatar
Zouplaz
Ploc wrote:
Zouplaz wrote:

Bonjour, j'ai lu cet article
(http://en.wikipedia.org/wiki/Continuation) mais je ne vois pas très
bien la mise en oeuvre en Java. Pourtant certains framework proposent
ce concept (Webwork je crois).

Auriez-vous un exemple simple dans le cadre d'une application web ?

Merci



Il y'en a un dans les liens en bas de la page.
"Continuations in pure Java from the RIFE web application framework"


Oups, je l'avais pas vu...


Avatar
Alain
Zouplaz wrote:
Bonjour, j'ai lu cet article
(http://en.wikipedia.org/wiki/Continuation) mais je ne vois pas très
bien la mise en oeuvre en Java. Pourtant certains framework proposent
ce concept (Webwork je crois).

Auriez-vous un exemple simple dans le cadre d'une application web ?
a une époque on en parfait pour JSF...




l'idée c'est que quand tu programme une application web tu écrive un
programme en langage structuré (peu être objet) classique avec des
boucles, des test, des variables locales, des blocs impriqués, des
appels de procédures (pu de méthodes)...

mais a certains endroit tu appelle une fonction "dialogue" qui
de ton point de vue
- affiche des informations a l'utilisateur
- et lui demande de saisir ce qu'il veut

et une fois que l'utilisateur a validé, la fonction continue:

ex:

{
boolean connectedúlse;
while(!connected) {
LoginDialog dialog=new LoginDialog();
dialog.setNomApplication("Acme application");
dialog.show();
if(UserDatabase.checkUserPassword(
dialog.getUser(),dialog.getPassword)) {
connected=true;
} else {
connectedúlse;
dialog.setPassword("");
dialog.addErreur("Utilisateur inconnu ou mot de passe");
}
}
User user=UserDatabase.getUser(dialog.getUser());
MainDialog main=new MainDialog();
main.setBienvenue("Bienvenue, "+user.getLibelle());
logoutúlse;
while(!logout) {
main.run();
if("ajoute".equals(main.getAction())) {
AjouteDialog dialog=new AjouteDialog()
dialog.run();
if(dialog.isOk()) {
Database.add(dialog.getNumero(),dialog.get
}
} else if("logout".equals(main.getAction()) {
logout=true;
}
}

ca parait super comme manière de programmer !!! comme avec des boites de
dialogue graphiques...


mais techniquement ca sera différent :

ce programme sera exécuté dans un langage supportant la continuation
(congélation de stack!) lors de l'appel du Servlet controlleur de
l'appli web.

a chaque dialog.show() le système stocke une continuation dans la
session (avec la pile d'appel, le positionnement dans le code, et les
variables locales), et termine le servlet par l'appel d'une vue (une JSP
par ex) initialisée d'après le contenu du Dialog.

la JSP n'aura qu'un unique formulaire qui pointera sur le servlet
controlleur.

quand l'utilisateur clique sur un bouton, le controlleur est appelé,
récupère la continuation, remplis le dialog avec les paramètres saisis
par l'utilisateur et transmis par HTTP, et poursuis la continuation
après l'appel du dialog.run() initial...

ca permet de programmer le scénario d'interaction de façon structurée
(boucle, test, blocs, appels) et non avec des sortes de goto comme avec
les framework habituel (Struts) ou à la main...

une alternative au plats de spaghettis habituel c'est de fonctionner
comme dans Swing (et JSF je crois) avec des évènements... mais ce n'est
pas aussi structuré...