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

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

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

    積累,創(chuàng)造,分享!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      25 Posts :: 13 Stories :: 26 Comments :: 0 Trackbacks

    2008年3月22日 #

    問題現(xiàn)象:在做web應(yīng)用時會碰到這種情況,某些地方無法通過web當(dāng)中的ApplicationContext來獲得springIOC容器提供的bean,比如提供給外界的webservice接口,這個時候就需要手工通過ClassPathXmlApplicationContext等方式來獲取ApplicationContext,代碼如下:
    ApplicationContext context = new ClassPathXmlApplicationContext(
        "applicationContext-*.xml");
    IXXXService xxxservice = (IXXXService ) context
        .getBean("xxxservice ");
    這是一段很典型的加載。
    然而,正是這種看似到處都是的加載卻為后面的BUG埋下伏筆。
    xxxservice是具體的業(yè)務(wù)類,它向下與DAO依賴并控制著事務(wù),這里代表了一個經(jīng)典而且簡單的service,具體配置略去,值得一提的是scope,這里沒有指定,默認(rèn)的是單例。
    一切都是那么順利,像這樣的service代碼寫的應(yīng)該不下幾百個,可能諸位寫的更多,過程依然很陶醉,修改完畢。測試,再測試。什么?ORA-12519錯誤!見鬼,我打造的這套號稱簡易快速的SSH2框架已經(jīng)在多個項(xiàng)目好評無數(shù)久經(jīng)考驗(yàn)了,寫了不下幾百次的service居然報(bào)ORA-12519錯誤。
    迅速打開PLSQL,檢查數(shù)據(jù)庫session,Select Count(1) From v$session t Where t.SCHEMANAME='XXX';
    隨著service的執(zhí)行,session數(shù)在增加,沒有減少的意思。是的,當(dāng)時就是這樣。

    解決思路:這種錯誤出現(xiàn)在久經(jīng)考驗(yàn)的框架當(dāng)中,我心里是相當(dāng)不安的,居然會有這種低級趣味的錯誤。整理思路開始分析:這段代碼唯一與以前不同的地方就是,我們在web應(yīng)用中,是通過容器加載提供bean的,只有容器啟動的時候才會加載xml。那么重點(diǎn)就應(yīng)該是關(guān)注XML的加載方式了。
    在這里我們用的是ApplicationContext接口。注意看spring文檔3.5.1.2.2 在非web應(yīng)用中優(yōu)雅地關(guān)閉springioc容器。它這里用到的是AbstractApplicationContext,在取得bean后,再執(zhí)行一個context.registerShutdownHook();
    這里實(shí)驗(yàn)一把,將ApplicationContext改成AbstractApplicationContext,執(zhí)行context.close()。結(jié)果出來了,session已被正常回收,真相漸漸浮出水面。


    結(jié)論:每次加載context的做法相當(dāng)于每次都生成了一次新的spring容器,在默認(rèn)單例的情況下,如果不及時關(guān)閉context。service所依賴的DAO當(dāng)中創(chuàng)建的dataSource也一直存在(包括所有的單例情況下所生成的類),從日志看,service事務(wù)管轄中的session確實(shí)已經(jīng)關(guān)閉,但SessionFactory還是存在的。只有在容器關(guān)閉的情況下,并指定了dataSource實(shí)例配置中的destroy-method="close",dataSource單例才會被釋放。
    spring文檔當(dāng)中對生命周期也描述的很清楚。通過DisposableBean或者指定destroy-method都能很好的釋放單例對象。而prototype類型的對象需要客戶端顯式的指定釋放,釋放對象完全是客戶端控制,spring不負(fù)責(zé)釋放。
    所以,要改善context的加載方式,盡量的少多次去加載,實(shí)在沒辦法的情況下,一定要記得關(guān)閉。
    最后,寫代碼的隨意性,圖省事,不經(jīng)思考,是造成這種BUG的罪惡根源。

    posted @ 2009-04-16 17:27 nighthawk 閱讀(2734) | 評論 (3)編輯 收藏

         摘要: 關(guān)注領(lǐng)域模型有一段時間了,不論是分析階段的還是設(shè)計(jì)階段的。
    其實(shí)領(lǐng)域模型的概念很早就有了,但是其概念非常容易被人混淆,首先我們要明確一下這個詞的語境:
    它在軟件開發(fā)的分析與設(shè)計(jì)的兩個階段分別代表不同的含義。
      閱讀全文
    posted @ 2008-03-23 00:01 nighthawk 閱讀(1652) | 評論 (0)編輯 收藏

    至于docbook的好處,我也不多說了,就跟吃菜一樣,嘗過了就知道到底有幾好
    趁目前有空,部門內(nèi)部準(zhǔn)備補(bǔ)充一下之前缺乏的技術(shù)文檔。利用這次機(jī)會,我再次收想到了docbook。
    記得第一次接觸docbook的時候,還是3年前的時候了,可惜那個時候沒有堅(jiān)持使用下來。
    當(dāng)初拋棄它的原因是多方面的,缺乏恒心是一方面,配置煩瑣也是一方面,另外還有一個很重要的原因就

    是缺乏一個所見即所得的編輯器。而這次,這些煩惱徹底解決。XMLmind XML Editor!第一次發(fā)現(xiàn)它的時

    候有點(diǎn)相見恨晚的感覺,它讓我的文檔寫的如此輕松。
    不過有一點(diǎn)要注意,在官網(wǎng)下載的XMLmind XML Editor個人版是不支持直接將xml生成的html,pdf等格式

    的。還好,目前有xsltproc,fop,openjade這些工具支持,有了這些在windows下也可以轉(zhuǎn)換的工具,生

    成其他格式也不是什么難事。我目前就使用xsltproc來生成html。

    附上XMLmind XML Editor的下載地址http://www.xmlmind.com/xmleditor/persoedition.html
    附加上xsltproc的下載地址 http://www.zlatkovic.com/pub/libxml/
    再附上docbook的地址http://www.oasis-open.org/docbook/

    之前的麻煩統(tǒng)統(tǒng)消失,那么剩下的就是享受它的好處了。

    不用word,文檔也可以寫的這么漂亮。docbook,看第二眼發(fā)現(xiàn)你依然還是那么好。

    posted @ 2008-03-22 18:21 nighthawk 閱讀(373) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲AV成人潮喷综合网| 亚洲色欲色欱wwW在线| 99精品一区二区免费视频| 亚洲成人网在线观看| 性感美女视频在线观看免费精品| 亚洲欧美在线x视频| 亚洲av伊人久久综合密臀性色| 国产精品爱啪在线线免费观看| 国产成人精品亚洲| 亚洲国产成人久久综合一| 成人免费无码大片A毛片抽搐| xxxxxx日本处大片免费看| 亚洲精品视频在线观看免费| 国产精品免费看香蕉| 日本免费电影一区二区| 亚洲精品日韩一区二区小说| 亚洲一区二区三区影院| 成人a视频片在线观看免费| 99在线热播精品免费99热| 亚洲人AV在线无码影院观看| 亚洲精品无码永久中文字幕| 最近中文字幕无吗免费高清| 中国毛片免费观看| 亚洲av永久无码| 亚洲成人中文字幕| 亚洲国产综合精品中文字幕| 国产曰批免费视频播放免费s| 精品国产污污免费网站入口| 亚洲国产精品无码久久| 精品亚洲麻豆1区2区3区| 亚洲成a人片在线播放| 无码视频免费一区二三区| 久久免费福利视频| 国产精品午夜免费观看网站| 国产成人精品亚洲日本在线| 亚洲AV无码成人精品区在线观看 | 亚洲精品第一国产综合境外资源 | 天天影院成人免费观看| 高清永久免费观看| 免费无遮挡无遮羞在线看| 亚洲精品人成网在线播放影院|