JSF結(jié)合Richfaces使用時(shí)的一種數(shù)據(jù)庫(kù)分頁(yè)方式
摘要: 在JSF和Richfaces的官方示例里面沒發(fā)現(xiàn)正經(jīng)的數(shù)據(jù)庫(kù)分頁(yè)示例,于是自己輪了一個(gè),還算比較滿意,分享出來。
struts等框架,視圖(jsp、freemarker等)直接獲取action中準(zhǔn)備好的數(shù)據(jù)結(jié)果集合,請(qǐng)求下一頁(yè)數(shù)據(jù)的時(shí)候,同樣后臺(tái)action處理請(qǐng)求,把a(bǔ)ction中的數(shù)據(jù)集合用新的這一頁(yè)數(shù)據(jù)替換掉,然后渲染頁(yè)面,從而實(shí)現(xiàn)分頁(yè)。每次請(qǐng)求action的處理過程可以拿到頁(yè)號(hào)等信息,所以在action調(diào)用service的時(shí)候就可以使用這些信息,調(diào)用相應(yīng)的方法做分頁(yè)數(shù)據(jù)查詢。
JSF結(jié)合Richfaces做這個(gè)事情和Struts等框架有有很大的區(qū)別。
閱讀全文
Hazelcast作為hibernate緩存和業(yè)務(wù)緩存
摘要: 做去皮兒網(wǎng)(http://www.qupier.com),內(nèi)容管理是一個(gè)系統(tǒng),前端網(wǎng)站是一個(gè)系統(tǒng),這兩個(gè)系統(tǒng)之間獨(dú)立部署,但是緩存要能夠互通。例如后臺(tái)修改了某個(gè)消息類型的說明,在前段網(wǎng)站上要能夠展現(xiàn)出來(使用了hibernate的查詢緩存)。其他的一些場(chǎng)景也許要緩存,例如網(wǎng)站的shiro權(quán)限信息緩存,不過這個(gè)不需要和后端系統(tǒng)互通。但是既然開搞,也不好意思再掛著ehcache。于是一并升級(jí)。
前面一篇日志各種碰壁后,終于找到了理論上能夠?qū)崿F(xiàn)功能的兩個(gè)產(chǎn)品:gemfire和hazelcast。于是,開始嘗試。
閱讀全文
找集中式緩存做hibernate second level cache和業(yè)務(wù)緩存,失敗
摘要: 依然,先發(fā)廣告:去皮兒網(wǎng)(http://www.qupier.com),每月26日通知你是否中簽。已經(jīng)推出廣州的搖號(hào)結(jié)果通知了。
之前做業(yè)務(wù)系統(tǒng),緩存用的是ehcache,集群的時(shí)候用multicast廣播通知。隨著節(jié)點(diǎn)的增多,希望把整個(gè)緩存切換到集中式緩存上來。折騰了兩天,各種碰壁。
閱讀全文
基于Spring實(shí)現(xiàn)seam形式的事件機(jī)制
摘要: 照例先做廣告:去皮兒網(wǎng)(http://www.qupier.com),每月26日通知你是否中簽。很快要退出廣州的搖號(hào)結(jié)果通知了。
Seam的Events用的很舒服,spring提供的事件機(jī)制太羅嗦,所以起了念頭,著這思路移植一下。最終效果如下:
//發(fā)布事件
Events.instance().fire(eventName,arg1,arg2.);
//發(fā)布異步事件
Events.instance().fireAsynchronous(eventName,arg1,arg2.);
//在事務(wù)中,發(fā)布當(dāng)事務(wù)成功commit時(shí)觸發(fā)的事件
Events.instance().fireOnTransactionSuccess(eventName,arg1,arg2.);
//在事務(wù)中,發(fā)布當(dāng)事務(wù)完成(commit/rollback)時(shí)觸發(fā)的事件
Events.instance().fireOnTransactionCompletion(eventName,arg1,arg2
閱讀全文
建立功能級(jí)別的組件
摘要: 先做個(gè)廣告,去皮兒網(wǎng),可以每月26日通知你是否搖號(hào)中簽。http://www.qupier.com
一直以來,組件一直都建立在技術(shù)的層面上。由于業(yè)務(wù)的復(fù)雜多變,似乎沒有人想著把業(yè)務(wù)部分也做成可重用的組件。
我們團(tuán)隊(duì)在過去的兩年里面在這個(gè)方面做了一些常識(shí),寫出來供網(wǎng)友參考、拍磚。
閱讀全文
走在組件化的路上(七)——JSF的優(yōu)勢(shì)之使用View作用域的Action
摘要: 在以往的應(yīng)用開發(fā)過程中,后端的業(yè)務(wù)組件(Action/Service/Dao),可以被設(shè)置為幾種作用域:request、session、application。我們不可能把與每次請(qǐng)求關(guān)系很強(qiáng)的一些信息(例如某個(gè)列表頁(yè)面要列出來的數(shù)據(jù)集合)簡(jiǎn)單的放到session里面去,這就導(dǎo)致了每次請(qǐng)求之間的大部分?jǐn)?shù)據(jù)是不可能共享的。使用JSF,我們實(shí)現(xiàn)了一種叫做view的作用域,在不同的請(qǐng)求之間共享信息。
閱讀全文
走在組件化的路上(六)——JSF的優(yōu)勢(shì)之自定義組件與模塊化
摘要: JSF的很多文檔上面說,要建立一個(gè)自定義組件,需要定義繼承自UIComponentBase之類的類,然后寫decode/encode方法等等,一大套內(nèi)容,很復(fù)雜。幸好我們有其他的辦法。其實(shí)定義一個(gè)組件在大多數(shù)情況下是不用去寫這樣的代碼的。本節(jié)的內(nèi)容是一個(gè)選擇true/false兩個(gè)值得下拉框組件。定義一個(gè)這樣的組件需要做如下工作:
閱讀全文
走在組件化的路上(五)——JSF的優(yōu)勢(shì)之從url到頁(yè)面r
摘要: 我看到的若干mvc框架在展現(xiàn)一個(gè)包含動(dòng)態(tài)數(shù)據(jù)內(nèi)容的頁(yè)面的時(shí)候,都是這樣做的:請(qǐng)求/xx.do,到達(dá)某個(gè)action,執(zhí)行配置好或者根據(jù)url映射到的某個(gè)方法,初始化數(shù)據(jù),放到某個(gè)context里面(例如Request,或者struts用的ognl的context),然后根據(jù)配置或者規(guī)則,forward到某頁(yè)面,然后展現(xiàn)。
這樣做的好處是強(qiáng)制性的分離了展現(xiàn)和邏輯,缺點(diǎn)是多了若干配置,不自然。
JSF的路子和asp/php是一樣的,你請(qǐng)求/a.xhtml,那么,ok,加載/a.xhtml文件。例如a.xhtml主體內(nèi)容如下:
閱讀全文
走在組件化的路上(四)——JSF的優(yōu)勢(shì)之了解前端狀態(tài)
摘要: 先補(bǔ)充一下上一篇留下的尾巴:最早看JSF的書的時(shí)候,使用jsp作為頁(yè)面,#{xx}這樣的標(biāo)記不能直接寫在頁(yè)面里,必須套在一個(gè)標(biāo)記里面(和struts2里面的ognl一樣郁悶)。后來才知道,這是jsp的問題,不是JSF的問題。現(xiàn)在大家都是用facelets作JSF的展現(xiàn),JSF2.0更是把這個(gè)標(biāo)準(zhǔn)化為首選。于是直接在頁(yè)面上寫#{someAction.doSth('Hello')},完全OK,頁(yè)面加載的時(shí)候會(huì)觸發(fā)調(diào)用該方法。
然后我們?cè)賮砜春蠖酥狼岸擞惺裁吹睦樱?nbsp;
閱讀全文
走在組件化的路上(三)——JSF的優(yōu)勢(shì)之忘記http
摘要: 現(xiàn)在開始說JSF的優(yōu)勢(shì)。一個(gè)一個(gè)的說,最后整理的時(shí)候再分主次吧,現(xiàn)在先就針對(duì)上面的幾個(gè)問題來說。
1.URL到action method
閱讀全文
走在組件化的路上(二)——JSF能夠解決什么問題
摘要: 首先,看看在使用struts等框架做開發(fā)的時(shí)候,遇到的一些問題.
閱讀全文
走在組件化的路上(一)——緣起
摘要: 09年4月我從A公司離職,被同事拉到一個(gè)創(chuàng)業(yè)團(tuán)隊(duì)做網(wǎng)頁(yè)游戲,他們當(dāng)時(shí)使用的技術(shù)體系是基于Seam的。而我則是SSH的忠實(shí)用戶,此前一直跟隨江南白衣、appfuse的路線,大大小小也做了一些項(xiàng)目,也自己攢了一堆輪子?;?年多的時(shí)間在一個(gè)基于元數(shù)據(jù)的基礎(chǔ)框架上面,那時(shí)候我基本上掌握了maven的簡(jiǎn)單使用,于是自己做的一些基礎(chǔ)性的東西也都是使用maven來做依賴管理、版本發(fā)布。
閱讀全文
JSF請(qǐng)求處理過程(二) 請(qǐng)求處理過程總覽(FacesServlet#service)
摘要: 這總覽,很明顯是看FacesServlet的service方法。在FacesServlet的初始化過程中,構(gòu)造出了全局的FacesContextFactory對(duì)象和LifeCycle對(duì)象??梢园袴acesContextFactory看做是一個(gè)“請(qǐng)求包裝工廠”,于是很明顯,每當(dāng)一個(gè)請(qǐng)求到達(dá)FacesServlet的時(shí)候,第一步便是拿著請(qǐng)求,到包裝工廠里面包裝一下,而包裝的結(jié)果就是一個(gè)FacesContext。
閱讀全文
Eclipse環(huán)境下的web應(yīng)用配置
摘要: 用Eclipse開發(fā)web應(yīng)用的人大概有兩撥,一邊是直接用Eclipse JEE版本做開發(fā)的,另外一邊是用MyEclipse這個(gè)龐然大物的。二者各有優(yōu)缺點(diǎn),我覺得使用MyEclipse的大集成試的開發(fā)對(duì)于初學(xué)者來說可能可以省去很多基礎(chǔ)的事情,便于入門。而對(duì)于高于入門水平的伙子們來說,我想基本的Eclipse才是更好的選擇。一方面MyEclipse的Add XXX Capabilities不管3721加入全部庫(kù)文件的做法對(duì)項(xiàng)目是一種污染,另外一方面隱藏的東西多了不利于個(gè)人對(duì)具體實(shí)現(xiàn)的學(xué)習(xí)。
閱讀全文
關(guān)于攔截器
摘要: 在水木回一個(gè)大牛的帖子討論攔截器,也發(fā)到這里。
所謂攔截,是新媳婦回娘家,路遇強(qiáng)盜。重要的是她能不能回家已經(jīng)取決與強(qiáng)盜而不是自己。
閱讀全文
關(guān)于模型的獨(dú)立性
摘要: 文字寫完以后,突然想起來很久以前在JavaEye上看的關(guān)于貧血模型、富血模型、充血模型的討論。最后的結(jié)論大概與持久化無關(guān)的業(yè)務(wù)邏輯應(yīng)該放在模型中實(shí)現(xiàn),而與持久化有關(guān)的邏輯要放到Service中實(shí)現(xiàn)??催@幾多文字,其實(shí)也就是說這么個(gè)意思,不過多說一些。閑話休提,正文開始。
在大結(jié)構(gòu)上系統(tǒng)描述為上面的圖形。關(guān)鍵元素是領(lǐng)域模型、領(lǐng)域服務(wù)、基礎(chǔ)服務(wù)。能夠精準(zhǔn)的反應(yīng)業(yè)務(wù)的模型,和圍繞模型的有效的服務(wù),是軟件團(tuán)隊(duì)在某一行業(yè)領(lǐng)域生產(chǎn)成果價(jià)值的兩個(gè)很重要的體現(xiàn)。領(lǐng)域服務(wù)作為系統(tǒng)的核心邏輯之一,一方面,承擔(dān)著完成所有與技術(shù)環(huán)境相關(guān)的業(yè)務(wù)邏輯的實(shí)現(xiàn),另外一方面,作為領(lǐng)域模型和技術(shù)環(huán)境的緩沖,保證了領(lǐng)域模型的普適、獨(dú)立。
閱讀全文
工廠模式ABC
摘要: 這段文字最初是回復(fù)水木上一個(gè)mm的問題,問為什么要用工廠,整理之后,發(fā)到這里來。
工廠模式是創(chuàng)建模式,封裝對(duì)象的創(chuàng)建過程。對(duì)象的創(chuàng)建最簡(jiǎn)單的方式是new出來,但是有一些情況下用new來創(chuàng)建對(duì)象會(huì)導(dǎo)致代碼難以維護(hù)。
閱讀全文
切換Maven版本時(shí)候出現(xiàn)的問題
摘要: 切換Maven版本時(shí)候出現(xiàn)錯(cuò)誤的解決
閱讀全文
Struts請(qǐng)求處理過程簡(jiǎn)要描述
摘要: 翻了一下Struts2的代碼,理出了一個(gè)基本執(zhí)行流程,應(yīng)改可以對(duì)struts的結(jié)構(gòu)有個(gè)了解了,另外,也可以由此找到一些擴(kuò)展點(diǎn)。
閱讀全文
Ext.XTemplate使用入門
摘要: Ext.XTemplate是Ext中關(guān)于頁(yè)面模板的一個(gè)組件。用來將數(shù)據(jù)和模板組合出最終的html。所謂數(shù)據(jù)指的是javascript的對(duì)象。EMP在loadEntityToPage中使用了這個(gè)組件。
閱讀全文
當(dāng)JsonPlugin遇到CGLib
摘要: JsonPlugin在分析類結(jié)構(gòu)并序列化時(shí),對(duì)于CGLig動(dòng)態(tài)生成的類也是按照一般類來看待的。這就導(dǎo)致了兩個(gè)問題:一個(gè)是去序列化了生成的子類中的本不應(yīng)該序列化的屬性,另外一個(gè)是由于CGLIB導(dǎo)致的Annotation丟失而引起的本不應(yīng)該發(fā)生的序列化邏輯。簡(jiǎn)單的修改了一下JSONPlugin的代碼,來避免上述的兩個(gè)問題。
閱讀全文
在基于Spring及Hibernate應(yīng)用程序中使用ETags降低帶寬占用和服務(wù)器壓力
摘要: Gavin Terrill 發(fā)表于2007.7.11 上午 8:45
討論區(qū):Java 主題:Web框架、集群及緩存
導(dǎo)言
REST方式的應(yīng)用程序構(gòu)架在近日所產(chǎn)生的巨大影響突出了Web應(yīng)用程序的優(yōu)雅設(shè)計(jì)的重要性?,F(xiàn)在人們開始理解“WWW架構(gòu)”內(nèi)在的可測(cè)量性及彈性,并且已經(jīng)開始探索使用其范例的更好的方式。在本文中,我們將討論一個(gè)Web應(yīng)用開發(fā)工具——“簡(jiǎn)陋的、卑下的”ETags,以及如何在基于SpringFramework的動(dòng)態(tài)Web應(yīng)用程序中集成這個(gè)工具,來提高應(yīng)用的性能及可測(cè)性。
我們將要使用的基于Spring的應(yīng)用程序是基于“petclinic”(寵物門診?)的一個(gè)應(yīng)用。在您下載的程序包中,包含了如何加入必要的配置和源代碼讓你親自體驗(yàn)該程序的介紹。
閱讀全文
關(guān)于Atlassian的兩個(gè)軟件 JIRA 和 Confluence
摘要: Atlassian Confluence(簡(jiǎn)稱Confluence)是一個(gè)專業(yè)的wiki程序。它是一個(gè)知識(shí)管理的工具,通過它可以實(shí)現(xiàn)團(tuán)隊(duì)成員之間的協(xié)作和知識(shí)共享。
Confluence使用簡(jiǎn)單,但它強(qiáng)大的編輯和站點(diǎn)管理特征能夠幫助團(tuán)隊(duì)成員之間共享信息,文檔協(xié)作,集體討論。目前,Confluence被用于廣泛地用于項(xiàng)目團(tuán)隊(duì),開發(fā)團(tuán)隊(duì),市場(chǎng)銷售團(tuán)隊(duì)。
閱讀全文
長(zhǎng)標(biāo)題顯示字?jǐn)?shù)處理
摘要: 很多情況下,我們需要控制長(zhǎng)標(biāo)題的顯示字?jǐn)?shù)。在客戶端用JavaScript控制顯示最大字?jǐn)?shù)后,由于js把任何字符都當(dāng)作1個(gè)長(zhǎng)度來處理,由此導(dǎo)致全角和半角字符顯示的實(shí)際長(zhǎng)度不同。
例如我們?cè)O(shè)置某個(gè)文章列表頁(yè)面所有的文章標(biāo)題最長(zhǎng)顯示10個(gè)字符。那么如下的題目:
這篇文章是測(cè)試標(biāo)題長(zhǎng)度顯示的文章
I love my country.I love all of you.
處理后,將分別顯示為:
這篇文章是測(cè)試標(biāo)題長(zhǎng)
I love my (注意最后還有一個(gè)空格)
假設(shè)我們是按照中文的寬度來確定10個(gè)字符這個(gè)標(biāo)準(zhǔn)的,那么當(dāng)標(biāo)題是英文等半角字符時(shí),顯然太短了。反過來,如果我們按照英文等半角字符來確定顯示字符數(shù)量標(biāo)準(zhǔn),那么如果題目是中文的時(shí)候,又很容易出現(xiàn)自動(dòng)換行等我們不希望出現(xiàn)的結(jié)果。
本文嘗試以一種笨拙的辦法處理這個(gè)問題。即使用js檢查字符串中的每一個(gè)字符,如果發(fā)現(xiàn)有兩個(gè)(注意不一定相連)的半角字符,那么就將顯示長(zhǎng)度標(biāo)準(zhǔn)加1。
閱讀全文
提高Hibernate 3 啟動(dòng)速度(翻譯)
摘要: 原文地址:http://www.hibernate.org/300.html
在Tomcat5.5.x環(huán)境下,調(diào)用Configuration().addCacheableFile來載入配置,建立Hibernate SessionFactory,成功地提高了載入速度。
推薦你只是在開發(fā)階段采用這樣的方式載入,最后的產(chǎn)品發(fā)布階段你仍需使用經(jīng)典的Hibernate.cfg.xml文件,通過Tomcat的ServletContextListener API在應(yīng)用程序部署的時(shí)候建立Hibernate SessionFactory,而不是在程序第一次調(diào)用Hiberante的時(shí)候。
閱讀全文
一些鏈接(二)——關(guān)于緩存
摘要: Spring框架的聲明式緩存服務(wù)
Spring框架提供了聲明式的緩存服務(wù),看樣子似乎不錯(cuò):
原文地址:http://dev2dev.bea.com/pub/a/2006/05/declarative-caching.html
中文譯文:http://www.crackj2ee.com/Article/ShowArticle.asp?ArticleID=661
閱讀全文
DWR學(xué)習(xí)記錄
摘要: 一、概念
DWR(Direct Web Remoting),中文翻譯成“直接Web遠(yuǎn)程控制”。我認(rèn)為就是將AJAX作了一次封裝,并提供與服務(wù)器端Java組件進(jìn)行交互的一個(gè)組件。在其官方網(wǎng)站(http://getahead.ltd.uk/dwr)上說得很清楚,“DWR is Easy Ajax for Java”。DWR允許客戶端的javascript與服務(wù)器端的Java進(jìn)行交互,并根據(jù)其交互結(jié)果,控制網(wǎng)頁(yè)的表現(xiàn)。
閱讀全文
J2SE5.0新特性——out.printf
摘要: JDK5.0 沿用了C語(yǔ)言庫(kù)函數(shù)中的printf方法,例如,如下:
System.out.printf("%8.2f",x);
閱讀全文
J2SE5.0新特性——for each循環(huán)
摘要: 這個(gè)語(yǔ)法是5.0新增的,據(jù)說是從C#里面借鑒過來的。
閱讀全文
J2SE5.0新特性——靜態(tài)導(dǎo)入(解決我的Config問題)
摘要: 昨天買了Core Java2 第七版的上卷。開始閱讀就看到了許多J2SE的新特性,呵呵,很是激動(dòng)人心。我會(huì)發(fā)一系列的文章來介紹。首先這一篇講靜態(tài)導(dǎo)入,解決我上面的Config問題。
本文分三個(gè)部分:
1,講述我上面遇到的Config問題的大概和目前的解決方法
2,講述用了靜態(tài)導(dǎo)入后的解決方法
3,對(duì)靜態(tài)導(dǎo)入的介紹,簡(jiǎn)單實(shí)例。
閱讀全文
項(xiàng)目總結(jié)(一個(gè)數(shù)據(jù)采集網(wǎng)站)——Spring
摘要: 談到構(gòu)架,總是會(huì)想起前面看到banq寫的一篇文章,叫做重與輕的永恒話題。是討論使用EJB等重量級(jí)框架和Spring,Jdon之類的輕量級(jí)框架采用POJO實(shí)現(xiàn)業(yè)務(wù)。俺是小人物,沒學(xué)過EJB,而對(duì)Spring倒是有一點(diǎn)了解。所以這次就用Spring了。
閱讀全文
項(xiàng)目總結(jié)(一個(gè)數(shù)據(jù)采集網(wǎng)站)——工作
摘要: 從5.1開始,整整寫了6天程序到5.6,期間沒洗過澡,基本上沒出過校園,很少出宿舍。同學(xué)從家鄉(xiāng)來玩住我宿舍我只去天安門接了一趟,去西站送了一趟。6天,簡(jiǎn)直是非人的生活。
于是昨天終于把自己該做的部分也就是主體部分全部完成了。剩下的一點(diǎn)街面上的修改雨點(diǎn)來做。
閱讀全文