如果您今天启动了一个新的Java EE项目,该项目将在大约一年内完成,您会选择哪个应用程序服务器以及为什么?
您的部分答案应包括您的决定论据。您还可以选择使用Java EE服务器以及市场上其他可用服务器的经验。这些都很有趣,因为我们都对你的答案中的调查和思想有所了解。
答案 0 :(得分:181)
在过去的10多年里,我使用过WebLogic,WebSphere,JBoss,GlassFish,Resin,Jetty,Tomcat等。所以,如果我正在考虑一个新项目,我会首先问自己一些问题。我不再质疑的一件事是,我会拒绝使用JSP,除非我受到折磨,直到我为我的妈妈哭泣。
由于某人的授权,我是否必须与特定产品兼容/部署?有没有办法忽视它们或说服别人呢?如果是这样,那就是你的答案。
我必须使用EJB吗?真?尽可能避免使用它们 - 它们实际上只需要非常大的企业级系统。请记住,它们只是工具,而且很大(有人会说“金大锤”吗?)。他们严重过度使用,所以真的,真的质疑你是否需要它们。如果你确实需要它们,那么你会删除几个选项,包括我最喜欢的Jetty。
您是否必须使用任何其他主要的J2EE技术,如JMS,ESB等?如果是这样,你真的离不开它,那么你又被限制在一个完整的J2EE容器中。例如,在你提交BPM之前仔细思考和调查,并以(几乎)所有成本避免使用AquaLogic BPM - 它极其难看。
如果你真的必须使用一个完整的J2EE容器,首先考虑开源,因为它更强大,更好的支持,更具成本效益。他们拥有更大的客户群和更开放的支持互动,因此他们倾向于更快地获得更好的修复。但是,Resin还不成熟,相对于GlassFish或JBoss,我会避免它 - 我发现部署和支持有问题。我更喜欢JBoss,因为它具有更广泛的客户群,成熟度等.GlassFish更难融入自动构建/部署过程,但它可能更好用于某些特定功能(如果您需要它们)。
我有特殊原因需要Apache吗?然后倾向于Tomcat,或许加上一些东西。
我可以只使用servlet吗?然后我会使用Jetty - 它是最轻,最快,最简单,最灵活的解决方案。如果我倾向于不能使用Jetty,我会质疑我所有的假设。 YAGNI适用。
最好是在Jetty上使用StringTemplate / WebStringTemplate:一个干净,强大,快速,可维护的解决方案,没有许可费,可靠的声誉和支持等等。这就是我现在开始的地方。
大多数应用程序/系统选择许多花哨的J2EE功能,而他们真正需要的只是servlet和具有一些体面的架构/设计的JDBC。问你为什么认为自己需要更多。
在完整的容器中,我会避免使用WebLogic和WebSphere,除非你支持一个主要的公共网站(我现在的雇主的网站部署在WebLogic上,它每月点击量达到11万次,其他的则是可比的)。 WebLogic真正声名鹊起的是它们相对容易的集群,但是(几乎)所有成本都避免了它们的专有供应商锁定功能。 WebSphere只是一个噩梦,我会不惜一切代价避免 - 我在过去完成一对夫妇后拒绝做涉及WebSphere的项目。这两种产品都不值得获得大量的许可费用,除非你真正有特殊需求推动使用专有功能。作为许多财富500强公司的高级建筑师/工程师,我十年来一直没有看到这样的需求。另一方面,由于采摘这些专利产品,我看到了很多痛苦。
即使是真正庞大,高流量的公共网站,专有产品仍然值得怀疑。我宁愿每年在一些优秀的硬件上花费数百万美元的许可费,也可以从一些非常好的顾问那里花一些时间来解决简单的可扩展性解决方案。然后,每年额外的数百万美元可用于生产值得在这个漂亮的网站上销售的东西......
编辑:另一件要考虑的事情......
我最近遇到过Terracotta。我正在重新思考一切,并希望尽快将其部署在一个重要的系统中。特别是,Terracotta比其他任何东西都更好地集群,所以我不再推荐使用WebLogic进行集群。
答案 1 :(得分:10)
术语“应用程序服务器”不明确。使用GlassFish v3,您可以从传统的Web容器开始,然后进化(使用OSGi和简单的“添加容器”功能)来添加您喜欢的任何内容:JPA,JAX-RS,EJB,JTA,JMS,ESB等等......但它是相同的产品,相同的管理界面等。这是否适合作为应用程序服务器? -Alexis(太阳报)
答案 2 :(得分:9)
我经常问自己的第一个问题是“我能用Tomcat做这个吗?”。如果答案是否定的,因为我需要JMS或JTA,那么我求助于应用程序服务器。
我在大约3年前使用WebLogic 8对WebLogic的易用性和许可/成本模型感到满意。我们将它用于两个项目,一个是Web服务,另一个是门户。我们在其中任何一个项目中都没有遇到WebLogic或WebLogic Portal的任何问题。
在过去的两年里,我一直在使用WebSphere。每当我与IBM协商时,它总是最终成本是WebLogic等价物的两倍,但公司政策规定必须使用WebSphere。我发现WebSphere上的学习曲线比WebLogic要陡峭得多,我们的构建/部署/测试生命周期非常耗时,因此我们在开发环境中使用了Tomcat。但是我遇到的最大问题是当我们遇到一个错误,迫使我们升级到下一个补丁版本时才遇到解决web.xml的新问题。花了48小时的时间才完成所有工作。
目前我正在使用JBoss。大约3个月前,我正准备用Tomcat和Jetspeed 2开始我的新项目,但是我注意到Jetspeed 2现在看起来有点停滞不前,JBoss Portal 2.7.0刚刚发布了JSR 286 / Portlet 2.0支持。我给了JBoss一个旋转,发现它很容易设置和管理。构建/部署/测试周期非常快,除非我在某处更改了Spring XML文件,否则我很少需要重新启动服务器。
答案 3 :(得分:7)
我已经使用jBoss 3到3年了。
jBoss的论据:
反对jBoss的论点:
答案 4 :(得分:4)
Checkout GlassFish 3.1! 3.1版基于Java EE 6模块化的基于GlassFish v3的内核构建,提供集群,集中管理和高可用性。
有关详细信息,请参阅http://blogs.oracle.com/nazrul/entry/glassfish_3_1。
答案 5 :(得分:3)
此处未讨论的另一点是性能。如果由于服务类型或用户数量而引起关注,则以下内容适用:
请注意,G-WAN仅依赖于JVM:它不使用任何其他容器(除非明确指定),因此您可以将其保留到Web应用程序的性能关键部分。
由于G-WAN支持其他语言(C,C ++,C#,D,Objective-C),您甚至可以在原始C中处理应用程序的某些部分,同时保留Java用于其他任务。
答案 6 :(得分:2)
我可能会将您首选的操作系统作为决策标准。如果您为操作系统和应用服务器使用相同的供应商,它应该更容易支持。如果您已经与一个或两个供应商建立了关系,请考虑他们是否善于处理。
从技术角度来看,我会选择GlassFish,因为它支持更近期的创新。我认为JBoss不是坏事,它根本就不是最新的。
我的大多数经验都是在WebLogic上,但我使用过JBoss和GlassFish。我刚刚在一个完整的Sun开源堆栈(OpenSolaris,GlassFish,MySQL)上发布了一个新站点,这是一个很好的体验,只有轻微的挫折。
答案 7 :(得分:2)
我仍然认为WebLogic是市场上最好的Java EE应用服务器。如果您能负担这些许可证费用,我认为这是值得的。
我很惊讶地看到你可以通过结合Tomcat,OpenEJB和ActiveMQ走多远。在我看来,这是一种低成本的替代方案。
我也会研究Spring dm Server。它基于Tomcat,但我认为他们添加的OSGi片段可以在短时间内无处不在。如果它以与Spring框架相同的质量完成,它确实非常好。
答案 8 :(得分:1)
替代方案:根本不使用appserver。
结帐 http://www.atomikos.com/Publications/J2eeWithoutApplicationServer。
对于Web项目,如果必须,请保留一个轻量级Web容器,并结合Wicket之类的东西,以避免JSP / JSF或struts的复杂性。
HTH 盖