??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲精午夜久久久久久,亚洲精品乱码久久久久久V,亚洲精品9999久久久久无码 http://www.tkk7.com/gbk/zh-cn Thu, 15 May 2025 06:15:31 GMT Thu, 15 May 2025 06:15:31 GMT 60 oracle是如何工作的--非常形象 http://www.tkk7.com/gbk/archive/2009/08/10/290545.html癄 癄 Mon, 10 Aug 2009 07:08:00 GMT http://www.tkk7.com/gbk/archive/2009/08/10/290545.html http://www.tkk7.com/gbk/comments/290545.html http://www.tkk7.com/gbk/archive/2009/08/10/290545.html#Feedback 0 http://www.tkk7.com/gbk/comments/commentRss/290545.html http://www.tkk7.com/gbk/services/trackbacks/290545.html
现在QSid快乐地生zȝ—家庭、朋友和假期。他不时地拍照。事实上Q他L随n带着相机。他不想错过M东西。每一个早、午和晚宴Q都会被拍下来。当孩子们从学校回家Q镜头摄入他们对父亲的问候。当孩子们做家庭作业的时候,“卡嚓、卡嚓、卡?#8221;Q照相机的快门响个不停。棒球赛上,儿子Archie的每一个投掷都被拍摄下来。学校的舞会上,Chuck的父亲拍下了每一个缓慢的舞步以及在苏打水机器旁的交谈。而他的狗——Sadie则是q个世界上被拍摄ơ数最多的狗?
他和他的家庭收藏了数以百万计的照片。一些照片被销毁掉了,一些则l历了改变。Sid有一套神奇的pȝ来处理这些照片。让我来告诉你一些关于他的家庭、他的房子的事,以及关于他和他的家h如何致力于发展、组l和保护所有这些照片?
Sid用一架特D的相机拍摄。他的相机每拍摄一ơ,同时生一张照片和一张底片。他从来不用换胶Pq是一U科qL术)。照片被贴在戉K的墙壁上Q而底片则被保存在一个安全的地方?
1.1.1 Sid的家
我介l过Sid的家了吗Q嗯。那里非常的大而且到处都是照片。因为照片实在是太多了,所以Sid必须L地方来放|它们。一些照片被挂在墙上Q一些被藏在照相内Q一些被插入剪脓(chung)KQ一些被攑֜储藏室的一个盒子里再也不会被撇上一眹{所有这些照片都被放在他家中的某处。他U呼q些攄照片的地方ؓ“相片I间”。一个相片空间可能是一个有着很多墙壁的房_或者是有着很多늚剪脓(chung)ѝ一个房间是照片的逻辑存储单元。房间内的墙壁则是相片空间中保存照片的物理结构?
1.1. 2 Debbie的家务事
因ؓSid忙于拍摄和处理照片,他没有够的_֊来放|和储存它们—那是她d的工作。Debbie的全名是Debra Wrider。她的T恤衫上印着DBWR—这是一U家庭传l—ؓ所有的东西做标{?
把所有这些照片放|得井井有条是一件巨大的工作Q不qSid和Debbie已经建立了一个系l。当Sid拍摄l束后,他把照片都放在厨戉K一个特定的架子上。那个特定的架子被称?#8220;DB_BUFFER_CACHE”。Debbie时常查那个架子,看看上面是否有新拍摄的照片。在白天Q她把从架子上取回的照片分别攄到对应的相片I间。事实上Q在一场棒球赛或者学校的舞会上,Sid制作照片的速度太快了。以至于Debbie几乎跟不上。这是一个特别的情景QSid拍摄照片Q然后放|在那个特定的架子上QDebbie把这些照片放在剪贴簿里,挂在墙上或者插入照相簿内?
当Sid带着照片和底片进入厨房时Q他和他d之间可能会有q样的一D对话:
SidQ?#8220;亲爱的,猜猜我给你带回来了什么?”
DebbieQ?#8220;你又拍了很多照片Q是吗?你知道我是多么喜Ƣ整理照片啊?#8221;
SidQ?#8220;当然了,Archie的棒球队赢得了最后一局。他在第?ji)局以两个二垒打莯Q我全部都拍摄下来了?#8221;
DebbieQ?#8220;太好了,那些照片攑֜相片I间9号墙壁的q动c里Q看上去一定棒极了。我已经{不及去攄它们了,我将邀h有的d来观赏?#8221;
SidQ?#8220;Archie也非帔R兴。OKQ我再去拍一些照片,我将?3毫秒后回来。哦Q顺便说一下,我刚才将那些照片攑֜DB_BUFFER_CACHE架子上。现在Sid的目录号?332935?#8221;DebbieQ?#8220;知道了,再见?#8221;
Z易于理照片、框架和日志Q他使用一U特D的数字来徏立目录,UC为Sid的目录编受他用这些独特的、不断递增的数字来q踪对这所房子内所有照片的操作。Sid和Debbie已经Ҏ(gu)阅Sid的目录编h到厌倦。Sid在所有的照片、录像带和底片上都写?#8220;Sid的目录编?#8221;Q篏得手要抽{。最后,他们?#8220;Sid的目录编?#8221;~略为SCN。记住SCNQSid的生z都围绕着它展开?
现在Q全家h都知道这个数字被UCؓSCN。你可以在每一个地斚w看到SCN。Sid把它们写在底片上Q然后他把低位和高位的SCN写在每一包底片外面。Debbie把它们写在她攄照片的地斏V这些数字在Sid的复杂家庭生zM昑־ؓ重要?
Debbie把照片放在框枉Q房子里的每一个框枉是一样大。一些框架只保存了一张照片,一些框架则保存了几张照片。一些特别大的照片则要占据多个框架。Sid有一张和原物同样大小的照片,拍摄的是他在跳伞后在IZ做造型动作Q这张照片占据了两个框架。当照片跨越框架ӞSidUC为照片链?
M时候,只要Debbie改变框架内的照片Q她把照片的SCN写在框架上。房子内的每张照片都有一个惟一的数字。他们称照片的这个数字ؓ照片ID。这些照片ID帮助Sid理家中所有墙上的照片。如果他需要尽快找C张照片,他通过照片ID来实现。通过照片IDQSid能够q速找到墙壁和保存照片的框架?
有时候,Sid会对照片q行一些改变。如果他要编辑一张照片,那么他让Debbie通过照片ID扑ֈ他的照片。Debbiel他一份包括所需照片的整个框架的拯。ؓ防止Sid可能改变LQ不喜欢他已l做的一些改变,他把那䆾拯攑֜一个储藏室内,UC?#8220;回退”储藏室。当Sid完成了更改ƈ且确定了以后QDebbie把更改后的照片放回到墙壁上原先的地方Qƈ且把新的SCN写在框架上。如果Sid不喜Ƣ他的更改,他们׃“回退”储藏室里取出框架q且把它攑֛墙上。这样一来,照片和Sid没有改动以前一栗?
1.1.3 Logan的家务事
DebbieZ处理Sid的照片已l忙得焦头烂额,所以她没有_的时间和_֊来处理Sid的底片。Sid认ؓ他的儿子们在玩电(sh)子游戏和吃土豆片上浪费了太多的时_他决定给他们安排d?
Sid的大儿子叫做Logan William Randolph。Logan的衬衫上都印着LGWR。Logan有一个非常简单但是非帔R要的d。Sid的相Z生照片的同时产生了底片,Logan的Q务是底片放入笔记本里。家中的厨房里竖着另一个架子,架子上Sid贴了一个标{,用来标记那些发送给大儿子的底片。标{被UCؓ“LOG_BUFFER”QLogan坐在厨房的桌子旁Q观察这个特D的LOG_BUFFER架子。当有底片被攑ֈq个架子上时Q他立即把底片放在笔记本里。SidU这些笔记本?#8220;重做W记?#8221;。他使用q个名称是因Z后他可以用里面的底片重新制作一张照片。Logan查他的架子的频率要比Debbie的高得多。Sid表示Q只要有底片Q他可以随旉新制作一份照片。Logan和他父亲的对话简短而温馨:
SidQ?#8220;LoganQ底片在架子上了Q?#8221;
LoganQ?#8220;知道了,我会立即处理的?#8221;
Logan按照他得到底片的序这些底片放?#8220;重做W记?#8221;。一旦当前的W记本装满了底片Q他换另一个新的笔记本。每一ơ他更换“重做W记?#8221;后,都在“告警W记?#8221;上做一个记录,然后通知他的兄弟来进行他们的家务zR?
(zhn)哀Q是不是Q老爸和他的大儿子太专注于底片了!
Z提到Q不是所有的照片都有对应的底片保存。Sid指定某些照片不必被做日志Q这些照片就没有对应的底片保存在“重做W记?#8221;里。SidU其?#8220;无日?#8221;?
1.1.4 Archie的家务事
Sid的第二个儿子Archibald则另有Q务。他的衬衫上写着ARCH。Archie从重做笔记本里提取底片后Q把它们攄在一个安全的地方?
当Archie发现Logan更换到另一个重做笔记本的时候,他就开始行动。他拿v重做W记本中的那些底片,把它们放在房子外面的一个安全地斏VSid在后院徏造了一个控制好温湿的地下室。那是他保存底片的安全地炏V如果暴风来刎ͼ破坏了房子,他可以用保存在C室的底片来替换那些被损坏的照片。每一份Logan?#8220;重做W记?#8221;拯Q被UCؓ“归档的重做笔记本”?
可能某一天,你可以听到Sid和他ơ子之间的笑谈:
SidQ:“ArchieQ你在哪里?”
ArchieQ?#8220;老爸Q我在自己房间里QLogan现在切换W记本了吗?”
SidQ?#8220;是的Q他刚刚q完?#8221;
ArchieQ?#8220;知道了,老爸。我会复制这些底片ƈ且制作一个新的笔记本攑֜C室里。然后,我会更新‘控制W记?#8217;Qƈ且在‘告警W记?#8217;里写一个记录?#8221;
SidQ?#8220;你是一个好孩子Q我知道可以怿你?#8221;
1.1.5 Chuck的家务事
Sid最的儿子Chuck保每一件事情都是同步的。他的全名是Charles Kenneth Patrick Thomas。他衬衫上的字母是CKPTQChuck的Q务是每一面墙壁、相片册和剪贴簿上的相片数字和控制笔记本中的数字协调h。当他得CP他就开始在房子里奔跑v来,在每一面墙壁上写下数字Q同时将同样的数字也记录在控制笔记本里。这使得每一件事情都协调h。以下是一DSid和Chuck的对话:
SidQ?#8220;hiQChuck?#8221;
ChuckQ?#8220;老爸QLogan又开始更换笔记本了吗Q?#8221;
SidQ?#8220;是的Q儿子,你知道规矩。带着目录~号1332935跑遍戉KQ把q个数字写到每一面墙壁的开_每一个剪贴簿的封面和照片盒子的顶部?#8221;
ChuckQ?#8220;没问题,l我几微U时间搞?#8221;?
SidQ?#8220;别忘记把1332935写在控制W记本上Q?#8221;
ChuckQ?#8220;老爸Q我知道了,同样的事我一天内已经做过几百ơ了?#8221;
我敢打赌Q你已经寚w读这个疯狂的Sid之家感到厌倦,是不是?到现在ؓ止,你可能已l看出Sid有一个功能失常的家庭。功能失常?是的Q不q却有效而可靠。Sid喜欢q样?
1.1.6控制W记?
q个家庭怎样l持所有这些活动?Sid、Debbie、Logan、Archie和Chuck断定Q要xq项照片攉和整理工作处理的井井有条Q必要制作很多详细的笔记。他们每个h都把自己的东西写入一个日志,UC?#8220;控制W记?#8221;?
控制W记本有一个记录整个房子中每一堵墙壁、剪贴簿和照片盒子的家庭财清单条目。如果Sid增加了一个房_来放|更多的照片Q他在控制笔记本里做一个记录。当Logan更换重做W记本时Q他在控制笔记本里做摘要记录。每ơArchie制作一个归档的重做W记本放入地下室Ӟ他把名字和SCN的范围写在控制笔记本里。每ơChuck在房子里跑完一圈,他把l节也记录在控制W记本里。这Ҏ(gu)的笔记本动态保存了所有地方的资情况Q和房子里以数字表示的进E?
1.1.7告警日志
时不时的M有些意外发生Q也可能出现错误。Debbie可能在把照片放进框架的时候发生问题,因ؓ那面墙上已经没有多余的空间了。Archie可能无法折叠起底片条Q因为有人把苏打水喷在上面。Sid考虑C所有的可能Q他C一个螺旋u的笔记本Q放在厨房的抽屉里。在W记本的面子上写?#8220;告警日志”。每一个家庭成员将遇到的问题写在这个日志里。他们不仅要C发生的错误,q要C正常的活动过E。这个告警日志是一个用来保存在Sid安已经和即发生的事情的便利场所。如果他们要解释某个情Ş下额外的l节Q他们制作一个新?#8220;q踪W记?#8221;Q把信息记录在里面。这样一来,q个告警W记本不会变得比它原先的样子更杂乱?
1.1.8清晨E序
全家早晨一起醒来,也L同时上床睡觉。他们称q些旉Z天的“启动”?#8220;关闭”。下面是早晨的启动程序:
Sid从床上v来,端上一杯咖啡开始他的一天。在咖啡壶边上,他将一pd指o保存在笔记本里,UC为初始化参数文g。阅读这列指令帮助他开始新的一天。啜着咖啡Q他走过ȝ认控制笔记本是否攑֜老地斏V他在房子里打{叫醒Debbie、Chuck、Logan、Archie、Simon和PamelaQ你很快׃遇到他们Q?
当每一个h都醒来后Q就打开控制W记本。确认根据控制笔记本的内容,所有的照片墙壁都没有问题,当所有的东西都被查过以后Q他打开房子q接宑֮Qƈ开始拍摄照片。Sid雇䄦了一个男家QSimonQ在早晨帮助他,Simon的燕服上写着字母SMONQ省掉名字里的一个字母)。有些早晨房子里特别凌ؕQ因为在前一个就寝时_家庭的每一个成员都没有及时清理好各自的事物。当Simon׃后,Sid打开H帘Q挂好电(sh)话,打开门锁Q他的家庭开放,准备好了q接客h。Sid和Simon可能q样开始一?
SimonQ?#8220;早上好,先生。我今天能帮你做什么吗Q?#8221;
SidQ?#8220;是的SimonQ早上好。看来我们这里很凌ؕ啊。我们昨天晚上突然中断了。你能否处理一下所有这些没有完成的照片?#8216;回退’?#8221;
SimonQ?#8220;当然了,所有这些底片在重做W记本里的都要被重新制作Q然后以单的序攄在正的框架里?#8221;
SidQ?#8220;你处理完q些后,接着处理‘回退’Q是吗?”
SimonQ?#8220;当然了,先生。我从回退储藏室里取出照片框架Q然后把旧的版本攑֛它们原来的地斏V?#8221;
SidQ?#8220;太棒了,你完成后Q我打开房子?#8221;
1.1.9夜间E序
Sid家的夜间E序也很有趣。当SidwZ准备休息的时候,他要求家里所有的东西都放好、关掉和停下。就寝时间的W一个行动是要求房子里所有的客h回家厅RSid晚上的情l有四种情况。第一U,有时他很有耐性,{待所有的男女客h自行d后,再就寝;W二U,Sid没有耐性,他亲自来监督每一个客人,当客人干完各自的事情Q看照片{等Q后Q他l客人指C出门的方向Q第三种QSid非常没有耐性,他揪着客h陪他们出门,不让他们q完正在q的事;W四U,Sid拉下房子的电(sh)闸,大叫“旉?#8221;Q房子里一片狼藉。Simon不得不在W二天早晨来清理混ؕ的场面?
当一个客后留下一团糟ӞSid叫来他的女䄦PamelaMonica。她监控客h的活动,q且在客后处理善后。她的清z设备上贴着标签PMON?
如果Sid没有H然拉闸Q每个h都打开灯,q行清理。同步处理笔记本来完成各自的d。Debbie从DB_BUFFER_CACHE架子上取走所有的照片Q放到合适的墙壁上。Logan?
保LOG_BUFFER架子是空的,所有的底片都在当前的重做笔记本里。Chuck在房子里兜一圈,用最高和最低的目录~号QSCNQ来更新墙壁和笔记本。Archie把最后的那张底片攑օ归档的重做笔记本Q放到后院的C室。然后更新控制和告警W记本。当每个人都q完后,Sid关灯Q大伙儿睡觉?
1.1.10 Sid的问?
有时候,Sid家会出现问题。当以下q些事g中Q何一件发生时Q房子里的活动就会停止?
•当Sid醒来Q而他无法扑ֈ初始化文Ӟ则无法开始一天的工作?
•有时QSid需要用Archie保存在后院地下室的底片来恢复丢失的照片,如果他丢׃一张底片,或者在恢复q程中底片遭到破坏。他无法恢复M在那张无效底片以后拍?
的所有照片?
•Sid一ơ丢׃几张底片。他不小心打开相机Q曝光了胶卷。这使得他情l极坏,他的世界好像走到了尽头。他联系了照相机厂家Q他们提供了一个特D的照相机,带有两个胶卷舱。如此一来,万一胶卷破坏了,他还可以指望另一个舱内的胶卷。SidUC为镜像?
•如果后院的地下室满了QArchie没有I间来放|新的底片。Archie只是在地下室里等着新的I间。这使得Sid和Debbie也跟着{待Q整个Sid的家庭活动陷于停状态?
•如果Debbie得了感Q卧病在床。你猜猜看会怎么PSid疯狂地关上了门。尽有q些问题和其他一些家庭挫折及功能失常Q但Sid的家庭仍然可以处理百万计的照片和C千计的同时到访的客h?
和我一P你可能会想知道,Sid怎么会有那么多的旉和精力来q行照片攉zd。他没有工作吗?事实上,没有。钱不是Sid的目标。他不必工作。他在几q以前完成了一个聪明的投资。他?984q以后买入了大量的电(sh)脑公司的股票Q那时它们刚开始向公众发行。他所投资的公司总部在加利福g州的U树(wi)岸?
在介l了Sid的家庭后Q你会发C为家庭的所有活动设计了l构。就像这个家庭的zd一POracle数据库也有空间、过E和E序。在脑中与这个家庭类比,我现在简短地描述Oracle数据库体pȝ构、过E和操作中属于Oracle数据备䆾和恢复的部分。可能你会发现和Sid家的怼之处?
]]> adobe flex http://www.tkk7.com/gbk/archive/2008/10/28/237173.html癄 癄 Tue, 28 Oct 2008 09:27:00 GMT http://www.tkk7.com/gbk/archive/2008/10/28/237173.html http://www.tkk7.com/gbk/comments/237173.html http://www.tkk7.com/gbk/archive/2008/10/28/237173.html#Feedback 0 http://www.tkk7.com/gbk/comments/commentRss/237173.html http://www.tkk7.com/gbk/services/trackbacks/237173.html ]]>JBoss Seam--Java最优秀的快速开发框架之一 http://www.tkk7.com/gbk/archive/2008/10/07/232945.html癄 癄 Tue, 07 Oct 2008 08:38:00 GMT http://www.tkk7.com/gbk/archive/2008/10/07/232945.html http://www.tkk7.com/gbk/comments/232945.html http://www.tkk7.com/gbk/archive/2008/10/07/232945.html#Feedback 0 http://www.tkk7.com/gbk/comments/commentRss/232945.html http://www.tkk7.com/gbk/services/trackbacks/232945.html JBoss SeamQ算得上是Java开源框枉面最优秀的快速开发框架之一?br />
一、Seam适应快速开发、简化框架的势
在RoR 行之前QJavaC的主还是非常讲I分层、架构、复用和模式Q而比较忽视快速开发和化架构的Q其l果是代码量大、开发周期长、架构相当烦琐。以比较常见的Struts/Spring/HibernateZQ从大的分层来说有Web层、业务层和持久层Q从l的分层׃前到后有QView(JSP) -> Struts Action -> Spring Business Object Bean -> Spring DAO Bean -> Hibernate Persistent Object。如果有Remoting调用Q那么还需要相应的Service Facade层。每层都是用不同的技术框架或者模式、各层之间整合的方式也是五花八门。把整个目的架构搭v来,已经是非帔R烦的事情了?
Seam l我的感觉像是一个异常简单的MVC框架Q他实际上只有两层:JSF View?Seam Component。而Seam Component有两c:一cLEntity BeanQ另一cd是Session Bean。Entity Bean映射数据库表QSession Bean完成所有的业务逻辑Q包括可能的持久化,事务Q响应页面请求、商业逻辑Q页面流控制{等。配|文件也不多Q除了一堆基的配|文Ӟ唯一一个需要不断修改的是pages.xml了,即配|JSF的view映射?
所以Seam开发项目看h很简单、很直接Q无分层之苦恹{相应的也会让程序员把精力主要放在业务逻辑lg的实CQ而不是把_֊费在架构、分层、模式和基础设施搭徏的工作上面?
二、Seam的数据绑定做的很
׃是一个简单的两层l构QView和Component?/font> 间的数据l定做的很出Ԍ看v来比我欣赏的Webwork的数据绑定方式更胜一{V官 方的说法叫做双向依赖注入Q在component里面可以直接取到面提交的数据,在页面也可以直接讉Kcomponent数据?
另外持久化数据的校验也直接集成好了,在EntityBean里面声明数据的约束,在页面就可以直接校验了,和RoR的数据校验方式是一L(fng)Q当然这也得益于Gavin King是Seam和Hibernate两个目的作者的~故?
三、Seam的组件机制看h相当好用
既然Seam化了分层Q实际上把主要的工作都推到组件层d成了。但是Seam的组件层看v来很单,q得益于Seam的组件机制设计了很多的组件状态,Ҏ(gu)不同的组件状态,天然的划分了不同lg的功能和逻辑?
Seam 的组件有点类g把传lMVC的Action和Spring的Bean合二Z了,但还是不同于传统的MVC框架下面的ActionQ传 l的MVC Action是基于页面请求的Q无法复用,而Seam的组件是事g驱动方式Q它只需要捕获和实现事g代码可以了Q至于怎么触发它ƈ不需要知道,他和 Web层可以不l定Q因此理Z面来说是可以实现lg复用的。我个h认ؓSeam的这个组件机刉常y妙,既可以用来实现响应页面事Ӟl定面数据的所谓Web BeanQ也可以用来实现和W(xu)eb没有M关系的纯业务逻辑lgQ一个很漂亮的实现?
另外Seam的组件注入机制看h也很单,不像Spring那样ȝQ而且内置了很多现成的lgq来Q直接用Annotation声明一下就可以用了Q感觉写lg真的很方ѝ很灉|、很强大?
四、Seam把数据库资源的管理和事务的封装完全隐藏v来了
Spring 的数据库资源理和事务封装是通过提供了一pd的代理类以及配置文g来实现的Q程序员q是要通过配置文g的方式来手工理事务Q访问数据库也必通过Template~写匿名内部cL实现Q而且在Spring/Hibernate框架下面QOpenSessionInView是一个很讨厌的问题?
但是Seam已经把数据库资源的管理和事务的封装全部都隐藏h了,E序员完全不需要知道,也不需要操心这些事情,q真是个大大的解放。当?Seam可以做到q一点,也无非是因ؓSeam提供了一套上至View层,下至持久层完整的框架Q因此可以把实现l节隐藏在框架内部,不暴露给E序员?Spring之所以做不到q一点,也因Z只充当了一个黏合剂Q不能够直接修改View层和持久层带来的限制?
五、Seam对第三方框架的整合看h比Spring更深?/span>
原来印象当中只有Spring才提供了一站式的解x案,q次一看Seam文档Q呵Q发现Seam也都齐全了,什么邮件啦、工作流啦、页面流啦、规则引擎啦、异步Q务调度啦、消息系l啦、Web服务啦、远E调用啦、甚臛_文检索啦全部都集成了。而且集成的比Spring更深入一些,例如Java EE本n的JMSQMDB自然是Seam的强,而JBoss自家的JBPMQJPDLQRules集成的更加没得说?
从整合角度来_感觉Spring和Seam的出发点不同QSpring更像一个^収ͼ我提供整合的可能性,然后E序员你自家L合,我提供一些写好的整合beanQ对于这些你通过XML配置一下就整合q来了,如果我没有提供bean的,那么你也可以自己写bean来整合。而Seam更像一个完整的框架而不是^収ͼ我这个框架想提供的功能,框架自n已l整合好了,你直接用是了,你也可以自己写扩展来整合Q但是这个不是Seam希望E序员做的事情?
因此对于E序员的感觉来说QSpringl你提供了一切的零g和半成品Q但你要自己动手来组装,而Seam已经l你装好了一个成品,你就别自己改装了Q直接拿ȝ吧?
六、Seam提供了方便的代码生成?/span>
和appfuse cMQ可以直接用ant task来生成一个完整项目的骨架Q以及相应的lg代码生成器,利用seam-gen可以快速生成一个完整的、带有AJAX功能的CRUD目Q而且q是一个eclipse或者netbeans工程Q你可以直接用IDE打开~辑了。这功能虽然不太隑ցQ但是对于程序员来说Q帮助是很大的。Seam做的相当不错?
以上是我对Seam的一点小的赞许Q当然我也有一点疑问:
一、Seam的View实现是JSFQ看面代码q是密密麻麻的Tag
我是非常反感JSP Tag的,看看面密密麻麻的Tag头皮发麻,能不能弄一个Template呀Q例如freemarker啥的Q这些Tag既不直观Q也不方便扩展。需要扩展页面组ӞM能让我自定义TagdzdQ不清楚q个问题怎么办?像freeamarkerq可以方便的自定义页面宏呢?
二、每ơ修攚w要重新打包发布,太麻烦了?/span>
q修改一个页面,也要整个打包deploy成ؓ一个earL贝到jboss的应用目录下面,q个要是攚w面,不是得烦死? 我以前都是在目里面直接内嵌JettyQ作Z个application启动Q修攚w面根本无需重v呀Q更不要说deploy了?
M来说Q我觉得Seam框架非常Q尤其是他的lg机制设计的很有匠心,真不愧是Gavin King_ֿ打造的框架了,虽然看v来还是有些缺P但是做企业应用项目的话,Seam是一个很的选择Q作为程序员来说Q要比用 Spring/Hibernate/Struts省心的多Q更能够把精力放在业务逻辑的编写上面,开发效率也很不错,可能是Java开源框枉面最优秀的快速开发框架之一?/font>
]]> JBoss Seam--Java最优秀的快速开发框架之一 http://www.tkk7.com/gbk/archive/2008/10/07/232944.html癄 癄 Tue, 07 Oct 2008 08:38:00 GMT http://www.tkk7.com/gbk/archive/2008/10/07/232944.html http://www.tkk7.com/gbk/comments/232944.html http://www.tkk7.com/gbk/archive/2008/10/07/232944.html#Feedback 0 http://www.tkk7.com/gbk/comments/commentRss/232944.html http://www.tkk7.com/gbk/services/trackbacks/232944.html JBoss SeamQ算得上是Java开源框枉面最优秀的快速开发框架之一?br />
一、Seam适应快速开发、简化框架的势
在RoR 行之前QJavaC的主还是非常讲I分层、架构、复用和模式Q而比较忽视快速开发和化架构的Q其l果是代码量大、开发周期长、架构相当烦琐。以比较常见的Struts/Spring/HibernateZQ从大的分层来说有Web层、业务层和持久层Q从l的分层׃前到后有QView(JSP) -> Struts Action -> Spring Business Object Bean -> Spring DAO Bean -> Hibernate Persistent Object。如果有Remoting调用Q那么还需要相应的Service Facade层。每层都是用不同的技术框架或者模式、各层之间整合的方式也是五花八门。把整个目的架构搭v来,已经是非帔R烦的事情了?
Seam l我的感觉像是一个异常简单的MVC框架Q他实际上只有两层:JSF View?Seam Component。而Seam Component有两c:一cLEntity BeanQ另一cd是Session Bean。Entity Bean映射数据库表QSession Bean完成所有的业务逻辑Q包括可能的持久化,事务Q响应页面请求、商业逻辑Q页面流控制{等。配|文件也不多Q除了一堆基的配|文Ӟ唯一一个需要不断修改的是pages.xml了,即配|JSF的view映射?
所以Seam开发项目看h很简单、很直接Q无分层之苦恹{相应的也会让程序员把精力主要放在业务逻辑lg的实CQ而不是把_֊费在架构、分层、模式和基础设施搭徏的工作上面?
二、Seam的数据绑定做的很
׃是一个简单的两层l构QView和Component?/font> 间的数据l定做的很出Ԍ看v来比我欣赏的Webwork的数据绑定方式更胜一{V官 方的说法叫做双向依赖注入Q在component里面可以直接取到面提交的数据,在页面也可以直接讉Kcomponent数据?
另外持久化数据的校验也直接集成好了,在EntityBean里面声明数据的约束,在页面就可以直接校验了,和RoR的数据校验方式是一L(fng)Q当然这也得益于Gavin King是Seam和Hibernate两个目的作者的~故?
三、Seam的组件机制看h相当好用
既然Seam化了分层Q实际上把主要的工作都推到组件层d成了。但是Seam的组件层看v来很单,q得益于Seam的组件机制设计了很多的组件状态,Ҏ(gu)不同的组件状态,天然的划分了不同lg的功能和逻辑?
Seam 的组件有点类g把传lMVC的Action和Spring的Bean合二Z了,但还是不同于传统的MVC框架下面的ActionQ传 l的MVC Action是基于页面请求的Q无法复用,而Seam的组件是事g驱动方式Q它只需要捕获和实现事g代码可以了Q至于怎么触发它ƈ不需要知道,他和 Web层可以不l定Q因此理Z面来说是可以实现lg复用的。我个h认ؓSeam的这个组件机刉常y妙,既可以用来实现响应页面事Ӟl定面数据的所谓Web BeanQ也可以用来实现和W(xu)eb没有M关系的纯业务逻辑lgQ一个很漂亮的实现?
另外Seam的组件注入机制看h也很单,不像Spring那样ȝQ而且内置了很多现成的lgq来Q直接用Annotation声明一下就可以用了Q感觉写lg真的很方ѝ很灉|、很强大?
四、Seam把数据库资源的管理和事务的封装完全隐藏v来了
Spring 的数据库资源理和事务封装是通过提供了一pd的代理类以及配置文g来实现的Q程序员q是要通过配置文g的方式来手工理事务Q访问数据库也必通过Template~写匿名内部cL实现Q而且在Spring/Hibernate框架下面QOpenSessionInView是一个很讨厌的问题?
但是Seam已经把数据库资源的管理和事务的封装全部都隐藏h了,E序员完全不需要知道,也不需要操心这些事情,q真是个大大的解放。当?Seam可以做到q一点,也无非是因ؓSeam提供了一套上至View层,下至持久层完整的框架Q因此可以把实现l节隐藏在框架内部,不暴露给E序员?Spring之所以做不到q一点,也因Z只充当了一个黏合剂Q不能够直接修改View层和持久层带来的限制?
五、Seam对第三方框架的整合看h比Spring更深?/span>
原来印象当中只有Spring才提供了一站式的解x案,q次一看Seam文档Q呵Q发现Seam也都齐全了,什么邮件啦、工作流啦、页面流啦、规则引擎啦、异步Q务调度啦、消息系l啦、Web服务啦、远E调用啦、甚臛_文检索啦全部都集成了。而且集成的比Spring更深入一些,例如Java EE本n的JMSQMDB自然是Seam的强,而JBoss自家的JBPMQJPDLQRules集成的更加没得说?
从整合角度来_感觉Spring和Seam的出发点不同QSpring更像一个^収ͼ我提供整合的可能性,然后E序员你自家L合,我提供一些写好的整合beanQ对于这些你通过XML配置一下就整合q来了,如果我没有提供bean的,那么你也可以自己写bean来整合。而Seam更像一个完整的框架而不是^収ͼ我这个框架想提供的功能,框架自n已l整合好了,你直接用是了,你也可以自己写扩展来整合Q但是这个不是Seam希望E序员做的事情?
因此对于E序员的感觉来说QSpringl你提供了一切的零g和半成品Q但你要自己动手来组装,而Seam已经l你装好了一个成品,你就别自己改装了Q直接拿ȝ吧?
六、Seam提供了方便的代码生成?/span>
和appfuse cMQ可以直接用ant task来生成一个完整项目的骨架Q以及相应的lg代码生成器,利用seam-gen可以快速生成一个完整的、带有AJAX功能的CRUD目Q而且q是一个eclipse或者netbeans工程Q你可以直接用IDE打开~辑了。这功能虽然不太隑ցQ但是对于程序员来说Q帮助是很大的。Seam做的相当不错?
以上是我对Seam的一点小的赞许Q当然我也有一点疑问:
一、Seam的View实现是JSFQ看面代码q是密密麻麻的Tag
我是非常反感JSP Tag的,看看面密密麻麻的Tag头皮发麻,能不能弄一个Template呀Q例如freemarker啥的Q这些Tag既不直观Q也不方便扩展。需要扩展页面组ӞM能让我自定义TagdzdQ不清楚q个问题怎么办?像freeamarkerq可以方便的自定义页面宏呢?
二、每ơ修攚w要重新打包发布,太麻烦了?/span>
q修改一个页面,也要整个打包deploy成ؓ一个earL贝到jboss的应用目录下面,q个要是攚w面,不是得烦死? 我以前都是在目里面直接内嵌JettyQ作Z个application启动Q修攚w面根本无需重v呀Q更不要说deploy了?
M来说Q我觉得Seam框架非常Q尤其是他的lg机制设计的很有匠心,真不愧是Gavin King_ֿ打造的框架了,虽然看v来还是有些缺P但是做企业应用项目的话,Seam是一个很的选择Q作为程序员来说Q要比用 Spring/Hibernate/Struts省心的多Q更能够把精力放在业务逻辑的编写上面,开发效率也很不错,可能是Java开源框枉面最优秀的快速开发框架之一?/font>
]]> jsp request get的对?/title> http://www.tkk7.com/gbk/archive/2008/06/10/206922.html癄 癄 Tue, 10 Jun 2008 06:34:00 GMT http://www.tkk7.com/gbk/archive/2008/06/10/206922.html http://www.tkk7.com/gbk/comments/206922.html http://www.tkk7.com/gbk/archive/2008/06/10/206922.html#Feedback 0 http://www.tkk7.com/gbk/comments/commentRss/206922.html http://www.tkk7.com/gbk/services/trackbacks/206922.html
request.getServerName() —?localhost
request.getServerPort() —?8080
request.getContextPath() —?/vote
request.getProtocol() —?HTTP/1.1
request.getRemoteAddr() —?127.0.0.1
request.getRemoteHost() —?127.0.0.1
request.getRemotePort() —?1316
request.getRequestURI() —?/vote/test.jsp
request.getRequestURL() —?http://localhost:8080/vote/test.jsp
request.getServletPath() —?/test.jsp
]]>
վ֩ģ壺
߾Ʒһ |
wwwƷþþ |
ɫѹۿ |
ձxxwwxxwwƵ |
Ļۺ234 |
˳վ߲ӰԺ |
һâþ |
99Ƶ |
ý߹ۿƵѹۿ |
Av츾߳30p |
һѻɫƬ |
ձһѸ |
Av뾫Ʒɫҹ |
ŮƵaƵȫվһ |
99ƷƵ߹ۿѲ |
ƷƵ |
Ʒ߲ |
AëƬþ |
69˾ƷƵ |
պһƬѹۿ |
ŷŮƵ |
ۺƵ |
aëƬȫ |
AV뾫Ʒɫҹ |
Ӱɫۺ |
ղһ |
Ƶרһ |
һ24˾ |
123Ʒ |
ƷۺϾþþþý |
ǿ˫ͽˬˬƵ |
Ůһ |
99鶹þþùƷ |
þþþþAv뾫Ʒר |
AVѲ |
ҳƵ߲ |
þþþAVר |
µĻ |
ѻɫƵ |
ۺAV߲ |
þ99Ʒһ |