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

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

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

    李李的技術(shù)博客

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      13 隨筆 :: 0 文章 :: 61 評(píng)論 :: 0 Trackbacks

    2005年12月21日 #

    為了降低侵入性,更好的被引用,對(duì)bba96核心部分進(jìn)行了大量重構(gòu),去除了冗贅的層次與不必要的接口,并借助jdk5.0范型進(jìn)行了代碼精簡(jiǎn)。發(fā)布了bba96 tiger beta2,這個(gè)版本已經(jīng)是比較穩(wěn)定的版本,具體的改動(dòng)如下

    • 去除所有的接口依賴,可直接在任何項(xiàng)目中直接調(diào)用
    • service的兩層合并為一層且去除service層的接口,但DAO曾仍保留接口以備擴(kuò)展更多的orm實(shí)現(xiàn)
    • 增加sql execute的方法
    • 增強(qiáng)源自view的直接查詢能力
    • 參數(shù)名由原來(lái)難看的oriNames, oriOperators, oriStringValues改為直觀的searchName, searchOperator, searchValue
    • 增加了對(duì)QueryParam的toString功能,可打出對(duì)應(yīng)的sql,便于調(diào)試,參見(jiàn)com.bba96.tiger.util.QueryWebUtils的main函數(shù)

    下載頁(yè)面地址:https://bba96.dev.java.net/servlets/ProjectDocumentList?folderID=4149&expandFolder=4149&folderID=0

    如果你使用spring+hibernate,而又不喜歡hibernate criteria的麻煩,不妨嘗試一下bba96,你可以把主要精力放到業(yè)務(wù)方面。DefaultEntityManager提供了很多單層邏輯的便利方法給你使用,其中也包括執(zhí)行hsql或者sql查詢/更新的方法,如果你要多層次邏輯的條件查詢可以自己組裝QueryObject,參見(jiàn)com.bba96.tiger.util.QueryWebUtils的main函數(shù)。bba96還提供給你在view層自由增加查詢的能力。

    tiger版本僅提供了dao/service部分,所以如果你希望在view 查詢的安全性方面得到加強(qiáng),可參考bba96 2.0其中的webwork view部分,權(quán)限部分也沒(méi)有包含在tiger中,希望盡快把包括例子的權(quán)限部分遷移過(guò)來(lái),但還需要一點(diǎn)時(shí)間,最近在忙一個(gè)CMS的產(chǎn)品,時(shí)間不夠用啊……

    SpringSide項(xiàng)目中webwork MVC部分應(yīng)用到bba96 tiger對(duì)view部分的查詢,有興趣可以看看,這里也要推薦一下SpringSide,確實(shí)有很多很好的經(jīng)驗(yàn)在里面可以借鑒。

    posted @ 2006-06-10 19:16 李李 閱讀(1577) | 評(píng)論 (2)編輯 收藏

    bba96 CHANGELOG
    ==========================
    http://bba96.dev.java.net

    Changes in version 2.0 alpha3 (2006.4.3)
    *fix action query parameters bug -- [XXX:...]
    *fix distinct bug (discard Criteria.DISTINCT_ROOT_ENTITY)
    *some minor improvement

    Changes in version 2.0 alpha2.2 (2006.3.16)
    *update webwork's jar for fixing example bug in weblogic
    *remove all contentType setting in example

    Changes in version 2.0 alpha2.1 (2006.3.8)
    *fix example bug
    *update readme.txt

    Changes in version 2.0 alpha1 (2006.3.7)
    *webwork 2.2 support
    *hibernate 3.x support, then support native sql
    *fix some bug
    *add aop security module
    *add action query parameters validation
    *enhance action query parameters management
    *support more logic in action query
    *support multi orderby property


    Changes in version 1.0 (2005.09.23)
    *release first


    源碼下載(包含兩個(gè)快速開(kāi)發(fā)的例子。)
    https://bba96.dev.java.net/servlets/ProjectDocumentList?folderID=4149&expandFolder=4149&folderID=0

    簡(jiǎn)介參見(jiàn)http://m.tkk7.com/scorpio_leon/archive/2005/11/09/18878.aspx

    posted @ 2006-03-08 01:24 李李 閱讀(1043) | 評(píng)論 (0)編輯 收藏

    很容易找到getText實(shí)際的操作類是LocalizedTextUtil,方法public static String findText(Class aClass, String aTextName, Locale locale, String defaultMessage, Object[] args, OgnlValueStack valueStack);

    java doc 如下

    Finds a localized text message for the given key, aTextName. Both the key and the message itself is evaluated as required. The following algorithm is used to find the requested message:

    1. Look for message in aClass' class hierarchy.
      1. Look for the message in a resource bundle for aClass
      2. If not found, look for the message in a resource bundle for any implemented interface
      3. If not found, traverse up the Class' hierarchy and repeat from the first sub-step
    2. If not found and aClass is a ModelDriven Action, then look for message in the model's class hierarchy (repeat sub-steps listed above).
    3. If not found, look for message in child property. This is determined by evaluating the message key as an OGNL expression. For example, if the key is user.address.state, then it will attempt to see if "user" can be resolved into an object. If so, repeat the entire process fromthe beginning with the object's class as aClass and "address.state" as the message key.
    4. If not found, look for the message in aClass' package hierarchy.
    5. If still not found, look for the message in the default resource bundles.
    6. Return defaultMessage

    主要就是查找resource bundle,下面說(shuō)明一下
    1. 先查找該class(一般我們是在action調(diào)用,就是該action對(duì)應(yīng)的class了)對(duì)應(yīng)的properties文件,找不到再去找對(duì)應(yīng)的接口,找不到再去從該class的繼承樹(shù)上去重復(fù)前面的步驟。
    2. 如果是ModelDriver,以上找不到再以model的class去重復(fù)1的步驟
    3.繼續(xù)找,如果key是符合ognl表達(dá)式還以ognl表達(dá)式去解析類,如果能找到類,還以以上的步驟去查找
    4. 還找不到,就從根據(jù)package以及package的繼承樹(shù)去找,這還包括了該class的繼承樹(shù)所有的class的package樹(shù)(這一步存在了太多的重復(fù)查找工作,因?yàn)楹芏鄍ackage都是相同的)
    5 使用默認(rèn)的resource bundle

    java.util.ResourceBundle雖然有cache,但是ww為了減少調(diào)用getResourceBundle方法,也維護(hù)了一個(gè)miss的hashset,找不到的bundle name就丟進(jìn)去,那么每一次查找都同步了這個(gè)miss,如果很多次查找,開(kāi)銷也是很大的。

    我就舉一個(gè)例子,就說(shuō)第四步查找package樹(shù)好了

            // nothing still? alright, search the package hierarchy now
            for (Class clazz = aClass;
                 (clazz 
    != null&& !clazz.equals(Object.class);
                 clazz 
    = clazz.getSuperclass()) {

                String basePackageName 
    = clazz.getName();
                
    while (basePackageName.lastIndexOf('.'!= -1) {
                    basePackageName 
    = basePackageName.substring(0, basePackageName.lastIndexOf('.'));
                    String packageName 
    = basePackageName + ".package";
                    msg 
    = getMessage(packageName, locale, aTextName, valueStack, args);

                    
    if (msg != null) {
                        
    return msg;
                    }

                    
    if (indexedTextName != null) {
                        msg 
    = getMessage(packageName, locale, indexedTextName, valueStack, args);

                        
    if (msg != null) {
                            
    return msg;
                        }
                    }
                }
            }

    假設(shè)你的action繼承樹(shù)是這樣
    com.bba96.core.webwork.actions.DefaultActionSupport
    com.xxxx.web.actions.XXXActionSupport
    com.xxxx.web.user.actions.UserAction
    com.xxxx.web.user.ViewUserAction
    且不說(shuō)ww沒(méi)有判斷是否是com.opensymphony.xwork.ActionSupport或者ww的接口就停止,光是自己的繼承樹(shù),就是4+3+3+3=13次,再加上往上的繼承樹(shù)以及對(duì)應(yīng)的接口,com.opensymphony.xwork.ActionSupport以及Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable, ContinuableObject的接口,查找次數(shù)超過(guò)30次甚至更多,這里的每一次都有一個(gè)同步miss的過(guò)程,開(kāi)銷相當(dāng)大。

    如果你的key所在的resource bundle沒(méi)有對(duì)應(yīng)到合適的class或package時(shí),例如說(shuō)放在了default bundle中,ww會(huì)浪費(fèi)很多時(shí)間。這種情況下,我在沒(méi)有并發(fā)的時(shí)候測(cè)了一下,一次getText大概耗時(shí)40ms左右

    所以在實(shí)際應(yīng)用我們應(yīng)該避免這種情況出現(xiàn),要不讓resource bundle一一對(duì)應(yīng)class,要不就自己實(shí)現(xiàn)一個(gè)簡(jiǎn)單的getText,其實(shí)要是ww的ActionSupport的textProvider允許改變就最好了。

    posted @ 2006-01-21 13:26 李李 閱讀(1626) | 評(píng)論 (0)編輯 收藏

       調(diào)試IIS+Tomcat,裝IIS的時(shí)候居然出現(xiàn)staxmem.dll不能復(fù)制,google了一下,居然很多人說(shuō)要重裝才能解決,暈,又找到http://support.microsoft.com/?kbid=894351,根據(jù)上面說(shuō)的,我是屬于method 2情況,但是沒(méi)有xp原盤,裝的時(shí)候就是sp2了,又倒……
      最后看到有人情況跟我的類似,就是用method 1的第一步 esentutl /p %windir%\security\database\secedit.sdb 就可以了%windir%那里應(yīng)該寫你的xp安裝路徑,不用管什么警告,確認(rèn)就對(duì)了,IIS安裝成功……開(kāi)始配置。
    posted @ 2005-12-21 23:29 李李 閱讀(1990) | 評(píng)論 (3)編輯 收藏

    主站蜘蛛池模板: 久久精品国产亚洲5555| 国产精品免费小视频| 亚洲VA中文字幕无码毛片| 精品熟女少妇aⅴ免费久久| 亚洲精品色婷婷在线影院| 黄色三级三级三级免费看| 最新亚洲成av人免费看| a毛看片免费观看视频| 亚洲国产二区三区久久| 1000部夫妻午夜免费| 亚洲高清视频在线| 日本免费一本天堂在线| yellow视频免费看| 久久精品亚洲综合一品| 亚洲一级毛片免费观看| 亚洲va成无码人在线观看| 在线A级毛片无码免费真人| 在线亚洲v日韩v| 国产精品亚洲A∨天堂不卡| 18禁止看的免费污网站| 亚洲国产成人AV在线播放| AV在线播放日韩亚洲欧| 午夜无码A级毛片免费视频| 激情综合亚洲色婷婷五月APP| 永久黄网站色视频免费直播 | 亚洲国产美女精品久久久久∴| 久久久免费的精品| 亚洲综合精品伊人久久| 亚洲午夜精品久久久久久浪潮| 99re热精品视频国产免费| 亚洲国产精品网站在线播放| 亚洲色爱图小说专区| 在线看片无码永久免费视频| 乱爱性全过程免费视频| 亚洲熟妇无码爱v在线观看| 免费jjzz在在线播放国产| 男人进去女人爽免费视频国产| 亚洲色成人四虎在线观看| 亚洲精品午夜无码电影网| 午夜免费不卡毛片完整版| 亚洲免费观看视频|