如果不考虑分布式计算,即不考虑一个业务由多台服务器协作完成的情况,我认为ejb集群和spring集群没有什么太大的差别,我也认为80%的项目不需要ejb.另外,我认为部分集群,不需要考虑内存复制,即当某台服务器宕机,仅仅把用户的请求重定向到另外一台服务器,业务将不会从断点处继续执行,对于用户体验而言,将是跳转到登录页面重新开始。另外,重量级及轻量级的界限是什么,如果基于spring的项目集群了10台服务器,算不算重量级?
请各位高手发表自己的看法.

解决方案 »

  1.   

    80%的项目不需要ejb,
    不止如此,真正需要使用ejb的很少,项目使用ejb的的公司更少
      

  2.   

    还有,对于web服务器和app服务器是否物理上分开,我也有一些看发:分开的话,一般采用ejb架构,有以下的优点:
    1:更加安全,因为app server一般部署在放火墙里面;
    2:对于一些关键业务,不会相互抢占资源;
    3:如果采用ejb的话,可以在不同的机器发布不同的模块,进行分布式计算;但我认为不分开的话,就象spring,我们一样可以做集群,而且开发生产率高多了,需要分布式计算的项目真的不多.
      

  3.   

    http://community.csdn.net/Expert/topic/4795/4795583.xml?temp=.3620722
    csdn里面很多次看到招聘帖,都要求ejb??
    80%  不用 ejb ? 到底咋会事情泥? 呵呵
      

  4.   

    我觉得我们做什么事情都不要盲目,要讲原因,<spring without ejb>讲的还是有道理.
      

  5.   

    在分布式计算上ejb与spring孰优孰劣不用再说了,那么请楼主能不能大概说一下,
    spring如何事项类似于 无状态 session bean 呢?服务层对象通常是无状态的。无状态的服务层具有很高的可扩展性,无需状态复制,不必
    为每个客户端分配额外资源,况且,创建中间层的一个主要动机就是要在多个客户端之间共享
    资源。况且,自从ejb2.0(现在已经3.0了)出来后,增加了local 接口,就算不用分布,ejb 也同样可以用,都说ejb复杂,spring 轻便,spring真的象你们想象的那么"轻"吗?我天天都在rebuild ejb,redeploy ejb,也没觉得复杂,什么事情做多了,都TMD是体力劳动。
      

  6.   

    我做过一些java项目的架构,ejb的,spring的都有,我们以前做的ejb项目还用了自动源代码生成工具,但ejb开发成本还是比spring高.EJB的优点:分布式计算,对象池,多线程,声明性事务,安全等;
    EJB的不足:侵入性太强,强耦合,不便于测试,但ejb3.0已有很大的改进,可惜当前对ejb3.0支持最好的JBoss EJB 3.0也还没有正式版;Spring的优点:IOC,AOP,声明性事务,测试方便而且,我基于appfuse做项目,确实开发生产率高,通过集群也能满足的我性能要求.
      

  7.   

    spring和ejb的开发效率,我相信大家心里有有底,我们现在讨论2个问题,其他问题暂时不谈,别跑题了:
    1:spring集群和ejb集群,ejb集群强在那些地方?
    2:web服务器和app服务器物理上分开的好处有哪些?我想大家搞清楚了这些问题,对大家以后的架构选型会有帮助的.
      

  8.   

    一般集群的目的是:负载均衡和高可用性(HA),需要分布式集群,在不同的机器发布不同的模块的集群是很少的.另外,对于内存复制,大部分集群是不需要的,即当某个节点宕机,仅仅把用户的请求重定向到另外一个节点,业务将不会从断点处继续执行,对于用户体验而言,将是跳转到登录页面重新开始。如果采用内存复制,要考虑http session,要考虑有状态的session ejb等,而且多台服务器需要进行内存同步,节点越多,内存同步的越厉害,任何一台服务器的内存改变,都要通知其他服务器.
      

  9.   

    ejb不便于测试,开始我也有同感,但现在好多了,weblogic 的debug 模式下,断点调试ejb
    也很平常。Spring的优点:声明性事务,这个不是spring的专利,ejb 的部署描述符也同样可以用来声明事务。另外你提到了ejb集群,我不了解spring 目前有哪些应用服务器可以作为spring的容器(大家见笑了),而当ejb的无状态bean与weblogic配合,可以用少量的bean实例为大量的客户端提供服务。
    例如,有10000个客户端,每个都要使用帐户无状态会话ejb,在任何给定的时刻,只有30个用户同时访问他们的帐户余额,由于所有的实例都是完全相同的,所以服务器可以使用一个相对较小的,只有30个实例的池为大型客户端(10000)提供服务,这个spring能做到吗? 怎么做?什么容器来支撑他。这也是无状态编程模型借助weblogic集群提供的一种明显的优势。又因为所有的无状态会话bean的实例都是等价的,所以weblogic还可以考虑多台服务器,使用负载均衡把无状态bean方法调用路由到集群的各台服务器上。请问spring 又如何实现?ejb 的优点说到细处何止这些呢。请楼主说说spring IOC,AOP在具体应用的的好处呢。
      

  10.   

    IOC 控制反转也不是spring 的专利,用Martin.Flower 的话来说,所有的框架都实现了IOC
    所以martin flower 宁肯把他叫依赖注入,而AOP  面向切面的编程 是一中设计思想,难道在ejb的设计模式当中我不能用到吗? 非要用spring吗?
      

  11.   

    楼上的兄弟:我们考虑一个架构,通常需要考虑以下几点:
            
             集群
    &#61548; 事务处理
    &#61548; 安全
    &#61548; 日志
    &#61548; cache
    &#61548; 国际化
    &#61548; 报表
    &#61548; 打印
    &#61548; 客户端校验
    &#61548; 重复提交
    &#61548; 异常处理
    &#61548; 分页等等上面所列的这些,ejb能做到的,spring也可以,很多人说spring的集群做的不够,我不是很明白.
    另外,对于你提出的问题,下面是我的回复:
           1:差不多所有的J2EE容器都支持spring,weblogic 9甚至集成了spring
           2:我在上面也写了,ejb和spring都支持声明性事务
           3:我也写了ejb的对象池,但这仅仅就是一个cache机制
           4:至于ioc和aop的概念我简单讲一下,ioc主要的好处是解耦,至于aop,它是面向方面编程的意思,它也不是spring的专利,spring是通过动态代理和cglib实现的.另外,我在我的上一个项目中,架构和楼上的兄弟所说的一样,也是用的weblogic,也用了stateless session bean,当然我也用了aop技术,我用的是aspectj
      

  12.   

    ejb一直说spring对集群的支持不够,我真不是特别明白,望各位高手说明.
      

  13.   

    我现在做的一个项目就用spring,一台服务器支持10万用户,当注册用户增加到20万时,我就又集群了一台服务器,现在一切运行正常.我干吗非要用ejb啊?
    我干吗非要把web服务器和app服务器从物理上分开啊? 分开还增加了远程调用的开销.
    请真正的高手给我个答案吧!
      

  14.   

    重量级及轻量级的界限是什么,如果基于spring的项目集群了10台服务器,算不算重量级?
      

  15.   

    另一给分点http://community.csdn.net/Expert/topic/4798/4798745.xml?temp=.7729914高手们继续指导!
      

  16.   

    弱弱的问下,不大明白, spring集群具体指的是什么,需要什么样的操作,有什么变化?完成什么样的特别的功能?
      

  17.   

    spring集群也一样可以利用jboss,weblogic的集群功能,也可以利用load balance服务器另外,基于spring的项目,一般web和app不会物理上分开.
      

  18.   

    好像做EJB集群高手的还没有真正出现并回复这个问题……
    我们学习+期待!
      

  19.   

    对于ejb集群,一般web和app物理上分开:
    1:更加安全,因为app server一般部署在放火墙里面;
    2:对于一些关键业务,不会相互抢占资源;
    3:如果采用ejb的话,可以在不同的机器发布不同的模块,进行分布式计算;但我认为不分开的话,就象spring,我们一样可以做集群,而且开发生产率高多了,需要分布式计算的项目真的不多.
      

  20.   

    明白了,明白spring 不支持集群的意思了,它是指业务层的集群,但每层都可以做集群,包括数据库层,所以我们可以在web层集群,就用lvs,或tomcat、jboss、weblogic、apache等都可以。呵呵各位高手继续发言,我会尽快揭贴!
      

  21.   

    EJB构架太复杂,太庞大.
    而80%的企业应用都不需要这么复杂的构架,SPRING则可以完成EJB的大部分问题,不需要EJB这么复杂的构架.而且SPRING是非侵入式的,EJB是侵入式的,这样更符合设计原则.
      

  22.   

    哈哈,我谈两句:
    1、已经不需要传统的"web层"了,而是“大量的存HTML/css/javascript/ajax”+后端的少量的jsp/servlet/spring+分布式数据层”;
    2、尽量采用服务端无状态的session,多利用cookie端sesson或memche中央缓存集群session;
    3、不选EJB,更关键是省钱(商业的EJB容器太贵了,掌握EJB的程序员太贵了);
    4、选择spring或其他,也是为了自由,不依附到仅有的几家大IT枭雄的手里;
    5、其他可利用的开源项目,可以更好的添加到支持spring的架构里。6、最最关键的是:满足需要的就是好的。