我希望楼主能够跳出技术的范畴,看我的答案
1.spring 和 EJB 有什么可比之处?
Spring和EJB都是两种Java领域模型(框架),当然有很多不同,其实比不需要关注两者的不同,以及可比之处,如果客户要求你使用EJB,你就用EJB,要你用Spring,你就用Spring。不用不需要知道,因为知道了没好处。如果客户没有要求,建议你用Spring,更加敏捷,它的依赖注入可以让它跟其它任何框架无耦合的组合。
所谓轻量级,就是它对容器(如sevlet容器或Ejb容器)的依赖更小,并不表示它的性能和功能比重量级的差,很多服务器中没有包含Ejb容器。
2. spring 能支持分布式吗?
分布式很大一部分依赖的是容器。Java本身就有支持分布式的特性。与具体框架无关。所以如果你的程序设计成分布式的,那就是分布式的,不管你用srping,还是Ejb,或者两个都用
3.分布式具体怎么描述的?
所谓分布式,就是一个系统的多个服务在不同的域上。举个例子,你登录了sohu之后,可以访问chinaren而不需要重新登录,但sohu和chianren是两个不同的域,你把这一整个看成一个大系统,那么两个域中的子系统就是分布式的服务。有一种叫单点登录的技术能够让你跨域访问多个子应用,而不需要从新登录。
还有一种分布式是为了控制大量的并发访问,你访问sohu,其实有可能访问的并非总是同一个服务器,它可能是多个服务器提供完全相同内容的系统,在这些系统的前端,有个提供负载均衡的系统引导你去访问当前负荷较小的服务器。
3.EJB 到底有什么好处
这个问题很奇怪,每个框架都要它的特点。但你需要什么,当它能满足你,你就去用它嘛。你当然有权利决定使用其它的事务管理机制来替代EJB的,比如spring的申明式事务。你要做的就是把系统做出来,老板不会关心你的技术细节。
如果实在不知道是要用EJB或者Spring(如果两者的了解程度相当),就抓阄决定吧,o(∩_∩)o...。
4.JMS 和事务管理,什么时候才用得上? 我开发了那么多系统.从来没碰过!
JMS没用过有可能,因为大部分J2EE都是单服务的web应用。不需要通过JMS提供底层系统内部通信。但事务!!!,任何一个有CURD的系统都该有的呀,否则如何保证数据的安全呢?
比如你有两个操作,先添加一条记录,紧接着修改这条记录,当你第一个操作执行完了,第二个操作出异常了,这两个操作是一件事,把它套在一个事务里,第一个操作就算成功了,也会被回滚,因为它整体是失败的。没有事务,事情就只做了一半,就会多出一条错误数据。
我想我写的这些文字要比上面两位精彩一些吧
我个人认为spring是轻量级的EJB,有些小程序并不会用EJB那么就用spring了,分布式是EJB最大的特点,分布式是可以在不同的服务器,不同的容器下进行数据的交互。
Spring是一个为了简化企业级系统开发的开源框架,通过javaBean实现只有ejb才能实现的功能,他有与Ejb相同的优点。
EJB也是框架技术,他的优点在于他强大的分布式应用,这是因为EJB容器提供了企业Bean的事物管理和安全等系统级服务,也就是说底层代码EJB容器已经帮你完成,你只需要关心业务的实现。
我也是菜鸟,这里只是谈谈自己的想法。有什么不对之处请指正。谢谢。
楼上说的比较正确我再补充几点
spring的开发者rod.johnson写了一本书很有名叫EXPERT.ONE.ON.ONE.J2EE.DEVELOPMENT.WITHOUT.EJB,然后他就结合自己的项目经验开发出Spirng框架,spring首先解决了EJB的事务管理JTA,你不需要高额价钱的应用服务器Weblogic和Websphere,你就可以享受声明型的事务管理。(对你某个service的事务的提交回滚做统一的声明)
EJB现在已经没落了,因为EJB是高侵入式的框架,它吧所有的项目都是用分布式的方式去架构,但是一般项目是很少需要分布式的(你的项目经常需要写一个方法然后让其他机器的程序去远程调用吗,一般代码都是集成在一起的,没有必要分开对吧)因为分布式,所以一般的应用服务器tomcat,resin等是跑不起ejb的。
而且写Ejb要你的javabean去调用home接口和 remote接口,这两个的实现都是高侵入的,你的代码会被ejb糟蹋的一塌胡涂。
spring还有很多收费应用服务器提供的服务,log管理,jndi,jms等等,spring而且不是那种重量级的框架,你如果不需要spring你可以比ejb方便的多的吧spirng从你的项目中抽离,这样就方便移植。
但是在处理分布式的时候EJB 确实是比spirng好很多,所以有分布式的项目的时候项目开发是可以优先选择EJB的。
个人理解,楼主可以把我们的回答结合起来一起看
楼上几位都不错(除了那个说action from的五级魔法师),
以我只见,ejb2就是分布式应用的一个框架,功能比较强大。
但是现在spring几乎可以取代ejb2了, 并且开发起来相当方便,至于楼主提到的事务管理等机制,spring也有的。spring的很多机制(比如IOC和AOP)会让你的项目维护起来相当容易。
这就是为什么现在没什么人用ejb2了,
但是听说ejb3的很多东西都变了, 完全是另外一个概念,这个我就不太清楚了。
感觉spring更适合我。
简单的说Spring就是接口....
EJB就是Action or Form 之间的~