为什么 Jboss 比 Tomcat 更好?

43

我目前正在开发一个新的应用程序。应用程序架构师坚持要使用 JBoss5,因为它更好。如果有的话,有人能给出更广泛的“更好”(是这种情况吗)的定义吗?

我有使用 Tomcat5和6处理大规模应用和大用户负载的经验,而且我认为它表现得很好。两者都将在相同的硬件条件下运行于 RedHat6上(如果实施方案有关的话)。

提前致谢


5
是的,我现在正在使用JBoss,当他们说更好时,他们并不是在谈论文档质量... 唉。 - Rob Goodwin
1
@Michael,我希望这永远不会发生。想象一下,如果我们都必须使用WebShi^H^H^HSphere...... - Pascal Thivent
2
@Michael,我也不是想挑起战争(而且我真的不是有意冒犯你,我没有注意到你是IBM员工),但我很高兴能够有选择,即使这会让事情变得更加复杂(而微软提供的运行时环境质量并不能说服我一个封闭的通用环境是我们能得到的最好的东西)。 - Pascal Thivent
10
你有没有试着问那个说“更好”的人他/她的意思是什么?我不理解为什么人们害怕向别人提问并学习,而要来SO上提问。也许这个人有深思熟虑的回答,也许他们很蠢,我们无法判断。 - matt b
3
@Chepech,这甚至不算是一个答案!这是一个循环的回答,就像如果“我问你为什么天空是蓝色的?”而你告诉我“因为它是蓝色的”。这可能只是我的看法,但是那些无法清晰表达他们陈述的原因的人往往不值得太多关注(或责任)。 - matt b
显示剩余4条评论
7个回答

68

说任何工具或框架都只是“更好”是荒谬的。这总是取决于情况、架构等。你不一定想用锤子来拧螺丝。

我写了《JBoss in Action》,所以我显然喜欢JBoss技术,但我会第一个承认在许多情况下使用JBoss可能过于复杂。例如,对于我开发的最后两个站点,更有意义的是使用Grails构建并在独立的Tomcat实例上部署。

说使用JBoss时只得到EJB和JMS有点不公平。JBoss提供许多服务和功能,包括:

  • Servlet/JSP容器
  • JNDI
  • EJB
  • JTA
  • 集群
  • 缓存
  • JMS
  • 数据源/资源管理
  • JMX集成
  • OSGi支持
  • Web服务
  • 门户
  • Web Beans(Seam)
  • 一些管理控制台
  • IoC容器
  • 等等。

吸引许多架构师使用JBoss的东西是其灵活性。它使用插件架构,允许您添加和删除服务。正如其他人所说,在使用Tomcat作为其Servlet容器时,您可以将JBoss缩小到实际上只是一个Tomcat服务器。这样做有什么好处?如果您认为您将利用JBoss的其他功能,那么就可以未雨绸缪。

在JBoss中,这些服务是预先集成的,并努力提供一致的部署模型,以最大程度地减少编写应用程序逻辑或配置来集成它们所需的工作量。也就是说,像Spring这样的其他框架也很好地支持了许多流行的库和框架的统一集成方式。但由于它们专注于集成第三方库,所以服务之间的互操作性取决于您。因为JBoss正在构建服务和集成平台,所以他们花时间开发(并提供支持)以实现互操作性。

做出选择时需要问一些问题:

  • 你是否打算使用标准的JavaEE架构组件,例如EJB?
    • 顺便说一句,EJB可以在独立的Tomcat上使用JBoss嵌入式容器运行,因此如果只使用EJB,则仍然无需使用JBoss。
  • 你是否打算利用Web Services、Portals和JMS?
  • 你是否考虑使用Web Beans或Seam进行构建?
  • 你的IT、支持和开发人员目前使用哪些部署平台(Tomcat、JBoss等)?如果你要使用新平台,你将需要额外的成本来学习它。
  • 如果你正在销售一个需要客户部署的产品,那么它对客户的IT组织会有什么影响?
  • 你是否需要付费支持?
    • 你可以通过许多公司(包括Red Hat)找到Tomcat的支持。
    • 你需要比较成本,因为我认为JBoss的支持不便宜,尽管我最近没有查过价格。
  • 你是否需要进行任何复杂的集群操作?
    • JBoss具有一些出色的集群功能,并且你可能会从Red Hat那里获得良好的集群支持。不过,为了全面公开,我从未使用其他框架进行过任何复杂的集群操作,以便比较。
  • 你是否需要高级事务管理(分布式事务、2阶段提交等)?

不是为了卖弄,但是JBoss in Action的第一章在Manning网站上免费提供。尽管我们在该章节中没有对JBoss和其他应用服务器和部署环境进行直接比较,但我们确实谈到了一些架构差异,这与你的问题相关。


很好的回答(我点了+1)。关于集群,您能否简要描述一下使用JBoss与Tomcat(带有mod_jk、mod_proxy或甚至mod_cluster)针对Servlet/JSP应用程序的一些明显优势?也许像JNDI树或数据源的集群等方面?还有其他明显的吗? - Pascal Thivent
2
这似乎应该是一个单独的问题,但是mod_jk和mod_proxy主要用于负载均衡,在这种情况下,Tomcat实例不一定需要彼此了解。我没有使用过mod_cluster,所以我需要进行研究。JBoss提供复制缓存、JNDI集群、会话Bean集群、HTTP会话复制、JPA/Hibernate第二级缓存复制、服务单例(服务仅在一个服务器上运行,但可以故障转移)等功能。 - Javid Jamae
这些mod_xxx只用于负载均衡,这是不同的。实际上,由于Tomcat也支持持久化HTTP会话,我想知道哪些是Web应用程序的复杂集群功能的好示例(JNDI是其中之一)。但这确实应该是一个独立的问题。无论如何,感谢您的答案,它已经给了我一些很好的提示。 - Pascal Thivent
我也点赞。贾维德,我的意思不是只提到EJB和JMS而忽视了JBOSS。你(非常好的)列表清晰地表明了它还有更多的功能。我只是想简洁明了。 - duffymo
2
说任何工具或框架只是“更好”这种说法是荒谬的。我完全同意这个观点。话虽如此,当被迫在工具之间做出选择时,总是选择锤子。没有用足够大的锤子解决不了的问题。 - Night Owl
但是在Java中有时候会遇到ProblemFactory的问题。如果Hibernate是一把大锤而JDBC较小,那么如果我被迫选择,我会选择更小的锤子,因为这样做可以更高地让你的应用程序工作。如果确实需要,你总是可以随时转向Hibernate。 - Thirdy

37
我目前正在开始开发一个新的应用程序。应用程序架构师坚持使用JBoss5,因为它更好。如果是这样,有没有人对“更好”的定义有更广泛的了解?
很有趣,因为JBoss使用Tomcat作为其servlet/JSP引擎。
听起来,“更好”意味着“支持EJB和JMS”,因为Tomcat默认情况下都不支持。
但是,如果您的应用程序不使用EJB或JMS,那么这并不是问题。
如果确实需要它们,则可以使用OpenEJB和RabbitMQ或ActiveMQ将它们添加到Tomcat中。
我建议您询问您的应用程序架构师上一次编写非PowerPoint幻灯片或UML文档的时间是什么时候。他们的回答可能会让您惊讶。

7
+1 是指“当他们最后一次写除幻灯片以外的东西时”,是如此之真实,几乎就像你在我的机构工作一样 :) - JoseK
很遗憾,这对太多组织来说都是真实的。 - duffymo
@duffymo:老兄,我认为你在PPT评论中说得很好,你真的让我开心 =)。顺便说一下,我们不会添加EJB或JMS。 - Chepech
2
那为什么不采纳这个答案呢?这对我们双方都有好处。 - duffymo
@duffymo:抱歉,伙计,我喜欢写长篇详细的答案,此外,Javid Jamae 还写了一本书……你可比不上他的 =) - Chepech
5
有时简明扼要更好。这取决于书的内容。 - duffymo

15

JBoss是一个应用服务器,而Tomcat是一个Servlet容器

因此,从包含它以及其他组件的意义上讲,JBoss可能比Tomcat更好。这就是全部。

如果你不打算使用那些其他组件,那么你就浪费了资源。如果你需要那些其他组件,那么Tomcat就不够了。

这取决于情况,也许你的架构师有其他想法。

如果你直接问他,我想知道他会说什么?


6

不是更好,只是更多。JBoss包含了Tomcat。


5
正如@duffymo所指出的,JBoss使用Tomcat作为其Web容器,因此如果我们比较等效的东西(即Tomcat和JBoss的Web容器部分),那么“更好”就没有多大意义。如果您不打算使用JTA、EJB、JMS、JMX等技术,那么在开发过程中使用JBoss并没有真正的优势(Tomcat更轻便,启动更快,这通常受到开发团队的赞赏)。
但是在某些情况下,您可能更喜欢在生产环境中使用JBoss(我仍然假设您不使用EJB等技术):
- 生产团队接受过JBoss培训或习惯于在生产中使用JBoss,工具(部署、监控等)也是为JBoss量身定制的。 - 公司为JBoss签订了支持合同(尽管您也可以为Tomcat获得支持)。
但我不确定这是否是应用程序架构师的意思。我建议与架构师讨论这个选择,也许他有一个合理的解释。如果确实需要在生产中使用JBoss,您始终可以在开发过程中使用Tomcat或Jetty。

2

如果您使用的是JBoss,您可以向Jboss.org支付费用来获取支持。但是对于Tomcat并非如此。

尽管如此,红帽公司(收购了Jboss.org)将要求您更改为他们支持的版本之一的JBoss。


6
您可以向SpringSource获取tc Server的支持。 - Pascal Thivent

1

JBoss符合J2EE规范,非常好地支持了J2EE规范,如EJB、JTA、JMS、JNDI等。Tomcat只是一个Servlet容器,虽然它也支持一些J2EE规范。当您想要使用J2EE组件时,应首先考虑JBoss。

还有一点需要注意,JBoss在4.*版本中特别好地支持JMX。我曾经参与过一个项目,它没有Web UI,仅将JBoss用作平台和EJB容器,通过MBean集成了所有独立应用程序。


1
Servlets和JSP都是Java EE规范的一部分。Tomcat可能只是一个Servlet容器,但它仍然是Java EE规范的有效子集。它是所有Servlet/JSP引擎的参考实现。而J2EE是1998年的术语,很久以前就去掉了“2”。 - duffymo
1
是的,你说得对,但我还习惯称它为J2ee,因为我是个老人 :-) - Simon
@duffymo 自从Java EE 5以来,Tomcat不再是RI,GlassFish是JSP/Servlet的RI。 - Pascal Thivent
@Pascal - 哎呀!感谢您的纠正。 - duffymo
2
你在我眼中还是个年轻小伙,朋友。我的T恤比你还要老。 - duffymo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接