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é.