java - Tomcat,JBoss和Glassfish有什么区别?





enterprise (8)


jboss和glassfish包含一个servlet容器(比如tomcat),但是这两个应用服务器(jboss和glassfish)也提供了一个bean容器(以及其他一些东西,我想象的也是)

我正在开始研究Enterprise Java,我所关注的书中提到它将使用JBoss。 Netbeans与Glassfish一起发货。 我过去曾使用过Tomcat。

这三个程序有什么区别?




您应该使用GlassFish for Java EE企业应用程序 。 有些事情要考虑:

Web服务器意味着: 处理HTTP请求(通常来自浏览器)。

Servlet容器 (例如Tomcat )意味着: 它可以处理servlet和JSP。

应用程序服务器 (例如GlassFish )意味着:*它可以管理Java EE应用程序(通常是servlet / JSP和EJB)。

Tomcat - 由Apache社区运行 - 开源并且有两种风格Tomcat - Web profile - 轻量级,它只是servlet容器,并且不支持EJB,JMS等Java EE特性。Tomcat EE - 这是一个经过认证的Java EE容器,这支持所有的Java EE技术。

没有可用的商业支持(只有社区支持)

JBoss - 由RedHat运行这是对JavaEE的完整堆栈支持,它是经过认证的Java EE容器。 这包括内部的Tomcat作为Web容器。 这也有两种口味的社区版本称为应用服务器(AS) - 这将只有社区支持企业应用服务器(EAP) - 为此,您可以有基于订阅的许可证(它基于您在服务器上拥有的核心数量)。

Glassfish - 由Oracle运行这也是经过全面认证的Java EE容器。 这有它自己的Web容器(不是Tomcat)。 这来自Oracle本身,因此所有新规格都将首先通过Glassfish进行测试和实施。 所以,它总是会支持最新的规范。 我不知道它的支持模式。




Tomcat只是一个servlet容器,即它只实现servlet和JSP规范。 Glassfish和JBoss是完整的Java EE服务器(包括EJB,JMS等),Glassfish是最新的Java EE 6堆栈的参考实现,但是JBoss在2010年还没有完全支持它。




阅读这些答案时,使用Tomcat似乎有点令人沮丧。 然而,最没有提及的是,你可以使用tomcat获得相同或几乎相同的用例,但这需要你添加所需的库(通过Maven或任何包括你使用的系统)。

我一直在用JPA和EJB运行tomcat,配置工作量很小。




JBoss和Glassfish基本上是完整的Java EE应用服务器,而Tomcat只是一个Servlet容器。 JBoss,Glassfish以及WebSphere,WebLogic等与Tomcat以及Jetty相关的主要区别在于完整的应用服务器提供的功能。 当您有一个完整的Java EE应用服务器堆栈时,您可以受益于您选择的供应商的所有实现,并且您可以受益于EJB,JTA,CDI(JAVA EE 6+),JPA,JSF,JSP / Servlet当然等等。 另一方面,使用Tomcat只能使JSP / Servlet受益。 然而,就像Spring和Guice等高级框架一样,使用全栈应用程序服务器的许多主要优势都可以减轻,并且假设这个框架与Spring Ecosystem一起使用,你可以受益于许多sub这个项目在我的工作经验中让我留下了使用完整的堆栈应用程序服务器而转向轻量级应用程序服务器(如tomcat)的使用。




Tomcat只是一个HTTP服务器和Java servlet容器。 JBoss和GlassFish是成熟的Java EE应用程序服务器,包括EJB容器和该堆栈的所有其他功能。 另一方面,Tomcat具有较轻的内存占用(〜60-70 MB),而这些Java EE服务器的重量却达数百兆。 对于简单的Web应用程序或使用Spring等框架的应用程序,Tomcat非常流行,不需要完整的Java EE服务器。 由于移动部件较少,管理Tomcat服务器可以说更容易。

但是,对于需要完整的Java EE堆栈的应用程序(或者至少更多可以轻松地插入到Tomcat中的部分)...... JBoss和GlassFish是最受欢迎的两种开源产品(第三种是Apache Geronimo ,构建免费版本的IBM WebSphere)。 JBoss拥有更大更深的用户社区和更成熟的代码库。 但是,JBoss在实现当前Java EE规范方面落后于GlassFish。 另外,对于那些更喜欢基于GUI的管理系统的人来说...... GlassFish的管理控制台非常漂亮,而JBoss中的大多数管理都是通过命令行和文本编辑器完成的。 GlassFish直接来自Sun / Oracle,具有所有可提供的优势。 JBoss不受Sun / Oracle的控制,具有所有可以提供的优点。




JBoss和Tomcat都是Java servlet应用服务器,但JBoss更多。 两者之间的巨大差异在于JBoss提供了一个完整的Java企业版(Java EE)堆栈,包括Enterprise JavaBeans和许多其他技术,这些技术对于开发企业Java应用程序的开发人员非常有用。

Tomcat更受限制。 一种可以考虑的方式是JBoss是一个包含servlet容器和web服务器的Java EE堆栈,而Tomcat大部分是一个servlet容器和web服务器。




java.io.Serializable的文档可能与您将得到的解释一样好:

序列化运行时将每个可序列化类与版本号相关联,称为serialVersionUID ,在反序列化期间使用该版本号来验证序列化对象的发送方和接收方是否已加载与该序列化兼容的该对象的类。 如果接收者为对象加载了一个类,该类具有与相应发送者类不同的serialVersionUID ,则反序列化将导致InvalidClassException 。 可序列化类可以通过声明名为serialVersionUID的字段来显式声明其自己的serialVersionUID ,该字段必须是static,final和long类型:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

如果可序列化类未显式声明serialVersionUID ,则序列化运行时将基于类的各个方面计算该类的默认serialVersionUID值,如Java(TM)对象序列化规范中所述。 但是, 强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类详细信息高度敏感,这些详细信息可能因编译器实现而异,因此在反序列化期间可能会导致意外的InvalidClassExceptions 。 因此,为了保证跨不同java编译器实现的一致serialVersionUID值,可序列化类必须声明显式serialVersionUID值。 强烈建议显式serialVersionUID声明尽可能使用private修饰符,因为此类声明仅适用于立即声明的类serialVersionUID字段作为继承成员无用。







java tomcat jboss glassfish enterprise