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
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
[{"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
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é.
Partager