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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Webapp modulaire avec module auto déclaré sous osgi


Sujet :

JavaScript

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut Webapp modulaire avec module auto déclaré sous osgi
    bonjour

    J'ai cherché à faire une webapp modulaire qui utilise au mieux osgi
    lorsqu'on arrête ou démarre un module
    >stop osgi-user
    >start osgi-user
    qu'on ajoute ou supprime un module (jar) du dossier deploy
    celui-ci de déclare ou se retire automatiquement de la webapp le menu des clients actifs est mis à jour sans aucun intervention.

    pour le code je vous renvois vers
    http://www.developpez.net/forums/d16...app-modulaire/
    dans lequel j'ai posté la solution côté serveur.

    https://github.com/sekaijin/webapp.whiteboard

    pour le client j'ai utilisé webix (pour les composants UI) et une websocket.

    pour l'affichage du menu webix est finalement très simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    (function() {
    	webix.ui({
    		id : "layout",
    		rows : [ {
    			view : "toolbar",
    			id : 'main_toolbar',
    			margin : 50,
    			height : 36,
    			cols : [ {
    				view : "menu",
    				id : 'main_menu',
    				url : "main/menu",
    				datatype : "json"
    			}]
    		} ]
    	});
    })();
    une servlet qui renvois en json le contenu du menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"submenu":[{"icon":"plus-square","href":"message/create","value":"create"},{"icon":"sign-in","href":"message/inbox","value":"inbox"},{"icon":"sign-out","href":"message/outbox","value":"outbox"},{"icon":"paper-plane","href":"message/sent","value":"sent"}],"icon":"envelope","value":"message"},{"submenu":[{"icon":"user-plus","href":"user/add","value":"add"},{"icon":"user","href":"user/manage","value":"manage"}],"icon":"users","value":"user"}]
    pour la mise à jour à chaque changement une websocket
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    (function() {
    	if (!window.WebSocket) {
    		console.error("WebSocket not supported by this browser");
    	} else {
     
    		var server = {
    			connect : function() {
    				var location = 'ws://' + window.location.host
    						+ '/${web.context}/main/webSocket';
    				console.log(location);
    				this.ws = new WebSocket(location);
    				this.ws.onopen = function() {
    					this.send('websockets are open for communications!');
    				};
    				this.ws.onmessage = function(m) {
    					if (m.data) {
    						console.log(m.data);
    						$$('main_menu').clearAll();
    						$$('main_menu').load('main/menu');
     
    					}
    				};
    				this.ws.onclose = function(m) {
    					console.log('ws closed');
    					server.ws=null;
    				};
    			},
     
    			send : function(text) {
    				if (text != null && text.length > 0)
    					if (this.ws)
    						this.ws.send(message);
    			}
    		};
    		server.connect();
    	}
    })();
    A+JYT
    PS: j'ai profité de cette expérience pour tester webix. la lib semble pas mal mais mal documenté.

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Bonjour,

    Je reviens sur ce post pour vous faire un petit retour.

    Lorsque j'ai posté le premier message j'étais en pleine exploration.
    Aujourd'hui je suis en phase d'industrialisation.
    Le projet n'a pas du tout le même code mais il en reprend tous les principes.

    La plateforme serveur est un Servicemix 6.1
    Il s'agit d'un OSGI Karaf avec un serveur HTTP Jetty.

    un bundle (jar) est chargé de mettre en place le tableau blanc
    un bundle met en place la sécurité basée sur LDAP
    un bundle Main défini le cadre général du site Web il contient la seule et unique page HTML et les widgets JS du menu principal (hiérarchique) et les lib js utilisé dans le serveur. Le tout servi en statique.

    Enfin chaque domaine fonctionnel est un bundle qui fournit des ressources statiques (images, js) et les services (Rest). Ces bundles sont à considérer comme des plug-ins de l'application. (un peu comme dans éclipse)

    Les plug-ins peuvent être déployés indépendamment les uns des autres, ils peuvent être arrêtés, démarrés à l'envie.
    Dès qu'un plug-in démarre son entrée dans le menu devient disponible (en fonction des droits) et est directement utilisable. Sans aucune intervention.
    L'opération inverse lors de l'arrêt du plug-in.

    Mais ce n'est pas tout. Servicemix (Karaf) peut être démarré en mode cluster. dans cette configuration avec l'utilisation d'un reverse proxy ou un répartiteur de charge
    lorsqu’un plug-in est déployé sur un noeud, il se déploie automatiquement sur tous les noeuds

    Côté développement nous avons accueilli un nouvel arrivant spécialement pour ce travail. Habitué au développement web classique il ne connaissait ni OSGI li Webix ni le modèle de programmation de webix. En une semaine la production de bundles était commencée avec des choses à revoir. Après une discussion pour mieux cibler ce qui relève du front et ce qui relève du back. Il a commencé à produire des bundles de façon "industrielle".

    Le projet étant tout neuf, de domaine sensible, nous sommes en phase de recette et commençons la mise en production bientôt.
    Hors mis des améliorations cosmétiques, nous n'avons aucun retour de recette.

    L'indépendance des bundles et la simplicité des déploiements permettent un cycle de mise en production très court.

    A+JYT

Discussions similaires

  1. Editeur texte avec auto complétion sous Linux
    Par Sield dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/09/2013, 15h23
  2. Problème d'affichage sous IE avec margin auto
    Par programmeur400 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 15/11/2011, 19h29
  3. Réponses: 0
    Dernier message: 10/01/2011, 11h40
  4. [Xoops] Problème de droits avec module Mytube
    Par boyofcasa dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 14/11/2010, 16h01
  5. 7-Zip archive auto-extractible sous Windows avec Delphi
    Par pmoncada dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 04/11/2010, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo