﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-桃之夭夭</title><link>http://www.cnblogs.com/raimundo/</link><description>知天之所为，知人之所为者，至矣。知天之所为者，天而生也；知人之所为者，以其知之所知以养其知之所不知，终其天年而不中道夭者：是知之盛也。</description><language>zh-cn</language><lastBuildDate>Sat, 06 Sep 2008 22:45:11 GMT</lastBuildDate><pubDate>Sat, 06 Sep 2008 22:45:11 GMT</pubDate><ttl>60</ttl><item><title>冰云同志的一些似是而非的想法</title><link>http://www.cnblogs.com/raimundo/archive/2005/04/27/146289.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Wed, 27 Apr 2005 04:49:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2005/04/27/146289.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/146289.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2005/04/27/146289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/146289.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/146289.html</trackback:ping><description><![CDATA[冰云同志已经好久没写blog了，以至于我已经遗忘了他的blog的存在，今天查subversion的配置，从BJUG的主页连过去看看，竟然意外的发现他又写了几篇...粗看一遍，汗啊...
<br/>
<br/><a href="http://blog.nona.name/archives/167.html">http://blog.nona.name/archives/167.html</a>
<br/>
<br/>这篇叫强类型的烦恼...哎，里面的观点很古怪。
<br/>第一个，弱类型数据库，这简直就是胡说八道！momo同学...你该跟我去听听体系结构了。
<br/>String作为一种类型，其实并不适宜计算机处理，一个简单的例子100，用二进制就是01，定长也不过16-32位，&quot;100&quot;呢？这是一个复杂类型，要记录长度3，还有每一位的数据。至少需要4个8位整，如果转成unicode，就更无法想象了。如果说数据量大还是小问题，计算问题就更大了。一个整数加法，基本上就是一个计算周期，而使用字符串呢？按位加，还得记录进位。如果大家写过高精度加法算法就知道了，不太复杂，但是很慢，于是数据库的内置计算字段就废掉了。比较可能还要复杂一些，而且字符串比较没有缺省语义，还得算。所以从目前的计算机体系结构角度考虑，直接的字符存储是没有好处的。
<br/>第二个，你的假设的出发点，是一类CMS系统，CMS并不以计算为主的。
<br/>基于web的应用开发（主要指利用web作为ui的系统，而基于web server使用http remoting的东西不算），本质上也就是一种<strong>序列化</strong>,&#160;将业务对象以某种文本格式序列化出来，如果这个业务对象本身承载了很少的计算语义，比如comment, article, product description 那么使用数据库，不过是从一种持久形式转化为另一种持久形式。那么为什么还要使用数据库呢？为什么不直接使用XML + XSLT或者就是静态HTML来处理呢？
<br/>第三点，至于Domain修改。
<br/>用一个架构常识性观点来考虑这个问题，直接在ui里使用domain的结构是这样的
<br/>
<br/>&#160;UI html&#160; --〉 Action&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;HBM&lt;---DB Scheam
<br/>&#160; &#160;&#160;&#160;&#160; \&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |
<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; D o m a i n&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; M o d e l
<br/>一种典型的扁平结构(当然物理结构扁平是一种有效的架构系统的手法),你算一下domian model依赖权重，或者直接用眼睛观察一下，是不是所有东西都依赖于Domain？那么Domain改了，系统如何能不修改？因此不是强类型的问题，而是系统结构的问题。而且这个矛盾使用一般结构很难解决...所以要减少domain变化，这也是一个常识。所以你每次都跟我说,domain有这样，这样以及这样<strong>等等 </strong>你对于domain的不确定性才是domain变化的原因，而不是技术因素。
<br/>&#160;
<br/><img src ="http://www.cnblogs.com/raimundo/aggbug/146289.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42123/" target="_blank">[新闻]Google 10周年大事记</a>]]></description></item><item><title>J2EE 5.0 Draft</title><link>http://www.cnblogs.com/raimundo/archive/2005/04/07/133630.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Thu, 07 Apr 2005 15:27:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2005/04/07/133630.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/133630.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2005/04/07/133630.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/133630.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/133630.html</trackback:ping><description><![CDATA[j2ee 5.0 early draft出了！！！今年比较期待的一个规范，匆匆读完发现和1.4差别不是特别大，整体的architecure还是那些，比较有意思的是，在web container、ejb container和client container里都有ejb persistence api，貌似之前传说中的jsr 220，怎么叫ejb persistence api了？比较奇怪。如果真是ejb persistence api的话，那么是不是传递给我们一条信息呢？就是web container以另一种ejb container的形式出现，也就是component模型的融合，不再显式区分enterprise javabean和javabean，甚至不再区分serlvet和javabean，而通过annoation分辨component的运行环境。扔到ejb container里就是ejb，扔到web container里就是其他的，javabean成为java环境下独大的component model。嘿嘿，limo同志，一万年以前我跟你说的univerisal container architecture，看到影子了吧。
<br/>还有一个比较有意思的是，server-side container都加了ws-metadata，是否意味着我们可以将一个component部署成不同remoting facade的runtime instance呢？那么下一步是不是http/rmi-iiop/soap的统一呢？看来我还在想univerisal container architecture....
<br/>
<br/>今年还有一个比较期待的规范，就是OSGi R4，据已知的情况来看，今年开始OSGi Platform将逐步转向Device Middleware。学习一下怎么用一个典型的microkenerl的architecture是如何用来实现一个middleware。兴奋啊....
<br/><img src ="http://www.cnblogs.com/raimundo/aggbug/133630.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42122/" target="_blank">[新闻]Google上下二十年</a>]]></description></item><item><title>Bouchet and Montero</title><link>http://www.cnblogs.com/raimundo/archive/2004/12/15/77317.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Wed, 15 Dec 2004 02:32:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/12/15/77317.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/77317.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/12/15/77317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/77317.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/77317.html</trackback:ping><description><![CDATA[邝伟棠先生曾在古典吉他村写道：
<br/>Bouchet本身并不是以吉他制造为专业，亦可能因他不需靠这工作吃饭，故他造的琴很少，而他在设计上的新想法却很多，在他晚年时，他设计出一种新的结构，但他的体力已无法应付把它实现，因每一种构想在付诸实行时，不可能马上便成功，都要反复修改，才可达到理想，Marin的手工是西班牙少有的细致，而且每一部份都能独立完成，加上与Bouchet的交情，自然是最佳的人选，Bouchet到西班牙与Marin一起工作，把他的想法实现，他们一共做了十二把Bouchet-Marin，最后的定案亦是Marin现在所制作的吉他的形式。
<br/>
<br/>呵呵，这就是古典吉他制作领域的architect和developer<img src ="http://www.cnblogs.com/raimundo/aggbug/77317.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42120/" target="_blank">[新闻]中华英才网面临外资吞并</a>]]></description></item><item><title>uml</title><link>http://www.cnblogs.com/raimundo/archive/2004/11/03/60112.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Wed, 03 Nov 2004 12:47:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/11/03/60112.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/60112.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/11/03/60112.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/60112.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/60112.html</trackback:ping><description><![CDATA[<P>今天下了Together Architect，还算不错的产品，里面的samples格外的有意思，展现了一种很好的uml组织形式。晚上开始看Robert C.Martin的《UML for Java Programmers》，看得很欢畅。</P><img src ="http://www.cnblogs.com/raimundo/aggbug/60112.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42119/" target="_blank">[新闻]软件收入百强张榜 华为中兴海尔列前三</a>]]></description></item><item><title>Metaphor·Semantic·Ontology</title><link>http://www.cnblogs.com/raimundo/archive/2004/09/24/46178.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Fri, 24 Sep 2004 02:45:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/09/24/46178.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/46178.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/09/24/46178.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/46178.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/46178.html</trackback:ping><description><![CDATA[在未来一段时间内，这三个词将会是非常hot的buzz word，不同于oop、aop这类毫无想象余地的技术词汇，对这三个词，任何一个认识3000中国字的文化人都能泡一杯香茶点一支烟，深刻地把它们引向哲学那片茂密的雨林。恰巧前一阵看一本书<FONT color=#000000>《西方伪科学种种》，其中有一段话：<BR><BR><FONT face=Arial>绝大多数使用&#8220;语义学&#8221;一词的当代哲学家，把这个词仅用于研究词汇和其它符号的意义。形成鲜明对比的是，伯爵把这个词用得非常广泛，以致它变得几乎毫无意义了。正如黑德指出，科尔兹布斯基把植物的向性，比如向上生长而不朝下生长，看作为一种&#8220;语义上的反作用&#8221;。<BR><BR>原来语义被伪科学滥用已经很久了.....回想一下，自己最近也似乎特别偏爱&#8220;语义&#8221;这个词，难不成我已经走火入魔了......想想就让我很寒。</FONT></FONT><img src ="http://www.cnblogs.com/raimundo/aggbug/46178.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42117/" target="_blank">[新闻]马云vs孙正义：两个“疯子”的对话</a>]]></description></item><item><title>第一篇发在javaeye的帖子</title><link>http://www.cnblogs.com/raimundo/archive/2004/09/20/44697.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Sun, 19 Sep 2004 18:17:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/09/20/44697.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/44697.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/09/20/44697.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/44697.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/44697.html</trackback:ping><description><![CDATA[<P>我知道我要挨扳砖，没事，来吧：）&nbsp; <BR><BR>赫赫，我来说一下spring vs EJB，首先强调，我不是ejb的拥护者，但我欣赏他的完整、他的学院气，同时也深感他的硬伤，我不是spring的拥护者，虽然去年3、4月间看</P>
<P>到spring的时候曾经让我眼前一亮。对ejb有太多的误解，对spring有太多的吹捧，我希望这是一个相对公平的比较.</P>
<P>&nbsp; 我认为spring和ejb的差异在这样三个方面，一个是受众也就是这两个叫framework也好叫platform也好的东西的scope；另一个是component architecture，最后一个是语义</P>
<P>。</P>
<P>[b]1.Scope比较[/b]</P>
<P>&nbsp; 先说scope，ejb的scope是什么？ejb针对什么系统来设计的？这个我想一个人一个答案，我说了不算，同样大家说了也不算，我们来看规范（题外说一句，我想本来我没啥</P>
<P>资格在这里谈论ejb，我应用ejb的项目不多，但是我有个习惯，就是读规范学技术，不管别人怎么说先看这个东西是怎么来的，我想这一点还使我有些开口的自信，不至于太</P>
<P>贻笑大方），ejb规范的头几句：<BR>[b]Enterprise JavaBeans is an architecture for component-based computing.Enterprise beans are components of transaction-oriented enterprise </P>
<P>applications.[/b]</P>
<P>&nbsp; 好了，很明确，ejb是针对transaction-oriented enterprise application的组件，那么也就使说ejb是面向[b]以事务为中心[/b]的企业软件，而不是别的。ejb的核心是</P>
<P>transaction，不是domain model或别的。<BR>&nbsp; why transaction?我在电力行业做过一阵信息化软件架构师，在电力这样一个需要处理大量数据的领域里，很少有oo model，而是做完entity分析，交给dba去优化，以数据</P>
<P>性能为主，这样的系统里，数据操作的粒度就是transaction，而不是object或是别的。我想这该算是一个大型企业级系统，我看到的是transaction，因此ejb这个把scope定</P>
<P>在enterprise级的东西而言，这样的设计还使合理。而且ejb对transaction这部分的处理确实比较完整，cmt，bmt，不同的transaction scope控制的都很好。基于这种认识，</P>
<P>我认识transaction script是ejb的标准应用模式，而不是domain model或是别的。<BR>&nbsp; 这是对ejb最大的误解的来源，我看过的所有ejb书里，只有o'reilly的一本隐约提到transaction是ejb的中心。其他一律不提，疯狂的鼓吹ejb多好多好ejb多么万能，我想</P>
<P>，如果不知道ejb是transaction-oriented的，那么ejb奇怪的对象模型的确不可接受。</P>
<P>&nbsp; 再说spring，spring是什么呢？我没有看到特别明确的定义，不过我想仿照ejb，定义spring为：<BR>Spring is a Javabean-based framework that supporting component architecture development.Spring provides&nbsp; lighter context for heterogeneous entrprise </P>
<P>application.</P>
<P>&nbsp; 我e文很差，cet-6 6次都没过，我想说明的是，spring是一个轻量化的组件架构，可以支持多种企业应用程序模式.看到这里有人又该说了，no,no还有ioc，还有aop,没错这</P>
<P>些很cool的特性我没说，但是包含了，component architecture意味着两个方面，component working(编写组件)和container working(编写容器环境)，spring的ioc和aop是</P>
<P>用在container working里的.当然肯定还有其他的一些没有概括，但是我想主体我还是说到了的.这样scope就很明确了，spring的基础是javaBean，javaBean支持完整的oo建</P>
<P>模，因此spring可以适用更多的结构,domain model和别的一些。</P>
<P>那么开始比较，spring有一个理论上普适的组件模型，但是鉴于大型应用多为transaction-oriented，那么用spring的理由就是domain model，ejb不能提供完整的oo模型而</P>
<P>spring可以。</P>
<P>结论：由于scope不同，其实比较spring和ejb那个更适合企业开发没什么意义，因为这里面根本就是两个不同的范畴，在scope上指责ejb不如spring，就好像说raimundox，你</P>
<P>就不能替老婆把孩子生了，还让她那么痛苦的怀胎十月。其实我也不想，我也想替，可惜我们这功能.....扯远了，ejb也是，没这功能你怎么强求他呢？你要说ejb设计的不好</P>
<P>，也不对，人家有专门的领域。因此我说，在scope上比较spring和ejb没意义，根本不是一个级别的。</P>
<P>[b]2.component architecture[/b]</P>
<P>&nbsp; Component architecture有一个基本观点，就是component和context的分离，理想情况下，component只负责业务的实现，而container提供context，这个context只技术</P>
<P>context，比如事务比如安全的支持。于是，component architecture的基本观点就是business关注点和technique关注点分离，business由component负责，technique由</P>
<P>context或者叫container实现。那么很明确了，component architecture里有两种编程，针对component的和针对container的。<BR>&nbsp; 好，有了这个理解，我们可以继续了，如果有人有疑意，那么抱歉，这片文章并不适合您，后面全部的论点都是基于这个观点的，如果不认可这个，下面的也不会认可，您</P>
<P>也不用浪费时间了。</P>
<P>&nbsp; 首先看ejb的component方面，ejb在component architecute做得非常的好，ejb就是一个业务组件，在container-managed的情况下，组件通过声明可以应用容器提供的技术</P>
<P>context，当container-managed不满需要的情况下，可以bean-managed，只要保持对外的事务语义就可以了（记得吗？ejb是transaction-oriented，事务最重要）。在ejb里</P>
<P>，组件和容器的约定非常明确，哪些需要组件写，哪些是容器提供的非常明确，这是component architecture里很好的习惯，明确组件和容器的界限（ejb的一个缺点，矫枉过</P>
<P>正，有一些操作也被禁止）。编写代码非常容易，业务，only业务。其实ejb的规范里，ejb的coder其实最好是domain expert，实现业务逻辑就好了。</P>
<P>&nbsp; 现在来看spring的component方面，spring以javaBean为基础，贫容器，也就是对容器没要求，于是，spring第一个缺点，contianer和component的约定不清晰(写到这里我</P>
<P>已经听到一些人在叫了，这是spring的优点，自由，别急，后面我会证明这是spring的软肋)，但是spring用了一种比较聪明的办法，那就是加强container working.</P>
<P>&nbsp; 看一下spring的container working,通过spring的aop api，我们可以很容易的为特定组件定制容器环境，把一个组件需要的容器技术环境以aspect的形式weave到component</P>
<P>里，非常的灵活，也非常的强大，spring通过这种形式来弥补组件/容器约定不足的情况，一切由component选择，容器除了装配（ioc/dip）不提供任何技术context，想要什</P>
<P>么自己来，这个给了component实现者自己选择的权利，很好（但也隐含了spring的最大的不足，别急我后面会说）。</P>
<P>&nbsp; 再来看ejb，非常遗憾，ejb container working的能力几乎为0，当然算上jca的话还不算太差，但是那只是资源，而不是技术context。why?因为ejb认为他已经提供了所有</P>
<P>企业级开发所必需的技术context了，事务(ejb里我总把他放在第一位)、分布、并发、安全等等。在ejb看来container working的能力几乎无用，而且不安全，除了jboss开放</P>
<P>了比较多的container working接口其他的ejb container提供这方面的支持很少很少.当然提供很多技术context并不是坏事，要命的是不能配置，要么全用要么不用（倒是很</P>
<P>原子），这是ejb最大的不足，容器环境不可配，也是spring强于ejb的地方。</P>
<P>&nbsp; 上面我们已经看到了spring和ejb都是component architecture，那么component能想到的最直接的用处就是复用。那么比较这一点就是比较ejb和spring component </P>
<P>architecture的关键。看到这里spring的支持者们该常出一口气了，spring复用一定强于ejb复用，赫赫，但我的结论正好相反，ejb复用优于spring复用！！收起你们的愤怒</P>
<P>，收起你们不屑，听我把话说完。</P>
<P>&nbsp; 在component architecture里，component是业务实现，而不该有技术代码，就算用也要通过容器环境去和容器交互来完成操作，比如ServletContext等东西。[b]那么其实</P>
<P>组建结构下复用的关键不是组建而是容器！！[/b]</P>
<P>&nbsp; 以前有一个颇有名气的dx(gigix别看了，说你呢)，说"COM和EJB都鼓吹模块化和复用，模块化是真的，复用是骗人的",com我不是很熟，不好下结论，ejb呢？ejb不易复用我</P>
<P>承认，但是骗人吗？不骗，后面我给出一种ejb复用的思路大家参考。反正组件一点技术都不作，只有业务逻辑想用就要有相应的容器环境，那么容器环境的复用性才是组件复</P>
<P>用的关键。ejb不易复用是因为如果脱离容器，我们就必须给它提供相应的技术context，事务、分布、并发等等一个也不能少，[b]因此容器外复用ejb效率很低[/b]。注意，</P>
<P>[b]是容器外[/b]，组件本来就是跑在容器里的，谁让你非要拿出去用），而容器内呢？因为ejb规范规定ejb容器应该兼容，别说webSphere到bea的移植有多难，其实不难，或</P>
<P>者说难度比把spring组件移植到pico复杂一点，当然你用vendor-specified的特性就没办法了，这不再规范内，你违规就别怨人家。因此，ejb的复用是可以的，而且是规范保</P>
<P>证的，容器外也有办法，也不是很难，我后面说。</P>
<P>&nbsp; 再看spring，的确他很灵活，但这正是致命伤，component完全是业务实现，但是容器呢？spring怎么保证容器的环境？没有，只能你自己保证，当你沾沾自喜的说，spring</P>
<P>里的component都是pojo，可以很好复用的时候，可曾想到，这复用的代价是要复用容器。比如有个componentA，在SystemA里需要事务模型A和安全模型A，在SystemB里需要事</P>
<P>务模型B和安全模型B，当你从SystemA里复用componentA的时候，你要怎样？重写事务模型B和安全模型B，然后你可以堂而皇之的说，你复用了组件。的确，你复用了组件，但</P>
<P>是你重写了容器，值吗？更可怕的是，spring容器和组件没有约定，那么怎么保证你的组建不写技术代码？ejb只要Bean-Managed并提供统一的事务模型就好了，spring呢？你</P>
<P>靠什么保证？你自己？这是spring一大硬伤，完全container-managed下缺少特定的component边界控制.你可以说，特殊要求的事务模型ejb还实现不了呢，的确，这是有可能</P>
<P>，但是ejb transaction model不能适用的情况有多少？如果真的不行，只能说ejb的简单复用在这里失效。</P>
<P>&nbsp; 对于组件还有一个问题就是部署，这也是ejb为人诟病的地方.的确,ejb的部署够复杂，但在ejb规范里有一个专门的角色来负责部署的，ejb是component architecture，那</P>
<P>么比如有一个人来粘合技术和业务，这个人不该是programmer(我刚才说了，ejb的实现者最好是业务专家，实现业务逻辑)，ejb的部署才是很厉害的人，他需要知道什么业务</P>
<P>需要什么样的技术支持，该怎样得到性能，因此deployer才是ejb architecture里最牛的，我重来不以为写ejb的是高手，但是一直都敬仰ejb的deployer.当然这里有一个调试</P>
<P>困难的问题，这是ejb的硬伤，没办法，这甚至是组件开发的硬伤.<BR>&nbsp; 再来看spring，spring宣称他部署简单，我觉得rod johnson在转移视线，想想看，打成一个war和打成一个ear有多大的区别？那么部署的差异在哪？差异在ejb的deploy </P>
<P>description和spring的context.xml的编写上!在用spring开发中要有一个人来写context.xml这个人往往比较了解系统，知道什么组件用什么拦截，那个组件依赖那个，甚至</P>
<P>会是架构师在作这件事情，那么和ejb里对系统有大局观的人来做deploy有多大区别？可能就是Xml的编写吧，我想在工具的支持下就是熟练度的问题，因此我觉得部署上</P>
<P>spring和ejb差不多，spring不用启server，调试放便些。</P>
<P>&nbsp; 结论，在component architecture上，spring灵活，ejb统一完整，各胜擅长，spring的灵活以降低复用为代价，但是如果有common的技术实现，的确很好复用，但是</P>
<P>spring+一套common的技术实现也就约等于ejb了吧？</P>
<P>[b]3.语义[/b]</P>
<P>&nbsp; 那么spring复用的问题表明了什么呢？其实是缺乏语义的支持，ejb开发可以看作在一个统一的语义环境下来作的，这个语义由ejb规范规定，因此ejb的复用有语义保证，而</P>
<P>spring呢？贫语义，一切都要开发者自己来实现。因此，如果ejb的环境语义可扩展并且可配置（比如去掉分布），那么spring毫无优势，标准的一致的完整的组件架构使ejb</P>
<P>会大有作为，但是现在并没有，才有了spring的火爆.这是一种畸形的胜利，完备语义的输给了贫语义的，问题是什么，强迫消费...谁让ejb非得强迫客户去买用不到的分布式</P>
<P>环境的单？但是统一语义的威力不会因此掩灭，现在有两条路，spring联合os社区，制定lightweight j2ee语义集合，争取成为标准。第二，ejb实现技术语义可配置可扩展。</P>
<P>谁会胜利？不好说，但是似乎ejb的脚步快一些！</P>
<P>[b]附：容器外复用ejb[/b]</P>
<P>其实ejb在容器外完全是可以用的，但是为了最大限度保证能用，bean-managed是推荐（不是cmp，bmp而是cmt,bmt），那么怎么传送一个transaction进去？SessionContext(</P>
<P>好像是这名记不清了，都快2：00了，困呀...就是ejb那个context接口)，一个接口嘛，自己mock一下，给一个transaction进去就好了。怎么装配？spring的setter </P>
<P>injection。如果用spring，那么cmt也可以实现，拦截啦，不过就看能不能实现ejb transaction model了。entity bean，如果是bmp，就用它好了，cmp，继承一个上</P>
<P>hibernate。这些都模拟好了，找一个in memory的jndi，把spring context封进去，这样相当于我们用spring实现了一个lightweight ejb container（其实就是给spring一个</P>
<P>ejb api的皮），轻到什么程度？除了注射什么都没有。<BR>然后client就可以构造jndi，然后lookup了<BR>看到这里一定有人说，你吃饱了撑的，这么费劲容器外复用ejb，为什么不直接用spring，这样也不够pojo，每个组件都有ejb的类的继承，好，我告诉你这么做的好处，首先</P>
<P>，虽然不够pojo，但是足够bean，因此spring来管理ejb是可以的，证明我的观点容器外使用ejb可以(赫赫，不要说偶rpwt...).其次的，当业务发展了，你的系统需要分布了</P>
<P>，把spring去掉，拿出ejb，redeploy，ok了，延展，稳定，分布都有了，这才是复用该有的境界，改一个部署整个环境换掉，去掉lightweight的ejb container，换乘</P>
<P>heavyweight的就是重量级。<BR>当然这么实现很难，在ejb3里会容易些，我敢打赌，spring以后一定是lightweight ejb container的供应商，免不免费，os不os要看rod johnson了，不过我觉得希望不大。</P>
<P>致谢：</P>
<P>首先感谢dlee，在和他的讨论中形成了这篇文章的主题，然后是冰云，他帮我审稿直到2：04，udoo，perhaps都提出了中肯的意见，谢谢他们.</P>
<P>当然也欢迎大家访问我的blog:www.cnblogs.com/raimundo</P>
<P>&nbsp;</P><img src ="http://www.cnblogs.com/raimundo/aggbug/44697.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42116/" target="_blank">[新闻]消息称MySQL创始人已向Sun提交辞呈</a>]]></description></item><item><title>semantic age is coming!</title><link>http://www.cnblogs.com/raimundo/archive/2004/09/17/43917.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Thu, 16 Sep 2004 16:36:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/09/17/43917.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/43917.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/09/17/43917.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/43917.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/43917.html</trackback:ping><description><![CDATA[<P>从去年开始spring很火，的确作为一个技术环境可配置的容器，spring对贫容器环境组件的支持还是很不错的也或得了很多的赞誉。于是很多人喧嚣着，spring会成为j2ee开发的主流，lightweight会是未来的趋势，在很多人眼里spring扮演了j2ee救世主的角色。我说这是不可能的，ejb在技术完备性是spring不可比拟的，但是更重要的是ejb提供一套标准的企业级开发语义，就是enterprise&nbsp;software development semantic。看到这里有些人又要说了，你这样人就是喜欢创造概念，我怎么从来没听说个什么enterprise software&nbsp; development semantic。好，我先不说什么语义先说重用，举一个例子，我说：就这样吧。那你一定很迷惑，那样呀？缺乏必要的语义环境，&#8220;这样&#8221;，这个很common很易复用的词是无法理解的，那么在这句话里，我所使用的&#8220;这样&#8221;并不能很好的复用到你的思想里，于是我要提供足够的语义上下文。比如我说：今天我很累，要睡了，就这样吧。一定就很容易推断出语境了。<BR>组件，作为软件物理的最小组成部分，和我们说话用的词在概念上有很大的相似性，代表一定的软件语义。因此要复用它关键不是看侵入性或是别的什么，而是看重建一个复用的语义环境是否很容易，比如我说&#8220;玄牝&#8221;，很多人都不会理解，我要引证道德经，才能很好的解释，那么这个词的复用性就很差，因为语义没有标准的理解，相反，&#8220;苹果&#8221;因为语义相对通用就很好理解。spring的成功在于对各种组件支持都很好，但是远到不了动摇j2ee根基的程度，因为他没有统一的公认的企业级开发语义，而ejb有，比如事务，我们用spring会很简单，但是那是一种贫语义的事务描述，而ejb通过Required，RequiredNew等词汇，对事务进行了统一的富语义的描述，最重要的是这是标准的。<BR>spring给我们自由，ejb给我们对企业开发的一种统一一致的模型，我们可以使用spring来构造我们的系统，但不是在一个标准的企业级开发语义上的，而是我们自己定义的语义。当然我并不是说我们的语义就一定不好，而sun的就一定好。但是随着mda福音的传播，核心语义定义才是真正的竞争力，早晚有一天j2ee应用兼容性判别会用语义兼容这样的条件，我们怎么办？看看jsr250吧，看看ibm j2ee mof吧，看看cwm吧，语义的威力就要展示出来了。<BR>spring想真正继续影响主流j2ee开发，拿出你的语义吧，否则被绞杀是不可逃避的命运(成为一个语义的plug-in implement)，semantic age is coming，我们怎么办？</P><img src ="http://www.cnblogs.com/raimundo/aggbug/43917.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42115/" target="_blank">[新闻]谷歌Chrome浏览器即将更换LOGO颜色？</a>]]></description></item><item><title>伟大的jsr250</title><link>http://www.cnblogs.com/raimundo/archive/2004/09/16/43758.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Thu, 16 Sep 2004 08:38:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/09/16/43758.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/43758.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/09/16/43758.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/43758.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/43758.html</trackback:ping><description><![CDATA[如果sun保持它一贯的学究做派，这将是近年来jcp上最伟大的一项jsr。<BR>要说明jsr250的伟大，先看一下jsr175，表面上看175的确带来了开发上的简便，再也不需要冗长的xml来做metadata descript了，简单优雅的通过一系列annotation，来刻画一个类的元信息，似乎一切都是那么清晰明媚，然而实际上却是存在着更大的混乱。第一个问题就是不同framework里的同语义的注释。比如jdo和hibernate都会有他们自己的annotation来描述持久化字段，那么你的persistent object到底用哪一个？在以前，这个东西不成问题，写好po我可以通过额外的xml来描述它使用什么persistent机制进行存储，跟换存储机制也不需要修改code，自从有了175，以懒惰为美德的程序员为了简便开始应用annoation了，那么我把一个po从hibernate移植到jdo是不是要用jdo的annoation重新标注一下我的源代码呢？第二个问题是对于保留至runtime的annoation的bytecode依赖问题，隐性的造成了不必要的依赖关系。jsr175是java的Pandora's Box，华美的外表下隐藏着极度的危险和混乱。<BR>jsr175能实质性的帮助java程序员减轻开发负担，一套统一语义的annoation是必要的前提，这也正是jsr250所要覆盖的范围。当然，如果jsr250仅是简简单单一套annoation的话，它远称不上伟大。jsr250极有可能会促使sun规范j2se和j2ee的metamodel，如果是metamodel，最有可能的是一套mof的m2模型，来刻画j2ee系统内的组件，安全，事物，分布等等关注点（IBM一定会努力促使它的j2ee mof成为标准，这一点上bea和oracle没有竞争优势），来统一语义，然后针对这一套统一的m2 model，形成一套annoation，一栋金光熠熠的j2ee大厦就要落成，这将是企业级软件开发史上的盛事。目前所有的framework都将掩盖在jsr250的光辉下，成为下游技术集成商，j2ee的喧嚣将成为过去，在统一技术语义的j2ee，竞争将在业务层面重新展开。<img src ="http://www.cnblogs.com/raimundo/aggbug/43758.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42101/" target="_blank">[新闻]淘宝网合并阿里妈妈 专家称阿里巴巴或有新战略</a>]]></description></item><item><title>enterprise</title><link>http://www.cnblogs.com/raimundo/archive/2004/08/01/29257.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Sun, 01 Aug 2004 15:08:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/08/01/29257.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/29257.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/08/01/29257.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/29257.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/29257.html</trackback:ping><description><![CDATA[<P>今天party讨论，意想不到的是竟然对enterprise这个词起了很大的争执，查了一下词霸：<BR>enterprise<BR>n.（名词）<BR>(1)An undertaking, especially one of some scope, complication, and risk.<BR>事业：一项事业，尤其指一项雄心勃勃、复杂、且具危险性的事业<BR>(2)A business organization.<BR>企业：商业机构<BR>(3)Industrious, systematic activity, especially when directed toward profit:<BR>干事业：勤奋，有系统的活动，尤为以获得利益为目的：<BR>Private enterprise is basic to capitalism.<BR>私营是资本主义的基础<BR>(4)Willingness to undertake new ventures; initiative:<BR>进取心：愿意冒新的危险；进取的：<BR>&#8220;Through want of enterprise and faith men are where they are, buying and selling, and spending their lives like serfs&#8221;(Henry David Thoreau)<BR>&#8220;由于缺乏进取心和信仰，人类始终驻足不前，或买或卖，过着农奴般的生活&#8221;(亨利&#183;戴维&#183;索罗)<BR><BR>那么在enterprise application这个context里，enterprise究竟什么时候才能做企业讲呢？对于这一点，我的看法是为企业核心业务提供支持的系统。<BR></P><img src ="http://www.cnblogs.com/raimundo/aggbug/29257.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42096/" target="_blank">[新闻]微软研究院发布 AutoCollage - 整理并融合照片</a>]]></description></item><item><title>something about ejb</title><link>http://www.cnblogs.com/raimundo/archive/2004/07/29/28207.html</link><dc:creator>raimundo</dc:creator><author>raimundo</author><pubDate>Thu, 29 Jul 2004 03:10:00 GMT</pubDate><guid>http://www.cnblogs.com/raimundo/archive/2004/07/29/28207.html</guid><wfw:comment>http://www.cnblogs.com/raimundo/comments/28207.html</wfw:comment><comments>http://www.cnblogs.com/raimundo/archive/2004/07/29/28207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/raimundo/comments/commentRss/28207.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/raimundo/services/trackbacks/28207.html</trackback:ping><description><![CDATA[<P>最近借ejb3 ea出台的机会review了一下ejb2.1 spec，顺手也总结一下我对ejb的认识：<BR><BR><STRONG>Enterprise JavaBeans is an architecture for component-based computing.</STRONG><BR><BR>ejb规范明确的指出了ejb是基于组件的结构，也就是说是component architecture的东西，那么它的基本出发点就是技术问题和业务问题的SoC，只有在这个认识的基础上我们才能来谈论ejb的轻重、ejb的复用。曾经有位在国内颇有些名声的dx跟我说：&#8220;COM和EJB都鼓吹模块化和复用，模块化是真的，复用是骗人的&#8221;，当时我就寒了，说ejb不易复用我是承认的，可如果说复用是骗人，我想估计是这位dx没有注意到ejb的component architecture吧，任何component architecture的东西都不可能脱离开容器谈复用，因为component和container之间有一种约定，哪部分归容器，哪部分归component都是事先说明的，比如transaction，如果容器支持，那么component就不会写transaction代码，而是在deploy的时候用annotation声明，反之则必须写。在ejb里，ejb container担负了很多的技术支持，比如调度、cache、transaction等，造成ejb不易复用的原因是他纯粹是业务组建想复用必须提供足够的技术context。component结构保证了的复用性是在等价的技术环境内复用component，因此ejb只可在ejb contianer间或者提供等价的技术环境内复用，ejb复用不是骗人，只是需要有个正确的认识。<BR><BR><STRONG>Enterprise beans are components of transaction-oriented enterprise applications.</STRONG><BR><BR>这句话是这次看的时候才注意到的，然后就如醍醐灌顶一下让我理解了ejb为什么是这个样子。对ejb的诟病里有一部分是因为对比jdo或者hibernate，entity bean不能提供完整的oo建模的能力，的确是这样，但是人家在规范里已经说了，所有ejb都是面对transaction-oritented enterprise application的，根本没有承诺要支持oo建模，为什么？因为在大型企业应用里底层数据库需要额外的调优，dba可能会针对一些多并发访问的表作调优（比如根据可能的数据需要拆表以减少并发），那么在真正的高性能企业系统里，出现完整oo模型的机会不大，甚至是没有，而ejb格外强调是面向企业应用的，因此只支持transaction-oriented enterprise application也是对的。至于轻量社区的指摘，只能是因为他们需要的系统没有这么复杂，没有这么企业，那么为enterprise量身定制的ejb显然不适用也就显得有些重。sun曾经说过对于大多数人而言用不到ejb，的确是这样的，国内尤其如此，可能90%的j2ee程序员都不会用到ejb，因为作的系统太小了，太不够enterprise了。<BR><BR>review ejb 2.1之后，对比ejb3，ejb3采用javaBean作为component model，持久化上支持了oo建模以及其他一些持久化的方法，ejb3从enterprise java bean变成了可具有enterprise能力的javabean，可能改叫enhanced java bean更合适。</P><img src ="http://www.cnblogs.com/raimundo/aggbug/28207.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42100/" target="_blank">[新闻]2008年9月5日科技博客精选</a>]]></description></item></channel></rss>