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