剛剛換了工作,下周去新的公司上班。復(fù)雜的心情,很難說的出是一種什么的感覺。中午經(jīng)理請我吃飯,本該我請他的,他一定要付錢。老實說,經(jīng)理對我非常不錯,但是,很多東西是很難說的。上個月向經(jīng)理提出辭職,他表示了理解。新公司在上地,這就意味著要重新找房子。感覺北邊的房子比南邊的房子要貴出一頭,找了個兩居,明天打算搬過去。呵呵,也正在找人合租。
posted @
2006-03-03 14:04 ronghao 閱讀(848) |
評論 (4) |
編輯 收藏
Tomcat是接觸最久的應(yīng)用服務(wù)器,同時也被它的classloading愚弄過好多次。印象中比較深的一次是建立了一個web應(yīng)用,使用oracle數(shù)據(jù)庫,我把oracle的jdbc driver放到了WEB-INF/lib目錄下面,然后給Tomcat配置了數(shù)據(jù)源,在這個應(yīng)用里面連接這個數(shù)據(jù)源,來訪問數(shù)據(jù)庫。看起來一切正常,可是一啟動Tomcat,就報出一個錯誤,說是找不到driver類。后來知道這是由于Tomcat的classloading機制造成的。總的來說,Tomcat開源、簡單,文檔清楚,又學(xué)習(xí)過一陣它的源碼,是我了解最多的應(yīng)用服務(wù)器了,所以就從它開始。
運行Tomcat就是運行org.apache.catalina.startup.Bootstrap類的main方法,和運行普通的應(yīng)用程序并無二致,所以Java 2的classloading機制適用于這個過程。但是Bootstrap運行起來以后,會加載common、server下面的類,加載webapps下面的web應(yīng)用。這些類的加載是由不同的classloader來完成的。Tomcat的classloader結(jié)構(gòu)如下:
BootStrap classloader(加載JRE/lib下的rt.jar和其他重要jar文件) |
é
ExtClassLoader (加載JRE/lib/ext下的jar文件,Java擴展框架使用) |
é
AppClassLoader ($CATALINA_HOME/bin/下bootstrap.jar, commons-logging -api.jar,commons-daemon.jar,$JAVA_HOME/lib/tools.jar,jmx.jar) |
é
common (加載$CATALINA_HOME/common/,Tomcat本身和Web App共享類) |
é é
Catalina (加載$CATALINA_HOME /server/,Tomcat本身使用的類) |
Shared (加載$CATALINA_BASE /shared/,所有Web App共享類) |
é
WebappClassLoader (加載各個Web App的class,不同的Web App被隔離開) |
Tomcat在啟動的時候,完全忽略了class path的設(shè)置,而重新設(shè)置了class path,所以AppClassLoader 載入的類將不是class path設(shè)置的類。
Tomcat沒有完全使用Java 2的parent delegation模型。這一點體現(xiàn)在WebappClassLoader上。在一個web app中,載入類的過程是這樣的:
首先檢查本地的WebappClassLoader,如果沒有,
則請求它的父ClassLoader,即shared。
從shared開始,采用parent delegation,即shared請求它的父classloader common來載入類,這個過程一直延續(xù)到BootStrap classloader。
正是因為這種機制,使我們在兩個Web app中有相同的class的時候,不會相互干擾。比如說,兩個app中都使用了log4j,在WEB-INF/lib下面分別有一份log4j.jar,配置輸出到不同的文件。因為WebappClassLoader僅對本app可見,所以log4j可以獨立工作,而不相互影響。但是,如果我們把這兩個app下面的log4j.jar移動到shared目錄或者common目錄,那他們就會把日志輸出到同樣的文件了,因為這時候是共享的。
記得當(dāng)時看到WebappClassLoader的這個特性,心下暗喜,盤算著自己能不能寫一個java.lang.String類,放到WEB-INF/lib下面,而得到優(yōu)先加載的機會呢?馬上興沖沖地進行試驗,但是結(jié)果讓我失望,翻出tomcat的源碼一看,發(fā)現(xiàn)以java.,javax.,sun.,開頭的class,WebappClassLoader一概不予理會,直接把燙山芋扔給它的父loader了。另外,Tomcat文檔交待,遇到加載org.xml.sax.* ,org.w3c.dom.* ,org.apache.xerces.* ,org.apache.xalan.* 這些包的class的請求,WebappClassLoader也不會受理。
引用地址:
posted @
2006-03-01 16:55 ronghao 閱讀(2713) |
評論 (0) |
編輯 收藏
個人比較懶一點,對異常處理也懶的可以。程序中異常分為Exception和RuntimeException。每個層定義一個RuntimeException,例如DAO層,就一個DaoRuntimeException;service層,就一個ServiceRuntimeException.所有該層中程序無法恢復(fù)的異常通通用各層的RuntimeException封裝扔出,最后統(tǒng)一捕捉有一個專門的異常處理類處理(這個類也就是讀出異常類中所包含的信息,最后告訴用戶:不好意思,系統(tǒng)問題,請通知那幫程序員!)
而Exception定義的比較多一點,其實僅僅是類的簽名不同而已。它們表達(dá)了不期望的各種事件流,可以通過它們來部分的控制事件邏輯。比如很簡單的一個UnauthorizedException,告訴客戶沒有權(quán)限等等,調(diào)用捕捉到這個異常就會改變事件流到相應(yīng)處理頁面提示用戶。
posted @
2006-02-20 15:36 ronghao 閱讀(691) |
評論 (2) |
編輯 收藏
好久沒有更新BLOG了,過完年回來就一直思考著要不要換個工作。老實說,自己目前的工作還是很不錯的,老板和經(jīng)理都很好,但是問題就是研發(fā)這塊人數(shù)太少,自己的工作從表現(xiàn)層到數(shù)據(jù)庫、用例分析包括CSS都有涉及,都懂點但都不精;并且所有的開發(fā)相關(guān)全部用的是開源,自己的提高有限,很多東西僅僅靠自己自學(xué)是遠(yuǎn)遠(yuǎn)不夠的,要有人來帶一帶。工作的時間越長,越感到自己學(xué)的東西太少太少。所以就想換一個大一點的公司更好的提高自己。
網(wǎng)上更新了簡歷,最近也有面試,很多都讓你去做外包。好象很多人對外包有看法,我也是。不做外包。
posted @
2006-02-15 10:52 ronghao 閱讀(560) |
評論 (2) |
編輯 收藏
周六報名參加了BEA UG活動。去的時候工作人員已經(jīng)在不斷的加凳子了。奇怪的是第一排竟然還有空位卻沒人去坐,于是很幸運的來得晚卻坐到了第一排。
BEA的張健的演講更傾向于BEA本身的一些東西,除了推介BEA貢獻(xiàn)的開源項目Beehive,他還用XMLBean和BEA的WorkShop做了演示,第一次見BEA的WorkShop還以為是Eclipse,兩者長得太象,后來張鍵說WorkShop是基于Eclipse的。總體感覺有點象給BEA做市場推廣的意思。呵呵,個人意見。
Perryn Folwer,使用Selenium為Web App進行自動功能測試。自己Selenium并不了解,Perryn Folwer說Selenium是用javascript寫的,整個演示給人的感覺是很舒服。看了用JAVA寫的Selenium測試腳本,代碼量還是不少的(僅僅是一個查詢),這樣如果覆蓋整個應(yīng)用程序會有多少代碼量呢?但是考慮到一旦測試腳本確定下來以后的工作將是非常輕松的,可以更快的得到用戶的反饋,這點代價也是值得的。
其實這次參加BEA UG最主要的還是想聽聽Michael Chen對AJAX的一些發(fā)展看法。試用過json,Bufflo,Demo都做的非常好,但自己關(guān)心的是如何把它運用到具體的項目中去,有沒有一些最佳實踐。Michael Chen強調(diào)了一個適用范圍:中小型應(yīng)用,但什么是大應(yīng)用與中小應(yīng)用的分界點還是比較模糊,Michael Chen說自己對Bufflo的應(yīng)用還是結(jié)合webwork一起用,取代webwork
的校驗部分,同時他還說到了一個什么TREE??(沒聽清)有意思的是Michael Chen在提到webwork的時候又順便把STRUTS鄙視了一通:)
總的感想是:真正感興趣的話題沒有深入地談,遺憾。對我們這些開發(fā)人員來說,參加幾個人或者十幾個人的小型聚會互相交流一下經(jīng)驗和想法也許會更好一點。
posted @
2006-01-23 11:04 ronghao 閱讀(535) |
評論 (0) |
編輯 收藏