原创

常用的三大Java EE开源服务器Apache Geronimo3、Tomcat8和JBoss7比较分析

在开源Java EE应用服务器领域,像Apache Geronimo、Tomcat以及Jboss,它们不仅仅是商业领域的领跑者,同样是技术领域的先行者。当然,所有JavaEE应用服务器的实现不尽相同,但其中有很多方面具有一定程度的可比性。素文宅博客(blog.yoodb.com)本文针对常用的三大JavaEE服务器Apache Geronimo,Tomcat和Jboss各方面进行比较分析。


当企业级的Java应用程序需要真正的应用部署时,Java EE应用服务器是必不可少的工具。研究表明,除了商业的应用服务器之外,开源的Java EE应用服务器开始成为很多Java企业级应用的最佳选择。而Apache Geronimo、Tomcat及JBoss是其中最主流的开源Java EE应用服务器。


Apache Geronimo全球应用最广泛的http服务器,免费,出自apache基金组织,Tomcat应用也算非常广泛的web服务器,支持部分j2ee,免费,出自apache基金组织。JBoss开源的应用服务器,比较受人喜爱,免费(文档要收费),JBoss支持j2ee,含有Jsp和Servlet容器可以做web容器,包含EJB容器,是完整的J2EE应用服务器。而tomcat只能做jsp和servlet的container。


目前常用的三大Java EE开源服务器下载地址:

Apache Geronimo3  http://geronimo.apache.org/
Tomcat8  http://tomcat.apache.org/download-80.cgi
JBoss7  https://developers.redhat.com/downloads/?referrer=jbd


一、Apache Geronimo v3.0.1

Apache Geronimo是Apache软件基金会的开放源码J2EE服务器,它集成了众多先进技术和设计理念。 这些技术和理念大多源自独立的项目,配置和部署模型也各不相同。Geronimo能将这些项目和方法的配置及部署完全整合到一个统一、易用的模型中。


image.png


服务器支持的相关依赖组件升级版本如下:

Tomcat升级到7.0.39版本

Tranql升级到1.8以支持JDBC 4版本

MyFaces升级到2.1.10以支持JSF 2.1版本

OpenJPA升级到2.2.2版本

Yoko升级到1.4版本

ActiveMQ升级到5.4.3版本


作为符合J2EE标准的服务器,Geronimo提供了丰富的功能集和无责任Apache许可,具备“立即部署”式J2EE 1.4容器的各种优点,其中包括:

符合J2EE1.4标准的服务器

预集成的开放源码项目

统一的集成模型

可伸缩性、可管理性和配置管理功能


二、Apache Tomcat 8.5.16

tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。


image.png


Tomcat8.0特性

1.支持servlet3.1, jsp 2.3, el表达式3.0 and Java WebSocket 1.0.

2.默认http与ajp请求实现non-blocking技术,即NIO技术。

3.多个应用发布的时候可以先打成jar包,然后打成一个总的war发布。(这句翻译不太准,意思大概是这样子的)

4.默认支持应用工程字符集为UFT-8

5.提升了日志性能,采用了异步技术

6.新增AJP 连接采用了Servlet3.1的non-blocking IO。


Servlet 3.1最大的改进是实现了非阻塞式的I/O通信。这使得性能得到巨大的改进,数据可以通过ReadListener和WriteListener接口以异步的方式进行管理。

Servlet 3.1的第二大改进是HTTP协议的升级。它允许客户端指定双方通信所使用的协议。比如说,服务器和客户端原本使用HTTP通信协议,能够升级成WebSockets通信。


EL 3.0较之前的版本有很大的改进和增强。主要有:

1)EL可以以"独立模式"的方式运行,即运行于Servlets和JSP页面之外。

简而言之,此增强可以使用ELProcessor类在Servlet容器内或容器外进行直接调用。

2)EL表达式还支持Lambda表达式,这一点与Java 8相似,这些表达式可以简化代码。

表达式包括:参数集、Lambda操作符、函数体。

3)集合操作符允许构造Set、List和Map等集合类型。

4)Java EL流式API包含了forEach、reduce、filter、map等过滤器。

这里可以获得集合或列表List,调用字符串夫妇,或者在列表List运行外部的过滤器或聚合函数。比如,你可以对字符串求和。

5)通过EL上下文的导入,开发者能够直接访问任何类的静态字段和方法。


Tomcat 8正式支持WebSocket 1.0这个标准的API。尽管Tomcat 7也提供了支持,但是它只是部分支持,因为在Tomcat 7的时代,标准还未正式制定。目前,大多数网站还以半双工模式运行HTTP通信,这意味着通信在两端都可能发生,但是在同一时间点,只能有1个方向的通信。这有点像对讲机。

WebSockets协议是一个全双工协议,它意味着在同一时间点,通信是双向传输数据的。WebSockets也是HTML5的规范之一。


Tomcat 8最大的变化是资源Resource。Tomcat 8的资源进行了重构,可以更好地支持外部资源。原先的别名Aliases、VirtualLoader、VirtualDirContext、JAR资源和外部仓库等,现在都以单个的、一致的方法进行配置。这个新的资源的实现也可以用于主WAR包,并作为其它多个Web应用程序的基础。


三、Jboss 7.1.0

JBoss AS7可实现为云做好准备的架构,并可使启动时间缩短十倍,提供更快的部署速度并降低内在的占用。JBoss Enterprise Application Platform 6的核心是JBoss Application Server 7的最新版本,该版本代表着Java应用服务器在从复杂和单一的形式转向更加轻便、模块化和敏捷的变革过程中的一个意义重大的里程碑。 该版本将使开发人员有重新思考如何开发和部署企业Java应用。


image.png


JBoss Application Server 7构建于先前版本的良好基础之上,并提供更出色的性能、更低的内存占用率、分布式管理和Java EE6 Web Profile认证。它的新能力包括:

1.Java Enterprise Edition(EE)6 Web Profile认证,一种轻型的标准可移植Java EE,专为开发和部署丰富的交换式Web应用而进行了优化。

2.Java上下文和依存关系插入(Java Context and Dependency Injection – CDI),这种标准化的统一框架支持类型安全的依存关系插入和定义完善的上下文生命周期,通过简化和优化代码的方式实现了代码的轻松编写、测试和维护。

3.Arquillian测试,改善了对测试驱动式开发的支持,提供了远程和嵌入式组件测试,且不会生产完整企业Java容器所带来的不必要复杂性。

4.构建于轻型的高度优化的模块化服务容器和新型域模型基础上,使JBoss Application Server 7能够从最小的设备扩展至更大的关键任务集群。

5.通过基于Eclipse的JBoss工具来提供开发人员工具支持,改善了对Java CDI、休眠、代表性状态传输和Web服务的支持。

6.全新的复杂域模型和丰富的管理API,可实现强大的服务器和集群自动化。


Jboss7新特性

1.构建在Modular Service Container上,充分地利用了多核处理器的能力,并发、按需启动服务,启动速度更快、占用内存更小。

2.全面兼容Java EE6

3.支持JDK6/7

4.统一的配置和管理

5.兼容OSGI 4.2,支持OSGI和Java EE组件模型集成。

6.容易测试:利用Arquillian测试平台—一种集成测试组件模型,更易于测试,改变-编译-测试的周期更短。

7.两种模式

    1)Standalone模式(使用standalone.bat启动)相当于以前的3、4、5、6版本。配置文件、发布内容等放在standalone目录下。

    2)Domain模式(使用domain.bat启动)是Jboss7的一个新特征,可以在一个控制点管理多个服务器。域的提出及实现,其目的是使得多台JBoss AS服务器的配置可以集中于一点,统一配置、统一部署,从而在管理多台JBossAS服务器时,实现集中管理。

8.类加载

类加载基于Jboss Module,取代了层次类加载环境,避免了当类存在多个版本时,导致类加载错误。由于类加载是基于模块的,必须显示的定义模块依赖。部署也是模块化的,如果没有显示的定义类依赖则不能访问应用服务器jar中的类。


JBoss AS7中的新概念-域

JBoss AS7新加入了域(domain)的概念并实现了相关功能。域的提出及实现,其目的是使得多台JBoss AS服务器的配置可以集中于一点,统一配置、统一部署,从而在管理多台JBoss AS服务器时,实现集中管理。

域(Domain)的概念及其与群集(Cluster)的区别。对于使用过JBoss AS过往版本的用户,可能对AS所提供的群集功能已经很熟悉了,在理解域的时候可能会遇到困难。那么域和群集有什么区别,用处上有什么不同呢?总的来讲,JBoss的群集的目的是提供:

1.负载平衡(Load Balance)

2.高可用(High Availablity)


而域的目的则是将多台服务器组成一个服务器组(Server Group),并为一个服务器组内的多台主机(Host)提供:

1.单点集中配置(通过一个域控制器,即Domain Controller,实现组内主机的统一配置)

2.单点统一部署,通过域控制器将项目一次部署至组内全部主机。

简单来讲,群集的目标是让多台服务器分摊压力,当一台或多台服务器当机时,服务可以继续保持运转;而域的目标则是提供集中配置和管理多台服务器的能力。

在没有域的概念时,要想让群集内的多台服务器或几组服务器保持统一的配置,一个一个分别的去手工维护,是非常麻烦的事情,而域的引入解决了这一问题。

我们可以理解域和群集的相互关系是"正交(orthogonal)"的:通过一横一竖这两条轴,JBoss AS为我们在运维方面提供了强大的可扩展能力。

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

  1. #1

    你笑的好勉强 (2017/08/21 10:15:46)回复
    吃瓜群众路过 看了博主的文章我找到了女朋友

  2. #2

    辣舞 (2017/07/17 10:33:51)回复
    学习了,不错,加了个油!

    北京大神 (2017/07/20 09:36:07)回复
    恩,不错不错,我也好继续努力学习了。

  3. #3

    记忆 (2017/07/11 09:46:34)回复
    不错 666路过 支持一下,感谢站长分享。

  4. #4

    嘟嘟 (2017/07/11 09:45:53)回复
    看不太懂,评论一个支持一下》》》我只是来捧场的,路人而已。

    Jerry (2017/09/19 17:34:00)回复
    下班了,帮大神刷一波评论

  5. #5

    余生请多指教 (2017/07/11 09:42:26)回复
    那个大神自己可以写 tomcat 说说思路是怎么样子的

分享:

支付宝

微信