Tin's Blog

          You are coming a long way, baby~Thinking, feeling, memory...

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

          2006年3月10日 #

               摘要: 自己申請(qǐng)域名把blog遷移了一下。因?yàn)閮?nèi)容也很少和Java相關(guān),感興趣的朋友輕修改一下訂閱地址。
          Rss: http://feed.feedsky.com/iamtin
          Blog: http://tin.zztin.com  閱讀全文
          posted @ 2008-06-04 10:00 Tin 閱讀(1729) | 評(píng)論 (0)編輯 收藏

               摘要: 在中文網(wǎng)織年會(huì)上和啄木鳥(niǎo)老大HD討論了一下好看簿的架構(gòu)問(wèn)題,而后老黃寫(xiě)了一個(gè)blog entry:
          架構(gòu)考量-選擇的難度
          里面談到了架構(gòu)一個(gè)高支撐能力的Web 2.0應(yīng)用需要考慮的架構(gòu)選型問(wèn)題,對(duì)我很有幫助。我也回復(fù)一下他的建議:  閱讀全文
          posted @ 2007-11-28 22:39 Tin 閱讀(2867) | 評(píng)論 (1)編輯 收藏

          posted @ 2007-10-24 13:52 Tin 閱讀(4713) | 評(píng)論 (0)編輯 收藏

               摘要: Twitter的水平擴(kuò)展的一些關(guān)鍵點(diǎn),雖然它是個(gè)RoR應(yīng)用,但是這些建議絕對(duì)是放之四海而皆準(zhǔn)的,非常好的總結(jié)。
          因?yàn)槟瓿鮐witter曾經(jīng)遇到了性能瓶頸,而且?guī)缀跏譄o(wú)策。當(dāng)初很多人開(kāi)始懷疑Ruby的性能問(wèn)題,而后Twitter站起來(lái)了 ^__^
          有時(shí)間的朋友看看這個(gè)slide:http://www.slideshare.net/Blaine/scaling-twitter,沒(méi)有時(shí)間的看看我的摘要。  閱讀全文
          posted @ 2007-10-16 08:42 Tin 閱讀(3192) | 評(píng)論 (3)編輯 收藏

               摘要: 一位ID是jackson1225的網(wǎng)友在javaeye詢問(wèn)了一個(gè)大型Web系統(tǒng)的架構(gòu)和部署選型問(wèn)題,希望能提高現(xiàn)有的基于Java的Web應(yīng)用的服務(wù)能力。由于架構(gòu)模式和部署調(diào)優(yōu)一直是Java社區(qū)的熱門話題,這個(gè)問(wèn)題引發(fā)了很多熱心網(wǎng)友的討論,其中一些意見(jiàn)對(duì)其它大型Web項(xiàng)目也有很好的指導(dǎo)意義。  閱讀全文
          posted @ 2007-09-17 22:48 Tin 閱讀(7118) | 評(píng)論 (5)編輯 收藏

               摘要: 架構(gòu)師這個(gè)概念比較虛。在國(guó)內(nèi),架構(gòu)師其實(shí)就是有強(qiáng)烈基礎(chǔ)傾向的開(kāi)發(fā)者,他們有很大的熱情來(lái)實(shí)驗(yàn)一個(gè)自己熟悉或者感興趣的東西,從概念上這不是架構(gòu)師。
          我很關(guān)注國(guó)外的一些架構(gòu)師描述如何成為架構(gòu)師。架構(gòu)師其實(shí)最重要的是見(jiàn)識(shí)!要無(wú)傾向性的研究技術(shù)和需求。我很喜歡的印度的一位精神導(dǎo)師克里希姆納提說(shuō)過(guò)自由的前提是要學(xué)會(huì)聆聽(tīng),而聆聽(tīng)就是在聽(tīng)的時(shí)候心理不要有任何反抗或者評(píng)論的去聽(tīng),所有的思考都要留在聽(tīng)到以后。電影《教父》里面有一句臺(tái)詞我非常喜歡,不要仇恨你的敵人,因?yàn)槟菚?huì)影響你的判斷力。我想這都是一個(gè)意思。如果想要成為架構(gòu)師就要多聆聽(tīng),然后思考,又清楚的判斷力,這樣選擇才會(huì)是正確的!  閱讀全文
          posted @ 2007-09-15 14:57 Tin 閱讀(2563) | 評(píng)論 (3)編輯 收藏

               摘要: 我覺(jué)得fins同學(xué)的一些說(shuō)法會(huì)造成沒(méi)有深入使用這幾個(gè)框架的朋友的誤解。因?yàn)檫@幾個(gè)框架的思想是不一樣的,所以它們的語(yǔ)法也是不同的。fins同學(xué)的評(píng)價(jià)似乎更像從Java的OO想法來(lái)評(píng)價(jià)幾個(gè)js框架。
          其實(shí),moo一開(kāi)始的想法就是light weight,所以它的很多語(yǔ)法其實(shí)就是沒(méi)有語(yǔ)法。fins說(shuō)的json語(yǔ)法,其實(shí)就是js里面的散列對(duì)象嘛,javascript語(yǔ)法本來(lái)就是這個(gè)樣子呀,不包裝就是這樣。而這種方式如果寫(xiě)的好讀起來(lái)很像DSL,很舒服,moo充分發(fā)揮了這個(gè)好處。
          prototype和JQuery都沒(méi)有強(qiáng)調(diào)繼承這樣的概念。javascript的強(qiáng)大很大就來(lái)自它的原形繼承,如果要用好它就要利用好原形繼承。prototype在這方面很像Ruby,比如 Enumerable,這是一種按照行為的抽象,很符合Ruby/Python里面Module的想法,并非所有行為都要抽象到一個(gè)對(duì)象再繼承,行為本身也可以抽象再混入。  閱讀全文
          posted @ 2007-09-13 08:40 Tin 閱讀(8248) | 評(píng)論 (9)編輯 收藏

               摘要: javaeye的hax最近在他的blog上進(jìn)行了一場(chǎng)關(guān)于如何寫(xiě)css的討論,其中反思和討論了一些關(guān)于基于標(biāo)準(zhǔn)或trick進(jìn)行設(shè)計(jì)的選擇問(wèn)題,這個(gè)問(wèn)題也是David Heinemeier Hansson對(duì)于XHTML/CSS/Javascript標(biāo)準(zhǔn)進(jìn)行RIA開(kāi)發(fā)話題的一個(gè)延展。我們可以從中思考如何在不完美的技術(shù)中選擇一條相對(duì)完美的技術(shù)路線?  閱讀全文
          posted @ 2007-09-10 08:02 Tin 閱讀(2528) | 評(píng)論 (1)編輯 收藏

          posted @ 2007-08-03 16:42 Tin 閱讀(2142) | 評(píng)論 (1)編輯 收藏

               摘要: 非常好的職業(yè)建議,來(lái)自Scott Adams
          從一個(gè)非常喜歡的人的blog看到的,這個(gè)人是Tomcat的作者,現(xiàn)在是Apple的Object C開(kāi)發(fā)者,兼重要的RoR作者,兼資深攝影師,兼Mac大fans,他叫James Duncan Davidson(http://duncandavidson.com/)。
          在一篇Blog講到,Scott Adams說(shuō):
          每個(gè)人都可以找到通過(guò)一些努力就可以躋身前25%的行業(yè)。例如我,我可以比大多數(shù)人畫(huà)的好,但是我還夠不上藝術(shù)家的水平。我也沒(méi)有達(dá)到喜劇演員那種好笑的水平,但是我比大多數(shù)人好笑。魔法在于沒(méi)什么人即畫(huà)得好又會(huì)寫(xiě)笑話。所以混合一下我就很稀有了。加上我的商業(yè)知識(shí)背景,我突然發(fā)現(xiàn)我比其它的動(dòng)畫(huà)人更能理解它(商務(wù))。  閱讀全文
          posted @ 2007-08-03 16:06 Tin 閱讀(2916) | 評(píng)論 (4)編輯 收藏

               摘要: 本文已經(jīng)發(fā)表于InfoQ中文站點(diǎn)(http://www.infoq.com/cn/news/2007/07/light-web-servers)

          IBM developerWorks網(wǎng)站上最近發(fā)布了一則Cameron Laird的關(guān)于輕量級(jí)Web服務(wù)器的文章,里面列舉了很多的輕型的Web服務(wù)器實(shí)現(xiàn)和它們的特點(diǎn),Cameron還從自己的經(jīng)驗(yàn)出發(fā)總結(jié)了評(píng)價(jià)Web服務(wù)器的一些指標(biāo)。這篇文章目的在于擴(kuò)展我們?cè)?Web應(yīng)用部署時(shí)的思路,讓我們重新思考Web應(yīng)用的架構(gòu)和部署方案。眾多的輕量級(jí)Web服務(wù)器其實(shí)見(jiàn)證了動(dòng)態(tài)腳本語(yǔ)言實(shí)現(xiàn)Web應(yīng)用的火爆,給實(shí)現(xiàn) Web應(yīng)用提供了更多解決方案。

          輕量Web服務(wù)器這個(gè)概念關(guān)注“輕巧性”,這意味著簡(jiǎn)單、易于安裝、流線化、要求低和健壯。這種“輕巧”主要是相對(duì)于目前市場(chǎng)占有率占優(yōu)的 Apache和IIS而言的,輕量Web服務(wù)器應(yīng)該更小更簡(jiǎn)單,并且它們至少要有一些性能/特性超過(guò)這兩個(gè)產(chǎn)品(這樣它們才可能分得市場(chǎng)份額)。 Cameron這樣對(duì)比了“輕量”相比“重量”的一些優(yōu)勢(shì):  閱讀全文
          posted @ 2007-08-02 10:10 Tin 閱讀(2111) | 評(píng)論 (0)編輯 收藏

               摘要: 有幸在InfoQ的飯局里面認(rèn)識(shí)了王翔,他對(duì).Net和MS技術(shù)的確有非常深的造詣。今天看到他的一篇評(píng)論:“C#正變得越來(lái)越臃腫”
          發(fā)表了一些感想:

          先進(jìn)與成熟的確是矛盾,但是現(xiàn)在的新技術(shù)成熟的都比較快,可能是人接受新事物的速度提高了吧。
          Haskell 這樣的語(yǔ)言是函數(shù)式編程的代表,更多的需要從頭開(kāi)始。所以國(guó)外學(xué)計(jì)算機(jī)理論首選Haskell,很多老外抱怨過(guò)上學(xué)的時(shí)候這個(gè)東西學(xué)的頭疼,但是后來(lái)他們也都表示獲益匪淺。我們的計(jì)算機(jī)教育是本末倒置,所以我們這些程序員覺(jué)得他們晦澀難懂。但是看到Erlang這樣的語(yǔ)言,在未來(lái)多核環(huán)境下的前途,我們還是會(huì)動(dòng)搖的。  閱讀全文
          posted @ 2007-07-31 15:41 Tin 閱讀(896) | 評(píng)論 (0)編輯 收藏

               摘要: 本文已經(jīng)發(fā)布于InfoQ中文站(http://www.infoq.com/cn/news/2007/07/java-securejsh-publish),感謝Complystill為我們貢獻(xiàn)了SJSH這個(gè)項(xiàng)目。

          JavaEye上活躍的開(kāi)發(fā)者Complystill(歆淵)最近發(fā)布了自己的開(kāi)源SecureJSH項(xiàng)目,提供了一個(gè)通過(guò)SSH交互進(jìn)行Java應(yīng)用開(kāi)發(fā)或者管理的工具。

          在項(xiàng)目的介紹中可以得知,SecureJSH與Ptyhon里面的ipython或者Ruby里面的irb非常相似。它們都允許交互式運(yùn)行語(yǔ)言的代碼,以方便跟蹤或者調(diào)試應(yīng)用。但是,Java與Ruby、Python不同,后者是動(dòng)態(tài)腳本語(yǔ)言,它們天生具有解釋執(zhí)行的特點(diǎn)(注意:當(dāng)然Python支持預(yù)編譯,Ruby也將在YARV中開(kāi)始支持,這里指它們的解釋執(zhí)行狀態(tài))。我們常見(jiàn)的Python和Ruby發(fā)行版本基本上都包括自己的解釋器(這也是它們的核心組件),但是Java是一種需要中間編譯過(guò)程的語(yǔ)言,默認(rèn)情況下它無(wú)法直接解釋運(yùn)行,也沒(méi)有相應(yīng)的解釋器。  閱讀全文
          posted @ 2007-07-27 09:56 Tin 閱讀(1538) | 評(píng)論 (1)編輯 收藏

               摘要: http://developer.yahoo.com/yslow/

          這是一個(gè)配合Firebug工作的firefox插件。能夠?qū)δ阍L問(wèn)的頁(yè)面進(jìn)行分析。
          它可以:
          * 性能報(bào)告
          * HTTP/HTML信息匯總
          * 列出頁(yè)面中的組件
          * 包含了JSLint  閱讀全文
          posted @ 2007-07-27 09:33 Tin 閱讀(688) | 評(píng)論 (0)編輯 收藏

               摘要: 在這里發(fā)現(xiàn)了一個(gè)技巧:http://rubyisawesome.com/2007/7/10/mysql-secrets-g-instead-of
          在Mysql的命令行工具里面給查詢加入一個(gè)\G參數(shù)。橫向的表結(jié)構(gòu)會(huì)轉(zhuǎn)為使用縱向表結(jié)構(gòu)輸出,利于閱讀。  閱讀全文
          posted @ 2007-07-20 14:41 Tin 閱讀(5303) | 評(píng)論 (0)編輯 收藏

               摘要: 這是敏捷中國(guó)的一個(gè)討論,我問(wèn)了一下架構(gòu)設(shè)計(jì)是否在敏捷迭代過(guò)程中有一席之地?大家產(chǎn)生了如下討論。如果我的引用冒犯了當(dāng)事人,請(qǐng)email我,我會(huì)及時(shí)修改的。我希望大家能夠一起討論這個(gè)topic。  閱讀全文
          posted @ 2007-07-20 09:03 Tin 閱讀(878) | 評(píng)論 (0)編輯 收藏

               摘要: 13日,Joyent宣布基于GPL v2將Slingshot和Connector開(kāi)源。Joyent Slingshot允許開(kāi)發(fā)者將Rails應(yīng)用程序部署為與桌面應(yīng)用行為一致,可以在線或者離線(保持同步),可以拖拽,與所有其它桌面應(yīng)用程序交互等。另外,Joyent還提供了Connector產(chǎn)品和一組可以與Joyent Slingshot協(xié)同工作的第三方應(yīng)用程序。  閱讀全文
          posted @ 2007-07-18 14:34 Tin 閱讀(1409) | 評(píng)論 (0)編輯 收藏

               摘要: JavaEye的站長(zhǎng)Robbin Fan在他的博客中對(duì)SAAS(軟件即服務(wù))進(jìn)行了一番討論,他總結(jié)了目前常見(jiàn)的一些SAAS應(yīng)用,并且總結(jié)了這些應(yīng)用的特點(diǎn),展望了SAAS的發(fā)展方向。
          2005年,David Heinemeier Hansson將自己在項(xiàng)目中使用的基于Ruby的開(kāi)發(fā)框架剝離并開(kāi)源,從此世界上有了RoR(Ruby on Rails)的響亮名號(hào)。很快,Rails在其它語(yǔ)言中也架設(shè)了自己的高速軌道,從此Rails思想處處開(kāi)花,受到了廣大開(kāi)發(fā)者的擁護(hù),這是Rails的敏捷本質(zhì)決定的。隨著RoR閃現(xiàn)在開(kāi)發(fā)者眼前的還有Rails背后的公司37signals,這是一家位于芝加哥的創(chuàng)業(yè)型小公司,雖然他們的員工目前還是個(gè)位數(shù),但是開(kāi)發(fā)出的產(chǎn)品卻有超過(guò)100萬(wàn)人在使用……  閱讀全文
          posted @ 2007-07-18 14:32 Tin 閱讀(1522) | 評(píng)論 (3)編輯 收藏

               摘要: David Heinemeier Hansson(以下簡(jiǎn)稱DHH,Ruby on Rails作者)在最近的一篇Blog“如果我真的喜歡HTML、CSS和Javascript,那又怎么了?”(What if I actually like HTML, CSS, and JavaScript?)中闡述了他對(duì)RIA未來(lái)的一種看法。他認(rèn)為目前在三大Web標(biāo)準(zhǔn)規(guī)范下的HTML、CSS和Javascript是一套足夠強(qiáng)大的工具箱,這些技術(shù)提供給開(kāi)發(fā)人員的功能并沒(méi)有影響到Web應(yīng)用的發(fā)展,并且隨著像Firebug和其他優(yōu)秀Javascript庫(kù)的支持下,Web程序員的日常開(kāi)發(fā)工作已經(jīng)非常愜意了。  閱讀全文
          posted @ 2007-07-18 14:28 Tin 閱讀(1210) | 評(píng)論 (0)編輯 收藏

          posted @ 2007-06-06 11:12 Tin 閱讀(714) | 評(píng)論 (0)編輯 收藏

          posted @ 2007-05-23 11:44 Tin 閱讀(1082) | 評(píng)論 (4)編輯 收藏

          posted @ 2007-01-26 14:37 Tin 閱讀(1920) | 評(píng)論 (2)編輯 收藏

               摘要: TSS上面Ganesh同志的文章內(nèi)容是非常有益的,討論了session的這兩個(gè)api的區(qū)別。get是每次都會(huì)從數(shù)據(jù)庫(kù)取數(shù)據(jù)以保證數(shù)據(jù)的可靠。而load則會(huì)返回一個(gè)proxy,相當(dāng)于一個(gè)存根,訪問(wèn)的時(shí)候從當(dāng)前session或者h(yuǎn)ibernate二級(jí)緩存中查找,如果找不到則從數(shù)據(jù)庫(kù)中Lazy Load一下。從Hibernate的復(fù)雜性上來(lái)說(shuō),這個(gè)概念應(yīng)該算比較容易理解的,而且這種存在也是非常合理的。順便里面還補(bǔ)充了一下JPA里面也有類似的getReference方法,行為類似load。看完文章你會(huì)開(kāi)始注意這個(gè)細(xì)節(jié)。
          可是,這個(gè)細(xì)節(jié)的下面卻引起了n多人的討論,討論的核心就是Hibernate是不是有太多細(xì)節(jié)了?
          很多人說(shuō)這樣不是OO的,很多人說(shuō)Hibernate的細(xì)節(jié)造成它復(fù)雜,有人說(shuō)Hibernate影響了他們的工作效率,等等,反正反對(duì)者站出來(lái)很多。我想這是可喜的。
          說(shuō)明在Java的Killer-APP組合Spring+Hibernate后面還是有很多持懷疑態(tài)度的人的,我們隨時(shí)都需要提問(wèn)題的大腦!
          所以,我們也思考一下吧:  閱讀全文
          posted @ 2007-01-26 14:27 Tin 閱讀(5155) | 評(píng)論 (2)編輯 收藏

               摘要: 本文翻譯自IBM DeveloperWorks上的一篇文章,該文講述了測(cè)試分類(test categorization)的概念,本身這個(gè)概念很簡(jiǎn)單,但是卻實(shí)際的解決我們常見(jiàn)的問(wèn)題,在我們的測(cè)試龐大到一定地步的時(shí)候,測(cè)試的運(yùn)行時(shí)間過(guò)長(zhǎng),維護(hù)成本很高,我們?nèi)绾文軌虮WC持續(xù)集成(CI)的正常運(yùn)行?那就是通過(guò)測(cè)試分類。所以我翻譯了這片文章,希望對(duì)大家有所幫助。  閱讀全文
          posted @ 2006-12-01 00:30 Tin 閱讀(1953) | 評(píng)論 (0)編輯 收藏

               摘要: 這個(gè)問(wèn)題出現(xiàn)在這種情況,你的每個(gè)testCase都需要使用某一種初始化比較耗時(shí)的對(duì)象(資源),舉例如數(shù)據(jù)庫(kù)連接、Spring Context。我們遇到的問(wèn)題是Selenium測(cè)試中開(kāi)啟和關(guān)閉瀏覽器,如果一個(gè)test啟動(dòng)關(guān)閉(我們的程序還需要登錄和注銷),這樣測(cè)試的時(shí)間會(huì)拖的很長(zhǎng),給持續(xù)集成帶來(lái)了困難。
          所以……  閱讀全文
          posted @ 2006-11-17 17:29 Tin 閱讀(13550) | 評(píng)論 (1)編輯 收藏

               摘要: Selenium Remote Control項(xiàng)目組很高興的宣布Selenium Remote Control 0.9.0發(fā)布。
          你可以在這里察看:
          http://www.openqa.org/selenium-rc/
          也可以在這里下載:
          http://www.openqa.org/selenium-rc/download.action
          0.9.0包括很多酷玩意,包括frame支持,多窗口支持(用來(lái)測(cè)試那些不能夠在子frame中運(yùn)行的應(yīng)用),一個(gè)Konqueror瀏覽器launcher,新的cookie管理功能,和Firefox 2.0與IE7的支持。還包括一個(gè)試驗(yàn)性的在Selenium代理中直接的SSL支持,一個(gè)新的實(shí)驗(yàn)性的“代理注入(proxy injection)”模式允許我們通過(guò)修改HTTP代理來(lái)更好的控制我們測(cè)試的應(yīng)用程序。
          Have Fun!  閱讀全文
          posted @ 2006-11-15 15:57 Tin 閱讀(1570) | 評(píng)論 (3)編輯 收藏

               摘要: 歡迎所有對(duì)Selenium感興趣的(翻譯的過(guò)程就是很好的學(xué)習(xí))或者已經(jīng)使用Selenium的同學(xué)積極參加,參加的方式可以是:直接參與翻譯,編寫(xiě)原創(chuàng)學(xué)習(xí)文章并添加到相關(guān)資源列表,交流心得并將心得添加到相關(guān)資源列表,提供使用的視頻片斷,推薦好的Selenium文章進(jìn)入翻譯計(jì)劃,提出你自己的意見(jiàn)。以上方式都非常歡迎,可以發(fā)信給我進(jìn)行溝通(iamtin AT gmail.com)。
          目前我們使用JavaScud的Wiki進(jìn)行翻譯工作,網(wǎng)址如下:
          http://wiki.javascud.org/display/SEL/Home  閱讀全文
          posted @ 2006-11-13 15:31 Tin 閱讀(2705) | 評(píng)論 (42)編輯 收藏

               摘要: 濃縮一下:
          1、何時(shí)、何目的來(lái)用Selenium選擇不同。RC、Fit適合從需求階段就開(kāi)始寫(xiě)。而IDE錄制則適合后補(bǔ)。
          2、重構(gòu)支持。RC重構(gòu)友好一些。Fit重構(gòu)不友好。
          3、IDE目前限定于FF,做跨瀏覽器RC比較好。但是IDE錄制后的代碼很方便轉(zhuǎn)為RC方式。
          4、跨域兼容性問(wèn)題,IDE解決的比較好。  閱讀全文
          posted @ 2006-10-30 21:33 Tin 閱讀(3270) | 評(píng)論 (3)編輯 收藏

               摘要: 我用的是Eclipse 3.2,操作系統(tǒng)是WinXP SP2。
          需要把eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar里面的swt-win32-3232.dll解壓縮出來(lái)拷貝到WINDOWS\SYSTEM32里面。
          然后就OK了。
          是在Eclipse里面運(yùn)行Springside的ANT Task的時(shí)候,如果需要通過(guò)console輸入交互信息,則會(huì)報(bào)這個(gè)錯(cuò)。應(yīng)該是因?yàn)镋clipse的console依賴于那個(gè)本地庫(kù),而平常我們安裝Eclipse不會(huì)拷貝那個(gè)庫(kù)。大概如此了。  閱讀全文
          posted @ 2006-09-11 15:10 Tin 閱讀(8899) | 評(píng)論 (12)編輯 收藏

               摘要: 說(shuō)說(shuō)遺憾:
          1、OSGi在B/S架構(gòu)中還不好應(yīng)用。雖然例子是B/S的,可是居然是Servlet模型,里面解釋了目前Equinox項(xiàng)目也在擴(kuò)展應(yīng)用服務(wù)器支持和JSP支持等,可是起碼目前還不成熟。
          2、模塊的粒度很成問(wèn)題。目前OSGi的契約機(jī)制與java interface機(jī)制對(duì)比一下。OSGi不可能完全取代本地的interface式的解藕,當(dāng)然人家也沒(méi)這么說(shuō)。只使我擔(dān)心過(guò)渡設(shè)計(jì)后,過(guò)細(xì)的Bundle肯定會(huì)得不償失,所以需要有人設(shè)計(jì)/計(jì)劃這個(gè)粒度。這個(gè)可能與基于Web services的SOA架構(gòu)面臨類似的問(wèn)題,需要好的架構(gòu)師。
          3、文檔不友好么?說(shuō)實(shí)話,很感謝BlueDavy和OSGi觀察者那些大牛的貢獻(xiàn)。但是感覺(jué)production的樣例工程還是很難搞到(其實(shí)Eclipse plugins的例子滿多哈,可惜沒(méi)啥文檔,需要硬著頭皮看),對(duì)應(yīng)的指導(dǎo)文檔還沒(méi)出現(xiàn)。BlueDavy提供的servlet實(shí)現(xiàn)我們不可能跟上,畢竟簡(jiǎn)單也是一種需求。(那誰(shuí)說(shuō)過(guò)度設(shè)計(jì)比設(shè)計(jì)不足更可怕,那個(gè)我不是唱反調(diào),我希望我們都能找到那個(gè)sweet point,有個(gè)好的參照那最好不過(guò)了)。 <  閱讀全文
          posted @ 2006-09-06 11:27 Tin 閱讀(4256) | 評(píng)論 (2)編輯 收藏

               摘要: 先分析一下在輕量化的Java EE下面他們存在的意義:
          1、有的人說(shuō)過(guò)在Web項(xiàng)目中Manager和DAO是同意的,尤其是在透明ORM存在下,DAO由于往往是CRUD的實(shí)現(xiàn)場(chǎng)所,而Manager卻往往是薄薄的一層門面,很多人就在質(zhì)疑兩者的合并問(wèn)題。可是robbin曾經(jīng)進(jìn)行過(guò)一個(gè)精辟的分析,雖然兩者做的看起來(lái)差不多,可是兩者的事務(wù)屬性卻不一樣,Manager應(yīng)該有清晰的事務(wù)界限,而DAO不應(yīng)關(guān)心于此。也就是說(shuō)Manager可能會(huì)將幾個(gè)DAO方法組合調(diào)用,然后封裝在一個(gè)事物中。這樣說(shuō)明確了兩者的一個(gè)重要區(qū)別,我們也能體會(huì)在使用聲明事務(wù)的時(shí)候有一個(gè)分明的事務(wù)界限是很有意義的,否則就有可能把Manager中的一個(gè)事物拆分,這樣實(shí)際上就錯(cuò)誤了。
          2、有些人質(zhì)疑透明ORM存在的情況下DAO存在的意義,因?yàn)橥该鱋RM基本已經(jīng)隔離了不同數(shù)據(jù)庫(kù)的方言區(qū)別。這個(gè)也很簡(jiǎn)單,Rod大叔分析過(guò)。透明ORM存在的情況下DAO起到了隔離透明ORM與EJB或者JDBC實(shí)現(xiàn)的作用,這幾種實(shí)現(xiàn)實(shí)際上是應(yīng)該考慮到的。
          3、還有一個(gè)問(wèn)題,就是DAO是否應(yīng)該隱藏透明ORM的API。因?yàn)榍懊嬲f(shuō)到了DAO起  閱讀全文
          posted @ 2006-09-05 21:52 Tin 閱讀(3648) | 評(píng)論 (3)編輯 收藏

               摘要: 今天TSS和InfoQ都轉(zhuǎn)了一篇Spring與EJB3的讀后感,我就看了下,標(biāo)題和介紹滿吸引人的。內(nèi)容嘛其實(shí)有點(diǎn)不過(guò)癮,但是先記錄下來(lái)吧。
          http://www.devx.com/Java/Article/32314/0/page/1
          總的來(lái)看Spring+Hibernate與JPA很相似,它們都是基于pojo的持久化。
          Hibernate Session和JPA Entity Manager基本上等價(jià),但是要記住他們的兩個(gè)重要區(qū)別。Hibernate session是一個(gè)實(shí)體緩存也是一個(gè)ORM引擎的接口。而JPA中這兩個(gè)概念是分開(kāi)的。Persistence context作為緩存而entity manager則作為ORM引擎的接口。…………  閱讀全文
          posted @ 2006-09-04 20:45 Tin 閱讀(4260) | 評(píng)論 (1)編輯 收藏

               摘要: 在Eclipse里面運(yùn)行functional-test這個(gè)target的時(shí)候發(fā)現(xiàn)報(bào)錯(cuò)(test target葉出錯(cuò)的):
          Could not create task or type of type: junit.
          我就想當(dāng)然的把junit-3.8.1.jar拷貝到我的%ANT_HOME%/lib下面了,結(jié)果問(wèn)題依舊。
          ......
          解決方法目前看最好的就是在Eclipse的Window->Preferences->Ant->Runtime->Classpath里面Ant_Home你指定一下就可以了,可以是你自己的Ant或者Eclipse/plugins里面的ant,這沒(méi)關(guān)系,然后它就會(huì)自動(dòng)掃描相應(yīng)/lib目錄了(之前你應(yīng)該已經(jīng)把junit-3.8.1.jar拷貝過(guò)去了)。
          然后就搞定了。注意,只有在Eclipse運(yùn)行Ant才有可能遇上這個(gè)問(wèn)題:D
            閱讀全文
          posted @ 2006-08-31 13:02 Tin 閱讀(1490) | 評(píng)論 (0)編輯 收藏

               摘要: 由于失業(yè)后家中又有人病了,還有很多亂七八糟的事忙,反正沒(méi)怎么寫(xiě)也沒(méi)怎么看程序,很慚愧!有朋友說(shuō)不厚道,賴我,我不厚。這兩天看《應(yīng)用Rails進(jìn)行敏捷Web開(kāi)發(fā)》,RoR和去年剛看的時(shí)候感覺(jué)一樣,很舒服,現(xiàn)在可能對(duì)Java和Ruby的了解都比以前深一些了,看這本書(shū)會(huì)有些想法。不過(guò)沒(méi)時(shí)間紀(jì)錄,頭腦里也亂七八糟的,我只能說(shuō)是胡言亂語(yǔ)。這本不是什么文章,這是我的一個(gè)工作習(xí)慣,只要開(kāi)電腦就開(kāi)個(gè)Notepad記錄工作情況,是個(gè)流水賬,由于Blog過(guò)于冷清,把它貼出來(lái),別拍磚了,我已經(jīng)蔫了:Q  閱讀全文
          posted @ 2006-08-30 12:39 Tin 閱讀(1093) | 評(píng)論 (0)編輯 收藏

               摘要: 今天先看看Springside的bookstore的domain設(shè)計(jì),這不是springside的重點(diǎn),先看看。
          從hbm看起,在springside-bookstore/src/org.springside.bookstore.commons.domain.hbm下面放著這些hbm。
          在Order.hbm.xml里面可以看到一個(gè)list映射。list映射可以按照順序持久化one-to-many關(guān)系。使用了映射后OrderItem就沒(méi)有單獨(dú)的class聲明了,完全以一種組件的形式被映射到Order里面。  閱讀全文
          posted @ 2006-08-30 12:30 Tin 閱讀(2452) | 評(píng)論 (3)編輯 收藏

               摘要: 1、Java從語(yǔ)言轉(zhuǎn)向平臺(tái)。如同.Net,JVM本身提供了平臺(tái)的抽象。將會(huì)擴(kuò)展動(dòng)態(tài)語(yǔ)言與腳本語(yǔ)言的支持。
          2、企業(yè)應(yīng)用的開(kāi)發(fā)過(guò)程將簡(jiǎn)化,如MDD一類,但目的是集中精力開(kāi)發(fā)商業(yè)邏輯,而不是純簡(jiǎn)化代碼或者什么什么。小型應(yīng)用可能會(huì)轉(zhuǎn)向動(dòng)態(tài)語(yǔ)言或腳本語(yǔ)言所營(yíng)造的舒適開(kāi)發(fā)框架,如RoR,或其它Rails。
          3、富領(lǐng)域模型替代貧血模型,基于JPA。
          4、目前的AOP、IoC工具依然會(huì)流行,而不一定會(huì)限定于EJB3模型中。事實(shí)說(shuō)了算,Spring這種事實(shí)性標(biāo)準(zhǔn)影響力還是很大的。
          5、分布式的考慮,可伸縮型問(wèn)題凸顯。如何透明實(shí)現(xiàn)分布式是個(gè)關(guān)鍵性問(wèn)題,AOP是技術(shù)契機(jī)。
          6、Web2.0會(huì)產(chǎn)生巨大影響力,但Java絕不是唯一選擇。Java要找好自己的位置,同時(shí)在平臺(tái)上最好能夠更多的融合,如讓JVM支持PHP/Ruby/Python。
          7、Web部分競(jìng)爭(zhēng)激烈,并會(huì)持續(xù)。EJB3的JSF命運(yùn)難測(cè)。看Web2.0的浪潮了。  閱讀全文
          posted @ 2006-07-10 14:09 Tin 閱讀(1911) | 評(píng)論 (2)編輯 收藏

          posted @ 2006-06-06 11:28 Tin 閱讀(4615) | 評(píng)論 (3)編輯 收藏

               摘要: WebWork的result實(shí)現(xiàn)非常實(shí)用,它很好的解決了View渲染的靈活性問(wèn)題。這才是MVC模式的優(yōu)勢(shì)所在,而像JSF那樣幫定JSP的MVC就吃不到這個(gè)甜頭了。說(shuō)WebWork2是Model 2 MVC的巔峰就在這些靈活的地方。
          閑扯這個(gè)不是主要目的。現(xiàn)在Rome是Java下最常用的RSS包,最近消息似乎要轉(zhuǎn)入Apache的Abdera合并變成更強(qiáng)大的聚合引擎。用Rome生成和解析RSS都很方便。今天討論一下使用ROME給網(wǎng)站生成RSS,并通過(guò)WebWork2的Result機(jī)制渲染。
          最初是從WebWork的Cookbook上看到的RomeResult的文章,一看就會(huì),我這里其實(shí)不過(guò)是舉個(gè)詳細(xì)點(diǎn)的例子,注意我使用的是WebWork 2.2.2和Rome 0.8:  閱讀全文
          posted @ 2006-06-05 22:25 Tin 閱讀(3389) | 評(píng)論 (7)編輯 收藏

          posted @ 2006-05-24 09:54 Tin 閱讀(789) | 評(píng)論 (0)編輯 收藏

               摘要: 在Hibernate中獲取有關(guān)聯(lián)關(guān)系的pojo。我是指例如一個(gè)User(用戶)擁有一個(gè)many-to-one的屬性Unit(單位),但是有時(shí)有些用戶的Unit屬性為空,如果按單位查詢用戶的時(shí)候那些單位為null的用戶就會(huì)被遺漏,如何調(diào)取呢?這本來(lái)是很簡(jiǎn)單的,但是我想當(dāng)然的使用了Restriction.eq,但是不行,后來(lái)看了手冊(cè)才發(fā)現(xiàn)應(yīng)該使用Restrictions.isNul。下面是Test代碼...  閱讀全文
          posted @ 2006-05-11 13:09 Tin 閱讀(2385) | 評(píng)論 (0)編輯 收藏

               摘要: 這是擦拭法的本意。
          實(shí)際上BadClass()實(shí)例化以后Class里面就不包括T的信息了,對(duì)于Class而言T已經(jīng)被擦拭為Object。而真正的T參數(shù)被轉(zhuǎn)到使用T的方法(或者變量聲明或者其它使用T的地方)里面(如果沒(méi)有那就沒(méi)有存根,這里指ParameterizedTyp),所以無(wú)法反射到T的具體類別,也就無(wú)法得到T.class。
          而getGenericSuperclass()是Generic繼承的特例,對(duì)于這種情況子類會(huì)保存父類的Generic參數(shù)類型,返回一個(gè)ParameterizedType,這時(shí)可以獲取到父類的T.class了,這也正是子類確定應(yīng)該繼承什么T的方法。
          我們應(yīng)該利用這種特性,這對(duì)實(shí)現(xiàn)模版方法非常有用。  閱讀全文
          posted @ 2006-05-08 21:37 Tin 閱讀(2576) | 評(píng)論 (3)編輯 收藏

               摘要: 這兩天太忙了,沒(méi)時(shí)間寫(xiě)B(tài)log,業(yè)余時(shí)間又扒了一次google的拖拽,對(duì)比了netvibes的,差不多,讓后就寫(xiě)了個(gè)注釋,順便學(xué)習(xí)。
          google用了混淆,js里面的命名比較暈。我花了些時(shí)間把他們翻譯成容易看懂的命名,并且作了注釋,希望對(duì)大家有幫助。
          可以這里下載我的例子:
          http://www.aygfsteel.com/Files/iamtin/google_drag.rar
          //可拖拽Element的原形,用來(lái)將event綁定到各個(gè)鉤子,這部分市比較通用的,netvibes也是基本完全相同的實(shí)現(xiàn)
          //這部分推薦看dindin的這個(gè),也會(huì)幫助理解,http://www.jroller.com/page/dindin/?anchor=pro_javascript_12
          var Drag = {
          //對(duì)這個(gè)element的引用,一次只能拖拽一個(gè)Element
          obj:null,
          //element是被拖拽的對(duì)象的引用,elementHeader就是鼠標(biāo)可以拖拽  閱讀全文
          posted @ 2006-04-27 22:40 Tin 閱讀(15262) | 評(píng)論 (34)編輯 收藏

               摘要: 為我們的項(xiàng)目寫(xiě)的一個(gè)輕量的分頁(yè)API。目的在于將分頁(yè)與數(shù)據(jù)查詢的邏輯完全剝離。我以前看過(guò)robbin發(fā)的通過(guò)detachedCriteria實(shí)現(xiàn)的分頁(yè)那片貼子,里面把分頁(yè)和數(shù)據(jù)查詢結(jié)合在一起了。而我覺(jué)得分開(kāi)更輕量,而且替換也比較容易。但是這個(gè)實(shí)現(xiàn)中有一個(gè)反模式,在邏輯中生成了代碼,無(wú)奈之選,為了簡(jiǎn)便。其中字符生成可以自己擴(kuò)展i18n實(shí)現(xiàn),應(yīng)該非常容易。
          分頁(yè)實(shí)現(xiàn)的接口:  閱讀全文
          posted @ 2006-03-31 12:30 Tin 閱讀(3490) | 評(píng)論 (6)編輯 收藏

               摘要: 使用jakarta commons-upload。
          升級(jí)到2.2.2后發(fā)現(xiàn)上傳中文會(huì)亂碼。
          經(jīng)過(guò)跟蹤發(fā)現(xiàn)在com.opensymphony.webwork.dispatcher.DispatcherUtils的prepare(HttpServletRequest request, HttpServletResponse response)方法。
          2.2.1->2.2.2時(shí)這個(gè)方法發(fā)生了非常的的變化。
          2.2.1時(shí):
          public void prepare(HttpServletRequest request, HttpServletResponse response) {
          if (encoding != null) {
          try {
          request.setCharacterEncoding(encoding);
          } catch (Exception e) {
          LO  閱讀全文
          posted @ 2006-03-30 21:40 Tin 閱讀(3971) | 評(píng)論 (11)編輯 收藏

               摘要: 這是一篇很有趣的文檔,所以摘要一下,其實(shí)類似閱讀筆記,好像是3/25發(fā)布的:
          這時(shí)基于對(duì)以下人的采訪:
          JSF Jacob Hookom
          RIFE Geert Bevin
          Seam Gavin King
          Spring MVC Rob Harrop
          Spring Web Flow Rob Harrop and Keith Donald
          Stripes Tim Fennell
          Struts Action 1 Don Brown
          Tapestry Howard Lewis Ship
          Trails Chris Nelson
          WebWork Patrick Lightbody
          Wicket Eelco Hillenius
          里面問(wèn)了每個(gè)框架的人6個(gè)相同的問(wèn)題,很好的體現(xiàn)了各個(gè)Web框架的不同之處。如果配合Rod Johnson的J2EE Development Without EJB等書(shū)中對(duì)Web MVC的闡述會(huì)更加深刻的理解各種框架的思想和使用場(chǎng)合。我閱讀后很有收獲,所以將全文摘  閱讀全文
          posted @ 2006-03-30 16:28 Tin 閱讀(3202) | 評(píng)論 (0)編輯 收藏

               摘要: 今天瀏覽WW的Wiki,結(jié)果無(wú)意發(fā)現(xiàn)ww:date標(biāo)簽的用法,撓頭一想以前沒(méi)有見(jiàn)過(guò)呀,仔細(xì)一看原來(lái)是2006/3/21才加上的。
          會(huì)頭看看項(xiàng)目發(fā)現(xiàn)用的ww 2.2.1中沒(méi)有這個(gè)標(biāo)簽,心想是不是發(fā)布新版本了?
          果不出所料!發(fā)現(xiàn)OPENSYMPHONY已經(jīng)發(fā)布2.2.2了。
          不過(guò)2.2.2是在Opensymphony下的最后一個(gè)版本了,以后的版本就會(huì)以Struts Action 2.0的形式發(fā)布了,而后者今年8月才發(fā)布,中間的日子估計(jì)只能靠nightly build了。
          說(shuō)說(shuō)變化,發(fā)現(xiàn)增加了RichTextEditor,經(jīng)考察就是我們熟悉的FCK Editor。發(fā)現(xiàn)還增加了nifty corners,這是一個(gè)不用images的圓角容器(css+js),估計(jì)用在了某個(gè)theme里面。還有J2SE5的支持也更加完善,現(xiàn)在已經(jīng)可以支持泛型Collection的反射(無(wú)需-conversion文件了),還支持annotation風(fēng)格的validation聲名(如此像Stripes那樣的Web框架就沒(méi)什么可吹噓的了)。其它的變化請(qǐng)參考他們的ReleaseNotes。   閱讀全文
          posted @ 2006-03-28 20:00 Tin 閱讀(2571) | 評(píng)論 (3)編輯 收藏

               摘要: BJUG的Cleverpig說(shuō)起Stripes,正好前兩天在TSS上看到Simon Brown的Blog,對(duì)它有點(diǎn)感性認(rèn)識(shí),所以今天就看了一下,說(shuō)些粗陋的感受:
          皮毛上的觀感:
          1、使用Annotation配置。將Action影射、返回View、默認(rèn)Command注冊(cè)、是否驗(yàn)證這些東西都通過(guò)Annotations搞,挺有意思。
          2、它也包裝了自己的Tag,Tag從感官上感覺(jué)很像WebWork的風(fēng)格(估計(jì)Stripes也是過(guò)這個(gè)來(lái)實(shí)現(xiàn)bind,和Spring MVC相同吧,不過(guò)沒(méi)仔細(xì)看Stripes的bind方式)。但是它好像很方便與JSTL共用,所以我覺(jué)得它可能和Spring MVC類似,把變量拷貝到request里面,而不是WebWork那樣的VlueStack。
          3、它的Validation很Cool,用Annotation設(shè)定Validation相當(dāng)舒適。
          4、它里面的event似乎挺有意思,也就是說(shuō)一個(gè)Action可以對(duì)應(yīng)多個(gè)method,它管它叫Event。現(xiàn)在WebWokr和Spring MVC對(duì)這都有支持,但是Annotation帶  閱讀全文
          posted @ 2006-03-22 21:36 Tin 閱讀(1453) | 評(píng)論 (0)編輯 收藏

               摘要: 遇到了一個(gè)奇怪的“瀏覽器兼容問(wèn)題”……
          是這樣的,登陸頁(yè)面工作不正常,在firefox下總是沒(méi)有登陸,根本就沒(méi)有觸發(fā)webwork的filter dispatcher。
          打開(kāi)我的三劍客:IE、Firefox、Opera測(cè)試,發(fā)現(xiàn)只有Firefox不行(Mozzila內(nèi)核的都不行)。
          然后花了3個(gè)多小時(shí)找原因,翻遍網(wǎng)絡(luò):weblogic、webwork、fireforx所有關(guān)鍵詞都搜索了,沒(méi)有收獲。
          然后開(kāi)始sniffer,看報(bào)文。
          經(jīng)過(guò)多次分析,發(fā)現(xiàn)firefox根本就沒(méi)有post那個(gè)form!
          然后又是繼續(xù)的分析還是無(wú)果,一籌莫展……  閱讀全文
          posted @ 2006-03-14 21:12 Tin 閱讀(544) | 評(píng)論 (2)編輯 收藏

               摘要: Webwork是標(biāo)準(zhǔn)的請(qǐng)求風(fēng)格Web MVC,類似的有Struts、Spring MVC。這這種風(fēng)格的MVC中都使用了前端控制器模式(企業(yè)架構(gòu)模式),也就是說(shuō)一個(gè)URL會(huì)被解析然后派發(fā)到對(duì)應(yīng)的Action解析,而View調(diào)用的是Action處理后的Form對(duì)象或者Command對(duì)象(Rod的Without EJB)。
          上面引用了一些經(jīng)典的言論,而它們和“頁(yè)面控制器風(fēng)格Action復(fù)用”有什么關(guān)系呢?
          嘿嘿,頁(yè)面控制器在這里指到了View的Page里面依然可以調(diào)用控制器(在Webwork中就是Action)。如果是以前肯定有人會(huì)說(shuō),如果用JSP我隨時(shí)可以在Page里面寫(xiě)scriptlet,什么東西都能調(diào)用……
          可是,現(xiàn)在不一樣了。我們希望讓View單純一點(diǎn),不要有雜亂無(wú)章的邏輯參與其中。
          可是,如果要是如上面所說(shuō)那么Action在它的一個(gè)請(qǐng)求生命周期就要做所有的事……這樣一是使Action邏輯變得復(fù)雜,二是會(huì)變得難以復(fù)用。
          所以,說(shuō)到這里就引出了這個(gè)主題:
          1、在頁(yè)面調(diào)用控制器
          2、復(fù)用控制器邏輯  閱讀全文
          posted @ 2006-03-10 14:45 Tin 閱讀(2592) | 評(píng)論 (4)編輯 收藏

               摘要: 根據(jù)生日計(jì)算年齡可以通過(guò)Calendar實(shí)現(xiàn)。最簡(jiǎn)單可以考慮get(Calendar.DAY_OF_YEAR)來(lái)簡(jiǎn)單修正年齡,但是遇到生日在閏年的2月29之后,或者今年是閏年的2月29之后可能出現(xiàn)計(jì)算不準(zhǔn),誤差一天。所以還是老實(shí)判斷年月日好了。
          public static int getAge(Date birthDay) throws Exception {
          Calendar cal = Calendar.getInstance();

          if (cal.before(birthDay)) {
          throw new IllegalArgumentException(
          "The birthDay is before Now.It's unbelievable!");
          }

          int yearNow = cal.get(Calendar.YEAR);
          int monthNow =   閱讀全文
          posted @ 2006-03-10 10:00 Tin 閱讀(2614) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 肥乡县| 临邑县| 武义县| 平阳县| 云安县| 台安县| 金溪县| 扬中市| 桐城市| 房山区| 马关县| 登封市| 滦平县| 上思县| 永吉县| 铜梁县| 读书| 清丰县| 贵德县| 建湖县| 罗田县| 沐川县| 青铜峡市| 晋中市| 申扎县| 类乌齐县| 达拉特旗| 平顶山市| 犍为县| 旺苍县| 黄平县| 古蔺县| 库车县| 仁布县| 元阳县| 泗水县| 广丰县| 新和县| 台山市| 东宁县| 正宁县|