??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品无码久久久影院相关影片 ,亚洲狠狠ady亚洲精品大秀,久久精品国产亚洲AV电影http://www.tkk7.com/eclipse/zh-cnSun, 11 May 2025 10:30:46 GMTSun, 11 May 2025 10:30:46 GMT60J2EE目危机【翻?-转蝲?/title><link>http://www.tkk7.com/eclipse/archive/2005/05/21/5021.html</link><dc:creator>eclispe</dc:creator><author>eclispe</author><pubDate>Sat, 21 May 2005 01:00:00 GMT</pubDate><guid>http://www.tkk7.com/eclipse/archive/2005/05/21/5021.html</guid><wfw:comment>http://www.tkk7.com/eclipse/comments/5021.html</wfw:comment><comments>http://www.tkk7.com/eclipse/archive/2005/05/21/5021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/eclipse/comments/commentRss/5021.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/eclipse/services/trackbacks/5021.html</trackback:ping><description><![CDATA[<H3 align=center><FONT size=3>避免q?/FONT><FONT face="verdana, arial, helvetica" size=3>10</FONT><FONT size=3>?/FONT><FONT face="verdana, arial, helvetica" size=3>J2EE</FONT><FONT size=3>危机来确保你的企?/FONT><FONT face="verdana, arial, helvetica" size=3>JAVA</FONT><FONT size=3>目成功</FONT></H3><!--<BLOCKQUOTE><STRONG>Summary</STRONG><BR>--> <BLOCKQUOTE> <P><STRONG><FONT size=3>摘要</FONT></STRONG></P> <P><FONT size=3>在你着手企业JAVA 目开发时Q你需要像耍杂技掌控手中的球一h处理一些问题:与工具商之间的关p,漫长的工E——不论是设计q是开发,q是保持健壮性。每一w会带来固有的危险Q一些是明显的,然而另外一些却不是。但所有这些危机均可避免。本文作者分析了10危Z业JAVA目的最大的危险Qƈ大致指出了避免它们的办法。(4Q?00字——此处是指英文字敎ͼ</FONT></P></BLOCKQUOTE><FONT size=3><!--</BLOCKQUOTE>--></FONT><FONT face="verdana, arial, helvetica" size=3><A target=Feedback><STRONG>By Humphrey Sheil</STRONG></A> <P><BR><B><I><FONT face="宋体, MS Song" size=3>作者:</FONT><FONT face="verdana, arial, helvetica" size=3><A target=Feedback>Humphrey Sheil</A><BR></FONT><FONT face="宋体, MS Song" size=3>原文出处Qhttp://java.sun.com/developer/technicalArticles/J2EE/projectdangers/<BR>译Qgooing 2005-01-18<BR>http://blog.csdn.net/gooing/<BR>感谢金山词霸和薛叉叉Q请指正!</FONT></I></B></P></FONT> <P><FONT face="宋体, MS Song"></FONT><FONT size=3><!-- START BIG AD (336x280) jw-articles-336x280.txt --> <TABLE cellSpacing=0 cellPadding=0 align=right border=0> <TBODY> <TR vAlign=bottom align=middle> <TD><FONT face="宋体, MS Song"></FONT></TD></TR> <TR> <TD><FONT face="宋体, MS Song"></FONT></TD></TR></TBODY></TABLE><!-- END BIG AD (336x280) --></FONT></P> <TABLE cellSpacing=0 cellPadding=0 align=right border=0> <TBODY> <TR vAlign=bottom align=middle> <TD><FONT face="宋体, MS Song"></FONT></TD></TR> <TR> <TD><FONT face="宋体, MS Song"></FONT></TD></TR></TBODY></TABLE><!-- END BIG AD (336x280) --> <P><FONT size=3>在我作ؓ开发者、高U开发者、架构师的经历中Q我遇到q好的、差的甚x丑陋的企业</FONT><FONT face="verdana, arial, helvetica" size=3>JAVA</FONT><FONT size=3>目。当我问自己Q是什么一个项目成功而另外的失败,我发现很隑־C个完的{案Q就好像很难?I>成功</I>来定义所有的软g目。J2EE目也不例外。因此,目被分Z同别的成功或失败。在q篇文章里,我主要想为您——读者朋友——揭C媄响企业JAVA目的最大的10危险?/FONT></P> <P><FONT size=3>一些危险只是简单的延迟目q度Q一些却是错误的征兆Q而还有一些ə目d没有成功的希望。尽如此,如果h良好的准备,征程开始前相关的知识和熟悉地Ş的向|所有的都可避免?/FONT></P> <P><FONT size=3>q篇文章l构单,我会按以下方式来揭示各种危机Q?</FONT></P> <UL> <LI><FONT size=3>危机的名U?/FONT> <LI><FONT size=3>目阶段Q?/FONT><FONT face="verdana, arial, helvetica" size=3><STRONG>Project phase</STRONG></FONT><FONT size=3>Q:危机所出现的项目阶D?/FONT> <LI><FONT size=3>所牵连的项目阶D(</FONT><FONT face="verdana, arial, helvetica" size=3><STRONG>Project phase(s) affected</STRONG></FONT><FONT size=3>Q:大多情况下,q些危机寚w后的“项目阶D”有一U顺带(</FONT><FONT face="verdana, arial, helvetica" size=3>knock-on</FONT><FONT size=3>Q的影响</FONT> <LI><FONT size=3>解决Q避免危机的方式以及如何最化它们的媄?/FONT> <LI><FONT size=3>注释Q有兌危机我想透露的观点,但不适合以前的分c?/FONT> </LI></UL> <P><FONT size=3>如上所注,我们在企业UJAVA目背景和它的各个重要阶D中查每一危险。这些项目阶D包括:</FONT> <FONT face="verdana, arial, helvetica" size=3> <UL> <LI><FONT size=3><STRONG>供应商选择</STRONG>Q在你启?FONT face="verdana, arial, helvetica">J2EE</FONT>工程之前Q挑选你的最佛_L合的q程——不论是应用服务器还是咖啡品?/FONT> <LI><FONT size=3><B>设计</B>Q不论是严格的瀑布模型q是</FONT><FONT face="verdana, arial, helvetica" size=3>"code it and see"</FONT><FONT size=3>Q试译为:~码和运行查看)方式Q我对设计都有这样一个观点:我做了充分的设计Q因此我可以L的进入开发阶Dc当我确切知道我在徏造什么和如何建造时Q我认ؓ我的设计阶段完成。另外,在进入开发阶D之前,我用设计模板来保证我对我自己问了所有正的问题q且有了的解x法。然而,我在该阶D同样也不害怕写代码Q有Ӟq是回答问题的唯一方式Q执行和模块化(</FONT> <FONT face="verdana, arial, helvetica" size=3>performance or modularity</FONT><FONT size=3>Q?/FONT> <LI><FONT size=3><B>开?/B>Q这个阶D|期有大量工作要做。选择好的工具加上一个良好的设计q不L意味着开发阶D会非常利Q但的确会很有用?/FONT> <LI><FONT size=3><B>E_?负荷试</B>Q在q个阶段Q系l架构师和项目管理员关注系l健壮性和构徏质量Q如保pȝ的关键统计——ƈ发用hQ失败的情境{。然而,直到q一阶段Q代码质量和q行亦不应被忽略。事实上Q你不能留一些差的或慢的代码到健壮性阶D|攏V?/FONT> <LI><FONT size=3><B>存在阶段[live]</B>Q这q不是真正的目阶段Q?/FONT><FONT face="verdana, arial, helvetica" size=3>it's a date set in stone</FONT><FONT size=3>Q想了半天也不知道怎么译</FONT><FONT face="verdana, arial, helvetica" size=3>:-{</FONT><FONT size=3>Q这是关于准备的阶段Q也是以前的错误的鬼怪出没的地方Q不论是差的设计、开发还是错误的Q开发工P卖主的选择?/FONT> </LI></UL></FONT> <P></P> <UL> <LI><FONT size=3><STRONG>供应商选择</STRONG>Q在你启?FONT face="verdana, arial, helvetica">J2EE</FONT>工程之前Q挑选你的最佛_L合的q程——不论是应用服务器还是咖啡品?/FONT> <LI><FONT size=3><B>设计</B>Q不论是严格的瀑布模型q是</FONT><FONT face="verdana, arial, helvetica" size=3>"code it and see"</FONT><FONT size=3>Q试译为:~码和运行查看)方式Q我对设计都有这样一个观点:我做了充分的设计Q因此我可以L的进入开发阶Dc当我确切知道我在徏造什么和如何建造时Q我认ؓ我的设计阶段完成。另外,在进入开发阶D之前,我用设计模板来保证我对我自己问了所有正的问题q且有了的解x法。然而,我在该阶D同样也不害怕写代码Q有Ӟq是回答问题的唯一方式Q执行和模块化(</FONT> <FONT face="verdana, arial, helvetica" size=3>performance or modularity</FONT><FONT size=3>Q?/FONT> <LI><FONT size=3><B>开?/B>Q这个阶D|期有大量工作要做。选择好的工具加上一个良好的设计q不L意味着开发阶D会非常利Q但的确会很有用?/FONT> <LI><FONT size=3><B>E_?负荷试</B>Q在q个阶段Q系l架构师和项目管理员关注系l健壮性和构徏质量Q如保pȝ的关键统计——ƈ发用hQ失败的情境{。然而,直到q一阶段Q代码质量和q行亦不应被忽略。事实上Q你不能留一些差的或慢的代码到健壮性阶D|攏V?/FONT> <LI><FONT size=3><B>存在阶段[live]</B>Q这q不是真正的目阶段Q?/FONT><FONT face="verdana, arial, helvetica" size=3>it's a date set in stone</FONT><FONT size=3>Q想了半天也不知道怎么译</FONT><FONT face="verdana, arial, helvetica" size=3>:-{</FONT><FONT size=3>Q这是关于准备的阶段Q也是以前的错误的鬼怪出没的地方Q不论是差的设计、开发还是错误的Q开发工P卖主的选择?/FONT> </LI></UL> <P></P> <UL> <LI><FONT size=3><STRONG>供应商选择</STRONG>Q在你启?FONT face="verdana, arial, helvetica">J2EE</FONT>工程之前Q挑选你的最佛_L合的q程——不论是应用服务器还是咖啡品?/FONT> <LI><FONT size=3><B>设计</B>Q不论是严格的瀑布模型q是</FONT><FONT face="verdana, arial, helvetica" size=3>"code it and see"</FONT><FONT size=3>Q试译为:~码和运行查看)方式Q我对设计都有这样一个观点:我做了充分的设计Q因此我可以L的进入开发阶Dc当我确切知道我在徏造什么和如何建造时Q我认ؓ我的设计阶段完成。另外,在进入开发阶D之前,我用设计模板来保证我对我自己问了所有正的问题q且有了的解x法。然而,我在该阶D同样也不害怕写代码Q有Ӟq是回答问题的唯一方式Q执行和模块化(</FONT> <FONT face="verdana, arial, helvetica" size=3>performance or modularity</FONT><FONT size=3>Q?/FONT> <LI><FONT size=3><B>开?/B>Q这个阶D|期有大量工作要做。选择好的工具加上一个良好的设计q不L意味着开发阶D会非常利Q但的确会很有用?/FONT> <LI><FONT size=3><B>E_?负荷试</B>Q在q个阶段Q系l架构师和项目管理员关注系l健壮性和构徏质量Q如保pȝ的关键统计——ƈ发用hQ失败的情境{。然而,直到q一阶段Q代码质量和q行亦不应被忽略。事实上Q你不能留一些差的或慢的代码到健壮性阶D|攏V?/FONT> <LI><FONT size=3><B>存在阶段[live]</B>Q这q不是真正的目阶段Q?/FONT><FONT face="verdana, arial, helvetica" size=3>it's a date set in stone</FONT><FONT size=3>Q想了半天也不知道怎么译</FONT><FONT face="verdana, arial, helvetica" size=3>:-{</FONT><FONT size=3>Q这是关于准备的阶段Q也是以前的错误的鬼怪出没的地方Q不论是差的设计、开发还是错误的Q开发工P卖主的选择?/FONT> </LI></UL> <P></P> <UL> <LI><FONT size=3><STRONG>供应商选择</STRONG>Q在你启?FONT face="verdana, arial, helvetica">J2EE</FONT>工程之前Q挑选你的最佛_L合的q程——不论是应用服务器还是咖啡品?/FONT> <LI><FONT size=3><B>设计</B>Q不论是严格的瀑布模型q是</FONT><FONT face="verdana, arial, helvetica" size=3>"code it and see"</FONT><FONT size=3>Q试译为:~码和运行查看)方式Q我对设计都有这样一个观点:我做了充分的设计Q因此我可以L的进入开发阶Dc当我确切知道我在徏造什么和如何建造时Q我认ؓ我的设计阶段完成。另外,在进入开发阶D之前,我用设计模板来保证我对我自己问了所有正的问题q且有了的解x法。然而,我在该阶D同样也不害怕写代码Q有Ӟq是回答问题的唯一方式Q执行和模块化(</FONT> <FONT face="verdana, arial, helvetica" size=3>performance or modularity</FONT><FONT size=3>Q?/FONT> <LI><FONT size=3><B>开?/B>Q这个阶D|期有大量工作要做。选择好的工具加上一个良好的设计q不L意味着开发阶D会非常利Q但的确会很有用?/FONT> <LI><FONT size=3><B>E_?负荷试</B>Q在q个阶段Q系l架构师和项目管理员关注系l健壮性和构徏质量Q如保pȝ的关键统计——ƈ发用hQ失败的情境{。然而,直到q一阶段Q代码质量和q行亦不应被忽略。事实上Q你不能留一些差的或慢的代码到健壮性阶D|攏V?/FONT> <LI><FONT size=3><B>存在阶段[live]</B>Q这q不是真正的目阶段Q?/FONT><FONT face="verdana, arial, helvetica" size=3>it's a date set in stone</FONT><FONT size=3>Q想了半天也不知道怎么译</FONT><FONT face="verdana, arial, helvetica" size=3>:-{</FONT><FONT size=3>Q这是关于准备的阶段Q也是以前的错误的鬼怪出没的地方Q不论是差的设计、开发还是错误的Q开发工P卖主的选择?/FONT> </LI></UL> <P><FONT size=3>?/FONT><FONT face="verdana, arial, helvetica" size=3>1</FONT><FONT size=3>阐释了这些项目阶D,以及对其有媄响的各种因素Q尤其是那些“突然的[knock-on]”媄响)</FONT> </P> <P>  <TABLE cellPadding=5 align=right border=0> <TBODY> <TR> <TD> <CENTER> <P><BR><FONT size=-1><STRONG>Figure 1. Enterprise Java project phases<BR>and their most likely reasons for failure.<BR>Click on thumbnail to view full-size<BR>image. (60 KB)</STRONG></FONT></P></CENTER></TD></TR></TBODY></TABLE></P> <P><STRONG><FONT size=+1>危机1Q没有理解Java,没有理解EJB,没有理解J2EE</FONT></STRONG></P> <P><BR><FONT size=3>好,现在我将其分解成3个小主题来进一步阐释?/FONT> </P> <P><B>描述</B>Q不理解Java</P> <P><B>目阶段Q?/B>开发阶D?/P> <P><B>所牵连的项目阶D:</B>设计Q稳定阶D,存在阶段</P> <P><B>受媄响的pȝҎ:</B>可维护性,可测量性(scalabilityQ?执行?/P> <P><STRONG>征兆Q?/STRONG> </P> <UL> <LI>重复实现已经包含于JDK核心APIs里的函数功能和类 </LI></UL> <P> </P> <UL> <LI>不知道下面所列的M一Ҏ几项是什么和它们能做什么(下面列出了一些示例) <P>  </P> <UL> <LI>垃圾回收Qtrain, generational, incremental, synchronous, asynchronousQ? <LI>对象什么时候可以被“垃圑֛收”—? <LI>Java里面l承Ҏ的使用Q及其权衡用) <LI>Ҏ重蝲 <LI>Z?CODE>java.lang.String</CODE>Q此处替代你自己喜爱的类Q似乎性能很差 <LI>忽略Java引用的语义(与忽略EJB中值的语义相对Q? <LI>寚w基本cdQnonprimitivesQ用=Q而不是实现equals()Ҏ <LI>在不同^CJavaU程的进度如何(for example, pre-emptive or notQ? <LI>l色U程VS本地U程 <LI>热点[Hotspot](Hotspot <and why old performance tuning techniques negate Hotspot optimizations>) <LI>JIT以及什么时候好的JITs变差Q不安装的Java~译器ƈ且你的代码依然运行良好等Q? <LI>The Collections API <LI>RMI </LI></UL></LI></UL> <P><B>解决办法Q?/B></P> <P>你需要提高你的Java知识Q尤其是了解它的优势和弱炏VJava的存在已l远q超除了一门语a本nQ同样重要的是理解这q_QJDK and toolsQ?具体的,你应当具有做一名Java E序员的资格Q如果你q没有的话)——你对你有如此多不了解的东西感到吃惊。更q一步,它作ؓ你小l的一部分q向其他人推q,q种方式同样很有乐趣。更q一步,创徏一份邮件列表,专心于Java技术ƈ且保持下厅R(我曾工作q的公司都有q些列表Q大多数׃不更新而变的岌岌可危)向你的同伴学习——他们是你最好的资源?</P> <P><B>注:</B></P> <P>如果你或你团队中的其他成员不理解q门~程语言和这q_Q你又怎么能期待徏造一个成功的企业UJava应用呢?健壮的JavaE序员对于EJB和J2EE如果鸭子对于水一般。与之相对,差的没有l验的程序员徏造一个质量差的J2EE应用?</P> <P>  </P> <P><B>描述</B>Q不理解EJB </P> <P><B>目阶段</B>Q设?</P> <P><B>所牉|目阶段</B>Q开发,E_性阶D?</P> <P><B>受媄响的pȝҎ:</B>可维护?</P> <P><STRONG>征兆Q?/STRONG> </P> <UL> <LI>EJBs在第一ơ被调用后就不再了Q尤其是处于qA池[ready pool]的无状态SESSION BEANSQ? <LI>非重用的QNonreusableQEJBs <LI>相比于容器提供的Q开发者不知道可依赖什? <LI>不符合规范的EJBs(fire threads,调用本地库,试图完成I/O操作{? </LI></UL> <P><B>解决Q?/B> </P> <P>为提高你的EJB知识Q花一个周末来阅读EJB规范Q?.1规范?14)。然后阅?.0规范Q?24)来了解ؓ什?.1规范不再适用?.0规范能带l你什么。关注规范中那些能告诉你——应用开发者——什么是在EJB中合法的行ؓ的部分?8.1?8.2节是开始的好地斏V?</P> <P><B>注:</B> </P> <P>不要从你的提供商Q指应用服务器或其他开发Y件的提供商——译者)的眼里看EJB世界。确保你了解W合规范的EJB模型和特D的实现之间的不同。这保证在需要时你可以将你的技术带l你的提供商Q或其他版本Q?</P> <P><B>描述Q?/B>不理解J2EE     </P> <P><B>目阶段Q?/B>设计 </P> <P><B>所牉|目阶段</B>Q开?</P> <P><B>受媄响的pȝҎ:</B>可维护性,可度量性(scalabilityQ,执行?</P> <P><B><BR>征兆Q?/B></P> <UL> <LI>“什么都是EJB”的设计 <LI>手工配置而不是用容器提供的机制 <LI>客户安全实现——J2EEq_或许是在企业计算中最完全和完整的安全架构Q从表现一直到后台Q它全部能力很少被全部用的 </LI></UL> <P><B>解决Q?/B></P> <P>学习J2EE关键lg以及每个lg所能带来的优势和劣ѝ依ơ涉及各Ҏ务,此处知识和能力一样重要?</P> <P><B>注:</B> </P> <P>只有知识能解册些问题。好的Java 开发者造就好的EJB开发者——一步步地可以完地成ؓJ2EE领袖的h。你获得多的Java/J2EE知识Q你在设计和实现斚w的能力越?Things will start to slot into place for you at design time.(想了半天也不知道怎么译:-{ ) </P> <P><!-- break --></P> <P><FONT size=+1><STRONG>危机2Q过度设计(无论是否是对于EJBQ?/STRONG></FONT><BR></P> <P><B>目阶段</B>Q设?</P> <P><B>所涉及的项目阶D:</B>开?</P> <P><B>受媄响的pȝҎ?/B>Q可l护性,可测量性(scalabilityQ,可执行?</P> <P><BR><B>征兆</B>Q?/P> <UL> <LI>特大型EJBs <LI>开发者无法解释他们的EJBs做什么和它们之间的关p? <LI>不可重用的EJBs,lgQ或服务——当它们应该重用? <LI>当已l存在的事务可以完成dӞEJBs 启动新的事务 <LI>数据独立性被讑֮的太高(Z安全的目的) </LI></UL> <P><B>解决Q?BR></B>解决q度设计的方法可以直接从XPQextreme programmingQ中扑ֈQ局部范围内Q设计和~码实现最的暴露的[bare minimum]部分来满需求,而不要做的过多。当你需要意识到来的需求,比如q_负蝲需求和在系l负载顶峰时候的行ؓQ不要试䏀第二次猜测”[second-guess]pȝ来需要成为的样子。另外,J2EEq_Z定义了特性如可测度性和服务器底层需要捕Ld错误?/P> <P><B>?/B>Q?</P> <P>除了上面的解x式,使用设计模式——它们会显著的提高你的系l设计。EJB模型本nq泛C用设计模式。如Q每个EJB里的Home接口是一个寻找者和工厂模式的例子[Finder and Factory pattern].一个EJB的远E接口担当实际bean的实现的代理Q也是容器截取调用和提供服务如透明化负载均衡的能力关键。忽略设计模式的价值是危险的?</P> <P>我不断强调的另一U危险是Qؓ使用EJB而用。你的应用的一些部分在不适合被当作EJB模型时候而被设计为EJB模型Q你的整个应用似乎用EJBs获得无限h倹{这是极度的q分设计Q我曄到完的servlet ?JavaBean 应用在ƈ没有好的技术方面的原因而用EJBsӞ变的׃八糟Q不得不重新设计?</P> <P><FONT size=+1><STRONG>危机3Q未分离表示逻辑和商业逻辑</STRONG></FONT> </P> <P><B>目阶段Q?/B>设计</P> <P><B>所涉及的项目阶D?/B>Q开?</P> <P><B>所影响的系l性能</B>Q可l护性,可扩展性,可执行?/P> <P><B>症状Q?/B> </P> <UL> <LI>大型且笨拙的JSPs <LI>当商业逻辑改变Ӟ你发C需要编辑JSP文g <LI>昄需求的改变q你编辑和重新部vEJBs和后台组?</LI></UL> <P><B>解决Q?/B> </P> <P>J2EEq_l你表C逻辑同导航和控制分离q最l与商业逻辑分离的机会,q被UCؓModel2 l构Q参?<A >Resources</A> Q。如果你已经掉进圈套Q一U比较呆板的做法或许有用。你应该臛_?那些大部分自我包含的片断保持“垂直瘦”[thin vertical slices](q是_我如何布局的一个片断要同如何更Ҏ的用户名和密码分开)。在你系l中使用q种方式来重新组l?</P> <P><B>注:</B> </P> <P>在你的工E中使用一U连接UI框架Q如标签库)坚固的设计将帮助你避免逻辑分离问题Q不要ؓ你自己需要的GUI框架设计而烦|q会Z带来诸多执行斚w的好处。依ơ评估每一U框Ӟ然后选择最适合你的那种?</P> <P><BR><FONT size=+1><STRONG>危机4 Q未在你开发的地方部v</STRONG></FONT> </P> <P><B>目阶段Q?/B>开?</P> <P><B>所影响的项目阶D:</B>E_阶段Qƈ行阶D,存在阶段 </P> <P><B>所影响的系l特?/B>Q正常的心智QYour sanityQ?</P> <P><B>征兆Q?/B> </P> <UL> <LI>持箋多日?周的向真正应用系l的q移 <LI>关于q行期的风险是固有的Q伴随着诸多未测试的不清晰和主要的情? <LI>在运行期pȝ上的数据和开发及E_期间的数据不相同 <LI>在开发者机器上无法q行构徏[builds] <LI>应用的行为在开发环境、稳定性环境、品环境不一?</LI></UL> <P><B>解决Q?/B> </P> <P>危机4的解军_法是你产品的环境如实地复制C的开发环境。在你打放|品的切的环境上开发——不要在Red Hat Linux 上用JDK1.3开发,然后却布|到 JDK 1.2.2 ?Solaris 7 上。进一步,不要在这个应用服务器上开发却部v到另外的服务器上。同Ӟ得到你品的数据库的数据的大致印象,q且在其上进行测试,不要依赖人工创造的数据。如果品数据是敏感的[sensitive],减少其敏感性,装蝲它。意想不到的产品数据打_ </P> <UL> <LI>数据有效性规? <LI>已经试的系l行? <LI>pȝlg间的契约Q尤其是EJB-EJB和EJB-DB之间Q?</LI></UL> <P>最坏的情况Q每一均会导致异常,I指针和你以前从未见q的行ؓ?</P> <P><STRONG>注:</STRONG><BR></P> <P>开发者经常到E_阶段才想起安全性(“Ӟ屏幕正常Q让我们把用户加为确认的员工”)。花费同L旉来避免这U圈套实现安全性,像你分d业逻辑时候做的那栗?</P> <P>实施是一个复杂的q程Q充满政治问题和技术问题。你会到你不期望的问题;q就是实施的全部。开发环境和E_性环境给你在实施前犯错误和找到问题的I间Q利用这点,减应用实施过E中你的痛苦和风险?</P> <P>你经历的目多Q你pҎ知道什么能q行什么不能,Z和你的同伴保留一本项目记事本。在实施q程Q你的目标应该是同样的错误不犯两ơ?</P> <P>  </P> <P><B>危机5Q选择错误的(开发工P提供?/B> </P> <P><B>目阶段Q?/B>提供商选择 </P> <P><B>所牉|的项目阶D?/B>:设计Q开发,E_?负蝲试Q实?</P> <P><B>所影响的系l特?/B>Q可量性,执行性,可维护性,E_?</P> <P><B>征兆Q?/B> </P> <UL> <LI>开发h员花费较长的旉和工具“较劜y[wrestling]Q而不是有效的使用它们 <LI>在执行过E中Q重要的pȝ需要重新设计来避开知道和不知道的bugs <LI>不同工具间差的整合性乃至丝毫不能整合(应用服务器和IDE,IDE和调试工P源代码控制和构造工P{等{等Q? <LI>对于IDEQ调试器{,开发者简单的以个人的喜好来选择或放?</LI></UL> <P><STRONG>解决Q?/STRONG><BR></P> <P>Z避免危机5Q你需要一个好的供应商选择q程。危?0在这里是适用的?</P> <P>对于IDEs,唯一的评h法是M用它。评价J2EE的唯一的方式是构徏一个你的观忉|架中用到的特性的实现。事实上Q当你花?个月开发和投资C特D的培训的时候,你不会希望在q些工具之间出现BUG. </P> <P>那么Q当你开发的半\上遇到关于工具集的麻烦的时候怎么办?一些工具似乎比其他的更加重要。如果你选择的应用服务器不适合你的需求,你要接受它ƈ改变规范。如果IDE令h恶心Q就讄最别的代码规范Qtabs对空格等{)Qƈ让开发者寻找能最大限度提高生产效率的配置?</P> <P><B>注:</B> </P> <P>了解最好的供应商和工具作ؓ一特D的dq是一个“只做一ơ”的工作。你需要不断对市场评估。例如,q去?2个月Q我曄q?个不同的IDE,q取决于我的应用服务器^収ͼ而不是我是否写EJB代码?</P> <P><B>危机6Q不了解你的供应?/B> </P> <P><B>目阶段</B>Q供应商选择 </P> <P><B>所涉及的项目阶D?/B>Q供应商选择之后的所有阶D?</P> <P><B>受媄响的pȝҎ?/B>Q可l护性,可测量性,执行?</P> <P><STRONG>征兆Q?/STRONG><BR></P> <UL> <LI>开发时间比最坏的估计旉?3Q? <LI>当供应商或实现提供的功能出“圈子”[作者用了 boxQ不懂——译者注]Ӟ开发者重新发明轮子。[Developers reinvent the wheel when the vendor or implementation provides the required functionality out of the box] </LI></UL> <P><STRONG>解决Q?/STRONG> </P> <P>为避免由于不了解供应商而生的问题Q去订阅所有的供应商所能提供的资源Q如邮g列表Q新ȝQ和发行注释Q尤其是那些修订BUGS的列表)Q你得到无可估量的信息?/P> <P>一旦你选定了供应商p马上投资于培训,然后Q徏立一个快速的概念的实现来打破q个它。[Once you've picked your vendors, invest in training as soon as possible, ideally well before the project kicks off. Next, build a quick proof of concept to break the team in gently.原文如此Q译的郁?-{] 建立两个Ejbsq|它们,然后通过你的昄层技术(Swing GUIQJsps {)调用它们。如果你试着构造你的开发环境同时试着满一个项目目标,环境的设|将不尽人意。事实上Q我曄看到q没有经q部|过E的目Q原因是“我们没有时间”。当团队不得不每天晚上干?1点仅仅是Z获得一个发布的应用的时候,此处的意义就昑־ؓ重要。因此,事先p一些时间将q些l节处理好,在以后的路上你将节约大量旉。对那些说“我们的计划没有l我们这么多的时间”的人,我要_“你的计划没有给你不做它的时间。?/P> <P><B>注:</B>  </P> <P>在J2EE世界中,工具提供商的技术的可{换性[transferable]如何呢?让我们看一看两个供应商的具体例子——IBM和BEApȝ公司——支持EJB1.1的不同的应用服务器。确实,BEA WebLogic 5.1 ?IBM WebSphere 3.5 有多大程度的怼呢? </P> <OL> <LI>BEA WebLogic 的配|管理风gIBM WebSphere 非常不同? <LI>IBM对于WEBSPHERE采用了全GUI环境Q与此对应,BEA 对于WebLogic提供了全命o行的控制工具? <LI>IBM WebSphere 对于E序员采用了IIOP 来通讯和抛出CORBA 可见的异常,weblogicҎ没有CORBA 层,默认采用t3协议?</LI></OL> <P>q里只是几个不同之处Q还有许多。概要:多数的供应商之间的相似就像粉W和奶a之相g栗在一U应用服务器上成Z名专家ƈ不意味着你在所有的服务器上都是专家。上面的讨论适合于Q何东西:IDEs,调试器,~译工具Q配|管理等{。对于一U特D工h有用经验对于评价其竞争Ҏ是一件好事情。但qƈ不意味着你可以从一U工具^滑的q度到另一U。尽量给你自己时间来熟悉你的工具?/P> <P> </P> <P><B>危机7Q没有ؓ可测量性或可执行性设?/B> </P> <P><B>目阶段</B>Q设?</P> <P><B>所涉及的项目阶D?/B>Q开发,试Q生存期 </P> <P><B>受媄响的pȝҎ?/B>Q可量性,可执行性,可维护?</P> <P><STRONG>征兆Q?/STRONG> </P> <UL> <LI>pȝ慢的不可接受 <LI>q度利用服务端状态的pȝ及不能充分利用供应商集群技?</LI></UL> <P><B>解决Q?/B></P> <P>对于危机7Q在分析阶段你要明确的知道系l的执行性能和测量性能——在q入开发之前就要知道你需要得到的数字。如果你知道你需要每U处?0个交易,但所有的实体Bean的设计只能提?0个交?U,那么你需要ؓ你的pȝL替代方式Q比如存储过E,批处理或重写的OLTP 斚w[reworked OLTP aspects ].</P> <P>量求助于你的工具供应商——他们应该知道他们品的优缺点,q因此而帮助你?/P> <P><B>注:</B> </P> <P>没有为可量性或可执行性设计经常和危机2Q过度设计)相抵触。事实上Q它们相互取长补短。对于危?我的解决方式是只有绝寚w要的时候才q行部v。对于确定可量性和可执行性,你可以在需要的时候设|可能的最大倹{?/P> <P>如果你确定大量的度是一个必需的需求,你可以指定一个支持最大聚合的应用服务器,可能的话Qؓ你的执行提供一个交易缓存。进一步,你可以设计商业对象如Ejbs来最大程度的利用服务器的架构。XP没有q样的问题,你仍然可以在必须的时候再部v.</P> <P>我回这U方式,思考提供这U^衡的方式。当我想一个最单的pȝӞ那个pȝ需要提供客戯求的功能和行为?</P> <P> </P> <P><B>危机8Q陈旧的开发过E?/B></P> <P><B>目阶段</B>Q开?</P> <P><B>所涉及的项目阶D?/B>Q稳定性,生存?</P> <P><B>受媄响的pȝҎ?/B>Q可l护性和~码质量 </P> <P><B>征兆Q?/B> </P> <UL> <LI>一个项目计划像可疑的瀑布模型Q“首先,我们q行整体设计Q然后,我们坐下花大量时间来~码。? <LI>׃部vq程不存在,部v便成了一个噩梦? <LI>部v的天数等于所p的开发天敎ͼ因ؓ什么都没完成? <LI>在整合时lg未经q充分测试。实际上Q整体测试意味着两个不E_的组件的l到一P然后看它们的堆栈?</LI></UL> <P><STRONG>解决Q?/STRONG><BR>一个好的Y件设计方法将拯救你的生命。我l常提到XPQ下面的资源包含一个这L链接(<A >Resources</A>)。你发现XP覆盖了很大的l节?</P> <P><STRONG>注:</STRONG><BR>我ƈ没有 没经qJunit单元试和没有用Ant部v的经历——那是两个可以加强XPҎ的免费工兗参见: <A >Resources</A>. </P> <P><FONT size=+1><STRONG>危机9Q用框架失?/STRONG></FONT><BR></P> <P><B>目阶段</B>Q开?</P> <P><B>所涉及的项目阶D?/B>Q开发过E,E_性能Q生存期 </P> <P><B>受媄响的pȝҎ?/B>Q可l护性,可扩展性和~码质量 </P> <P><STRONG>征兆Q?/STRONG></P> <UL> <LI>核心库中的Bug在代码里重复使用 <LI>没有讑֮日志标准——因此系l的输出不可L不能转换成scripts <LI>差的或不协调的异常处理。在一些站点上我看刎ͼl端用户在一些低U错误上被暴Ԍ例如Q当用户试图物Rl帐的时候出现SQLException的堆栈追t。用h下来做什么呢Q打电话l数据库理员ƈ强制报告q个错误吗? </LI></UL> <P>下面的Q务需要开发者在大量的情况下处理Qƈ且,应该作ؓ使用框架的首要Q务: </P> <UL> <LI>记录日志 <LI>异常处理 <LI>获取相关资源的链接(数据库,名字服务{) <LI>建立JSP面 <LI>数据有效性验?</LI></UL> <P><STRONG>解决Q?/STRONG> </P> <P>我对在重型应用中使用轻量U框架坚信不UR事实上Q我在JavaWorld的第一文?<A >Frameworks Save the Day</A>" 讨论q在企业开发环境中使用框架的问题。如果你现在已经在开发,马上采用框架仍然获得重大收益。你经历重新工作的痛苦Q像日志及异常捕P但就长远来看Q你会节U大量时间和金钱?/P> <P><STRONG>注:</STRONG><BR></P> <P>当你采用框架和面向组件编E时候,考虑不同U别的重用。在W一层,重塑QplumbingQ,使用0.9或更高的重用因子Qreuse factorQ?q意味着90Q的工程用到它。越是特D的服务Q其重用因子低。是_我可能徏立一个帐h务来理资源使用Q希?0%的工E用到它。但对于那些需要它的工E——那些搞开发的男孩很高兴它在那里Q?/P> <P><STRONG><FONT size=+1>危机10Q将工程计划和设计基于市场广告,而不是技术现?/FONT></STRONG></P> <P><STRONG>注:</STRONG> </P> <P>危机10q未出现在我的列表中Q直到我认识到有许多的h而不仅仅是我一个存在对企业java的误解,其是那些新鲜的领域?/P> <P><STRONG>目阶段Q?/STRONG><BR>所有的目阶段Q尤其是供应商的选择更明显?/P> <P><STRONG>所影响的项目阶D:</STRONG><BR>所有阶D?</P> <P><STRONG>所影响的项目特性:</STRONG><BR>可维护性,可扩展性,设计质量Q代码质?</P> <P><STRONG>征兆Q?/STRONG> </P> <UL> <LI>技术方面的决策占很ȝ分量Q因为EJB被设计的M <LI>供应商选择对于产品未经q是否轻便的试验 <LI>在项目生存期需要选择工具 </LI></UL> <P><STRONG>解决Q?/STRONG><BR></P> <P>不要怿在你目之外的Q何既得利益者。这是说Q不要相信供应商Q除非你已经了解他们了)Q不要相信供应商提供的白U。如果你惌一些真实的应用服务器的Q查询以前的链接Q?A >Resources</A>。进一步,下蝲你想评测的工P挽v袖子Q设计原型。通过提供的例子来q行QQ何好的提供商都有例子Q?/P> <P>MQ选择正确的供应商和工具集需要花Ҏ_管你的旉可能q不充裕。将你的选择集中?个-4个,然后每个都试一下。花费一周的旉来验证你的应用服务器QIDEQ部|过E等{,直到用这些工具可以满你的开发计划时?</P> <P><STRONG>注:</STRONG><BR>如果你对J2EE不熟悉,在项目开始阶D你很受打凅R一开始所做的军_对整个目的成功有巨大的媄响。一个好的J2EEN可能要进行一个重大的供应商选择q程q很好地你带入设计和开发状态?/P> <P><B>只有q?0危机?</B></P> <P>10只是一个武断的数字Q只是作Z个断点——还有数不清的其他危机存在。确实,我自׃知道比这多一倍的危机。即使这P如果你防备了q里所列出的,我保证你的工E可以完和成功?/P> <P>如果只从q篇文章中吸取一样东西,我的是:<I>没有什么可以替代经验和计划?/I>[<EM>There is no substitute for experience and planning]</EM>。如果你没有l验Q那么你去试Q然后得到它。在工程q程中,不要赌注押到工E开始时候你以及你团队的培训上。开发前p行一些编码,更好的是在设计之前就做编码。把你的Java和J2EE团队交给l验丰富的h来带以确保整个工E的方向和你团队中那些经验少的成员可以沿着q条路成长v来?/P> <P>最后,我写的越多,我越清楚我想说的Q?</P> <UL> <LI>软g工程的社会层? <LI>单元试和整体测试(什么时候测试完成?Q? <LI>设计模式 <LI>异常捕获 </LI></UL> <P>唉,我没有那么多的空_下一文章将很快出来。不论如何,好q! </P> <P><FONT size=+1><STRONG>l论</STRONG></FONT> </P> <P>好吧Q就q么多。上面的互相影响?0危机,是你在企业Java开发中要面对或已l面对的大多敎ͼ如果不是全部的话Q问题的原因。自然的Q在你的旅途中q会遇到许多问题Q但我相信,我已l揭CZ最主要的原因。做个回,下面是按重要程度划分的q?0危机:</P> <OL> <LI>没有理解Java,没有理解EJB,没有理解J2EE <LI>q度设计Q无论是否是对于EJBQ? <LI>未分表C逻辑和商业逻辑 <LI>未在你开发的地方部v <LI>选择错误的(开发工P提供? <LI>不了解你的供应商 <LI>没有为可量性或可执行性设? <LI>陈旧的开发过E? <LI>使用框架p| <LI>工E计划和设计Z市场q告Q而不是技术现?/LI></OL><img src ="http://www.tkk7.com/eclipse/aggbug/5021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/eclipse/" target="_blank">eclispe</a> 2005-05-21 09:00 <a href="http://www.tkk7.com/eclipse/archive/2005/05/21/5021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://by9277.com" target="_blank">Ƶһ</a>| <a href="http://t66p.com" target="_blank">þùƷѹۿ</a>| <a href="http://blzcn.com" target="_blank">޵һƷպ߲</a>| <a href="http://kdltuliao.com" target="_blank">ۺ</a>| <a href="http://scienfood.com" target="_blank">޳aƬ2023</a>| <a href="http://0149545.com" target="_blank">߹͵Ʒ</a>| <a href="http://se969.com" target="_blank">˾þۺӰԺҳ</a>| <a href="http://cjfuli.com" target="_blank">ӽ18վ</a>| <a href="http://m8va.com" target="_blank">һ˿</a>| <a href="http://gachi1151.com" target="_blank">Ƶվ</a>| <a href="http://bnb989.com" target="_blank">ۺŷ㻨</a>| <a href="http://5r7b.com" target="_blank">þóѲվ</a>| <a href="http://blzcn.com" target="_blank">޹㽶</a>| <a href="http://17soco.com" target="_blank">һƵ</a>| <a href="http://vo168.com" target="_blank">һ߹ۿվ</a>| <a href="http://8aa3.com" target="_blank">պƬӰѹۿ</a>| <a href="http://0730jxpm.com" target="_blank">޾Һ</a>| <a href="http://xsjxp.com" target="_blank">ŪƵ</a>| <a href="http://bj-tkld.com" target="_blank">޹˾þۺһ</a>| <a href="http://hkcp168.com" target="_blank">Ʒһ</a>| <a href="http://3baimm.com" target="_blank">18վڵ</a>| <a href="http://rr433.com" target="_blank">˾Ʒձ11</a>| <a href="http://gz-shunan.com" target="_blank">ѹۿŮվ</a>| <a href="http://heifengmi.com" target="_blank">þþƷŮav鶹</a>| <a href="http://xzzkf.com" target="_blank">޾ƷƵѹۿ</a>| <a href="http://xjdz8.com" target="_blank">ɫav</a>| <a href="http://4438xx21.com" target="_blank">ɫַ</a>| <a href="http://bjbanjia01.com" target="_blank">һƵ</a>| <a href="http://ebuy668.com" target="_blank">Ļ</a>| <a href="http://fense1.com" target="_blank">99Ƶ߾Ʒ</a>| <a href="http://591se591se.com" target="_blank">ASS츾ëPICS</a>| <a href="http://16688shop.com" target="_blank">͹ƷƵƷ</a>| <a href="http://1000hu.com" target="_blank">Ůڵ</a>| <a href="http://qqcao7.com" target="_blank">¼ۺͼƬ</a>| <a href="http://wwwzs88.com" target="_blank">ŮƵվ</a>| <a href="http://igdytt.com" target="_blank">ֳִִӲ3pƵ</a>| <a href="http://benjiebf.com" target="_blank">޾ƷŮþþ</a>| <a href="http://fenxiangceo.com" target="_blank">һ߹ۿ</a>| <a href="http://www-774220.com" target="_blank">Ʒ޳aƬ߹ۿ</a>| <a href="http://225ck.com" target="_blank">ӰԺһҳСƵ߹ۿ</a>| <a href="http://51xinshiji.com" target="_blank">ˬִֻ̼վ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>