æ–‡äšg比较大,大概有近20MåQŒä‹É用Zip压羃ã€?/p>
现在å‘布的是Beta版,SourceForge上é¢çš„空间æ£åœ¨ç”³è¯—÷€?br /> å‘布的版本,支æŒEclipse3.2å’ŒEclipse3.3åQŒéœ€è¦GEFæ’äšgåQŒå¯ä»¥åœ¨1.4å?.5下è¿è¡Œï¼ˆæˆ‘媋¹‹è¯•了Sun JDK1.4å’ŒJDK1.5的三个版本,òq¶ä¸ä¿è¯æ‰€æœ‰çš„JDK都能˜q行åQ‰ã€?br /> RCPç‰ˆæœ¬æ£æ•´ç†ä¸åQŒå›½åº†å‰å‘布ã€?br /> 如果有问题,è¯ïL•™a€
以下是工å…ïLš„介ç»
Aquarius ORM Studio介ç»
从事软äšgå¼€å‘多òqß_¼Œæ„Ÿè§‰æ•°æ®åº“在整个软äšgå¼€å‘过½E‹ä¸æ‰®æ¼”一个ä¸å¯æˆ–¾~ºçš„角色。一旦一个业务项目进入立™åšw˜¶ŒDµï¼Œéœ€è¦æ”¯æŒå“ªäº›æ•°æ®åº“òq›_°åQŒå¦‚何ä‹É用该¿Uæ•°æ®åº“òq›_°éƒ½å°†æˆäؓ架构师需è¦è€ƒè™‘的内容,对于一般的开å‘äh员,则å¯èƒ½æ ¹æ®éœ€è¦å¾ç«‹å„¿Uæ•°æ®è¡¨åQŒè¿˜å¯èƒ½éœ€è¦é€šè¿‡åå‘工程æ¥äº†è§£çŽ°æœ‰æ•°æ®åº“的架构,éšç€ORM工具的æµè¡Œï¼Œ½E‹åºå‘˜è¿˜éœ€è¦å°†æ•°æ®è¡¨æ˜ ž®„到¾cÖM¸ŠåQŒåƈä¿è¯ä¸¤è€…é—´çš„åŒæ¥ï¼Œ˜q‡åŽ»å‡ å¹´ä»Žäº‹ç›¸åº”å·¥ä½œçš„ç»éªŒå‘Šè¯‰æˆ‘åQŒè¿™æ—¢ä¸æ˜¯ä¸€ä¸ªè½»æ„¡š„事情åQŒæ›´ä¸æ˜¯ä¸€ä»¶ä×oäººæ„Ÿè§‰æ„‰å¿«çš„äº‹æƒ…ã€‚åŒæ—¶å¸‚åœÞZ¸Šæœ‰å¤§é‡ä¼˜¿U€çš„æ•°æ®åº“工具åQŒä»Žå»ºæ¨¡åˆ°åˆ†æžï¼Œ˜q˜æœ‰ORMåQŒä½†å¯æƒœçš„æ˜¯åQŒå¤§éƒ¨åˆ†ä¼˜ç§€çš„å·¥å…·éƒ½ä¸æ˜¯å…费的,ž®±åƒæœ€æœ‰åçš„PowerDesigneråQŒå…¶ä»äh ¼ä»¤æˆ‘咋舌。象 PowerDesigner˜q™ä¹ˆå¼ºå¤§çš„工典P¼Œæˆ‘åªèƒ½ç”¨åˆ°å…¶ä¸ä¸€éƒ¨åˆ†åŠŸèƒ½åQŒå´è¦ä»˜å‡ºæ‰€æœ‰çš„ä»äh ¼åQŒè€Œä¸”åŠŸèƒ½å´æ²¡æœ‰æ»¡‘³çš„æˆ‘的需è¦ã€?br />
所以我èŒç”Ÿäº†æ ¹æ®è‡ªå·Þqš„需求æ¥å¼€å‘一个数æ®åº“ 工具的想法,òq¶åœ¨æŽ¥ä¸‹æ¥çš„两年ä¸ä»˜è¯¸å®žæ–½ã€‚这个工å…ähˆ‘¿UîCØ“Aquarius Orm StudioåQŒAquarius是水瓶åñ”åQŒæˆ‘的星座,ORM是指˜q™ä¸ªå·¥å…·çš„一个é‡è¦åŠŸèƒ½ï¼ŒStudio是个‹¹è¡Œè¯ã€?br />
˜q™ä¸ªå·¥å…·å¯ä»¥å®Œæˆä»¥ä¸‹åŠŸèƒ½:
æ•°æ®åº“æ£å‘徿¨¡ï¼ˆæ”¯æŒæ•°æ®è¡¨ï¼Œå˜å‚¨˜q‡ç¨‹åQŒè§†å›¾ï¼‰åQŒåƈ生æˆç›¸å…³DDL
æ•°æ®åº“åå‘å·¥½E‹ï¼Œæ”¯æŒä»Žæ•°æ®åº“导入数æ®è¡¨ï¼Œå˜å‚¨˜q‡ç¨‹åQŒè§†å›„¡‰æ•°æ®åº“å…ƒç´?
支æŒå¤šæ•°æ®åã^åŽÍ¼ŒåŒ…括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql½{?
生戋¹‹è¯•æ•°æ®åQŒå¯ä»¥æ ¹æ®æ•°æ®åº“模型生戋¹‹è¯•æ•°æ®åQŒæ–¹ä¾¿è¿›è¡Œå•元测试ã€?
生æˆç›¸åº”ORM代ç åŠé…¾|®æ–‡ä»Óž¼Œæ”¯æŒHibernate3,OJB,IBatisåŠOpenJPA
支æŒå¤šå›½è¯è¨€åQŒåŒ…æ‹¬ä¸æ–‡ï¼ˆ½Ž€ä½“ï¼Œå°æ¹¾¾J体åQŒé¦™æ¸¯ç¹ä½“)åQŒè‹±æ–‡ï¼Œæ—¥æ–‡åQˆè°¢è°¢Judy.Chang的日文翻译)
下è²åœ°å€
å¦å¤–åšä¸ªé¢„告:
本周内将å‘布我的一个Eclipseæ•°æ®åº“æ’ä»Óž¼ˆ¾U?00K行代ç )åQŒæ”¯æŒä»¥ä¸‹åŠŸèƒ?
1ã€æ•°æ®åº“æ£å‘建模åQˆæ”¯æŒæ•°æ®è¡¨åQŒå˜å‚¨è¿‡½E‹ï¼Œè§†å›¾åQ‰ï¼Œòq¶ç”Ÿæˆç›¸å…³DDL
2ã€æ•°æ®åº“åå‘工程åQŒæ”¯æŒä»Žæ•°æ®åº“导入数æ®è¡¨åQŒå˜å‚¨è¿‡½E‹ï¼Œè§†å›¾½{‰æ•°æ®åº“å…ƒç´
3ã€å¤šæ•°æ®òq›_°åQŒåŒ…括Oracle,DB2,MySql,MsSql,Sybase,PostgreSql½{?
4ã€ç”Ÿæˆæµ‹è¯•æ•°æ®ï¼Œå¯ä»¥æ ÒŽ®æ•°æ®åº“æ¨¡åž‹ç”Ÿæˆæµ‹è¯•æ•°æ®ï¼Œæ–¹ä¾¿˜q›è¡Œå•å…ƒ‹¹‹è¯•ã€?
5ã€ç”Ÿæˆç›¸åº”ORM代ç åŠé…¾|®æ–‡ä»Óž¼Œæ”¯æŒHibernate3,OJB,IBatisåŠOpenJPA
ä»¥ä¸‹æ˜¯äØ“IBatis生æˆçš„XML:
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<sql id="selectUserWhere">
<dynamic prepend="where">
..˜q™é‡Œçœç•¥éƒ¨åˆ†å†…容
</isPropertyAvailable>
<isPropertyAvailable prepend="or" property="user_Or_NotNull_State"><![CDATA[STATE_C is not null]]>
</isPropertyAvailable>
</dynamic>
</sql>
<delete id="deleteUser" parameterClass="String"><![CDATA[
Delete From demo.user_t
Where USER_ID=#userId#
]]>
</delete>
<select id="getUserRolesByUser" parameterClass="String" resultMap="userRoleResult"><![CDATA[
Select USER_ID, ROLE_ID from demo.user_role_t
Where USER_ID=#userId#
]]>
</select>
<select id="doCountUser" parameterClass="java.util.Map" resultClass="int"><![CDATA[
Select count(*) From demo.user_t
$Where$ $condition$]]>
</select>
<update id="updateUser" parameterClass="user"><![CDATA[
Update demo.user_t SET USER_ID=#userId# , USER_NAME=#userName# , PASSWORD=#password# , VALID_FROM=#validFrom# , VALID_TO=#validTo# , TITLE=#title# , DESCRIPTION=#description# , DOMAIN_C=#domain# , GROUP_C=#group# , ORDER_C=#order# , STATE_C=#state# Where USER_ID=#userId#
]]>
</update>
<insert id="insertUser" parameterClass="user"><![CDATA[
Insert Into demo.user_t(USER_ID , USER_NAME , PASSWORD , VALID_FROM , VALID_TO , TITLE , DESCRIPTION , DOMAIN_C , GROUP_C , ORDER_C , STATE_C)
Values(#userId# , #userName# , #password# , #validFrom# , #validTo# , #title# , #description# , #domain# , #group# , #order# , #state#)
]]>
</insert>
<select id="doSelectUser" parameterClass="java.util.Map" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
$Where$ $condition$]]>
</select>
<select id="selectUser" parameterClass="java.util.Map" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
]]>
<include refid="selectUserWhere"/>
</select>
<select id="selectUserByID" parameterClass="String" resultMap="userResult"><![CDATA[
Select USER_ID, USER_NAME, PASSWORD, VALID_FROM, VALID_TO, TITLE, DESCRIPTION, DOMAIN_C, GROUP_C, ORDER_C, STATE_C from demo.user_t
Where USER_ID=#userId#
]]>
</select>
<select id="doDeleteUser" parameterClass="java.util.Map"><![CDATA[
Delete From demo.user_t
$Where$ $condition$]]>
</select>
<delete id="deleteUserByID" parameterClass="String"><![CDATA[
Delete From demo.user_t
]]>
<include refid="selectUserWhere"/>
</delete>
</sqlMap>
˜q™äº›æºä»£ç ä¸å†éœ€è¦é¢å¤–的付出åQŒä“Q何äh都å¯ä»¥ä¸‹è½½ï¼Œå½“作《Wicket开呿Œ‡å—ã€‹ä¸€ä¹¦å…¨æ–‡ä¸‹è½½ä¸æ–¹ä¾¿çš„一些补å¿å§ã€?/p>
䏋颿˜¯ä¸‹è½½åœ°å€åQ?br />http://gocom.primeton.com/modules/newbb/titleflat_5087_41.htm
ä½ ä¹Ÿå¯ä»¥åœ¨è¿™ä¸ªè®ºå›ä¸Šæå‡ºé—®é¢˜åQŒæˆ‘会尽快回å¤?br />http://gocom.primeton.com/modules/newbb/viewforum41.htm
One World,One Dream�/p>
Â
Wicketå‰ç”ŸåŽä¸–½‹?/font>
Â
Wicket是什ä¹?½Ž€å•点è¯ß_¼Œå®ƒå°±æ˜¯ä¸€ä¸ªåŸºäºŽJavaçš„Web开呿¡†æžÓž¼Œä¸ŽStrutsåQŒWebWorkåQŒTapestry相类伹{€‚其特点在于对Html和代ç 进行了有效的分¼›»ï¼ˆæœ‰åˆ©äºŽç¨‹åºå‘˜å’Œç¾Žå·¥çš„åˆä½œåQ‰ï¼ŒåŸÞZºŽè§„则的酾|?å‡å°‘了XML½{‰é…¾|®æ–‡ä»¶çš„使用)åQŒå¦ä¹ 曲¾U¿è¾ƒä½Žï¼ˆå¼€å‘æ–¹å¼ä¸ŽC/Sç›æ€¼¼åQ‰ï¼Œæ›´åŠ æ˜“äºŽè°ƒè¯•åQˆé”™è¯¯ç±»åž‹æ¯”较少å®ÒŽ˜“åQŒè€Œä¸”å®ÒŽ˜“定ä½åQ‰ã€‚å¦‚æžœä½ ä¸å¯¹å¾®èÊYòq¶ä¸å感åQŒå¯ä»¥æŠŠå®ƒçœ‹ä½œJavaòq›_°ä¸Šçš„ASP.NETã€?br /> Wicket现在是Sourceforge上一个éžå¸¸æ´»è·ƒçš„™å¹ç›®åQŒå¼€å‘æºç 基于Apacheåè®®åQˆä¹Ÿæ˜¯æœ€å®½æ¾åQŒå¯¹å•†ä¸šæœ€å‹å¥½çš„çš„æºç åè®®åQ‰ï¼Œ™å¹ç›®ä½äºŽhttp://wicket.sourceforge.netåQŒå¦å¤–它˜q˜æœ‰ä¸€ä¸ªç‹¬ç«‹çš„域å¾|‘ç«™http://www.wicketframework.org/。最新的消æ¯åˆ™æ˜¯åQŒWicketå·²ç»æˆäØ“ApacheåµåŒ–器ä¸ä¸€ä¸ªé¡¹ç›®ï¼Œå¯ä»¥é€šè¿‡http://incubator.apache.org/projects/wicket.htmlæ¥è®¿é—®ã€‚但SourceForge上的¾|‘ç«™ä»ç„¶å¯ä»¥è®‰K—®ã€?br /> Wicket出现æ—Óž¼Œè‘—åçš„J2EE¾|‘ç«™TSSåQˆå³http://www.TheServerSide.comåQŒä»¥åŽç®€¿U°TSSåQ‰ï¼Œå¯¹è¯¥™å¹ç›®ä¹Ÿè¿›è¡Œäº†è®¨è®ºåQŒæœ‰ä¸€ŒD‰|—·æ—¥æŒä¹…的论战åQˆåœ°å€åQ?a >http://www.theserverside.com/news/thread.tss?thread_id=28162:åQ‰ï¼Œè®ºæˆ˜ä¸ÕdŠ›å½“ç„¶ž®±æ˜¯Wicket的主è¦ä½œè€…Jonathan Lockeå’ŒTapestry的作者Howard Lewis Ship åQŒäº‰è®ºçš„内容å分òq¿æ³›åQŒä»ŽURLçš„æ ¼å¼åˆ°¾pÈ»Ÿ¾l“æž„åQŒä»Žæ‰©å±•性到界é¢å¼€å‘,如果有时间的è¯ï¼Œæˆ‘å°½é‡å°†å…¶ä¸éƒ¨åˆ†å†…容¾˜»è¯‘˜q‡æ¥åQŒè¿˜æ˜¯å¾ˆ¾_‘Ö½©çš„。(TSS上很多的讨论都éžå¸¸ç²¾å½©ï¼Œå¦‚果英文好的è¯ï¼Œå»ø™®®¾l常上去看看åQŒå›½å¤–的牛ähž®±æ˜¯å¤šå•Šã€‚有时候我也觉得很奇怪,˜q™äº›äººéƒ½ä¸ç”¨ç¡è§‰çš„å—åQŒçœ‹ä»–们的帖å,完全覆盖äº?4ž®æ—¶åQŒæ„Ÿè§‰ä»–ä»¬çš„è€æ¿çœŸæ˜¯å®½å®¹å•Šï¼‰ã€?br /> Wicketçš„ä½œè€…ä¸æœ‰å‡ 个是原Sunå…¬å¸Swingž®ç»„的开å‘äh员(现在å¯èƒ½å¤§éƒ¨åˆ†å·²¾l䏿˜¯äº†åQ‰ï¼Œå› æ¤Wicket的框架ä¸å¸¦æœ‰‹¹“厚的C/S色彩。而他们的开å‘计划ä¸åQŒè¿˜åŒ…括了SwingåQŒFlashòq›_°çš„æ”¯æŒï¼Œä¹Ÿå°±æ˜¯è¯´ä½¿ç”¨Wicketä¸ä»…å¯ä»¥å¯ä»¥è¾“出HtmlåQŒè€Œä¸”å¯ä»¥æ”¯æŒSwingå’ŒFlashåQŒä¸˜q‡å’Œæœ‹å‹¾l过讨论åŽï¼Œè§‰å¾—˜q™ä¸ªè®¡åˆ’看è“væ¥æœ‰ä¸€ç‚¹ä¸åˆ‡å®žé™…,毕竟HtmlåQŒSwingåQŒFlashä¹‹é—´çš„å·®åˆ«è¿˜æ˜¯å¾ˆå¤§ï¼Œææ€•æƒ³è¦æ— ¾~ç§»æ¤ï¼Œ˜q˜æ˜¯æœ‰ç‚¹éš‘Öº¦çš„ã€‚å•æ˜¯ä¸€ä¸ªJavaScriptåQŒææ€•就够头痛了ã€?br /> Wicket带有强烈C/S¾l“构的UI色彩åQŒè¿™ä¸€ç‚ÒŽœ‰åŠ©äºŽ¾ŸŽå·¥å’Œç¨‹åºäh员的分工åQŒä¸ŽDelphiçš„å¼€å‘æ–¹å¼éžå¸¸ç±»ä¼û|¼ˆDelphi使用.frmæ–‡äšgä¿å˜UI控äšg的定义,而用.pasæ–‡äšgå˜å‚¨ä»£ç åQŒä»Žè€Œå¯¹æŽ§äšg˜q›è¡Œæ“作åQ‰ã€‚Wicket则是使用Htmlæè¿°UIåQŒåƈž®†å…·æœ‰ç‰¹ŒDŠæ ‡è®°çš„Htmlå…ƒç´ å®šä¹‰ä¸ºUI控äšgåQŒåœ¨javaæ–‡äšgä¸åˆ™ç›´æŽ¥ä½¿ç”¨ä»£ç æ“作˜q™äº›UI控äšgåQŒæŽ§åˆ¶å…¶è¾“出åŠè¡Œä¸ºï¼Œæ ·å¼½{‰ã€‚这一点和TapestryåQŒä»¥å?NETòq›_°ä¸Šçš„ASP.NETæžäØ“ç›æ€¼¼åQŒä¹Ÿæ€ªä¸å¾—与Tapestry的作者争è®ÞZº†˜q™ä¹ˆä¹…,毕竟两者的用户¾Ÿ¤æœ‰å¾ˆå¤šçš„é‡å¤ã€‚其实从¾l“构上看æ¥ï¼Œæ— 论是TapestryåQŒASP.NetåQŒWicket估计都借鉴了Appletòq›_°ä¸Šçš„WebObjectsåQŒè¿˜æœ‰Delphi。(ä¸è¦å¿˜äº†åQŒDelphiçš„åˆ›å»ø™€…Anders Hejlsbergž®±æ˜¯.net框架的架构师åQŒæ‰€ä»¥C#å’ŒAsp.net怎么看都带ç€Delphi的媄åã€?br /> Wicketç›®å‰æœ€æ–°çš„版本æ˜?.2.2ç‰ˆï¼Œå·²ç»æ”¯æŒäº†AJAXåQŒä½†æ„Ÿè§‰˜q™ä¸ªæ¡†æž¶çš„å‘展时间毕竟还是çŸäº†ä¸€ç‚¹ï¼Œž®½ç®¡è®¾è®¡æ€æƒ³å¾ˆä¸é”™ï¼Œä½†è¿˜æ˜¯æœ‰è®¸å¤šé—®é¢˜å˜åœ¨çš„,包括控äšg的数é‡ï¼ŒBUG较多½{‰ï¼Œå¸Œæœ›2006òq´å®ƒå¯ä»¥ž®½å¿«çš„æˆç†Ÿè“væ¥ã€?br />Â
å…³äºŽé‡æ–°å‘明轮å的争è®?/font>
 谈到WicketåQŒææ€•第一个感觉就是在Javaçš„Webå¼€å‘ä¸åˆå¤šäº†ä¸€ä¸ªè½®å,˜q™ä¸€ç‚¹å›½å†…外的程åºå‘˜å¥½è±¡éƒ½æ˜¯ä¸€æ —÷€?br /> 有一个国外的Blog专门写了一½‹‡å…³äºŽè½®åçš„æ–‡ç« åQŒè¯´æ˜Žäº†é‡å¤å‘明轮åçš„å¿…è¦æ€§ã€‚我个äh对于˜q™ç§è½®å是æŒä¸€¿U欢˜qŽçš„æ€åº¦åQŒå› 为没有äh会去写一ŒDµåŠŸèƒ½å®Œå…¨ä¸€æ ïLš„东东åQŒæ€ÀL˜¯è¦ä¿®æ£äº†åŽŸæœ‰è½®å的丑»I¼Œ˜q™æ ·ž®×ƒ¸èƒ½ç®€å•当作一¿Ué‡å¤ã€?br /> å³ä‹É是功能é‡å¤ï¼Œž®×ƒ¸éœ€è¦è½®å了å?JSP能完æˆStruts到所有功能,而Tapestry能åšåˆ°çš„åQŒStruts也全部å¯ä»¥åšåˆŽÍ¼Œä½†StrutsåQŒTapestryž®×ƒ¸éœ€è¦äº†å?Strutsçš„MVC¾l“构比JSPæ›´åŠ ä¼˜ç§€åQŒåœ¨å¾ˆå¤§½E‹åº¦ä¸Šå‡è½ÖMº†å¼€å‘äh员开å‘é‡åQŒè€ŒTapestryåŸÞZºŽ¾l„äšgçš„å¼€å‘æ–¹å¼ï¼Œåˆ™æ˜¯å¼€åˆ›äº†ä¸€¿Uæ–°çš„Web开呿–¹å¼ï¼Œå¯¹äºŽå¤šè¯a€çš„æ”¯æŒä¹Ÿæœ‰äº†æ–°çš„æ–¹å¼ã€‚以往开å‘多è¯è¨€™åµé¢æ—Óž¼Œå¾€å¾€ä½¿ç”¨propertiesä¿å˜å—符串资æºï¼Œä½†æ˜¯™åµé¢é€šå¸¸éƒ½æ²¡æœ‰ä»€ä¹ˆå˜åŒ–。而Tapestryå¯ä»¥é€šè¿‡ä¸åŒçš„Htmlä¸ÞZ¸åŒçš„国家指定ä¸åŒçš„页é¢ã€?br /> Wicket叿”¶äº†Tapestry的一部分内容åQŒä½†æˆ‘最喜欢的就是,它是åŸÞZºŽè§„åˆ™çš„ï¼Œè€ŒåÆˆéžXMLé…置的方å¼ï¼Œ˜q™ä¸ä»…有利于½E‹åºå‘˜å¦ä¹ ,对系¾lŸçš„¾l´æŠ¤åŠå¼€å‘规范都很有效,毕竟XMLçš„ç¼–å†™åÆˆä¸è§å¾—就比写一ŒD늨‹åºæ¥å¾—æ›´å®ÒŽ˜“。(˜q™é‡Œæ’一å¥é¢˜å¤–è¯åQŒæˆ‘觉得XMLæ–‡äšg用æ¥è¡¨ç¤ºæ•°æ®å’Œèµ„æºï¼Œè€Œä¸æ˜¯è¡Œä¸ºï¼Œæ›´ä¸æ˜¯ä¸šåŠ¡ï¼Œæ‰€ä»¥å¯¹äºŽXML我åªç”¨æ¥å˜æ”¾å¤šè¯a€èµ„æºæˆ–者用æ¥åšæ•°æ®äº¤æ¢ã€‚象Spring˜q™ç§å¤§é‡ä½¿ç”¨XMLæ–¹å¼åQŒæˆ‘òq¶ä¸‹Æ£èµåQŒSpring也æ„识到了这一点,åœ?.0版本ä¸åŠªåŠ›çš„½Ž€åŒ–Xml的酾|®ï¼Œä½†æ˜¯òq¶ä¸ž®½å¦‚人æ„åQ‰ã€‚如果ä‹É用简å•的规则æ¥é…¾|®æˆ–者管ç†ä¸€ä¸ªç³»¾lŸï¼Œç”¨æˆ·ž®×ƒ¼šå¾ˆå®¹æ˜“的查找到自己需è¦çš„内容。而通过é…置文äšgåQŒä¸½Ž¡è¿™æ ïLš„一个酾|®æ–‡ä»¶çš„¾l“构如何好,也需è¦åœ¨å…¶ä¸æŸ¥æ‰¾è‡ªå·±éœ€è¦çš„内容åQŒå¼€å‘效率肯定è¦ä½Žä¸€äº›ã€?br />Â å› æ¤å¯¹äºŽ˜q™ç§æœ‰åˆ›æ–°æ€§çš„è½®ååQŒå¤šå‡ 个åQŒæˆ–许Java世界å¯ä»¥è·‘得更快一些ã€?br /> åŽÕd¹´ž®±å¬è¯´ä¸ž®‘Web框架的开å‘äh员è¦è”åˆèµäh¥å¼€ä¸€ä¸ªWeb框架åQŒåœ¨Yahoo上还有一个讨论组åQŒä¸ŠåŽÈœ‹äº†ä¸€ä¸‹ã€‚但是这个事件对我的½W¬ä¸€æ„Ÿè§‰ž®±æ˜¯æ™•,½W¬äºŒæ„Ÿè§‰ž®±æ˜¯ç‰¹åˆ«çš„æ™•åQŒè™½ç„¶ç›®å‰Java世界的Webæ¡†æž¶ä¸€é€šæØœæˆ˜ï¼Œä½†è¿™æ ·ä¸€ä¸ªè”盟,所¾l™å‡ºçš„东西很å¯èƒ½æ˜¯ç¬¬äºŒä¸ªEJBã€?/p>