ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>天天爽天天狠久久久,国产精品夜夜嗨,中日韩午夜理伦电影免费http://www.aygfsteel.com/SimonLei/You may say I am a dreamer, but I am not the only one.zh-cnMon, 09 Jun 2025 13:17:33 GMTMon, 09 Jun 2025 13:17:33 GMT60grails wicket plugin 的一个问题及修正http://www.aygfsteel.com/SimonLei/archive/2008/01/15/175390.htmlSimonLeiSimonLeiTue, 15 Jan 2008 02:38:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2008/01/15/175390.htmlhttp://www.aygfsteel.com/SimonLei/comments/175390.htmlhttp://www.aygfsteel.com/SimonLei/archive/2008/01/15/175390.html#Feedback1http://www.aygfsteel.com/SimonLei/comments/commentRss/175390.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/175390.html
http://graemerocher.blogspot.com/2007/05/grails-wicket-wonders-of-grails-plug-in.html

我试了一下,发现最新版æœ?0.3)çš„wicket插äšgåQŒè¿è¡Œhelloworld都有问题åQŒé”™è¯¯æ˜¯åQ?br />
wicket.markup.MarkupNotFoundException: Markup not found.

查看了一下原因,按照文档åQ?HelloWorld.html 是放åœ?grails-app/views 目录下的åQŒä½†æ˜?wicket 插äšg 没有修改classpath å’?resource 装蝲的èµ\径,也就是说åQŒå®žé™…上˜q™ä¸ª HelloWorld.html 对于 wicket 来说 是不可见的。但是如果把˜q™ä¸ª HelloWorld.html 攑֜¨ src/java 目录下,则可以正常运行ã€?br /> 惛_ˆ°äº†ä¸€ä¸ªç®€å•的解决æ–ÒŽ¡ˆåQŒä¿®æ”?$GRAILS_HOME/scripts/Package.groovyåQŒåœ¨ 146 行增加:
fileset(dir:"${basedir}/grails-app/views") {
include(name:
"**/**")
exclude(name:
"**/*.groovy")
}

ž®±åƒ src/java å½“ä¸­çš„èµ„æºä¸€æ øP¼Œå…¨éƒ¨æ‹¯‚´åˆ°ç›®æ ‡ç›®å½•下åQŒè¿™æ ïLš„æ•ˆæžœž®±å’Œæ”‘Öœ¨ src/java 目录下一样了ã€?br />
ä¸È«™åQ?http://blogsite.3322.org/



SimonLei 2008-01-15 10:38 发表评论
]]>
¾léªŒä¸ÖM¹‰å®Ïx­»äººå•ŠåQˆspring与osgi¾l“合当中遇到的问题)http://www.aygfsteel.com/SimonLei/archive/2006/12/28/90442.htmlSimonLeiSimonLeiThu, 28 Dec 2006 02:37:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2006/12/28/90442.htmlhttp://www.aygfsteel.com/SimonLei/comments/90442.htmlhttp://www.aygfsteel.com/SimonLei/archive/2006/12/28/90442.html#Feedback2http://www.aygfsteel.com/SimonLei/comments/commentRss/90442.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/90442.html首先看看我前几天的一½‹‡blog

spring ä¸?osgi的第一个障¼„?

eclipse3.1, spring2.0.1åQŒå°†spring.jar攑ֈ°ä¸€ä¸ªæ’件中åQŒåœ¨å¦ä¸€ä¸ªæ’件中åŽÖM‹É用ã€?最½Ž€å•的例子åQŒåœ¨context.getBean的时候就报了一个异常:

Caused by: org.xml.sax.SAXParseException: cvc - elt. 1 : Cannot find the declaration of element  ' beans ' .

先是搜了一遍,没有发现很有帮助的内宏V€‚然后跟了一下,发现˜q˜æ˜¯å› äØ“xsd的映ž®„找不到。而造成˜q™ä¸ªé—®é¢˜çš„原因, 是在 spring.jar当中的META-INF/spring.schemas ˜q™ä¸ªæ‰¾ä¸åˆ°ã€?/font>

而这个找不到的最æ ÒŽœ¬åŽŸå› åQŒæ˜¯å› äؓ在eclipse当中åQŒMETA-INF目录是不能够被其他插件找到的。也ž®±æ˜¯è¯ß_¼ŒMETA-INF 目录是拥有spring.jar的那个插件所独占的,而其他插件就½Ž—依赖于˜q™ä¸ªæ’äšgåQŒä¹Ÿæ˜¯æ— æ³•找到META-INF目录下的文äšgåQ?ä»Žè€ŒæŠ›å‡ø™¿™ä¸ªå¼‚常ã€?/font>

解决问题的办法有几个åQŒæœ€½Ž€å•的莫过于拷贝spring.schemasæ–‡äšg到需要的插äšg中,另一个办法是把springçš„context 装蝲ž®±æ”¾åœ¨spring.jar所在的插äšg中,或者改eclipse的代码ã€?:(

˜q™ä¸ªé—®é¢˜è§£å†³ä¹‹åŽåQŒç´§æŽ¥ç€½W¬äºŒä¸ªé—®é¢˜å°±æ˜?

Unable to locate NamespaceHandler  for  namespace http: // www.springframework.org/schema/aop

造成˜q™ä¸ªçš„原因和½W¬ä¸€ä¸ªç±»ä¼û|¼Œž®†spring.handlers拯‚´åˆ°META-INF目录下就ok了ã€?br />
上面是我以前的一个经验,今天仔细研究了一下,发现自己掉进äº?¾léªŒä¸ÖM¹‰çš„圈套ã€?/font>

˜q™ä¸ª¾léªŒæ˜¯è¿™æ ïL§¯ç´¯è“v来的åQšåœ¨åˆšå¼€å§‹å°è¯•ä‹É用eclipse的时候,用的æ˜?.0å’?.1Mx¾pÕdˆ—åQŒå½“æ—?不知道osgi是个什么东è¥?:$ 创徏的几个插ä»Óž¼Œéƒ½æ²¡æœ‰åˆ›å»ºosgi bundle manifest。也ž®±æ˜¯è¯ß_¼Œ 只有plugin.xmlåQŒè€Œæ²¡æœ‰META-INF/MANIFEST.MFæ–‡äšg的。但是在˜qè¡ŒæœŸï¼Œeclipse会自动的 从plugin.xml当中è¯Õd–信息åQŒç”ŸæˆäÍæ—¶çš„MANIFEST.MFæ–‡äšgåQŒæ”¾åœ?runtimeçš?configuration/org.eclipse.osgi/manifests 目录下。而生成这个MANIFEST.MFæ–‡äšgåQŒæ˜¯ 通过 PluginConverterImpl ˜q™ä¸ª¾cÀL¥å®žçŽ°çš„ï¼Œåœ¨å®ƒçš?isValidPackageName æ–ÒŽ³•中,所有的 META-INF或者以META-INF开头的目录åQŒéƒ½ä¸ä¼šè¢«è‡ªåŠ¨çš„export出去åQŒä»Žè€Œåœ¨ä¸´æ—¶ç”Ÿæˆçš„MANIFEST.MF æ–‡äšg中,永远不会有META-INF目录的exportã€?/font>

当时刚开始接触eclipseå’ŒosgiåQŒæ ¹æœ¬ä¸çŸ¥é“自己当时最佳的解决æ–ÒŽ¡ˆž®±æ˜¯åˆ›å¾ä¸€ä¸?bundle manifeståQ?然后在其中将META-INF目录export出来。而是通过盲目的修改代码来¾l•过˜q™ä¸ªå¼¯ã€‚后来这个弯¾l•过åŽÖMº†åQ?留给我的¾léªŒž®±æ˜¯åQšMETA-INF˜q™ä¸ªç›®å½•åQŒæ˜¯æ’äšg独äín的,别的插äšg不允许访问的ã€?/font>

于是åQŒåœ¨å‰å‡ å¤©ï¼Œå½“spring.jar当中的几个META-INF目录下的文äšg讉K—®ä¸äº†æ—Óž¼Œæˆ‘ä¹Ÿè®¤äØ“˜q™ä¸ª¾léªŒæœ‰ç”¨åQ?差点ž®±åŽ»æ”¹eclipse的代码了。幸好尝试了一下,把spring.jar所在的插äšg中,ž®†META-INF目录å…׃ín出来åQ?å±…ç„¶ž®±å¥½äº†ã€‚ä»”¾l†æŸ¥äº†ä¸€ä¸‹ï¼Œå‘现屏蔽META-INF的代码只出现在PluginConverterImpl˜q™ä¸ª¾cÕd½“中ã€?回头想了惻I¼Œ¾lˆäºŽæ˜Žç™½è‡ªå·±˜q™æ¬¡æ˜¯æŽ‰åœ¨ç»éªŒä¸»ä¹‰çš„坑里面了ã€?/font>

¾léªŒä¸ÖM¹‰å®Ïx­»äººå•Šã€‚唉ã€?br />
ä¸È«™åQ?http://blogsite.3322.org/



]]>
SUN Tech 2006 见闻http://www.aygfsteel.com/SimonLei/archive/2006/09/29/72729.htmlSimonLeiSimonLeiFri, 29 Sep 2006 02:09:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2006/09/29/72729.htmlhttp://www.aygfsteel.com/SimonLei/comments/72729.htmlhttp://www.aygfsteel.com/SimonLei/archive/2006/09/29/72729.html#Feedback4http://www.aygfsteel.com/SimonLei/comments/commentRss/72729.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/72729.html
会场讑֜¨æœ€æ‹¥å µçš„北四环中èµ\åQŒèµ¶åˆîC¼šåœºå·²¾læŽ¥˜q?点,匆忙报道之后åQ?
½W¬ä¸€æ„Ÿè§‰æ˜¯ä¸åƒåŽ»òq´é‚£ä¹ˆå¤§çš„场面了åQŒåªæœ‰ä¸¤ä¸ªä¼šåœºï¼Œè€Œä¸”很奇怪的是,
参展的其他厂商,也只有AMD一å®Óž¼Œæ˜‘Ö¾—有点å†äh¸…ã€?

James Gosling又一‹Æ¡å‡ºçŽîCº†åQŒä¸˜q‡åšçš„æ¼”è®²åÆˆæ²¡æœ‰å¾ˆå¤šæ–°é²œçš„ä¸œè¥¿ï¼Œå€¼å¾—
注意的倒是Ruby on Rails出现在他的演讲内容当中,˜q™å¤§æ¦‚也与JDK未来版本
要支持动态语­a€åQŒä»¥åŠSUN把jruby的两个äh招进åŽÀLœ‰ä¸€¾pÕdˆ—的关¾p…R€‚随后有
一个SUN的技术展½Cºï¼Œå…¶ä¸­æœ‰æ„æ€çš„一个是 SPOT(Small Programmable Object Tech)åQ?br />有点象《少数派报告》当中阿汤哥用的手套åQŒç”¨æ‰‹å¥—来当做鼠标一æ ïLš„åœ?
½IÞZ¸­ä½¿ç”¨åQŒå¾ˆæ˜¯ä¸é”™ã€?

随后一整天的演è®ÔŒ¼Œ¾l™æˆ‘的感觉,重头戏是NetbeansåQŒå…¶‹Æ¡æ˜¯AjaxåQŒå†å…¶æ¬¡æ˜?
Java EE 5。感觉今天一¾pÕdˆ—的活动都与Netbeans有关åQŒAjaxå’ŒJava EE 5包括
Java MEåQŒéƒ½æ—¶ä¸æ—¶çš„与Netbeans挂上钩。从今天被Netbeans‹z—脑的结果来看,
Netbeans现在¼‹®å®ž­‘Šæ¥­‘Šå¥½ç”¨ï¼ŒåŠŸèƒ½ä¹Ÿè¶Šæ¥è¶Šå¼ºå¤§ã€‚Eclipse如果按照现在的发å±?
速度åQŒç¡®å®žæœ‰äº›å±é™©ã€‚不˜q‡ï¼Œä»Žå¦ä¸€ä¸ªè§’度看åQŒæœ‰ç«žäº‰æ‰èƒ½ä¿ƒè¿›å‘展åQŒä¹Ÿä¸ç®—是äšg
坏事�

å…¶ä»–æ–šw¢çš„æ”¶èŽøP¼ŒåŒ…括对JAVA SE 7 的一些特性了解,Java EE 5的一些介¾lï¼Œä»¥åŠ
关于Java EE 5的参考实çŽ?GlassFish的介¾lï¼Œ™åÞZ¾¿˜q˜å¬äº†ä¸€äº›Java ME的东西,ä¹?
有些意思,可惜暂时用不上�

今天有一些感触:
 
好的技术,如果没有好的工具支持åQŒä¹Ÿæ˜¯å¾ˆéš„¡”Ÿå­˜çš„。这ž®Þp”惛_ˆ°æˆ‘们自己的IMP框架åQ?br />˜q‡åŽ»ž®†é‡ç‚ÒŽ”¾åœ¨frameworkå’Œengine上,而对于designer的投入则˜qœè¿œä¸å¤Ÿã€‚这样造成的现
象就是限制了开发效率,从而没有能够最大的发挥IMP框架的作用�

Netbeans虽然好用åQŒä¹Ÿèƒ½å¤Ÿä»Žä¸€å®šç¨‹åº¦ä¸Šæé«˜ç”Ÿäñ”力。但是我˜q˜æ˜¯é‚£ç§è§‚点åQŒçœ‹ä¸ŠåŽ»
很美的代码生成机åˆÓž¼Œå¾€å¾€åªæ˜¯èŠ‚çœäº†â€œåˆ›å»ºâ€çš„æ—‰™—´æˆæœ¬åQŒè€Œå¯¹äºŽâ€œä¿®æ”¹â€çš„æ•?br />率提高,却不一定有帮助ã€?

JSF感觉˜q˜æ˜¯æ²¿è¢­äº†Struts的东西太多,ž®Þq®—通过Ajaxçš„renderåQŒæ„Ÿè§‰è¿˜æ˜¯ä¸èƒ½ç®—非常好的
Component Framework。还是不如Echo2 ;)

回家的时候,正赶上北四环的拥堵高峎ͼŒå›žåˆ°å®¶å·²¾lå¾ˆæ™šäº†åQŒå†™çš„å¾ˆé›¶äØ•åQŒä¸çŸ¥é“明天
会不会有什么大的收莗÷€‚反正今天感觉就是被‹z—了一天的脑,宛_¾—我都惌™£…一个Netbeans
来玩玩了�

SUN Tech 2006½W¬äºŒå¤?

又经历了痛苦çš?个小时到达了会场åQŒä»Šå¤©çš„SUN公司主题居然是“开源的好处”,
重点提出开源最¾lˆæœ‰åˆ©äºŽå¼€æºè€…,åïL§°SUN从OpenSaloris的开源当中获得了很多
好处。不知道前几òq´å¤§å®¶å¼ºçƒˆè¦æ±‚SUN 开源的时候,是不是也是这¿Uè®ºè°ƒã€‚也懒得
åŽÀLŸ¥ä»¥å‰çš„æ–°é—ÖMº†åQŒä¸˜q‡æ€È®—逐渐有将Java开源的打算了,而且SUNåïL§°è¦å°†æ‰€æœ‰çš„
软äšg开源,˜q™å¯¹äºŽopen source½C‘ÖŒºåQŒä¹Ÿ½Ž—是件好事ã€?

今天æ€Èš„来说内容不是很丰富,˜q™ä¸€‹Æ¡çš„Tech DayåQŒæ€Õd…±ä¹Ÿå°±æ˜¯å‡ ä¸ªäh在讲åQŒä¸€ä¸ªäh
讲好几场åQŒè¿™åœ¨ä»¥å‰çš„Tech Day是很ž®‘出现的ã€?br />
今天的收获如下:

听了一场关于swing和美化swing的讲座,感觉SUN对于java的投入,比以前更大了ã€?br />以前åQŒå…³äºŽswing的微词很多,也有很多不好用的反馈åQŒä½†æ˜¯åœ¨å‡ ä¸ªjdk版本的发布过
½E‹å½“中都没有改进åQŒæœ€å…¸åž‹çš„莫˜q‡äºŽContentPaneåQ?Lastly, after seven years, we've made
jFrame.add equivalent to jFrame.getContentPane().add()."。在JDK5之后åQŒå¯ä»¥æ„Ÿè§‰åˆ°SUN
对于用户½C‘ÖŒºçš„反馈开始逐渐重视。对于swing当中的功能较å¼Þqš„问题åQŒä¸“门整了一ä¸?br />swinglab来解冟뀂其中还有个swingx的子™å¹ç›®åQŒä¹Ÿæœ‰ä¸ž®‘çš„swing功能增强¾l„äšg可以用ã€?

Apache DerbyåQŒä¹Ÿž®±æ˜¯åŽŸæ¥IBMæ”¶è´­informix时收购到的CloudscapeåQŒçŽ°åœ¨åˆæœ‰äº†ä¸€ä¸ªæ–°
名字å?Java DBåQŒè€Œä¸”会随着JDK6一起发布。Java DB的功能比较完善,据说性能也不
错,åïL§°æ”¯æŒ300G的数据量没有问题。如果这æ ïLš„话,不仅hsql可以抛掉åQŒè€Œä¸”说不å®?br />mysql也可以不用了。我现在也很喜欢˜q™ç§æ—¢å¯ä»¥embedåQŒåˆå¯ä»¥åšäØ“cs的数据库åQŒçްåœ?br />做rails的就是用sqliteåQŒæ„Ÿè§‰ä¹Ÿå¤Ÿç”¨äº†ã€‚Java DB˜q˜æœ‰ä¸ªå¾ˆå¼ºçš„功能是,可以ž®†æ•°æ®æ‰“åŒ…äØ“
jaræ–‡äšgåQŒåšä¸ºåªè¯Èš„dbåQŒæ”¾åœ¨å…‰ç›˜æˆ–è€…å…¶ä»–åœ°æ–¹ï¼ŒåšäØ“å¤‡ä†¾å’Œè¿˜åŽŸï¼Œä»¥åŠåšdemo应用æ”?br />在光盘上åQŒåº”该都有很大的用处ã€?

JDK for script language. 在JDK6当中åQŒå·²¾læ”¯æŒ?rubyå’Œjavascript两种脚本语言了ã€?br />功能上感觉有点象BSFåQŒä½†æ˜¯ç”±äºŽéšç€JDK6一起发布,所以以后媄响力会更大ã€?br />而且åQŒåšæ¼”讲的äh也提刎ͼŒjruby的开发者进入SUN公司åQŒææ€•不只是用ScriptEngine
支持script语言˜q™ä¹ˆ½Ž€å•。今天体验了一下印度äh说英语,¼‹®å®žæ˜¯å¼º...

另外˜q˜å¬äº†ä¸€ä¸?MBeanåQŒConcurrenceæ–šw¢çš„东西,收获也有一些。例如在JDK6当中åQ?br />MBeanServer¾~ºçœž®±å¯åŠ¨äº†åQŒè€Œä¸åƒJDK5里,需要用一个命令行参数才能启动ã€?
两天下来åQŒæ„Ÿè§‰è¿™ä¸€æœŸçš„SUN Tech Day和以往最大的区别ž®±æ˜¯åQŒè¿™ä¸€æœŸå®Œå…¨æ˜¯è¢?br />SUN自己垄断了,没有别的公司演讲åQ?不讨论别的公司的内容åQŒæ²¡æœ‰åˆ«çš„公司参展ã€?br />­a€å¿…ç§° NetBeansåQŒæ“ä½œç³»¾lŸå¿…¿U?Solaris。从一个角度来看,SUN公司¼‹®å®ž ¿U¯æžçš?br />参与åˆîCº†å¼€æºç¤¾åŒºå½“中,òq¶ä¸”比以前更加接˜q‘ç”¨æˆøP¼Œä¹Ÿæ›´¿U¯æžçš„响应用æˆïLš„requestã€?br />˜q™ä¸€ç‚¹ï¼Œä»ŽNetbeans的进展神速, 到JDK最˜q‘几个版本的新特性增加速度åQŒéƒ½æ¯”JDK5
以前要好很多。这对于Java的进一步发展,可以说是一件好事。从另一ä¸?角度来看åQ?br />˜q™ä¸€å±ŠTech Day表现出来的情况,不知道是应该说SUN更加有了自主意识åQŒè¿˜æ˜¯åº”该说
SUN¼‹®å®žæ²¡æœ‰å¾ˆå¥½çš„组¾l?˜q™æ¬¡ä¼šè®®ã€‚从参加演讲的äh员,到展厅的布置来看åQ?br />都不如往届。不知道是不是SUN财务紧张造成的,hoho.

又花了两个小时才从首堵北京的北四环中路到了家åQŒæ„Ÿè§‰ä»Šòq´çš„Tech DayåQ?br />最大的收获是被‹z—脑了,也体会到了目前最火爆的Ajax是如何的火爆ã€?

ä¸È«™: http://blogsite.3322.org/jspwiki/

]]>
代码的卫生、习惯及其它...http://www.aygfsteel.com/SimonLei/archive/2006/04/03/38839.htmlSimonLeiSimonLeiMon, 03 Apr 2006 02:27:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2006/04/03/38839.htmlhttp://www.aygfsteel.com/SimonLei/comments/38839.htmlhttp://www.aygfsteel.com/SimonLei/archive/2006/04/03/38839.html#Feedback1http://www.aygfsteel.com/SimonLei/comments/commentRss/38839.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/38839.html
最˜q‘å¿™åQŒå‘现家里开始脏乱差了。仔¾l†æƒ³æƒ»I¼Œå…¶å®žä¹‹æ‰€ä»¥ä¼š˜q™æ ·åQ?br />是因为经常发现有点脏的地方,也懒得动åQŒæ€ÀL˜¯æƒ³ç­‰åˆ°å•¥æ—¶å€™å¤§æ‰«é™¤
一下子全部清理òq²å‡€ã€‚后来地面越来越脏,ž®Þp¶Šæ¥è¶Šä¸æ³¨æ„ï¼Œ˜q›å…¥äº?br />一个恶性åó@环ã€?br />
不禁联想到“破½H—户”理论,有个破窗æˆïLš„½C‘ÖŒºåQŒä¼šé€æ¸å˜å¾—不适合居住ã€?br />又想åˆîC¸€ä¸ªç»å¸¸çœ‹åˆ°çš„现象åQŒå¦‚果一个电¾U¿æ†ä¸‹æœ‰ä¸€åŒ…垃圾,只要清理
不及æ—Óž¼Œ˜q‡æ®µæ—‰™—´åQŒè¿™ä¸ªç”µ¾U¿æ†ž®×ƒ¼šå˜æˆä¸€ä¸ªåžƒåœ‘Ö †ã€?br />
扯这么多åQŒå…¶å®žæƒ³è¯´çš„æ˜¯ä»£ç çš„卫生。代码,刚开始都是很òq²å‡€çš„,只是
随着旉™—´æŽ¨ç§»åQŒéšæ‰‹äؕ扔的果皮¾U¸å±‘逐渐增多åQŒæœ€åŽå¼€å§‹å‘臭,然后˜q™ä¸ª
代码ž®±æ²¡æœ‰äh愿意åŽÈ¢°äº†ã€‚在™å¹ç›®ä¸­ï¼Œ¾lå¸¸¼„°åˆ°˜q™æ ·çš„æƒ…å†üc€‚同æ ïLš„功能åQ?br />哪怕以前曾¾læœ‰äººå†™˜q‡ï¼Œå¾ˆå¤šäºø™¿˜æ˜¯å€‘֐‘于自己重头开始写。原因是什么?
½E‹åºå‘˜åªä¿¡ä“Q自己的代码,˜q™æ˜¯å…¶ä¸­çš„一个原因。另一个原因是åQŒä»¥å‰çš„
代码¼‹®å®žæœ‰ä¸ªéœ€è¦å­¦ä¹ ä¸Šæ‰‹çš„æ—‰™—´ã€‚打个比方,一间房子,不适合居住åQŒéœ€è¦?br />˜q›è¡Œä¸€ç•ªæ‰“扫才能住˜q›åŽ»åQŒè¿™ž®±æ˜¯å·²æœ‰ä»£ç ã€‚而新的代码,则是½E‹åºå‘˜äº²æ‰?br />åž’è“v来,亲手装修的,虽然耗时长,辛苦åQŒä½†æ˜¯å¿ƒç†æ„Ÿè§‰å¥½ã€‚但是呢åQŒè¿™ä¸?br />新房子对于其它程序员来说åQŒå·²¾læ—¶ä¸€ä¸ªå †æ»¡åžƒåœ¾ä¸é€‚合居住的旧房子了ã€?br />于是åQŒæ¯ä¸ªç¨‹åºå‘˜éƒ½äº²æ‰‹å¾ä¸€ä¸ªæˆ¿å­ï¼Œå¦‚此重复下去ã€?br />
那么åQŒè¦é¿å…˜q™ç§æ— æ„ä¹‰çš„重复力_ЍåQŒä¸€æ–šw¢æ˜¯ç¨‹åºå‘˜æœ¬èín意识的纠正。打æ‰?br />一个旧房子åQŒè™½ç„¶è„ä¸€ç‚¹ï¼Œä½†æ˜¯é€šå¸¸æ¯”æ–°å»ÞZ¸€ä¸ªæˆ¿å­è¿˜æ˜¯è¦å¿«å’ŒçœåŠ›ã€‚å¦ä¸€ä¸?br />æ–šw¢åQŒç¨‹åºå‘˜åº”该有这æ ïLš„信念åQŒä¸èƒ½è®©è‡ªå·±çš„代码变成垃圑֠†ã€‚也ž®±æ˜¯è¯ß_¼Œ
不能容忍自己的代码中堆满垃圾�br />
å¦‚ä½•é¿å…ä»£ç æˆäØ“åžƒåœ¾å †ï¼Ÿä¸ªähè®¤äØ“åQŒå°±è±¡â€œç ´½H—户”理è®ÞZ¸€æ øP¼Œä¸èƒ½å¯¹ç ´äº?br />的窗户听之ä“Q之,而要ž®½å¿«ä¿®å¤ã€‚否则的话,其他人看到第一袋垃圑֜¨˜q™é‡ŒåQ?br />觉得扔第二袋垃圾ž®±æ²¡æœ‰ç½ªæ¶æ„ŸåQŒè‡³ž®‘罪恶感不那么强。大家可以想象一下,
在一个窗明几亮的环境中,你扔果皮¾U¸å±‘之前都会三思。但是站在一个垃圑֠†
上面åQŒä½ æ‰”垃圾之前就不会有什么顾虑了。因此,保持卫生的一个好习惯ž®±æ˜¯åQ?br />不放˜q‡ç¬¬ä¸€ä¸ªåžƒåœ¾ã€?br />
当然åQŒå¦‚果判别某ŒDµä»£ç æ˜¯ä¸æ˜¯åžƒåœ¾åQŒæˆ–者及时发现第一ŒDµåžƒåœ¾ä»£ç ï¼Œé‚£å°±æ˜?br />另一个话题,例如用utåQŒç”¨code reviewåQŒç­‰½{‰ã€‚《Working Effectively with Legacy Codeã€?br />˜q™æœ¬ä¹¦é‡Œé¢ï¼Œæåˆ°äº†Legacy code 的定义:

Code without tests is bad code. It doesn't matter how well written it is;
it doesn't matter how pretty or object-oriented or well-encapsulated it is.
With tests, we can change the behavior of our code quickly and verifiably.
Without them, we really don't know if our code is getting better or worse.

有äh会觉得我½Ž¡çš„太细åQŒä¸æªæž¶æž„、设计,反而去½Ž¡ä»£ç ï¼Œåªè§æ ‘木不见‹‚®æž—。我个äh
的看法,架构、设计再好,都需要代码来˜q›è¡Œå®žçŽ°ã€‚å¦‚æžœè¿™ä¸ªåŸº¼‹€æ²¡æ‰“好,以后˜q™ä¸ª
代码æ€ÀL˜¯ä¼šå˜æˆæ— äººæƒ³¼„°çš„垃圾堆ã€?br />
当然åQŒæˆ‘也反å¯ÒŽ— æ„ä¹‰çš„追求完¾ŸŽã€‚我不是个有‹zç™–çš„ähåQŒæ‰€ä»¥ï¼Œä»£ç åˆîC»€ä¹ˆç¨‹åº¦å°±½Ž—是
òq²å‡€çš„了åQŸæˆ‘个äh的看法是åQŒClean code that works。当然这一点其实不å®ÒŽ˜“辑ֈ°åQŒä½†æ˜?br />åšäØ“ä¸€ä¸ªç¨‹åºå‘˜åQŒæˆ‘˜q˜æ˜¯åŠªåŠ›åŽ»è¿½æ±‚è¿™ä¸€ç‚¹çš„ã€?br />
ä¸È«™åQ?http://blogsite.3322.org/jspwiki/


]]>
在eclipse为核心的framework中支持Jsphttp://www.aygfsteel.com/SimonLei/archive/2005/12/26/25411.htmlSimonLeiSimonLeiMon, 26 Dec 2005 02:58:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2005/12/26/25411.htmlhttp://www.aygfsteel.com/SimonLei/comments/25411.htmlhttp://www.aygfsteel.com/SimonLei/archive/2005/12/26/25411.html#Feedback0http://www.aygfsteel.com/SimonLei/comments/commentRss/25411.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/25411.htmlåœ?a >上次的文ç«?/a>当中åQŒæŠŠ eclipseåšäØ“web framework的核心,òq¶ä¸”使得 servlet 的定义和mappingåšäØ“æ‰©å±•ç‚¹ï¼Œ¼‹®å®žç‹? 方便。不˜q‡çŽ°åœ¨åˆé¢äÍ一个问题,有个历史遗留¾pȝ»Ÿå½“中åQŒæœ‰jsp 的应用。而jsp与servlet 的一ä¸? 很大的区别在于,它需要用 javac åŽÕdš¾~–译。这ž®×ƒ‹É得问题复杂化了,特别是ä‹Éå¾?class loader 的关¾pÕd˜å¾—更复杂ã€?p>我们首先看一下这里面有几¿U?class loaderåQŒé¦–先,启动 eclipse 的是一个system loaderåQŒç„¶å? æ˜?eclipse starter çš?loaderåQŒå¯åŠ¨æˆ‘ä»¬çš„æ ¸å¿ƒclass loaderåQŒè¿™ä¸ªæ ¸å¿ƒè´Ÿè´£å¯åŠ?jetty 和我ä»? çš?web app两个插äšgåQŒæ¯ä¸ªæ’仉™ƒ½æœ‰è‡ªå·Þqš„ eclipse bundler loader。而jetty插äšg启动jetty 应用服务器,应用服务器本íw«æœ‰ context class loaderåQŒå®ƒ˜q˜è¦è´Ÿè´£åŽ»è£…è½?WEB-INF/lib 下的所有jaræ–‡äšgåQŒä»¥å?WEB-INF/classes 目录下的文äšgåQŒåšä¸ºç¼–译期使用ã€?/p>

˜q™é‡Œä¸ä»…class loader 众多åQŒè€Œä¸”关系复杂。一不小心就å®ÒŽ˜“抛出 class not found 异常åQŒæˆ–者是 class cast 异常。相对而言åQŒåªæ”¯æŒservlet ž®Þq‹ ½Ž€å•ï¼Œå› äØ“åªè¦æŠ?servlet çš?context class loader ç”?eclipse bundler loader 替换掉就行。而jsp的编译机åˆÓž¼Œå¯ÆD‡´äº†é—®é¢˜çš„出现ã€?/p>

我对于这¿Uå¤æ‚classloader情况的心得,ž®±æ˜¯æŠŠé”™¾l¼å¤æ‚çš„ class loader 关系¾|‘拉ç›ß_¼Œå˜æˆä¸€‹‚? 树。这æ ïLš„好处ž®±æ˜¯åQŒå¯¹äºŽloader 的关¾pÀL¯”较清晎ͼŒå‡ºçްClassNotFoundExceptionå’? ClassCastException˜q™ä¸¤¿Uæƒ…å†ëŠš„时候,都狠å®ÒŽ˜“判断怎么回事åQŒä¸ä¼šè¢«¾l•晕。这¿Uæ—¶å€™ï¼Œå•步跟踪 只是找死åQŒæŠŠclassloader关系ç”Õd‡ºæ¥ï¼Œæœ‰åˆ©äºŽå¯¹é—®é¢˜çš„分析ã€?/p>

于是ç”ÖMº†˜q™æ ·ä¸€ä¸ªå›¾åQŒæŠŠå¤æ‚的网拉直了,问题ž®Þp¿Žåˆƒè€Œè§£äº†ã€?/p>


其中的关键就æ˜?LauncherClassLoader。这个就是我们自å·Þqš„ClassLoaderåQŒæŠŠå®ƒè®¾¾|®äØ“ servlet context classloader çš?parentåQŒåƈ且把 context classloader 的装载顺序改变成为先由parent 装蝲åQŒå†è‡ªå·±è£…è²çš„æ¨¡å¼ã€‚è¿™æ øP¼Œjsp的编译还是由 context loader åŽÕd¤„理,我就不管了。其他的 该装载的地方åQŒè¿˜æ˜¯æœ‰ eclipse bundler 去装载,˜q™æ ·é—®é¢˜åŸºæœ¬è§£å†³ã€?/p>

不过˜q™æ ·å…¶å®ž˜q˜æ˜¯æœ‰ä¸ªé—®é¢˜åQŒå¦‚果要åœ?jsp 当中调用某个插äšg当中çš?classåQŒé‚£ä¹ˆåœ¨¾~–译期就会出çŽ? 问题。不˜q‡ç”±äºŽç›®å‰åªæ˜¯è§£å†?legacy jsp 应用的问题,所以这个暂时不存在。我能想到的解决æ–ÒŽ¡ˆ 其实也狠½Ž€å•,把这äº?jar æ–‡äšgçš„url也做为扩展点出现åQŒé‚£ä¹ˆå½“jsp需要某个classæ—Óž¼Œåªè¦æŠŠå®ƒ 所需要的 jar æ–‡äšgçš?url åšäØ“ä¸€ä¸ªæ‰©å±•ï¼Œåœ?LauncherClassLoader 当中ž®†è¿™äº›jaræ–‡äšgæ·ÕdŠ åˆ? url loader 当中åQŒè€Œè¿™äº?url 会出现在 jsp 的编译class path当中ã€?/p>

ä¸È«™åQ?a >http://blogsite.3322.org/jspwiki/



]]>
忍无可忍åQŒæ— éœ€å†å¿â€”—终于决定改eclipse代码äº?/title><link>http://www.aygfsteel.com/SimonLei/archive/2005/12/15/24028.html</link><dc:creator>SimonLei</dc:creator><author>SimonLei</author><pubDate>Thu, 15 Dec 2005 06:01:00 GMT</pubDate><guid>http://www.aygfsteel.com/SimonLei/archive/2005/12/15/24028.html</guid><wfw:comment>http://www.aygfsteel.com/SimonLei/comments/24028.html</wfw:comment><comments>http://www.aygfsteel.com/SimonLei/archive/2005/12/15/24028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/SimonLei/comments/commentRss/24028.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/SimonLei/services/trackbacks/24028.html</trackback:ping><description><![CDATA[<span><span><span>一直以来,eclipse 对于 fragment 的概念都是一¿Uè¡¥å……,而不是覆盖的机制ã€? 也就是说åQŒfragment 里的 class 会在 host plugin çš?class 装蝲之后而装载ã€? 只有 host plugin 里面没有扑ֈ°åQŒæ‰ä¼šåŽ»æ‰?fragment 里面的类ã€?p>我们的frameworkåQŒç›®å‰æ˜¯ç”׃¸€ä¸ªä¸“门的ž®ç»„在维护。其他小¾l„是不能随意改它的代码的ã€? 但是åQŒå½“有些情况下,使用˜q™ä¸ªframework的开发小¾l„需要修改这部分代码åQŒè€Œè¿™ä¸ªä¿®æ”? 又只是局部的åQŒåªæœ‰è¿™ä¸ªå°¾l„需要用的,那么现在ž®±å¾ˆå¤´ç—›ã€‚后来用一¿Ujar替换的方å¼? 来满­‘Œ™¿™ä¸ªéœ€è¦ï¼Œä½†æ˜¯æžå¾—开发è“v来很¾JçåQŒéœ€è¦ç»å¸¸çš„exportã€?/p><p>一直以来也没有åŽÕdЍ eclipse 的代码,˜q™æ¬¡æŠŠåº”用启动的模式从deployæ”ÒŽˆlaunch 之后åQ? 别的地方都好è¯ß_¼Œå”¯æœ‰éœ€è¦å¤„ç?fragment 的这个地方很头痛ã€?/p><p>如果把eclipse fragment的装载顺序调整一下,先装è½?fragment 里的classåQŒå†è£…蝲 host plugin 里面çš?classåQŒè¿™ä¸ªé—®é¢˜å°±˜qŽåˆƒè€Œè§£äº†ã€‚framework开发小¾l„只需要处ç? 公用的代码,使用 framework 的小¾l„就可以用自å·Þqš„ fragment åŽÕd¤„理特ŒDŠçš„代码åQ? ˜q™ä¸ªä¸–界ž®±æ¸…净了。大安™ƒ½å¯ä»¥ç”?launch ˜q™ç§æ¨¡å¼æ¥å¯åŠ¨åº”ç”¨ï¼ŒåŠ å¿«åº”ç”¨å¼€å‘çš„æ•ˆçŽ‡ã€?/p><p>刚才改了一下,其实很简单,只是æ”?DefaultClassLoader ž®Þp¡Œäº†ï¼Œçœ‹ä¸€ä¸‹ä»£ç å°±çŸ¥é“è¯? 怎么攏V€‚后悔怎么没有早点改,呵呵ã€?/p>ä¸È«™åQ?<a >http://blogsite.3322.org/jspwiki/</a><a><br></a></span></span></span><img src ="http://www.aygfsteel.com/SimonLei/aggbug/24028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/SimonLei/" target="_blank">SimonLei</a> 2005-12-15 14:01 <a href="http://www.aygfsteel.com/SimonLei/archive/2005/12/15/24028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我不喜欢ror的一点——代码生æˆ?/title><link>http://www.aygfsteel.com/SimonLei/archive/2005/12/07/22830.html</link><dc:creator>SimonLei</dc:creator><author>SimonLei</author><pubDate>Wed, 07 Dec 2005 03:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/SimonLei/archive/2005/12/07/22830.html</guid><wfw:comment>http://www.aygfsteel.com/SimonLei/comments/22830.html</wfw:comment><comments>http://www.aygfsteel.com/SimonLei/archive/2005/12/07/22830.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/SimonLei/comments/commentRss/22830.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/SimonLei/services/trackbacks/22830.html</trackback:ping><description><![CDATA[<span><span><span>目前来说åQŒæœ€ä¸å–œ‹Æ¢çš„ž®±æ˜¯ä»£ç ç”Ÿæˆ˜q™ç§æœºåˆ¶ã€‚这个机制看èµäh¥ 很快åQŒèƒ½å¤Ÿå¿«é€Ÿçš„开发一个简单的应用。不敢说˜q™æ˜¯rails çš? 核心åQŒè‡³ž®‘是它吸引äh的一个优势,而正好是我所不喜‹Æ¢çš„一炏V€?p>其实对于代码生成˜q™ç§æœºåˆ¶åQŒåœ¨ Pragmatic Programmer 里面 ž®±å·²¾læåˆîCº†åQŒå«å?evil wizard。我很认同那本书里面的说法, 大部分的软äšg开发过½E‹ï¼Œæ˜?修改 而不æ˜?新徏 代码。也ž®?br>是说åQ? 真正好的代码和框æžÓž¼Œåº”该有对 change 支持比较好的机制ã€?/p><p>ruby on rails 能够æ ÒŽ®model快速的生成代码åQŒç¡®å®žæœ‰ä¸€äº›å¸å¼•力ã€? 但是åQŒä¸€æ—?model 发生变化åQŒè¿™æ—¶å€™ä»£ç ç”Ÿæˆå°±ä¸èƒ½èµ·ä½œç”¨äº†åQŒå› ä¸? 我重新生成代码会把我修改˜q‡çš„代码覆盖掉。如果手工进行编码的话,我也 没看出来它相当于jsp的优åŠÑ€‚当ç„Óž¼Œå®ƒçš„ mvc 以及 helper 分离çš? 机制¼‹®å®žæ¯”纯¾_¹çš„ jsp 要好åQŒä¸˜q‡å¯¹äºŽä»£ç ç”Ÿæˆè¿™ä¸€éƒ¨åˆ†åQŒæˆ‘不觉å¾? æ˜?rails å¯ÒŽˆ‘的吸引ã€?/p><p>ror大概也考虑到这一点,所以也有对 plugin å’?engine 的支持ã€? ˜q™ä¸¤ä¸ªä¸œè¥¿æˆ‘现在˜q˜æ²¡æœ‰ç ”½IÓž¼Œåº”该会比较有意思吧ã€?/p><br>ä¸È«™åQ?a >http://blogsite.3322.org/jspwiki/</a><br></span></span></span><img src ="http://www.aygfsteel.com/SimonLei/aggbug/22830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/SimonLei/" target="_blank">SimonLei</a> 2005-12-07 11:29 <a href="http://www.aygfsteel.com/SimonLei/archive/2005/12/07/22830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己启动jetty所遇到çš?session reset 问题http://www.aygfsteel.com/SimonLei/archive/2005/11/29/21833.htmlSimonLeiSimonLeiTue, 29 Nov 2005 07:53:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2005/11/29/21833.htmlhttp://www.aygfsteel.com/SimonLei/comments/21833.htmlhttp://www.aygfsteel.com/SimonLei/archive/2005/11/29/21833.html#Feedback2http://www.aygfsteel.com/SimonLei/comments/commentRss/21833.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/21833.html
在eclipse 当中启动çš?jetty æ—Óž¼Œç”׃ºŽè¦æ ¹æ?extension point 来找åˆ?br>相应çš?servlet 定义å’?mappingåQŒå› æ­¤è‡ªå·±å–得一ä¸?contextåQŒç„¶åŽå¾€é‡Œé¢
addHandler。开始只有一ä¸?servlet åQŒæ²¡æœ‰é—®é¢˜ï¼ŒåŽæ¥åˆæœ‰ä¸¤ä¸ªpluginåQŒå…¶ä¸?br>也有servlet/mapping的定义,然后ž®±æ€ÀL˜¯å‡ºçް session reset 的问题ã€?br>
å¼€å§‹è¿˜ä»¥äØ“æ˜¯è‡ªå·±åšçš„classloader çš„é—®é¢˜ï¼Œå› äØ“æ‹…å¿ƒè‡ªå·±åšçš„ loader 会äñ”ç”?br>不好的媄响。后来把日志¾U§åˆ«è°ƒé«˜ä¹‹åŽåQŒå‘现如果连¾l­åªè®‰K—®ä¸€ä¸ªservlet, ž®×ƒ¸ä¼?br>æœ?session reset 问题åQŒå¦‚果这时候再讉K—®å¦ä¸€ä¸?servletåQŒå®ƒž®×ƒ¼šèµ‹äºˆå¦å¤–一ä¸?br>session id。再仔细看了一下增åŠ?servlet mapping 的代码:
for (ExtensionBean bean : servletMappingBeans) {
  ServletHandler handler = new ServletHandler();
  handler.addServlet( bean.getProperty( "mapping"), bean.getClassName());
  context.addHandler( handler);
}


˜q™æ ·åQŒç›¸å½“于åœ?context 里面增加了多ä¸?servlet handleråQŒæ¯ä¸ªhandler有一个自å·Þqš„
session manageråQŒç”±æ­¤å¯¼è‡´è®¿é—®ä¸åŒçš„ servletåQŒä‹É用不同的session id 的问题,从è€?br>坯D‡´å®¢æˆ·ç«¯è®¤ä¸?session reset 了。因此,½Eå¾®ä¿®æ”¹ä¸€ä¸‹å°±è§£å†³äº†è¿™ä¸ªé—®é¢˜ï¼š

ServletHandler handler = new ServletHandler();
for (ExtensionBean bean : servletMappingBeans) {
  handler.addServlet( bean.getProperty( "mapping"), bean.getClassName());
}
context.addHandler( handler);


教训åQšä¸€å¼€å§‹å°±è§‰å¾—˜q™ä¸ªé—®é¢˜ä¸æ˜¯ä¸ªå¤§é—®é¢˜åQŒä½†æ˜¯ç”±äºŽåœ¨åŽå°è€æ˜¯æ²¡æœ‰å¼‚常åQŒæ—¥å¿—文件中ä¹?br>没有提供­‘›_¤Ÿçš„信息,因此一开始花了很长时间进行调试和单步跟踪åQˆè™½ç„¶ä¸å–œæ¬¢åQŒä½†æ˜¯å½“æ—?br>也没有想出其他办法)。后来把日志¾U§åˆ«æé«˜äº†ï¼ŒæŠŠjettyçš„debug enable之后åQŒå‘现访é—?br>不同的servletž®†é€ æˆsession id çš„å˜åŒ–ï¼Œä»Žè€Œå¾ˆå¿«çš„å®šä½åˆ°é—®é¢˜åÆˆä¸”è§£å†³é—®é¢˜ã€?br>
也就是说åQŒç¢°åˆ°é—®é¢˜ï¼Œ˜q˜æ˜¯åº”该冷静åQŒå°½é‡ç”¨æ—¥å¿—åŽÕd®šä½é—®é¢˜ï¼Œè€Œä¸æ˜¯ç”¨debugåŽÕd®šä½é—®é¢˜ã€?br>
ä¸È«™åQ?http://blogsite.3322.org/jspwiki/


]]>
Eclipse åšäØ“ webapp 核心的几¿Uåšæ³•以å?classloader 研究http://www.aygfsteel.com/SimonLei/archive/2005/11/28/21608.htmlSimonLeiSimonLeiMon, 28 Nov 2005 01:56:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2005/11/28/21608.htmlhttp://www.aygfsteel.com/SimonLei/comments/21608.htmlhttp://www.aygfsteel.com/SimonLei/archive/2005/11/28/21608.html#Feedback0http://www.aygfsteel.com/SimonLei/comments/commentRss/21608.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/21608.html做法1åQšä»¥Eclipse为启动点åQŒå°†appserveråšäØ“ä¸€ä¸ªåº”ç”¨å¯åŠ¨ã€?br>
1.jpg
做法åQ?br>在Launcher 当中启动Eclipse Platform。此处的ClassLoader 为系¾lŸçš„loaderã€?br>Eclipse Platform 会查扑ֈ°Core ApplicationåQŒåƈ且将其启动ã€?br>在Core Application 当中åQŒClassLoader ä¸?Eclipse çš?ClassLoaderã€?br>在Core Application 当中åQŒæˆ‘们启动JettyåQŒåƈ处于½{‰å¾…状态ã€?br>当Servlet/JSP被调用时åQŒJetty ž®†Servlet/JSP初始化,òq¶æ‰§è¡Œç›¸åº”动作ã€?br>Servlet çš?ClassLoader æ˜?Context ClassLoaderåQŒç¬¦åˆServlet 规范的ã€?br>
曄¡»¼„°åˆ°çš„问题:
Core Application采用的是Eclipse ClassLoaderåQŒç¼ºçœæƒ…况下åQŒè¯¥ClassLoader çš?parent ä¸?nullã€‚è¿™æ øP¼Œåœ¨Servlet ClassLoader 当中åQŒèƒ½å¤ŸæŽ¥è§¦åˆ°System ClassLoaderåQŒä½†æ˜¯Core Application 不能讉K—®åQŒå®ƒä»¬ç›¸äº’间不可见ã€?br>解决办法åQšEclipseStarter 有个配置™å¹å«åšparent.ClassloaderåQŒå°†å…¶è®¾¾|®äØ“appåQŒå³å¯è§£å†Œ™¯¥é—®é¢˜ã€?br>Servlet ClassLoader按照Servlet 2.3的规范,首先由Context ClassLoaderåŽÀLŸ¥æ‰¾ï¼Œå¦‚果找不刎ͼŒå†äº¤ç”±parent 去load。而当时我在webapp/WEB-INF/lib目录下放了一个runtime.jaræ–‡äšgã€‚è¿™æ øP¼Œruntime.jar当中的类都被Context ClassLoader¾l™è£…载进来了åQŒè€Œå¯¹äºŽEclipseStarter当中装蝲的runtime.jar中的¾cÖMº’ç›æ€¸å¯è§åQŒä»Žè€Œä¹Ÿå‡ºçŽ°é—®é¢˜ã€?br>解决办法åQšæŠŠlib目录下的runtime.jar删除ž®±å¥½äº†ã€?br>
ç”׃ºŽæ‰€æœ‰çš„与eclipse有关的内容,只能由Core Application çš„ClassLoader才能装蝲åQŒå› è€Œç›¸äº’间是可见的。从而达åˆîCº†åˆ©ç”¨eclipse核心的目的ã€?br>做法2åQšä»¥app server 为启动点åQŒä»¥eclipse 核心为web app的核心:
2.jpg


和做æ³?ä¸€æ øP¼Œé‡ç‚¹æ˜¯å°†Core Applicationçš„ClassLoader讄¡½®ä¸ºSystemçš„loaderåQŒè¿™æ øP¼Œåœ¨å…¶ä»–的地方åQˆä¾‹å¦‚Servlet当中åQ‰ä¹ŸåŒæ ·å¯è§äº†ã€?br>
很重要:runtime.jarå’Œosgi.jar一定要攑֜¨jetty的启动èµ\径当中。这æ äh‰ä¼šç”¨Systemçš„loader 首先扑ֈ°˜q™ä¸¤ä¸ªjaræ–‡äšgåQŒä»Žè€Œä¿è¯å¤§å®‰™ƒ½åœ¨è¿™ä¸ªåŸº¼‹€ä¸Šæ¥äº’相看到ã€?br>
做法3åQšä»¥Eclipse为启动点åQŒå°†appserveråšäØ“ä¸€ä¸ªåº”ç”¨å¯åŠ¨ï¼Œappserver以dispatcheríw«ä†¾å‡ºçްã€?br>
˜q™ä¸ªåšæ³•和做æ³?一致。区别在于,appserver 本èín不做ä»ÖM½•事情åQŒåªæ˜¯åšä¸ÞZ¸€ä¸?dispatcher 出现。它提供一ä¸?extension pointåQŒå…¶ä»–插件扩展该 extensionåQŒç›¸å½“于注册 servletåQŒä»¥åŠmapping。当有http request æ—Óž¼Œdispatcheræ ÒŽ® servlet 的注册和mappingåQŒè‡ªåŠ¨çš„åˆ†å‘¾l™å¯¹åº”çš„servlet。此æ—Óž¼Œå„个servletçš?class loader ˜q˜æ˜¯ eclipse classloaderåQŒè€?servlet çš?context classloader 在这¿Uæ¨¡å¼å½“中只是昙èŠ×ƒ¸€çŽŽÍ¼Œåšäº†ä¸€ä¸?dispatcher 之后åQŒå°±ž®†å·¥ä½œç§»äº¤ç»™äº†å®šä¹‰serlvet 的插件的那个 eclipse classloaderã€?br>
˜q™æ ·åQŒservlet 是可扩展的,再也不依赖于 web.xml了ã€?br>
ä¸È«™åQ?http://blogsite.3322.org/jspwiki/


]]>
开发的三种模式http://www.aygfsteel.com/SimonLei/archive/2005/11/24/21315.htmlSimonLeiSimonLeiThu, 24 Nov 2005 09:43:00 GMThttp://www.aygfsteel.com/SimonLei/archive/2005/11/24/21315.htmlhttp://www.aygfsteel.com/SimonLei/comments/21315.htmlhttp://www.aygfsteel.com/SimonLei/archive/2005/11/24/21315.html#Feedback2http://www.aygfsteel.com/SimonLei/comments/commentRss/21315.htmlhttp://www.aygfsteel.com/SimonLei/services/trackbacks/21315.html½W¬ä¸€¿Uï¼š script 模式åQŒå¦‚jsp/php½{‰ï¼Œä¿®æ”¹äº†ä»£ç ï¼Œç›´æŽ¥åˆäh–°™åµé¢ž®±å¯ä»¥çœ‹åˆ? ¾l“æžœåQŒè¿™¿Uå¼€å‘模式最爽,都不用重启应用服务器ã€?p>½W¬äºŒ¿Uï¼šåº”用服务器模式,修改了代码之后,需要重启一下应用服务器åQŒç„¶åŽæ‰èƒ? 看到修改的效果,˜q™ç§æ¨¡å¼ä¸€èˆ¬çˆ½åQŒä½†æ˜¯ä¹Ÿ˜q˜å¯ä»¥æŽ¥å—。如果应用服务器支持hot-deployåQ? 那就接近½W¬ä¸€¿Uå¼€å‘模式了ã€?/p>

½W¬ä¸‰¿Uï¼šéƒ¨çÖv模式åQŒä¿®æ”¹äº†ä»£ç ä¹‹åŽåQŒå¿…™å»é¦–先部¾|ÔŒ¼Œç„¶åŽé‡å¯åº”用服务器才能看åˆ? 修改效果。这¿Uæ¨¡å¼æœ€ä¸çˆ½åQŒä¼ ¾lŸçš„ejb开发就是这¿Uæ¨¡å¼ã€?/p>

目前我们ž®?eclipse åšäØ“æ ¸å¿ƒçš?web appåQŒè¿˜æ˜¯ç¬¬ä¸‰ç§å¼€å‘模式。造成˜q™ç§å¼€å‘模å¼? çš„åŽŸå› ï¼Œå¯ä»¥è¯´æ˜¯å› äØ“å½“æ—¶å¯?eclipse 不熟悉,å¯?osgi 不熟悉,å¯?eclipse class loader 不熟悉造成的。我打算ž®†å…¶æ”šw€ æˆ½W¬äºŒ¿Uæ¨¡å¼ï¼Œç„¶åŽå†è€ƒè™‘½W¬ä¸€¿Uæ˜¯å¦å¯è¡Œã€‚最˜q? çœ?ror, å®ƒå°†çŽ¯å¢ƒåˆ†äØ“ dev/product/test 几种åQŒå¾ˆå—启发。我可以在product环境ä¸? 采用½W¬äºŒ¿Uï¼Œåœ¨dev环境下采用第一¿Uæ¨¡å¼ã€?/p>ä¸È«™åQ?http://blogsite.3322.org/jspwiki/


]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÓñÁÖÊÐ| ¾²ÄþÏØ| ÅÌÉ½ÏØ| ¼ªË®ÏØ| Ð˰²ÃË| ½ú³Ç| À×ÖÝÊÐ| Öñ±±ÊÐ| å§ÑôÊÐ| ɽµ¤ÏØ| ÌïÑôÏØ| Õ´ÒæÏØ| »¯Â¡| ¾²°²Çø| ¿¦À®Ç߯ì| ³Ç¿ÚÏØ| Æ½Ô¶ÏØ| ÏæÒõÏØ| æÄÔ´ÏØ| ¸ßÃÜÊÐ| ¸»Ô£ÏØ| èï³ÇÏØ| ´óÀóÏØ| ÉòÇðÏØ| ÎýÁÖºÆÌØÊÐ| ÇçÂ¡ÏØ| Ó¢µÂÊÐ| ÓÀ´¨ÊÐ| µÆËþÊÐ| ºþÖÝÊÐ| ´ó¸ÛÇø| ÄÚÏçÏØ| ̨¶«ÊÐ| °²´ïÊÐ| ÌÒ½­ÏØ| »ªÝöÊÐ| ½ðÉ³ÏØ| Å©°²ÏØ| ÀäË®½­ÊÐ| ÂíÉ½ÏØ| ¤´¨ÏØ|