<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 21  文章 - 12  trackbacks - 0
    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(4)

    隨筆檔案

    文章檔案

    新聞檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    上一錘提到了剛發(fā)布的免費ERP系統(tǒng)(www.2bizbox.com)后,大家反響很熱烈,短短3天就被下載了2萬多次,服務器一度宕機,呵呵。大家討論也比較熱烈,紛紛提出不少問題和技術探討,感覺非常有意義。這次和大家分享一下關于這個免費ERP的架構設計。之前先回答一下大家比較關心的一些問題:

    • 網(wǎng)站只提供了windows的exe安裝版,大家詢問是否有適合linux跑的版本:這個可以有,不過還需要一點時間來發(fā)布,幾周后就會有下載,請大家耐心等待并及時關注。目前,官網(wǎng)上已經(jīng)提供了exe和zip,不過都是針對windows平臺的。
    • 下載后一些朋友無法解壓和運行,尤其使用迅雷等工具的朋友。這個原因還不知道,可能和多線程下載以及網(wǎng)絡有關,可以在下一次,或盡量不使用工具下載。由于服務器在國外,下載速度肯定不會特別好。不過一些熱心網(wǎng)友已經(jīng)提供了國內(nèi)的下載鏈接,官網(wǎng)較慢的可以試試這里:E備是鏈接地址,輸入驗證碼即可下載。我家2M帶寬,用chrome 自帶的下載工具下載,大約用了8分鐘完成下載。另外還有JavaSwingChina天極網(wǎng)下載華軍軟件園綠色軟件聯(lián)盟旋風下載中關村在線豆豆軟件站、。。。似乎一夜之間遍地都是了,呵呵
    • 還有朋友關心公司是國內(nèi)的還是國外的:公司是美國的,不過我們上海這個小團隊負責一部分開發(fā)工作。在國內(nèi)也有不少客戶,例如中石油、襄鉆股份、江漢三機、四機賽瓦等,我們負責本地客戶服務。
    • 有朋友詢問是否開源:目前是軟件完全免費,源代碼開放的事情還沒有消息。不過個人判斷完全有開源的可能性,呵呵,這要看美國人是怎么想的了。
    • 很多朋友關心團隊協(xié)調(diào),高手低手如何共同工作,一個人搭框架,另外人不滿意怎么辦等等。我想這個并不是一個軟件團隊的特有問題。要說是問題的話,是咱們中國人特有的一種毛病還差不多。“不服氣”從來是咱們的特點,問題不是高手太少,而是“大明白”、“專家”、“牛人”太多了。我曾經(jīng)去一個制造廠做實施,接我們的司機談起公司的管理來,那真是口若懸河、吐沫橫飛、頭頭是道,上至老總下至看大門的,都被分析的“體無完膚”,好像馬上換他去當老總一切問題立馬解決似地。所以我認為這根本就不是一個問題。想想“奧迪R8”和“寶馬7”這樣的工業(yè)精品都有一個總設計師,你是在問,BMW的一個剛進去工作的學生如果認為寶馬7系的總設計師設計有問題該怎么辦?

    還是來說說架構。先看這個圖就都明白了。


    提到架構,我們用到的第三方的框架不是很多,總的原則就是盡量簡單、穩(wěn)固。這樣,就會高效、好維護。這遠比一些烏七八糟的所謂新思想新技術更加重要,畢竟我們的軟件要維護幾十年的(實際上已經(jīng)從DOS到現(xiàn)在開發(fā)了20年了)。后臺主要是JBoss和Hibernate,其他大部分部分都是自己封裝。前臺則基于Swing以及自己封裝的各種組件。中間通訊也沒有采用第三方的框架,而是自己封裝,主要采用HTTP協(xié)議,對交換的VO(包括VO集合)對象(如參數(shù)、返回值、Exception等)進行標準的Java二進制序列化、zip壓縮、傳輸。調(diào)用的方法通過一個統(tǒng)一的invoke進行傳遞,被調(diào)用的模塊、方法名、參數(shù)等,都被封裝在一個POJO中傳給后臺。后臺Façade層解壓后,根據(jù)具體模塊,通過反射的方法,調(diào)用Local的各個模塊EJB,執(zhí)行具體函數(shù)。每個函數(shù)先在Biz業(yè)務層進行業(yè)務邏輯分解處理,例如,如果要添加一個零件,要分解很多具體動作,先檢查零件號是否重復,再檢查零件號是否格式合法,數(shù)據(jù)是否完備,創(chuàng)建零件庫存初始信息、創(chuàng)建物料添加日志、通知相關人員…等等。分解后,形成具體的DAO操作,然后交給DAO進行調(diào)用相應的底層API完成。無數(shù)的DAO對各個業(yè)務數(shù)據(jù)進行各種數(shù)據(jù)級別的操作封裝(增刪改查等),然后通過Hibernate層進入數(shù)據(jù)庫。

     

    有朋友喜歡用Eclipse RCP來作為前臺框架。坦白說,我個人對SWT一向不喜歡,也不看好,因為他本質上和AWT的路線沒什么不同,只是后臺老板從SUN換成了IBM。當初以“好看+效率高”的旗號,SWT曾經(jīng)風靡一時,人人趨之若鶩。不過本質上說,SWT這種技術是打著“好看/速度快”幌子分裂JAVA的政治游戲,我們程序員應當看清楚。當然不是說SWT技術不好不能做企業(yè)應用,實際上我認識的一些朋友已經(jīng)用SWT搭建了好大好大的應用。不過SWT畢竟不是JAVA的官方技術。如果相信JAVA的未來的話,我覺著應當相信SWING才是正道。SWING有不足,但是它會不停的發(fā)展。另外,千萬別總拿“丑”和“慢”來攻擊Swing,說到底還是看你會不會用,吐口水實在無意+無聊。說道RCP框架,我倒更喜歡NetBeans。不過國內(nèi)大家還是把Netbeans當做IDE來用,實際上這個RCP平臺相當不簡單,質量很高而且國外應用很多,已經(jīng)非常成熟,有空可以多看看Netbeans的Platform頻道(不是IDE哦)。

     

    HttpInvoker沒有用過,不知是不是和Spring綁的比較死,看上去和我們的通訊方式完全類似。其實java序列化再傳輸就是幾行代碼的事情,如果不用Spring等框架,完全沒必要用第三方的,自己封裝一下就好了。看看這個代碼就知道了:

     1 /**
     2     * Here should be the unique access of FacadeWrapper.invoke!
     3     */

     4    public static Object invokeImpl(ServerAction action) throws ServerActionException {
     5        action = new ServerAction(action.getModuleName(), action.getMethod(), escapedStringParamsConvertor(action.getParams()), paramsTypeConvertor(action.getParamTypes()));
     6        action.setOrderBy(getOrderBy());
     7
     8        try {
     9            Object result = FacadeWrapper.getInstance().invoke(action);
    10            //unzip, if need.
    11            if (result instanceof ZippedByteArray) {
    12                ZippedByteArray zippedData = (ZippedByteArray) result;
    13                if (zippedData.getByteArray() != null{
    14                    try {
    15                        result = BB2Util.unzipObject(zippedData.getByteArray());
    16                    }
     catch (Exception ex) {
    17                        throw new ServerActionException(ex);
    18                    }

    19                }

    20            }

    21
    22            return result;
    23        }
     catch (Exception ex) {
    24            ExceptionWorker worker = new ExceptionWorker(ex);
    25            //
    26            throw new ServerActionException(ex, anotherServer);
    27        }

    28    }

    Hessian基于WS還可以支持不同的客戶端,也很不錯。不過我們這種需求不大,沒有使用WS以及其他客戶端技術的需求,也沒有采用。還是覺著簡單的東西自己封裝更加的靈活和容易控制。我們的思路是盡量少的引進第三方的框架。過多的異構框架導致的穩(wěn)定性和靈活性的代價也是很大的。

     

    其他一些類似MQ之類的異步框架就更比較謹慎使用。前后臺調(diào)用需要實時性,肯定是同步調(diào)用為主。異步的情況不多,即使有,在基于HTTP的結構下(例如只開放80端口)也比較難實現(xiàn)。我們采用了JBOSS的JMS機制,實現(xiàn)一些后臺主動發(fā)送業(yè)務消息、上傳圖紙等功能。當然如果后臺禁止了相應端口,客戶端就自動放棄JMS連接,工作在純“主動模式”下,相當于一個“瀏覽器”。

     

    對于非桌面客戶端,例如手機、數(shù)據(jù)采集器、PDA等,我們在后臺的Façade層上面再包裝一個又一個簡單的“協(xié)議適配”就行了,也就是把Java的對象簡單的封裝到XML或HTML,負責與這類終端通訊。這樣,身后的安全啊、日志啊、業(yè)務啊等就完全復用,開發(fā)速度是很快的。對于大多手機,使用XHTML進行瀏覽即可;對于iPhone等則開發(fā)native的終端,對于PDA和數(shù)據(jù)采集器,由于有條形碼、收料發(fā)料、盤點等復雜應用,所以用本地的環(huán)境進行創(chuàng)建GUI(一般都是Windows CE,可用C#進行)。這樣,我們的架構可以簡單快速的支持各種不同的終端接入:


    有朋友擔心一個Servlet提供所有API太變態(tài),其實不必擔心。沒錯,我們的模塊API至少上萬,但是這個后臺的Façade Servlet其實只有不超過10個方法。最主要的一個是invoke,方法都是通過一個對象封裝了模塊、方法名、參數(shù)序列等來通過反射機制完成的,所以,無論后臺模塊API有多少,只要通過這一個唯一的業(yè)務入口出入就行了。至于前臺使用不太方便的問題,可以通過前臺再次封裝展開來解決。

    最后在透漏一下這套免費ERP的下一步進度:目前正在緊張漢化工作,預計在本月內(nèi)會發(fā)布全中文版本。Linux打包文件也在進行中,有望很快可以下載。其他還有很多很好的模塊,會陸續(xù)推出,期待大家支持和反饋。如果你身邊有人在研究或選型ERP,不放推薦一下這個全免費的、高質量的、專注機械制造業(yè)的大型ERP:2BizBox。
    套用一句劉儀偉的說法:現(xiàn)在誰還花錢用ERP啊?!

    最后送Swing界面:設置會計年度


    風信子長到第十天,沒有換水。
    posted on 2011-01-19 16:57 zhangchuanzheng 閱讀(3180) 評論(3)  編輯  收藏

    FeedBack:
    # re: 免費ERP第二錘:構架簡單就好 2011-01-22 11:33 心靈的企盼
    架構跟用友的比較像,只是不知道集群支持的怎么樣  回復  更多評論
      
    # re: 免費ERP第二錘:構架簡單就好 2011-01-26 15:05 xlay
    看到這個Façade層就有種莫名的不爽  回復  更多評論
      
    # re: 免費ERP第二錘:構架簡單就好 2011-08-26 13:24 CHI Flat Iron
    支持集群么  回復  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 精品久久久久成人码免费动漫| 乱爱性全过程免费视频| 最好看的中文字幕2019免费| 亚洲精品~无码抽插| 国产99视频精品免费视频76| 亚洲精品国产日韩无码AV永久免费网 | 久久精品国产亚洲av高清漫画| 国产成人AV免费观看| 久久精品国产亚洲av麻| 日本在线看片免费| 亚洲视频在线视频| 无码国产精品一区二区免费式影视| 亚洲午夜精品国产电影在线观看| 中文字幕无码不卡免费视频| 亚洲人片在线观看天堂无码| 在线观看免费亚洲| a级毛片免费观看在线| 亚洲色无码一区二区三区| 水蜜桃视频在线观看免费播放高清 | 成人免费a级毛片| 色窝窝亚洲AV网在线观看| 亚洲国产精品无码久久久久久曰 | 亚洲色成人中文字幕网站| 一个人看的www免费视频在线观看| 亚洲国产第一页www| 国产精品视频永久免费播放| 国产亚洲综合一区二区三区| 国产精品亚洲αv天堂无码| 久99久精品免费视频热77| 亚洲校园春色另类激情| 亚洲福利视频一区二区| 久久久久成人精品免费播放动漫| 亚洲国产成人综合| 亚洲无线一二三四区手机| 午夜不卡久久精品无码免费| 亚洲国产AV一区二区三区四区| 国产亚洲精品国看不卡| 国色精品卡一卡2卡3卡4卡免费| 国产亚洲精品第一综合| 亚洲综合精品香蕉久久网97| 波多野结衣一区二区免费视频|