ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>激情综合五月,欧洲综合视频,蜜臀av国产精品久久久久http://www.aygfsteel.com/msmary/category/26490.html书山有èµ\勤䨓(f¨´)径,学æ“væ— æ„Ó(d¨°ng)苦作èˆ?/description>zh-cnThu, 25 Oct 2007 12:42:23 GMTThu, 25 Oct 2007 12:42:23 GMT60AOP是什ä¹?/title><link>http://www.aygfsteel.com/msmary/articles/155418.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Tue, 23 Oct 2007 14:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/msmary/articles/155418.html</guid><wfw:comment>http://www.aygfsteel.com/msmary/comments/155418.html</wfw:comment><comments>http://www.aygfsteel.com/msmary/articles/155418.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/msmary/comments/commentRss/155418.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/msmary/services/trackbacks/155418.html</trackback:ping><description><![CDATA[<p>  </p> <p style="line-height: 150%; text-align: left" align="left"><strong><span style="color: #212121; font-family: 宋体">ä¸ÞZ»€ä¹ˆè¦åŒºåˆ†</span></strong><strong><span style="color: #212121; font-family: Verdana">J2EE</span></strong><strong><span style="color: #212121; font-family: 宋体">容器å’?/span></strong><strong><span style="color: #212121; font-family: Verdana">J2EE</span></strong><strong><span style="color: #212121; font-family: 宋体">应用¾pȝ»ŸåQ?/span></strong></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  我们知道åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">应用¾pȝ»Ÿåªæœ‰éƒ¨çÖvåœ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器中才能运行,那么ä¸ÞZ»€ä¹ˆåˆ’åˆ†äØ“(f¨´)</span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器å’?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">应用¾pȝ»ŸåQ?/span><span style="color: #212121; line-height: 150%; font-family: 宋体">通过å¯?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器˜qè¡Œæœºåˆ¶çš„分析(见我的电(sh¨´)子教æ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">“EJB</span><span style="color: #212121; line-height: 150%; font-family: 宋体">实用原理</span><span style="color: #212121; line-height: 150%; font-family: Verdana">”</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQ‰ï¼Œæˆ‘们可以发现åQšå®žé™…上</span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器分离äº?ji¨£n)一般应用系¾lŸçš„一些通用功能åQŒä¾‹å¦‚事务机制、安全机制以å?qi¨¢ng)对象池或线½E‹æ± ½{‰æ€§èƒ½ä¼˜åŒ–机制ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  ˜q™äº›åŠŸèƒ½æœºåˆ¶æ˜¯æ¯ä¸ªåº”ç”¨ç³»¾lŸå‡ ä¹Žéƒ½éœ€è¦çš„åQŒå› æ­¤å¯ä»¥ä»Žå…·ä½“应用¾pȝ»Ÿä¸­åˆ†¼›Õd‡ºæ¥ï¼Œå½¢æˆä¸€ä¸ªé€šç”¨çš„æ¡†æž¶åã^収ͼŒè€Œä¸”åQŒè¿™äº›åŠŸèƒ½æœºåˆ¶çš„è®¾è®¡å¼€å‘æœ‰ä¸€å®šéš¾åº¦ï¼ŒåŒæ—¶˜qè¡Œçš„稳定性和快速性都非常重要åQŒå¿…™åȝ»˜q‡é•¿æ—‰™—´è°ƒè¯•和运行经验积累而成åQŒå› æ­¤ï¼Œå½¢æˆäº?ji¨£n)专门çš?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器服务器äñ”品,å¦?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">Tomcat JBoss</span><span style="color: #212121; line-height: 150%; font-family: 宋体">ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">Websphere</span><span style="color: #212121; line-height: 150%; font-family: 宋体">ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">WebLogic</span><span style="color: #212121; line-height: 150%; font-family: 宋体">½{‰ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  ä»?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">¾pȝ»Ÿåˆ’分ä¸?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器å’?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">应用¾pȝ»Ÿä¸¤ä¸ªæ–šw¢åQŒæˆ‘们已¾lçœ‹åˆîC¸€¿Uåˆ†æ•£å…³æ³¨çš„æ€èµ\åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">separation of concerns</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQ‰ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <br /> </span><strong><span style="color: #212121; font-family: 宋体">分散å…Ïx(ch¨®ng)³¨</span></strong><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  ž®†é€šç”¨éœ€æ±‚功能从不相关类之中分离出来åQ›åŒæ—Óž¼Œèƒ½å¤Ÿä½¿å¾—很多¾cÕd…±äº«ä¸€ä¸ªè¡Œä¸ºï¼Œä¸€æ—¦è¡Œä¸ºå‘生变化,不必修改很多¾c»ï¼Œåªè¦ä¿®æ”¹˜q™ä¸ªè¡ŒäØ“(f¨´)ž®±å¯ä»¥ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  </span><span style="color: #212121; line-height: 150%; font-family: Verdana"> AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">ž®±æ˜¯˜q™ç§å®žçŽ°åˆ†æ•£å…Ïx(ch¨®ng)³¨çš„ç¼–½E‹æ–¹æ³•,它将</span><span style="color: #212121; line-height: 150%; font-family: Verdana">“</span><span style="color: #212121; line-height: 150%; font-family: 宋体">å…Ïx(ch¨®ng)³¨</span><span style="color: #212121; line-height: 150%; font-family: Verdana">”</span><span style="color: #212121; line-height: 150%; font-family: 宋体">ž®è£…åœ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">“</span><span style="color: #212121; line-height: 150%; font-family: 宋体">æ–šw¢</span><span style="color: #212121; line-height: 150%; font-family: Verdana">”</span><span style="color: #212121; line-height: 150%; font-family: 宋体">中ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><strong><span style="color: #212121; font-family: Verdana">AOP</span></strong><strong><span style="color: #212121; font-family: 宋体">是什么?</span></strong></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  </span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">æ˜?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">OOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">çš„åšg¾l­ï¼Œæ˜?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">Aspect Oriented Programming</span><span style="color: #212121; line-height: 150%; font-family: 宋体">的羃写,意思是面向斚w¢¾~–程ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">实际æ˜?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">GoF</span><span style="color: #212121; line-height: 150%; font-family: 宋体">设计模式的åšg¾l­ï¼Œè®¾è®¡æ¨¡å¼å­œå­œä¸å€¦è¿½æ±‚的是调用者和被调用者之间的解耦,</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">可以说也是这¿Uç›®æ ‡çš„一¿Uå®žçްã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  举例åQšå‡è®¾æœ‰åœ¨ä¸€ä¸ªåº”用系¾lŸä¸­åQŒæœ‰ä¸€ä¸ªå…±äº«çš„æ•°æ®å¿…é¡»è¢«åÆˆå‘åŒæ—¶è®¿é—®ï¼Œé¦–å…ˆåQŒå°†˜q™ä¸ªæ•°æ®ž®è£…在数据对象中åQŒç§°ä¸?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">Data Class</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQŒåŒæ—Óž¼Œž®†æœ‰å¤šä¸ªè®‰K—®¾c»ï¼Œä¸“门用于在同一时刻讉K—®˜q™åŒä¸€ä¸ªæ•°æ®å¯¹è±¡ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  ä¸ÞZº†(ji¨£n)完成上述òq¶å‘讉K—®åŒä¸€èµ„源的功能,需要引入锁</span><span style="color: #212121; line-height: 150%; font-family: Verdana">Lock</span><span style="color: #212121; line-height: 150%; font-family: 宋体">的概念,也就是说åQŒæŸä¸ªæ—¶åˆ»ï¼Œå½“有一个访问类讉K—®˜q™ä¸ªæ•°æ®å¯¹è±¡æ—Óž¼Œ˜q™ä¸ªæ•°æ®å¯¹è±¡å¿…须上锁</span><span style="color: #212121; line-height: 150%; font-family: Verdana">Locked</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQŒç”¨å®ŒåŽž®Þq«‹åŒ™§£é”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">unLocked</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQŒå†ä¾›å…¶å®ƒè®¿é—®ç±»è®‰K—®ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  使用传统的编½E‹ä¹ (f¨¤n)惯,我们ä¼?x¨¬)创å»ÞZ¸€ä¸ªæŠ½è±¡ç±»åQŒæ‰€æœ‰çš„讉K—®¾cȝ‘ô承这个抽象父¾c»ï¼Œå¦‚下åQ?/span></p> <div align="center"> <table style="width: 80%" cellspacing="0" cellpadding="0" width="80%" border="0"> <tbody> <tr> <td style="padding-right: 0cm; padding-left: 0cm; background: #cccccc; padding-bottom: 0cm; padding-top: 0cm"> <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: Verdana">abstract class Worker{</span></p> <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 宋体">  </span><span style="font-size: 9pt; color: black; font-family: Verdana">abstract void locked();<br /> </span><span style="font-size: 9pt; color: black; font-family: 宋体">  </span><span style="font-size: 9pt; color: black; font-family: Verdana">abstract void accessDataObject();<br /> </span><span style="font-size: 9pt; color: black; font-family: 宋体">  </span><span style="font-size: 9pt; color: black; font-family: Verdana">abstract void unlocked();</span></p> <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: Verdana">}</span></p> </td> </tr> </tbody> </table> </div> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  ¾~ºç‚¹åQ?/span></p> <ul type="square"> <li style="color: black; line-height: 150%; text-align: left; tab-stops: list 36.0pt"><span style="line-height: 150%; font-family: Verdana">accessDataObject()</span><span style="line-height: 150%; font-family: 宋体">æ–ÒŽ(gu¨©)³•需要有</span><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">状态之¾cȝš„相关代码ã€?/span></li> <li style="color: black; line-height: 150%; text-align: left; tab-stops: list 36.0pt"><span style="line-height: 150%; font-family: Verdana">Java</span><span style="line-height: 150%; font-family: 宋体">只提供了(ji¨£n)单ç‘ô承,因此具体讉K—®¾cÕdªèƒ½ç‘ô承这个父¾c»ï¼Œå¦‚果具体讉K—®¾c»è¿˜è¦ç‘ô承其它父¾c»ï¼Œæ¯”如另外一个如</span><span style="line-height: 150%; font-family: Verdana">Worker</span><span style="line-height: 150%; font-family: 宋体">的父¾c»ï¼Œž®†æ— æ³•方便实现ã€?/span></li> <li style="color: black; line-height: 150%; text-align: left; tab-stops: list 36.0pt"><span style="line-height: 150%; font-family: 宋体">重用被打折扣åQŒå…·ä½“è®¿é—®ç±»å› äØ“(f¨´)也包å?/span><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">状态之¾cȝš„相关代码åQŒåªèƒ½è¢«é‡ç”¨åœ¨ç›¸å…Ïx(ch¨®ng)œ‰</span><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">的场合,重用范围很窄(ji¨£ng)ã€?/span><span style="line-height: 150%; font-family: Verdana"><br /> <br /> </span><span style="line-height: 150%; font-family: 宋体">仔细研究˜q™ä¸ªåº”用çš?/span><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">åQŒå®ƒå…¶å®žæœ‰ä¸‹åˆ—特性:(x¨¬)</span></li> <li style="color: black; line-height: 150%; text-align: left; tab-stops: list 36.0pt"><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">功能不是具体讉K—®¾cȝš„首要或主要功能,讉K—®¾cÖM¸»è¦åŠŸèƒ½æ˜¯è®‰K—®æ•°æ®å¯¹è±¡åQŒä¾‹å¦‚读取数据或更改动作ã€?/span></li> <li style="color: black; line-height: 150%; text-align: left; tab-stops: list 36.0pt"><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">è¡ŒäØ“(f¨´)其实是和具体讉K—®¾cȝš„主要功能可以独立、区分开来的ã€?/span></li> <li style="color: black; line-height: 150%; text-align: left; tab-stops: list 36.0pt"><span style="line-height: 150%; font-family: Verdana">“</span><span style="line-height: 150%; font-family: 宋体">é”?/span><span style="line-height: 150%; font-family: Verdana">”</span><span style="line-height: 150%; font-family: 宋体">功能其实是这个系¾lŸçš„一个纵向切面,涉及(qi¨¢ng)许多¾c…R€è®¸å¤šç±»çš„æ–¹æ³•。如下图åQ?/span><span style="line-height: 150%; font-family: Verdana"><br /> </span></li> </ul> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  因此<img height="258" alt="" src="http://www.aygfsteel.com/images/blogjava_net/msmary/lock.png" width="250" border="0" />åQŒä¸€ä¸ªæ–°çš„程序结构应该是å…Ïx(ch¨®ng)³¨¾pȝ»Ÿçš„纵向切面,例如˜q™ä¸ªåº”用çš?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">“</span><span style="color: #212121; line-height: 150%; font-family: 宋体">é”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">”</span><span style="color: #212121; line-height: 150%; font-family: 宋体">功能åQŒè¿™ä¸ªæ–°çš„程序结构就æ˜?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">aspect</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQˆæ–¹é¢ï¼‰(j¨ª)</span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  在这个应用中åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">“</span><span style="color: #212121; line-height: 150%; font-family: 宋体">é”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">”</span><span style="color: #212121; line-height: 150%; font-family: 宋体">æ–šw¢åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">aspect</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQ‰åº”该有以下职责åQ?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  提供一些必备的功能åQŒå¯¹è¢«è®¿é—®å¯¹è±¡å®žçŽ°åŠ é”æˆ–è§£é”åŠŸèƒ½ã€‚ä»¥ä¿è¯æ‰€æœ‰åœ¨ä¿®æ”¹æ•°æ®å¯¹è±¡çš„æ“ä½œä¹‹å‰èƒ½å¤Ÿè°ƒç”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">lock()</span><span style="color: #212121; line-height: 150%; font-family: 宋体">加锁åQŒåœ¨å®ƒä‹É用完成后åQŒè°ƒç”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">unlock()</span><span style="color: #212121; line-height: 150%; font-family: 宋体">解锁ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><strong><span style="color: #212121; font-family: Verdana">AOP</span></strong><strong><span style="color: #212121; font-family: 宋体">应用范围</span></strong><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  很明显,</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">非常适合开å?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器服务器,目前</span><span style="color: #212121; line-height: 150%; font-family: Verdana">JBoss 4.0</span><span style="color: #212121; line-height: 150%; font-family: 宋体">正是使用</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">框架˜q›è¡Œå¼€å‘ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  具体功能如下åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Authentication </span><span style="color: #212121; line-height: 150%; font-family: 宋体">权限</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Caching </span><span style="color: #212121; line-height: 150%; font-family: 宋体">¾~“å­˜</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Context passing </span><span style="color: #212121; line-height: 150%; font-family: 宋体">内容传é€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Error handling </span><span style="color: #212121; line-height: 150%; font-family: 宋体">错误处理</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Lazy loading</span><span style="color: #212121; line-height: 150%; font-family: 宋体"> 懒加è½?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Debugging</span><span style="color: #212121; line-height: 150%; font-family: 宋体">  调试</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> logging, tracing, profiling and monitoring</span><span style="color: #212121; line-height: 150%; font-family: 宋体"> 记录跟踪 优化 校准</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Performance optimization</span><span style="color: #212121; line-height: 150%; font-family: 宋体"> 性能优化</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Persistence</span><span style="color: #212121; line-height: 150%; font-family: 宋体">  持久åŒ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Resource pooling</span><span style="color: #212121; line-height: 150%; font-family: 宋体"> 资源æ±?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Synchronization</span><span style="color: #212121; line-height: 150%; font-family: 宋体"> 同步</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> Transactions </span><span style="color: #212121; line-height: 150%; font-family: 宋体">事务</span></p> <p style="line-height: 150%; text-align: left" align="left"><strong><span style="color: #212121; font-family: Verdana">AOP</span></strong><strong><span style="color: #212121; font-family: 宋体">有必要吗åQ?/span></strong></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  当然åQŒä¸Š˜q°åº”用范例在没有使用</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">情况下,也得åˆîCº†(ji¨£n)解决åQŒä¾‹å¦?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">JBoss 3.XXX</span><span style="color: #212121; line-height: 150%; font-family: 宋体">也提供了(ji¨£n)上述应用功能åQŒä½†æ˜¯æ²¡æœ‰ä‹Éç”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  但是åQŒä‹Éç”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">可以让我们从一个更高的抽象概念来理解èÊYä»¶ç³»¾lŸï¼Œ</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">也许提供一¿Uæœ‰ä»·å€¼çš„工具。可以这么说åQšå› ä¸ÞZ‹Éç”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">¾l“æž„åQŒçްåœ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">JBoss 4.0</span><span style="color: #212121; line-height: 150%; font-family: 宋体">的源码要æ¯?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">JBoss 3.X</span><span style="color: #212121; line-height: 150%; font-family: 宋体">å®ÒŽ(gu¨©)˜“理解多了(ji¨£n)åQŒè¿™å¯¹äºŽä¸€ä¸ªå¤§åž‹å¤æ‚ç³»¾lŸæ¥è¯´æ˜¯éžå¸¸é‡è¦çš„ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  从另外一个方面说åQŒå¥½åƒä¸æ˜¯æ‰€æœ‰çš„人都需要关å¿?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQŒå®ƒå¯èƒ½æ˜¯ä¸€¿Uæž¶æž„设计的选择åQŒå¦‚果选择</span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">¾pȝ»ŸåQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">å…Ïx(ch¨®ng)³¨çš„上˜q°é€šç”¨æ–šw¢éƒ½å·²¾lè¢«</span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">容器实现äº?ji¨£n)ï¼?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">J2EE</span><span style="color: #212121; line-height: 150%; font-family: 宋体">应用¾pȝ»Ÿå¼€å‘者可能需要更多地å…Ïx(ch¨®ng)³¨è¡Œä¸šåº”用斚w¢</span><span style="color: #212121; line-height: 150%; font-family: Verdana">aspect</span><span style="color: #212121; line-height: 150%; font-family: 宋体">ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> </span><strong><span style="color: #212121; font-family: Verdana">AOP</span></strong><strong><span style="color: #212121; font-family: 宋体">具体实现</span></strong></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  </span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">是一个概念,òq¶æ²¡æœ‰è®¾å®šå…·ä½“语­a€çš„实玎ͼŒå®ƒèƒ½å…‹æœé‚£äº›åªæœ‰å•ç‘ô承特性语­a€çš„缺点(å¦?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">Java</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQ‰ï¼Œç›®å‰</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">具体实现有以下几个项目:(x¨¬)</span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  </span><span style="color: #212121; line-height: 150%; font-family: Verdana">AspectJ (TM)</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQšã€€åˆ›å¾äº?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">Xerox PARC. </span><span style="color: #212121; line-height: 150%; font-family: 宋体">有近十年历史åQŒæˆç†?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  ¾~ºç‚¹åQšè¿‡äºŽå¤æ‚;破坏ž®è£…åQ›éœ€è¦ä¸“门的</span><span style="color: #212121; line-height: 150%; font-family: Verdana">Java</span><span style="color: #212121; line-height: 150%; font-family: 宋体">¾~–译器ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">  动æ€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">åQšä‹Éç”?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">JDK</span><span style="color: #212121; line-height: 150%; font-family: 宋体">的动态代ç?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">API</span><span style="color: #212121; line-height: 150%; font-family: 宋体">或字节码</span><span style="color: #212121; line-height: 150%; font-family: Verdana">Bytecode</span><span style="color: #212121; line-height: 150%; font-family: 宋体">处理技术ã€?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  åŸÞZºŽåŠ¨æ€ä»£ç?/span><span style="color: #212121; line-height: 150%; font-family: Verdana">API</span><span style="color: #212121; line-height: 150%; font-family: 宋体">的具体项目有åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <a target="_blank"><span style="color: #003366; line-height: 150%; font-family: 宋体; text-decoration: none; text-underline: none">  </span><span style="color: #003366; line-height: 150%; text-decoration: none; text-underline: none">JBoss 4.0</span></a> JBoss 4.0</span><span style="color: #212121; line-height: 150%; font-family: 宋体">服务å™?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <a target="_blank"><span style="color: #003366; line-height: 150%; font-family: 宋体; text-decoration: none; text-underline: none">  </span><span style="color: #003366; line-height: 150%; text-decoration: none; text-underline: none">nanning</span></a></span><span style="color: #212121; line-height: 150%; font-family: 宋体"> ˜q™æ˜¯ä»¥ä¸­å›½å—宁命名的一个项目,搞不清楚ä¸ÞZ»€ä¹ˆå’Œä¸­å›½ç›¸å…³åQŸæ˜¯ä¸­å›½äººå‘èµïL(f¨¥ng)š„åQ?/span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <br /> </span><span style="color: #212121; line-height: 150%; font-family: 宋体">  åŸÞZºŽå­—节码的™å¹ç›®æœ‰ï¼š(x¨¬)</span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <a target="_blank"><span style="color: #003366; line-height: 150%; font-family: 宋体; text-decoration: none; text-underline: none">  </span><span style="color: #003366; line-height: 150%; text-decoration: none; text-underline: none">aspectwerkz</span></a></span><span style="color: #212121; line-height: 150%; font-family: 宋体"> </span><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <a target="_blank"><span style="color: #003366; line-height: 150%; font-family: 宋体; text-decoration: none; text-underline: none">  </span><span style="color: #003366; line-height: 150%; text-decoration: none; text-underline: none">spring</span><span style="color: #003366; line-height: 150%; font-family: 宋体; text-decoration: none; text-underline: none"> åQ?/span></a></span></p> <p style="line-height: 150%; text-align: left" align="left"><span style="color: #212121; line-height: 150%; font-family: 宋体">在以后其它文章中åQŒæˆ‘ž®†ç‘ô¾l­å¯¹</span><span style="color: #212121; line-height: 150%; font-family: Verdana">AOP</span><span style="color: #212121; line-height: 150%; font-family: 宋体">概念˜q›è¡Œåˆ†æžåQŒå’Œå¤§å®¶ä¸€èµ·å­¦ä¹?f¨¤n)进步ã€?/span></p> <p style="line-height: 150%; text-align: left" align="left"><strong><span style="color: #212121; font-family: 宋体">参考资料:(x¨¬)</span></strong><span style="color: #212121; line-height: 150%; font-family: Verdana"><br /> <a target="_blank"><span style="color: #003366; line-height: 150%; text-decoration: none; text-underline: none">http://www.voelter.de/data/articles/aop/aop.html</span></a><br /> <a target="_blank"><span style="color: #003366; line-height: 150%; text-decoration: none; text-underline: none">Aspect-Oriented_Java_Development.pdf</span></a></span></p> <img src ="http://www.aygfsteel.com/msmary/aggbug/155418.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/msmary/" target="_blank">谭明</a> 2007-10-23 22:55 <a href="http://www.aygfsteel.com/msmary/articles/155418.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE架构数据表示åQšStrutsåQ‹Hibernate http://www.aygfsteel.com/msmary/articles/153410.html谭明谭明Tue, 16 Oct 2007 16:07:00 GMThttp://www.aygfsteel.com/msmary/articles/153410.htmlhttp://www.aygfsteel.com/msmary/comments/153410.htmlhttp://www.aygfsteel.com/msmary/articles/153410.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/153410.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/153410.html 

在struts+hibernate˜q™ç§¾l“构中,是不应该把Hibernate产生的PO直接传递给JSP的,不管他是IteratoråQŒè¿˜æ˜¯ListåQŒè¿™æ˜¯ä¸€ä¸ªè®¾è®¡é”™è¯¯ã€?

我来谈谈在J2EE架构中各层的数据表示æ–ÒŽ(gu¨©)³•åQ?

â—†Web层的数据表示是FormBeanåQŒæ•°æ®æ¥æºäºŽHTML Form POST

◆业务层的数据表½Cºæ˜¯VO

◆持久层的数据表½Cºæ˜¯POåQŒå…¶æ•°æ®æ¥æºäºŽæ•°æ®åº“åQŒæŒä¹…层的数据表½CÞZ¾‹å¦‚CMP

在一个规范的J2EE架构中,不同层的数据表示应该被限制在层内åQŒè€Œä¸åº”该扩散到其它层åQŒè¿™æ ·å¯ä»¥é™ä½Žå±‚间的耦合性,提高J2EE架构整体的可¾l´æŠ¤æ€§å’Œå¯æ‰©å±•性。比如说Web层的逻辑˜q›è¡Œäº?ji¨£n)修改,那么只需要修改FormBean的结构,而不需要触动业务层和持久层的代码修攏V€‚同æ ïL(f¨¥ng)š„åQŒå½“数据库表˜q›è¡Œäº?ji¨£n)小的调æ•ß_(d¨¢)¼Œé‚£ä¹ˆä¹Ÿåªéœ€è¦ä¿®æ”ÒŽ(gu¨©)Œä¹…层数据表示åQŒè€Œä¸éœ€è¦è§¦åŠ¨ä¸šåŠ¡å±‚ä»£ç å’ŒW(xu¨¦)eb层代码ã€?

不过ç”׃ºŽHibernate的强大功能,例如动态生成POåQŒPO的状态管理可以脱¼›»SessionåQŒä‹É得在应用äº?ji¨£n)Hibernateçš„J2EE框架中,PO完全可以充当VOåQŒå› æ­¤æˆ‘们下面把POå’ŒVOåˆåÆˆåQŒç»Ÿ¿UîCØ“(f¨´)POã€?

先来谈谈ActionFormBean和持久层的PO之间的重大区别:(x¨¬)

在简单的应用中,ActionFormBeanå’ŒPO几乎是没有区别,所以很多ähòq²è„†ž®±æ˜¯ç”¨ActionFormBean来充当P(y¨¢ng)OåQŒäºŽæ˜¯ActionFormBean从JSP™åµé¢åˆ°Servlet控制层再åˆîC¸šåС层åQŒç„¶åŽç©¿˜q‡æŒä¹…层åQŒæœ€åŽä¸€ç›´æ˜ ž®„到数据库表。真是一竿子捅到äº?ji¨£n)底åQ?

但是在复杂的应用中,ActionFormBeanå’ŒPO是分¼›Èš„åQŒä»–们也不可能一栗÷€‚ActionFormBean是和¾|‘页里面的Form表单一一对应的,Form里面有什么元素,Bean里面ž®±æœ‰ä»€ä¹ˆå±žæ€§ã€‚而PO和数据库表对应,因此如果数据库表不修改,那么PO也不ä¼?x¨¬)修改,如果™åµé¢çš„æµ½E‹å’Œæ•°æ®åº“表字段对应关系不一è‡ß_(d¨¢)¼Œé‚£ä¹ˆä½ åˆå¦‚何能够使用ActionFormBean来取代PO呢?

比如说吧åQŒç”¨æˆäh³¨å†Œé¡µé¢è¦æ±‚注册用æˆïL(f¨¥ng)š„基本信息åQŒå› æ­¤HTML Form里面包含äº?ji¨£n)基本信息属性,于是你需要一个ActionFormBean来一一对应(注意åQšæ˜¯ä¸€ä¸€å¯¹åº”)åQŒæ¯ä¸ªBean属性对应一个文本框或者选择框什么的ã€?

而用戯‚¿™ä¸ªæŒä¹…对象呢åQŸä»–的属性和ActionFormBean有什么明显不同呢åQŸä»–ä¼?x¨¬)有一些ActionFormBean所没有的集合属性,比如说用æˆïL(f¨¥ng)š„æƒé™å±žæ€§ï¼Œç”¨æˆ·çš„组属性,用户的帖子等½{‰ã€‚另外还有可能的是在ActionFormBean里面æœ?个属性,分别是用æˆïL(f¨¥ng)š„First Name, Middle Name, Last NameåQŒè€Œåœ¨æˆ‘çš„User˜q™ä¸ªæŒä¹…对象中就是一个Name对象属性ã€?

假设我的注册™åµé¢åŽŸæ¥åªè¦ä½ æä¾›First NameåQŒé‚£ä¹ˆActionFormBeanž®Þp¿™ä¸€ä¸ªå±žæ€§ï¼ŒåŽæ¥æˆ‘要你提供全名,你要改ActionFormBeanåQŒåŠ ä¸¤ä¸ªå±žæ€§ã€‚ä½†æ˜¯è¿™ä¸ªæ—¶å€™PO是不应该修改æ»ß_(d¨¢)¼Œå› äØ“(f¨´)数据库没有改ã€?

那么在一个完整的J2EE¾pȝ»Ÿä¸­åº”该如何进行合理的设计呢?

JSP(View) ---> Action Form Bean (Module) ---> Action(Control)

Action Form Bean是Web层的数据表示åQŒå®ƒå’ŒHTML™åµé¢Form对应åQŒåªè¦Web™åµé¢çš„æ“ä½œæµ½E‹å‘生改变,它就要相应的˜q›è¡Œä¿®æ”¹åQŒå®ƒä¸åº”该也不能被传递到业务层和持久层,否则一旦页面修改,ä¼?x¨¬)一直牵˜qžåˆ°ä¸šåŠ¡å±‚å’ŒæŒä¹…å±‚çš„å¤§é¢¿U¯çš„代码˜q›è¡Œä¿®æ”¹åQŒå¯¹äºŽèÊY件的可维护性和可扩展性而言åQŒæ˜¯ä¸€ä¸ªç¾éš¾ï¼ŒActiontž®±æ˜¯ä»–的边界åQŒåˆ°æ­¤äØ“(f¨´)止!

Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB

而PO则是业务层和持久层的数据表示åQŒå®ƒåœ¨ä¸šåŠ¡å±‚å’ŒæŒä¹…å±‚ä¹‹é—´˜q›è¡Œ‹¹åЍåQŒä»–不应该也不能被传递到Web层的View中去åQŒè€ŒActionServletž®±æ˜¯ä»–的边界åQŒåˆ°æ­¤äØ“(f¨´)止!

然后来看一看整个架构的‹¹ç¨‹åQ?

当用户通过‹¹è§ˆå™¨è®¿é—®ç½‘™åµï¼Œæäº¤äº?ji¨£n)一个页面。于是Action拿到äº?ji¨£n)这个FormBeanåQŒä»–ä¼?x¨¬)把FormBean属性读出来åQŒç„¶åŽæž„造一个PO对象åQŒå†è°ƒç”¨ä¸šåŠ¡å±‚çš„Bean¾c»ï¼Œå®Œæˆäº?ji¨£n)注册操作,重定向到成功™åµé¢ã€‚而业务层Bean收到˜q™ä¸ªPO对象之后åQŒè°ƒç”¨DAO接口æ–ÒŽ(gu¨©)³•åQŒè¿›è¡ŒæŒä¹…对象的持久化操作ã€?

当用æˆähŸ¥è¯¢æŸä¸ªä¼š(x¨¬)员的信息的时候,他用全名˜q›è¡ŒæŸ¥è¯¢åQŒäºŽæ˜¯Action得到一个UserNameFormBean包括äº?个属性,分别是first name, middle name, last nameåQŒç„¶åŽAction把UserNameFormBeançš?个属性读出来åQŒæž„造Name对象åQŒå†è°ƒç”¨ä¸šåŠ¡BeanåQŒæŠŠName对象传递给业务BeanåQŒè¿›è¡ŒæŸ¥è¯¢ã€?

业务Bean取得Name(注意:Name对象只是User的一个属æ€?对象之后调用DAO接口åQŒè¿”回一个Userçš„PO对象åQŒæ³¨æ„è¿™ä¸ªUser不同于在Web层ä‹É用的UserFormBeanåQŒä»–有很多集合属性的。然后业务Bean把User对象˜q”回¾l™Actionã€?

Action拿到User之后åQŒæŠŠUser的基本属性取å‡?集合属性如果不需要就免了(ji¨£n))åQŒæž„造UserFormBeanåQŒç„¶åŽæŠŠUserFormBean request.setAttribute(...)åQŒç„¶åŽé‡å®šå‘到查询结果页面ã€?

查询™åµé¢æ‹¿åˆ°request对象里面的ActionFormBeanåQŒè‡ªåŠ¨è°ƒç”¨tag昄¡¤ºä¹‹ã€?

æ€È»“åQ?

Form Bean是Web层的数据表示åQŒä»–不能被传递到业务层;PO是持久层的数据表½Cºï¼Œåœ¨ç‰¹å®šæƒ…况下åQŒä¾‹å¦‚Hibernate中,他可以取代VO出现在业务层åQŒä½†æ˜¯ä¸½Ž¡PO˜q˜æ˜¯VO都必™å»é™åˆ¶åœ¨ä¸šåŠ¡å±‚å†…ä½¿ç”¨åQŒæœ€å¤šåˆ°è¾¾W(w¨£ng)eb层的ControlåQŒç»ä¸èƒ½è¢«æ‰©æ•£åˆ°View厅R€?

Form Beanå’ŒPO之间的数据è{化是在Action中进行的ã€?

BTWåQˆé¡ºä¾¿è¯´ä¸€å¥ï¼‰(j¨ª)åQ?

JDO1.x˜q˜ä(sh¨´)¸èƒ½åƒHibernate功能˜q™æ ·å¼ºå¤§åQŒPO不能è„Þq¦»æŒä¹…层,所以必™åÕdœ¨ä¸šåС层ä‹É用VOåQŒå› æ­¤å¿…™åÕdœ¨ä¸šåŠ¡å±‚è¿›è¡Œå¤§é‡çš„VOå’ŒPOçš„è{化操作,相对于Hibernate来说åQŒç¼–½E‹æ¯”较烦(ch¨³)琐ã€?

当然äº?ji¨£n),理论是一回事åQŒå®žé™…操作也不一定非要这样干åQŒä½ å¯ä»¥è‡ªè¡Œå–舍åQŒåœ¨å®žé™…™å¹ç›®ä¸­çµ‹zÖM¸€ç‚¹ï¼Œå¢žåŠ ä¸€ç‚¹bad smellåQŒæé«˜å¼€å‘效率。只不过在大型项目中最好还是严丝合¾~ï¼Œä¸ç„¶çš„话åQŒæ”¹ç‰ˆçš„æ—¶å€™ä¼š(x¨¬)痛苦的很的ã€?



]]>
J2EE 全面½Ž€ä»?è½?http://www.aygfsteel.com/msmary/articles/152154.html谭明谭明Thu, 11 Oct 2007 13:33:00 GMThttp://www.aygfsteel.com/msmary/articles/152154.htmlhttp://www.aygfsteel.com/msmary/comments/152154.htmlhttp://www.aygfsteel.com/msmary/articles/152154.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/152154.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/152154.html
一. J2EE的概å¿?br /> 目前åQŒJava 2òq›_°æœ?ä¸ªç‰ˆæœ¬ï¼Œå®ƒä»¬æ˜¯é€‚ç”¨äºŽå°åž‹è®¾å¤‡å’Œæ™ø™ƒ½å¡çš„Java 2òq›_°Micro版(Java 2 Platform Micro EditionåQŒJ2MEåQ‰ã€é€‚用于桌面系¾lŸçš„Java 2òq›_°æ ‡å‡†ç‰ˆï¼ˆJava 2 Platform Standard EditionåQŒJ2SEåQ‰ã€é€‚用于创建服务器应用½E‹åºå’ŒæœåŠ¡çš„Java2òq›_°ä¼ä¸šç‰ˆï¼ˆJava 2 Platform Enterprise EditionåQŒJ2EEåQ‰ã€?br /> J2EE是一¿Uåˆ©ç”¨Java 2òq›_°æ¥ç®€åŒ–企业解å†Ïx(ch¨®ng)–¹æ¡ˆçš„开发、部¾|²å’Œ½Ž¡ç†ç›¸å…³çš„复杂问题的体系¾l“构。J2EE技术的基础ž®±æ˜¯æ ¸å¿ƒ(j¨©)Javaòq›_°æˆ–Java 2òq›_°çš„æ ‡å‡†ç‰ˆåQŒJ2EE不仅巩固äº?ji¨£n)标准版中的许多优点åQŒä¾‹å¦?¾~–写一‹Æ¡ã€éšå¤„运è¡?的特性、方便存取数据库的JDBC API、CORBA技术以å?qi¨¢ng)能够在Internet应用中保护数据的安全模式½{‰ç­‰åQŒåŒæ—¶è¿˜æä¾›äº?ji¨£n)å¯?EJBåQˆEnterprise JavaBeansåQ‰ã€Java Servlets API、JSPåQˆJava Server PagesåQ‰ä»¥å?qi¨¢ng)XML技术的全面支持。其最¾lˆç›®çš„就是成ä¸ÞZ¸€ä¸ªèƒ½å¤Ÿä‹É企业开发者大òq…羃短投攑ָ‚(j¨¬ng)场时间的
体系¾l“æž„ã€?br /> J2EE体系¾l“构提供中间层集成框架用来满­‘Ïx(ch¨®ng)— éœ€å¤ªå¤šè´¹ç”¨è€Œåˆéœ€è¦é«˜å¯ç”¨æ€§ã€é«˜å¯é æ€§ä»¥å?qi¨¢ng)可扩展性的应用的需求。通过提供¾lŸä¸€çš„开发åã^収ͼŒJ2EE降低äº?ji¨£n)开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持åQŒå®Œå…¨æ”¯æŒEnterprise JavaBeansåQŒæœ‰è‰¯å¥½çš„向导支持打包和部çÖv应用åQŒæ·»åŠ ç›®å½•æ”¯æŒï¼Œå¢žå¼ºäº?ji¨£n)安全机åˆÓž¼Œæé«˜ä(sh¨´)º†(ji¨£n)性能ã€?br />
äº? J2EE的优åŠ?br /> J2EE为搭建具有可伸羃性、灵‹zÀL€§ã€æ˜“¾l´æŠ¤æ€§çš„商务¾pȝ»Ÿæä¾›äº?ji¨£n)良好的机åˆ?
保留现存的IT资äñ”: ç”׃ºŽä¼ä¸šå¿…须适应新的商业需求,利用已有的企业信息系¾lŸæ–¹é¢çš„æŠ•资åQŒè€Œä¸æ˜¯é‡æ–°åˆ¶å®šå…¨ç›˜æ–¹æ¡ˆå°±å˜å¾—å¾ˆé‡è¦ã€‚è¿™æ øP¼Œä¸€ä¸ªä»¥æ¸è¿›çš„(而不是激˜q›çš„åQŒå…¨ç›˜å¦å®šçš„åQ‰æ–¹å¼å¾ç«‹åœ¨å·²æœ‰¾pȝ»Ÿä¹‹ä¸Šçš„æœåŠ¡å™¨ç«¯åã^台机制是公司所需求的。J2EEæž¶æž„å¯ä»¥å……åˆ†åˆ©ç”¨ç”¨æˆ·åŽŸæœ‰çš„æŠ•èµ„ï¼Œå¦‚ä¸€äº›å…¬åæ€‹É用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及(qi¨¢ng)Netscape Application Serverã€‚è¿™ä¹‹æ‰€ä»¥æˆä¸ºå¯èƒ½æ˜¯å› äØ“(f¨´)J2EE拥有òq¿æ³›çš„业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客æˆähä¾›äº†(ji¨£n)不用废弃已有投资åQŒè¿›å…¥å¯¿UÀL¤çš„J2EE领域的升¾U§é€”径。由于基于J2EEòq›_°çš„äñ”品几乎能够在ä»ÖM½•操作¾pȝ»Ÿå’Œç¡¬ä»‰™…¾|®ä¸Š˜qè¡ŒåQŒçŽ°æœ‰çš„æ“ä½œ¾pȝ»Ÿå’Œç¡¬ä»¶ä¹Ÿ
能被保留使用ã€?br /> 高效的开å? J2EE允许公司把一些通用的、很¾Jççš„æœåŠ¡ç«¯ä»ÕdŠ¡äº¤ç»™ä¸­é—´ä»¶ä¾›åº”å•†åŽÕd®Œæˆã€‚这样开发äh员可以集中精力在如何创徏商业逻辑上,相应地羃短了(ji¨£n)开发时间。高¾U§ä¸­é—´äšg供应商提供以下这些复杂的中间件服åŠ?
状态管理服åŠ?-- 让开发äh员写更少的代码,不用兛_¿ƒ(j¨©)如何½Ž¡ç†çŠ¶æ€ï¼Œ˜q™æ ·èƒ½å¤Ÿæ›´å¿«åœ°å®Œæˆç¨‹åºå¼€å‘ã€?br /> 持箋性服åŠ?-- 让开发äh员ä(sh¨´)¸ç”¨å¯¹æ•°æ®è®‰K—®é€»è¾‘˜q›è¡Œ¾~–码ž®Þpƒ½¾~–写应用½E‹åºåQŒèƒ½ç”Ÿæˆæ›?br /> è½ÕdéyåQŒä¸Žæ•°æ®åº“无关的应用½E‹åºåQŒè¿™¿Uåº”用程序更易于开发与¾l´æŠ¤ã€?br /> 分布式共享数据对象CACHE服务 -- 让开发äh员编刉™«˜æ€§èƒ½çš„ç³»¾lŸï¼Œæžå¤§æé«˜æ•´ä½“部çÖvçš?br /> 伸羃性ã€?br /> 支持异构环境: J2EE能够开发部¾|²åœ¨å¼‚构环境中的可移植程序。基于J2EE的应用程序不
依赖ä»ÖM½•特定操作¾pȝ»Ÿã€ä¸­é—´äšg、硬件。因此设计合理的åŸÞZºŽJ2EE的程序只需开发一‹Æ?br /> ž®±å¯éƒ¨çÖv到各¿Uåã^台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允è®?br /> 客户订购与J2EE兼容的第三方的现成的¾l„äšgåQŒæŠŠä»–们部çÖv到异构环境中åQŒèŠ‚çœäº†(ji¨£n)ç”Þp‡ªå·?br /> 制订整个æ–ÒŽ(gu¨©)¡ˆæ‰€éœ€çš„费用ã€?br /> 可äŽ×¾~©æ€? 企业必须要选择一¿UæœåŠ¡å™¨ç«¯åã^収ͼŒ˜q™ç§òq›_°åº”能提供极佳的可伸羃性去满èƒö那些在他们系¾lŸä¸Š˜q›è¡Œå•†ä¸š˜qä½œçš„大æ‰ÒŽ(gu¨©)–°å®¢æˆ·ã€‚基于J2EEòq›_°çš„应用程序可被部¾|²åˆ°å„种操作¾pȝ»Ÿä¸Šã€‚例如可被部¾|²åˆ°é«˜ç«¯UNIX与大型机¾pȝ»ŸåQŒè¿™¿Uç³»¾lŸå•机可支持64è‡?56个处理器。(˜q™æ˜¯NT服务器所望尘莫及(qi¨¢ng)的)(j¨ª)J2EE领域的供应商提供äº?ji¨£n)更为广泛的负蝲òqŒ™¡¡½{–略。能消除¾pȝ»Ÿä¸­çš„瓉™¢ˆåQŒå…è®¸å¤šå°æœåŠ¡å™¨é›†æˆéƒ¨çÖv。这¿Uéƒ¨¾|²å¯è¾¾æ•°åƒä¸ªå¤„理器,实现可高度äŽ×¾~©çš„¾pȝ»ŸåQŒæ»¡­‘Ïx(ch¨®ng)œªæ¥å•†ä¸šåº”用的需要ã€?br /> ½E›_®šçš„可用æ€? 一个服务器端åã^台必™å»èƒ½å…¨å¤©å€™è¿è½¬ä»¥æ»¡èƒö公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的åQŒå³ä½¿åœ¨å¤œé—´æŒ‰è®¡åˆ’停æœÞZ¹Ÿå¯èƒ½é€ æˆä¸¥é‡æŸå¤±ã€‚若是意外停机,那会(x¨¬)有灾难性后果。J2EE部çÖv到可靠的操作环境中,他们支持长期的可用性。一些J2EE部çÖv在WINDOWS环境中,客户也可选择健壮性能更好的操作系¾lŸå¦‚Sun Solaris、IBM OS/390。最健壮的操作系¾lŸå¯è¾‘Öˆ°99.999%的可用性或每年只需5分钟停机旉™—´ã€‚这是实时性很强商业系¾lŸç†æƒ³çš„选择ã€?br />

ä¸? J2EE 的四层模åž?br /> J2EE使用多层的分布式应用模型åQŒåº”ç”¨é€»è¾‘æŒ‰åŠŸèƒ½åˆ’åˆ†äØ“(f¨´)¾l„äšgåQŒå„个应用组件根据他ä»?br /> 所在的层分布在不同的机器上。事实上åQŒsun设计J2EE的初è¡äh­£æ˜¯äØ“(f¨´)äº?ji¨£n)解决两层模å?cl
ient/server)的弊端,在传¾lŸæ¨¡å¼ä¸­åQŒå®¢æˆïL(f¨¥ng)«¯æ‹…当äº?ji¨£n)过多的角色而显得臃肿,在这¿Uæ¨¡
式中åQŒç¬¬ä¸€‹Æ¡éƒ¨¾|²çš„æ—¶å€™æ¯”较容易,但难于升¾U§æˆ–改进åQŒå¯ä¼¸å±•性也不理惻I¼Œè€Œä¸”¾lå¸¸
åŸÞZºŽæŸç§ä¸“有的协议――通常是某¿Uæ•°æ®åº“协议。它使得重用业务逻辑和界面逻辑非常
困难。现在J2EE 的多层企业çñ”应用模型ž®†ä¸¤å±‚化模型中的不同层面切分成许多层。一ä¸?br /> å¤šå±‚åŒ–åº”ç”¨èƒ½å¤ŸäØ“(f¨´)不同的每¿UæœåŠ¡æä¾›ä¸€ä¸ªç‹¬ç«‹çš„å±‚ï¼Œä»¥ä¸‹æ˜?J2EE 典型的四层结æž?
˜qè¡Œåœ¨å®¢æˆïL(f¨¥ng)«¯æœºå™¨ä¸Šçš„客户层组ä»?br /> ˜qè¡Œåœ¨J2EE服务器上的Web层组ä»?br /> ˜qè¡Œåœ¨J2EE服务器上的业务逻辑层组ä»?br /> ˜qè¡Œåœ¨EIS服务器上的企业信息系¾l?Enterprise information system)层èÊYä»?br /> J2EE应用½E‹åº¾l„äšg
J2EE应用½E‹åºæ˜¯ç”±¾l„äšg构成çš?J2EE¾l„äšg是具有独立功能的软äšg单元åQŒå®ƒä»¬é€šè¿‡ç›¸å…³çš„ç±»
和文件组装成J2EE应用½E‹åºåQŒåƈ与其他组件交互。J2EE说明书中定义äº?ji¨£n)以下的J2EE¾l„äšg
:
应用客户端程序和applets是客户层¾l„äšg.
Java Servlet和JavaServer Pages(JSP)是web层组�
Enterprise JavaBeans(EJB)是业务层¾l„äšg.
客户层组ä»?br /> J2EE应用½E‹åºå¯ä»¥æ˜¯åŸºäºŽweb方式çš?也可以是åŸÞZºŽä¼ ç»Ÿæ–¹å¼çš?
web 层组件J2EE web层组件可以是JSP ™åµé¢æˆ–Servlets.按照J2EE规范åQŒé™(r¨´n)态的HTML™åµé¢


å’ŒApplets不算是web层组件ã€?br /> 正如下图所½Cºçš„å®¢æˆ·å±‚é‚£æ øP¼Œweb层可能包含某äº?JavaBean 对象来处理用戯‚¾“入,òq¶æŠŠ
输入发送给˜qè¡Œåœ¨ä¸šåŠ¡å±‚ä¸Šçš„enterprise bean 来进行处理ã€?br /> 业务层组ä»?br /> 业务层代码的逻辑用来满èƒö银行åQŒé›¶å”®ï¼Œé‡‘融½{‰ç‰¹ŒDŠå•†åŠ¡é¢†åŸŸçš„éœ€è¦?ç”Þp¿è¡Œåœ¨ä¸šåŠ¡å±‚ä¸Š
çš„enterprise bean ˜q›è¡Œå¤„理. 下图表明äº?ji¨£n)一个enterprise bean 是如何从客户端程åº?br /> 接收数据åQŒè¿›è¡Œå¤„ç?如果必要的话), òq¶å‘送到EIS 层储存的åQŒè¿™ä¸ªè¿‡½E‹ä¹Ÿå¯ä»¥é€†å‘˜q?br /> 行ã€?br /> 有三¿Uä¼ä¸šçñ”çš„bean: ä¼?x¨¬)è¯?session) beans, 实体(entity) beans, å’?消息驱动(mes
sage-driven) beans. ä¼?x¨¬)话bean 表示与客æˆïL(f¨¥ng)«¯½E‹åºçš„äÍ(f¨´)时交äº? 当客æˆïL(f¨¥ng)«¯½E‹åºæ‰§è¡Œå®ŒåŽ
, ä¼?x¨¬)话bean 和相å…Ïx(ch¨®ng)•°æ®å°±ä¼?x¨¬)消å? 相反, 实体bean 表示数据库的表中一行永久的记录
. 当客æˆïL(f¨¥ng)«¯½E‹åºä¸­æ­¢æˆ–服务器关闭æ—? ž®×ƒ¼š(x¨¬)有潜在的服务保证实体bean 的数据得以保å­?br /> .消息驱动 bean ¾l“合äº?ji¨£n)ä¼?x¨¬)话bean å’?JMS的消息监听器的特æ€? 允许一个业务层¾l„äšgå¼?br /> 步接收JMS 消息.
企业信息¾pȝ»Ÿå±?br /> 企业信息¾pȝ»Ÿå±‚处理企业信息系¾lŸèÊY件包括企业基¼‹€å»ø™®¾¾pȝ»Ÿä¾‹å¦‚企业资源计划 (ERP)
, 大型æœÞZº‹åС处ç? 数据库系¾l?和其它的遗留信息¾pȝ»Ÿ. 例如åQŒJ2EE 应用¾l„äšg可能ä¸?br /> äº?ji¨£n)数据库˜qžæŽ¥éœ€è¦è®¿é—®ä¼ä¸šä¿¡æ¯ç³»¾l?br /> å›? J2EE 的结æž?br /> ˜q™ç§åŸÞZºŽ¾l„äšgåQŒå…·æœ‰åã^台无å…Ïx(ch¨®ng)€§çš„J2EE ¾l“构使得J2EE ½E‹åºçš„ç¼–å†™ååˆ†ç®€å•ï¼Œå› äØ“(f¨´)业务
逻辑被封装成可复用的¾l„äšgåQŒåƈ且J2EE 服务器以容器的åÅžå¼äØ“(f¨´)所有的¾l„äšg¾cÕdž‹æä¾›åŽå°
服务. 因䨓(f¨´)你不用自己开发这¿UæœåŠ? 所以你可以集中¾_‘ÖŠ›è§£å†³æ‰‹å¤´çš„业务问é¢?


容器和服åŠ?br /> 容器讄¡½®å®šåˆ¶äº?ji¨£n)J2EE服务器所提供得内在支持,包括安全åQŒäº‹åŠ¡ç®¡ç†ï¼ŒJNDI(Java Nami
ng and Directory Interface)å¯Õd€,˜qœç¨‹˜qžæŽ¥½{‰æœåŠ¡ï¼Œä»¥ä¸‹åˆ—å‡ºæœ€é‡è¦çš„å‡ ¿UæœåŠ¡ï¼š(x¨¬)
J2EE安全(Security)模型可以让你配置 web ¾l„äšg或enterprise bean ,˜q™æ ·åªæœ‰è¢«æŽˆæ?br /> 的用æˆäh‰èƒ½è®¿é—®ç³»¾lŸèµ„æº? 每一客户属于一个特别的角色åQŒè€Œæ¯ä¸ªè§’色只允许‹È€‹zȝ‰¹å®?br /> 的方法。你应在enterprise bean的布¾|®æ˜qîC¸­å£°æ˜Žè§’色和可被激‹zÈš„æ–ÒŽ(gu¨©)³•。由于这¿Uå£°
明性的æ–ÒŽ(gu¨©)³•åQŒä½ ä¸å¿…¾~–写加强安全性的规则ã€?br /> J2EE 事务½Ž¡ç†åQˆTransaction ManagementåQ‰æ¨¡åž‹è®©ä½ æŒ‡å®šç»„成一个事务中所有方法间çš?br /> 关系åQŒè¿™æ ·ä¸€ä¸ªäº‹åŠ¡ä¸­çš„æ‰€æœ‰æ–¹æ³•è¢«å½“æˆä¸€ä¸ªå•ä¸€çš„å•å…? 当客æˆïL(f¨¥ng)«¯‹È€‹zÖM¸€ä¸ªenterpri
se bean中的æ–ÒŽ(gu¨©)³•åQŒå®¹å™¨ä»‹å…¥ä¸€½Ž¡ç†äº‹åŠ¡ã€‚å› æœ‰å®¹å™¨ç®¡ç†äº‹åŠ¡ï¼Œåœ¨enterprise bean中不
必对事务的边界进行编码。要求控制分布式事务的代码会(x¨¬)非常复杂。你只需在布¾|®æ˜q?br /> æ–‡äšg中声明enterprise beançš„äº‹åŠ¡å±žæ€§ï¼Œè€Œä¸ç”¨ç¼–å†™åÆˆè°ƒè¯•å¤æ‚çš„ä»£ç ã€‚å®¹å™¨å°†è¯ÀL­¤æ–?br /> ä»¶åÆˆä¸ÞZ½ å¤„理此enterprise bean的事务ã€?br /> JNDI å¯Õd€(JNDI Lookup)服务向企业内的多重名字和目录服务提供äº?ji¨£n)一个统一的接å?˜q?br /> 样应用程序组件可以访问名字和目录服务.
J2EE˜qœç¨‹˜qžæŽ¥åQˆRemote Client ConnectivityåQ‰æ¨¡åž‹ç®¡ç†å®¢æˆïL(f¨¥ng)«¯å’Œenterprise beané—´çš„
低层交互. 当一个enterprise bean创徏å? 一个客æˆïL(f¨¥ng)«¯å¯ä»¥è°ƒç”¨å®ƒçš„æ–ÒŽ(gu¨©)³•ž®Þp±¡å®ƒå’Œå®¢æˆ·
端位于同一虚拟æœÞZ¸Šä¸€æ ?
生存周期½Ž¡ç†åQˆLife Cycle ManagementåQ‰æ¨¡åž‹ç®¡ç†enterprise bean的创建和¿U»é™¤,一ä¸?br /> enterprise bean在其生存周期中将ä¼?x¨¬)历¾lå‡ ¿UçŠ¶æ€ã€‚å®¹å™¨åˆ›å»ºenterprise beanåQŒåƈåœ?br /> 可用实例池与‹zÕdŠ¨çŠ¶æ€ä¸­¿UÕdŠ¨ä»–ï¼Œè€Œæœ€¾lˆå°†å…¶ä»Žå®¹å™¨ä¸­ç§»é™¤ã€‚即使可以调用enterprise
beançš„createå?qi¨¢ng)removeæ–ÒŽ(gu¨©)³•åQŒå®¹å™¨ä¹Ÿž®†ä¼š(x¨¬)在后台执行这些ä“Q务ã€?br />

数据库连接池åQˆDatabase Connection PoolingåQ‰æ¨¡åž‹æ˜¯ä¸€ä¸ªæœ‰ä»·å€¼çš„资源。获取数据库
˜qžæŽ¥æ˜¯ä¸€™å¹è€—时的工作,而且˜qžæŽ¥æ•°éžå¸¸æœ‰é™ã€‚容器通过½Ž¡ç†˜qžæŽ¥æ± æ¥¾~“å’Œ˜q™äº›é—®é¢˜ã€?br /> enterprise bean可从池中˜q…速获取连接。在bean释放˜qžæŽ¥ä¹‹å¯ä¸ºå…¶ä»–bean使用ã€?br /> 容器¾cÕdž‹
J2EE应用¾l„äšg可以安装部çÖvåˆîC»¥ä¸‹å‡ ¿Uå®¹å™¨ä¸­åŽ?
EJB 容器½Ž¡ç†æ‰€æœ‰J2EE 应用½E‹åºä¸­ä¼ä¸šçñ”bean 的执è¡? enterprise bean 和它们的å®?br /> 器运行在J2EE 服务器上.
Web 容器½Ž¡ç†æ‰€æœ‰J2EE 应用½E‹åºä¸­JSP™åµé¢å’ŒServlet¾l„äšg的执è¡? Web ¾l„äšg和它们的å®?br /> 器运行在J2EE 服务器上.
应用½E‹åºå®¢æˆ·ç«¯å®¹å™¨ç®¡ç†æ‰€æœ‰J2EE应用½E‹åºä¸­åº”用程序客æˆïL(f¨¥ng)«¯¾l„äšg的执è¡? 应用½E‹åºå®?br /> æˆïL(f¨¥ng)«¯å’Œå®ƒä»¬çš„容器˜qè¡Œåœ¨J2EE 服务器上.
Applet 容器是运行在客户端机器上的web‹¹è§ˆå™¨å’Œ Java 插äšg的结å?
äº? J2EE的核å¿?j¨©)API与组ä»?br /> J2EEòq›_°ç”׃¸€æ•´å¥—服务åQˆServicesåQ‰ã€åº”用程序接口(APIsåQ‰å’Œåè®®æž„成åQŒå®ƒå¯¹å¼€å‘基
于Web的多层应用提供了(ji¨£n)功能支持åQŒä¸‹é¢å¯¹J2EE中的13¿UæŠ€æœ¯è§„范进行简单的描述(限于
½‹‡å¹…åQŒè¿™é‡Œåªèƒ½è¿›è¡Œç®€å•的描述):
JDBC(Java Database Connectivity):
JDBC API䏸™®¿é—®ä¸åŒçš„æ•°æ®åº“提供了(ji¨£n)一¿Uç»Ÿä¸€çš„途径åQŒè±¡ODBCä¸€æ øP¼ŒJDBC对开发者屏è”?br /> äº?ji¨£n)一些细节问题,另外åQŒJDCBå¯ÒŽ(gu¨©)•°æ®åº“的访问也å…ähœ‰òq›_°æ— å…³æ€§ã€?br /> JNDI(Java Name and Directory Interface):
JNDI API被用于执行名字和目录服务。它提供äº?ji¨£n)一致的模型来存取和操作企业¾U§çš„资源
如DNSå’ŒLDAPåQŒæœ¬åœ°æ–‡ä»¶ç³»¾lŸï¼Œæˆ–应用服务器中的对象ã€?br />

EJB(Enterprise JavaBean):
J2EE技术之所以赢得某体广泛重视的原因之一ž®±æ˜¯EJB。它们提供了(ji¨£n)一个框架来开发和å®?br /> 施分布式商务逻辑åQŒç”±æ­¤å¾ˆæ˜¾è‘—地简化了(ji¨£n)å…ähœ‰å¯äŽ×¾~©æ€§å’Œé«˜åº¦å¤æ‚的企业çñ”应用的开å?br /> 。EJB规范定义äº?ji¨£n)EJB¾l„äšg在何时如何与它们的容器进行交互作用。容器负责提供公用的
服务åQŒä¾‹å¦‚目录服务、事务管理、安全性、资源缓冲池以及(qi¨¢ng)定w”™æ€§ã€‚但˜q™é‡Œå€¼å¾—注意çš?br /> 是,EJBòq¶ä¸æ˜¯å®žçްJ2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一¿U?br /> å’ŒEJBòqŒ™¡Œçš„æ–¹å¼æ¥è¾‘Öˆ°åŒæ ·çš„目的ã€?br /> RMI(Remote Method Invoke):
æ­£å¦‚å…¶åå­—æ‰€è¡¨ç¤ºçš„é‚£æ øP¼ŒRMI协议调用˜qœç¨‹å¯¹è±¡ä¸Šæ–¹æ³•。它使用äº?ji¨£n)序列化方式在客æˆïL(f¨¥ng)«¯
和服务器端传递数据。RMI是一¿Uè¢«EJB使用的更底层的协议ã€?br /> Java IDL/CORBA:
在Java IDL的支持下åQŒå¼€å‘äh员可以将Javaå’ŒCORBA集成在一赗÷€?他们可以创徏Javaå¯?br /> è±¡åÆˆä½¿ä¹‹å¯åœ¨CORBA ORB中展开, 或者他们还可以创徏Java¾cÕdÆˆä½œäØ“(f¨´)和其它ORB一起展开
çš„CORBA对象的客戗÷€‚后一¿Uæ–¹æ³•提供了(ji¨£n)另外一¿Ué€”径åQŒé€šè¿‡å®ƒJava可以被用于将你的æ–?br /> 的应用和旧的¾pȝ»Ÿç›”R›†æˆã€?br /> JSP(Java Server Pages):
JSP™åµé¢ç”±HTML代码和嵌入其中的Java代码所¾l„成。服务器在页面被客户端所è¯äh±‚以后å¯?br /> ˜q™äº›Java代码˜q›è¡Œå¤„理åQŒç„¶åŽå°†ç”Ÿæˆçš„HTML™åµé¢˜q”回¾l™å®¢æˆïL(f¨¥ng)«¯çš„æµè§ˆå™¨ã€?br /> Java Servlet:
Servlet是一¿Uå°åž‹çš„Java½E‹åºåQŒå®ƒæ‰©å±•äº?ji¨£n)Web服务器的功能。作ä¸ÞZ¸€¿UæœåŠ¡å™¨ç«¯çš„åº”ç”¨
åQŒå½“被请求时开始执行,˜q™å’ŒCGI Perl脚本很相伹{€‚Servlet提供的功能大多与JSP¾cÖM¼¼
åQŒä¸˜q‡å®žçŽ°çš„æ–¹å¼ä¸åŒã€‚JSP通常是大多数HTML代码中嵌入少量的Java代码åQŒè€Œservlets
全部由Java写成òq¶ä¸”生成HTMLã€?br /> XML(Extensible Markup Language):
XML是一¿Uå¯ä»¥ç”¨æ¥å®šä¹‰å…¶å®ƒæ ‡è®°è¯­­a€çš„语­a€ã€‚它被用来在不同的商务过½E‹ä¸­å…׃ín数据ã€?br /> XML的发展和Java是相互独立的åQŒä½†æ˜¯ï¼Œå®ƒå’ŒJavaå…ähœ‰çš„相同目标正是åã^台独立性。通过
ž®†Javaå’ŒXML的组合,æ‚(zh¨¨n)¨å¯ä»¥å¾—åˆîC¸€ä¸ªå®Œ¾ŸŽçš„å…ähœ‰òq›_°ç‹¬ç«‹æ€§çš„解决æ–ÒŽ(gu¨©)¡ˆã€?br /> JMS(Java Message Service):
MS是用于和面向消息的中间äšgç›æ€º’通信的应用程序接å?API)。它既支持点对点的域åQŒæœ‰
支持发布/订阅(publish/subscribe)¾cÕdž‹çš„域åQŒåƈ且提供对下列¾cÕdž‹çš„æ”¯æŒï¼š(x¨¬)¾lè®¤å¯çš„
消息传é€?事务型消息的传递,一致性消息和å…ähœ‰æŒä¹…性的订阅者支持。JMS˜q˜æä¾›äº†(ji¨£n)å?br /> 一¿Uæ–¹å¼æ¥å¯ÒŽ(gu¨©)‚¨çš„应用与旧的后台¾pȝ»Ÿç›”R›†æˆã€?br /> JTA(Java Transaction Architecture):
JTA定义äº?ji¨£n)一¿Uæ ‡å‡†çš„APIåQŒåº”用系¾lŸç”±æ­¤å¯ä»¥è®¿é—®å„¿Uäº‹åŠ¡ç›‘æŽ§ã€?br /> JTS(Java Transaction Service):
JTS是CORBA OTS事务监控的基本的实现。JTS规定äº?ji¨£n)事务管理器的实现方式。该事务½Ž¡ç†
器是在高层支持Java Transaction API (JTA)规范åQŒåƈ且在较底层实现OMG OTS specif
icationçš„Java映像。JTS事务½Ž¡ç†å™¨äØ“(f¨´)应用服务器、资源管理器、独立的应用以及(qi¨¢ng)通信
资源½Ž¡ç†å™¨æä¾›äº†(ji¨£n)事务服务ã€?br /> JavaMail:
JavaMail是用于存取邮件服务器的APIåQŒå®ƒæä¾›äº?ji¨£n)一套邮件服务器的抽象类。不仅支持S
MTP服务器,也支持IMAP服务器�br /> JTA(JavaBeans Activation Framework):
JavaMail利用JAF来处理MIME¾~–码的邮仉™™„ä»¶ã€?


]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¼¦ÔóÏØ| ÓÀÄêÏØ| ³É¶¼ÊÐ| ÄÚ»ÆÏØ| ·ð¸ÔÏØ| ¸ßÁêÏØ| °×ɳ| ÓôÄÏÏØ| ÎäÒØÏØ| ¸ß°²ÊÐ| ÕѾõÏØ| ǧÑôÏØ| °¢¿ËÌÕÏØ| ³à·åÊÐ| ²ìÑÅÏØ| Éñ³ØÏØ| ¶«ÎÚÖéÄÂÇ߯ì| °ËËÞÏØ| Ö麣ÊÐ| ÓôÄÏÏØ| º£ÃÅÊÐ| ÕÂÇðÊÐ| Â«ÏªÏØ| Ê¯ÈªÏØ| ÎäÚìÏØ| á°¸ÞÏØ| ÓÚ¶¼ÏØ| ÃÅÍ·¹µÇø| ÎÄÉ½ÏØ| Óå±±Çø| ³¤Í¡ÏØ| ×óÈ¨ÏØ| ¾ÅÁúÆÂÇø| Ù¤Ê¦ÏØ| ËìÆ½ÏØ| ÓéÀÖ| äðºÓÊÐ| ϲµÂÏØ| ÆÕ¸ñÏØ| ½ðÉ³ÏØ| ¸ÊÈªÏØ|