項目包含的通用模塊代碼等我有時間一併剝離貢獻出來(基於WebSocket的通知引擎,工做流整合模塊,自定義表單,基於RBAC權限設計),最近太忙了,Web項目有一段時間沒碰,有點生疏的感受,主要在忙GQT項目,一套基於桌面開發的框架,寫代碼寫的有點手痠的感受。html
基於Web的含工做流的項目看起來並不如想象的那麼簡單,主要需求:json
項目要求:瀏覽器
主要可能使用到技術:併發
實現的WebSocket的整體思路:框架
咱們實現的事件通知很是簡單,設定全局變量並讓瀏覽器偵聽:eclipse
var G_WebSocket=false;
var EVENT_ORDER_CHANGE_STATUS = "orderChange";
var EVENT_ORDER_CHANGE_AMOUNT = "amountChange";
var EVENT_ORDER_CHANGE_REFUND = "refundChange";
WebSocket.init = function(callbackFunc){
socket = io.connect(connUrl, connOptions);
socket.on('connect', function() {
G_WebSocket=true;
callbackFunc("connect",null);
});
socket.on('disconnect', function() {
G_WebSocket=false;
callbackFunc("disconnect",null);
});
socket.on('clientQuit', function(obj){
G_WebSocket=false;
callbackFunc("clientQuit",obj);
});
socket.on('broadcast', function(obj) {
callbackFunc("broadcast",obj);
});
};
在須要偵聽WebSocket接受Web Server推送消息的地方加上一個函數便可:socket
WebSocket.init(function(command,jsonObj){
if(command=="broadcast"){
if(jsonObj.e == EVENT_ORDER_CHANGE_STATUS){
//TODO:write your code here
}else if(jsonObj.e == EVENT_ORDER_CHANGE_AMOUNT){
//TODO:write your code here
}else if(jsonObj.e == EVENT_ORDER_CHANGE_REFUND){
//TODO:write your code here
}
}
});
這樣的結構要擴展推送服務很簡單,好比按頻道推送等,均可以很容易的擴展。函數
再看看看工做流,咱們實現了activiti通用的申請提交任務流程和自定義表單功能,提取跟蹤流程圖功能等,這樣你要設計一個新流程也變得很是簡單,只須要在eclipse裏劃上工做流圖,在後臺發佈,而後經過SpringMVC的RestAPI啓動實例流程,申領完成任務等,以下圖:ui
流程走到了分支的兩個節點上,這樣對後續新增的工做流提供了極大的遍歷。url
最後說說Spring Security,基於RBAC的權限體系搭建好後(能夠用在任何管理系統中),要在頁面中訪問一個資源,首先判斷一下是否有權限,以下HTML:
<sec:authorize ifAllGranted="r_pd">
<a href="#">resource access here</a>
</sec:authorize>
<sec:authorize url="/XXX/XXX/XXX.html">
<a href="XXX/XXX/XXX.html'">
<span>XXX功能</span>
</a>
</sec:authorize>
前臺因爲項目比較小,沒有用到js的MVC框架,如backbone等,這裏就再也不記錄了。