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

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

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

    牙牙窩

    BlogJava 聯(lián)系 聚合 管理
      8 Posts :: 21 Stories :: 10 Comments :: 0 Trackbacks

    2007年12月19日 #


    初衷是希望有一個簡便,不需要配置文件的辦法,提高數(shù)據(jù)層的事務(wù)處理能力。以及對連接池的支持。

    解決思路是通過修改Spring框架,修改BeanFactory的類搜索機(jī)制,默認(rèn)載入相應(yīng)的類。

    并采用繼承的方式,在基類中提供默認(rèn)方法,允許Spring注入在對象實(shí)例中。然后再對象實(shí)例中調(diào)用。


    posted @ 2008-09-15 00:18 大牙 閱讀(132) | 評論 (0)編輯 收藏

        最近項(xiàng)目組要求使用普元EOS進(jìn)行項(xiàng)目開發(fā),使用了兩個月左右,雖然說有一些心得(這個以后會寫出來),但更多是看到了不足的地方,在這里就討論一下一個成熟的應(yīng)用框架到底應(yīng)該有哪些因素。

    底層技術(shù):
        Application Framework(下稱應(yīng)用框架)是為解決問題而生的,無論是基于JAVA、C++、Ruby等等語言,都必須有基礎(chǔ)技術(shù)的支持。如JAVA就有經(jīng)典的Struts+Spring+Hibernate的組合,因此,一個成熟的應(yīng)用框架,必須擁有完善的MVC框架,以及完整的業(yè)務(wù)組件管理容器,還有一個成熟的數(shù)據(jù)訪問框架。這個是一切的基礎(chǔ)。

    權(quán)限管理:
        擁有一個成熟基礎(chǔ)權(quán)限架構(gòu)能夠?yàn)閼?yīng)用框架增色不少。如果能夠和框架本身更好地融合,這樣更好。其實(shí)目前有很多實(shí)現(xiàn)是俄可以借鑒的,如:ACEGI和Spring。

    UI:
        標(biāo)簽已經(jīng)非常流行,擁有完善的標(biāo)簽庫是必不可少的,Struts是個很好的典范。
        Ajax大行其道,如果沒有整合一些方便易用的AJAX控件,估計也算不上是一個好框架。
        另外還有類似于Freemarker、Velocity之類的簡化UI開發(fā)的好東東,整合一兩個,對于減少開發(fā)、提高維護(hù)性有很大幫助。

    開發(fā)工具:
        提供敏捷快速的開發(fā)工具是一個成熟應(yīng)用框架所不可或缺的。使用一個成熟的應(yīng)用框架的開發(fā)工具進(jìn)行開發(fā),可以讓開發(fā)者最大程度減少對于技術(shù)上的瓶頸,讓開發(fā)者很輕松就可以完成高質(zhì)量的代碼,剩下的精力可以用于專注于業(yè)務(wù)等其它方面。
        另外還有像:單元測試、應(yīng)用部署等等方面,都是必不可少的一部分。(PS:我是非常痛恨維護(hù)幾百行ANT的build.xml代碼的人)
        這里不得不稱贊一下普元,普元提供的開發(fā)環(huán)境和它自身的底層技術(shù)融合的非常好,對于開發(fā)者而言,是非常方便的,可以不需要很多的培訓(xùn)就可以使用IDE開發(fā)出完整的應(yīng)用。而且測試和部署都很方便。

    代碼生成器:
        其實(shí)這個應(yīng)該和開發(fā)工具放在一起,但是因?yàn)楸容^重要,所以單獨(dú)提出來說。
        一個好的代碼生成器可以省去開發(fā)人員很多不必要的麻煩,能夠非常大地提高開發(fā)效率。普元的代碼生成器是個不錯的典范。
        我們公司自己也有一個JOP的應(yīng)用框架,但非常簡陋,和普元的設(shè)計思想不可同日而語。呵呵~~有點(diǎn)扯遠(yuǎn)了,但能夠看得出,代碼生成器對于應(yīng)用框架是必不可少的。

    協(xié)同開發(fā):
        整合一個好的協(xié)同開發(fā)和版本管理工具,能夠最大程度地降低溝通成本。除了能夠支持類似SVN或VSS之類的代碼版本管理工具之外,還應(yīng)該融合進(jìn)類似Visual Studio Team的任務(wù)管理和缺陷管理工具。最好擁有一個可以進(jìn)行自我積累的知識庫的實(shí)現(xiàn)。WIKI是個不錯的主意。

    設(shè)計器:
     
       我提出這個是因?yàn)榭吹搅薎BM的RUP,擁有一個能夠從設(shè)計到代碼實(shí)現(xiàn)乃至后面的測試這樣一個全流程開發(fā)工具,一直是IT人員的一個美好夢想。
        一個好的設(shè)計器,可以很輕松地在設(shè)計圖和代碼之間相互轉(zhuǎn)換,對于需求變更,設(shè)計管理、甚至項(xiàng)目后期的文檔都有很重要的意義。
        這里又要提到普元,普元在這方面很聰明,走了一條不同的路,它把代碼變成一個個圖標(biāo)時,本身就實(shí)現(xiàn)了對于設(shè)計圖和代碼之間互轉(zhuǎn)關(guān)系。(當(dāng)然,實(shí)現(xiàn)的方式有點(diǎn)土,而且沒有辦法支持標(biāo)準(zhǔn)的UML)

    運(yùn)行容器:

        大家可能覺得奇怪,容器為什么要單獨(dú)提出來說,很多JAVA開發(fā)者都會說,只有遵循JAVA標(biāo)準(zhǔn)就可以啦~。其實(shí)不然,一個成熟的應(yīng)用框架當(dāng)然要考慮其兼容性,但是有時候,過多考慮兼容性往往會犧牲效率。事實(shí)上,很多應(yīng)用框架被開發(fā)出來,都是有一定的局限性的使用場景,針對使用場景的環(huán)境進(jìn)行優(yōu)化,絕對比使用通用的方法效率要高的多。如我們公司的移動項(xiàng)目使用的是WebSphere,我們的框架就有一個針對WebSphere優(yōu)化的版本,但同時也存在一個通用版本。
        當(dāng)然還有其它方面也可以引用這種思路,比如使用Oracle自帶的一些JDBC類,其效率就比使用JAVA標(biāo)準(zhǔn)的JDBC類要高得多。

        其實(shí)應(yīng)用框架被創(chuàng)造出來的目的就是快速、高效、低成本地解決問題,這個大家都知道,但是何謂“成熟”,估計100個人應(yīng)該有100個答案,這里我的理解就是開發(fā)快捷、較低的學(xué)習(xí)成本、運(yùn)行穩(wěn)定,就是一個成熟的應(yīng)用框架。

    PS:上面好像說了一些不少普元的好話,大家千萬不要以為我是普元的“托”,晚點(diǎn)我再寫遍罵它的文章吧~~呵呵~~。其實(shí)我更喜歡SpringSide,但是除了“底層技術(shù)”這塊之外,在其它方面還有很長的路要走,希望江南白衣兄能夠堅持下去。



    posted @ 2008-04-17 23:14 大牙 閱讀(344) | 評論 (0)編輯 收藏

        今年真的是郁悶透頂了。項(xiàng)目組居然叫我去做我從來沒有做過的接口方面的編程,搞得我焦頭爛額。

        因?yàn)闆]有經(jīng)驗(yàn),寫的代碼亂七八糟,出了好多問題,不過,也學(xué)了不少東西。

        首先就是Socket的編程,我只是在學(xué)習(xí)JAVA時寫了一些socket方面的例子,從來就沒有仔細(xì)研究過,組長居然叫我設(shè)計一個JAVA的接口平臺。胡弄了一通之后,系統(tǒng)上線了。但是問題就來了。

        首先第一個問題,長連接必須有心跳。因?yàn)橹皡f(xié)議中沒有定義心跳協(xié)議,而我又沒有經(jīng)驗(yàn),所以等真正上線之后才發(fā)現(xiàn),如果長連接沒有心跳,很容易導(dǎo)致在Socket連接中,長時間沒有通訊的話,就會導(dǎo)致連接雖然保持,但不能正常通訊的問題。

        第二個問題,必須加入流量控制。這個問題出現(xiàn)在業(yè)務(wù)高峰期時,會接收到大量請求,這時業(yè)務(wù)系統(tǒng)的處理速度跟不上請求發(fā)起方,導(dǎo)致大量請求積壓在Socket服務(wù)器端,導(dǎo)致JVM崩潰。這個問題我之前是使用了JAVA5中所帶的ExecutorService,通過設(shè)置固定的線程池數(shù)量的方式做流量控制,后來發(fā)現(xiàn)不行,線程會不斷增加,導(dǎo)致JVM崩潰。不知道是我代碼問題還是ExecutorService本身的問題。建議使用BlockingQueue來做隊(duì)列,我目前用起來還是比較穩(wěn)定。

        第三個問題,是由上面的問題衍生出來的一個問題,就是效率問題。我之前的線程處理方式是每接到一個請求,會在主線程實(shí)例化一個線程實(shí)例,再把線程放到線程池中運(yùn)行,這個方式除了導(dǎo)致上面的問題以外,而且效率很慢,我稱之為“推”的方式。現(xiàn)在經(jīng)過改良后,在服務(wù)起來之后,先事先運(yùn)行固定數(shù)量的線程,然后所有線程都從同一個BlockingQueue中獲取指令,我稱之為“拉”的方式。這種方式讓程序效率提高了很多,省去了每次生成對象的過程。而且這個設(shè)計本身也實(shí)現(xiàn)了處理量的控制。

        第四個問題,就是指令的返回問題。在處理每個異步指令的過程時,對于返回指令,通常的做法是將返回結(jié)果指令放入隊(duì)列中,然后再逐一返回。這個做法就存在了一個隱患,就是當(dāng)服務(wù)器的進(jìn)程core掉,或者因其它原因中斷,所有的返回指令都會丟失。建議的做法是在得到返回指令之后,將要返回的結(jié)果指令持久化,通常是放入數(shù)據(jù)表或者緩存文件中,然后再操作,這樣的話,當(dāng)重啟進(jìn)程,也可以重新讀取返回指令,最大可能保證接口的數(shù)據(jù)準(zhǔn)確性。

        第五個問題,其實(shí)跟上面有一些接近,就是做接口程序,有一個大原則,就是一切有跡可尋。在受理時要寫日志,執(zhí)行業(yè)務(wù)時要記錄、返回結(jié)果時要入庫??傊屵\(yùn)維人員可以很方便的定位問題,排除問題。否則,只能麻煩自己啦!

        至于其它錯誤我就不一一羅列了,總之在錯誤中進(jìn)步,還是學(xué)到不少知識。呵呵~~


    posted @ 2007-12-19 10:43 大牙 閱讀(480) | 評論 (2)編輯 收藏

    主站蜘蛛池模板: 亚洲国产精品自产在线播放| 成人免费视频软件网站| 国产亚洲精品国产| 一级黄色免费大片| 亚洲国产精品人人做人人爱| 一级白嫩美女毛片免费| 亚洲国产一区视频| 伊人免费在线观看高清版| 亚洲av无码无在线观看红杏| 99久热只有精品视频免费看| 亚洲成a人片在线观看中文!!! | 亚洲一区AV无码少妇电影| 久久久久国色AV免费看图片| 最新国产精品亚洲| 四虎国产精品免费久久影院| a一级毛片免费高清在线| 亚洲男人天堂av| 亚洲第一成年免费网站| 美女视频黄频a免费| 久久精品国产亚洲沈樵| 黄色免费网站网址| 久久久久亚洲精品无码网址色欲| 亚洲精品专区在线观看| 免费无码毛片一区二区APP| 亚洲午夜一区二区电影院| 亚洲人成精品久久久久| 国产白丝无码免费视频| 亚洲午夜在线播放| 亚洲区小说区图片区| 久久爰www免费人成| 91在线亚洲综合在线| 亚洲精品久久久www| 日韩一区二区在线免费观看| 亚欧国产一级在线免费| 免费一级毛片清高播放| 精品国产呦系列在线观看免费| 亚洲欧洲日产国产最新| 亚洲精品线路一在线观看| 精品无码免费专区毛片| 一级毛片aa高清免费观看| 亚洲黄页网在线观看|