1.2 为何要在JVM上开发
当前,可供使用的编程语言和平台众多,为何要在JVM上开发和部署项目呢?因为JVM最初是为Java语言开发的,而近年来,其他语言的拥趸无数次地宣称,Java语言已过时乃至死亡。
近年来,流行的编程语言如走马灯似的更换,而Java犹如常青树,始终处于全球使用最多的编程语言排行榜的前列。
JVM平台为何如此强大呢?下面来看看其中一些最重要的原因:
- 它适应市场的变化,从而确保与时俱进;
- 内置的Java类库非常强大;
- 它有无可比拟的生态系统。
1.2.1 JVM适应市场的变化
Java于20世纪90年代中期面世,那时的计算机装备的都是单核CPU,内存量也没有几个GB,因为内存条贵得不得了。Java是与时俱进的语言之一:多核CPU面世后不久,Java就通过在多个线程中运行代码来支持多核。但它并没有就此止步,而是在每次推出新版本时,都添加了让并发编程更容易的新类。这种做法到现在依然没有停止。
函数式编程范式大行其道后,Java在核心语言中新增了对lambda和流的支持。虽然Java提供这种支持的时间很晚,但相比于其他流行的语言,其实现更佳。这是因为程序员几乎什么都不用做就能实现多线程。
适应市场变化还意味着有时需要做减法。Java面世时,热点是直接在浏览器中运行Java代码。这些微型程序被称为applet,要求浏览器和系统安装专用的浏览器插件。而现在,市场已将JavaScript作为创建交互式网站的标准语言。有鉴于此,Oracle最近摒弃了applet标准。
1.2.2 Java类库
在每个Java版本(这将在本章后面更详细地介绍)中,都指定了相应的JVM实现必须提供哪些类。Java SE 8的类库包含大量的类,每个遵循Java SE 8平台标准的JVM实现都必须实现这些类,而不管这种实现是由谁开发的。
这个类库中的类提供了诸如读写控制台窗口、执行文件I/O以及与TCP服务器进行通信等功能,还有很多用于启动和管理操作系统线程的类。更重要的是,还包含定义列表和映射(在有些语言中称为字典)等众多数据结构的类。下一章将详细介绍Java类库中的类。
Java类库是语言设计人员将JVM作为目标开发平台的重要原因之一。有了这个类库定义的数据结构后,他们能够更专注于语言设计,而不用太专注于从头开始打造完整的运行时库。要知道,打造能够与Java类库媲美的、经过全面测试的、多平台运行时系统类库可是一项艰巨的任务。
1.2.3 生态系统
显然,内置的类库不可能涵盖程序员的所有用例。对于内置类库缺失的东西,可求助于其他公司、组织和个人开发的库和工具,以节省开发时间。鉴于很多年来Java都非常成功,其生态系统是无可比拟的,因此很难找到一个这样的平台,即其中可供选择的工具、库、工具包和框架比JVM提供的还要好。
鉴于可供使用的插件库众多,开发人员的开发方向几乎不会受到Java的限制。为说明Java生态系统有多丰富,我们来看看创建Web应用程序时,Java开发人员通常具有的选择空间:
- 创建在JVM应用程序服务器中运行的Web应用程序;
- 为快速获得结果,可使用通用的高级Web框架;
- 为获得更大的控制权,可使用微服务框架来创建应用程序。
场景1:使用JVM应用程序服务器
开发人员可以像企业那样安装基于JVM的应用程序服务器(这可以是开源的,也可以是付费的专用服务器),并使用它来运行应用程序和Web应用程序。这种服务器将负责处理配置问题以及管理数据库连接。
有简单的应用程序服务器,它们只包含运行基本Web应用程序所需的内置API。但也有经过Oracle认证的功能齐备的应用程序服务器,它们提供了大量内置的标准化API,其中包括访问数据库的API、生成或使用XML和JSON文档的API、按SOAP或REST标准与其他Web服务通信的API、确保Web安全的API、向遗留计算机系统发送消息或从这些系统接收消息的API等。
下面是两个最重要的企业开发框架:
- Oracle Java企业版(Java EE)平台,这将在本书后面介绍;
- Spring框架生态系统(其中包括Spring Boot)。
很多应用程序都结合使用了这两种技术。
下面是一些流行的应用程序服务器:
- Apache Tomcat(用于运行简单的Web应用程序);
- Apache TomEE;
- Red Hat WildFly;
- Oracle GlassFish;
- Red Hat JBoss Enterprise Application Platform;
- Oracle WebLogic。
其中前四个是开源的,而后两个是专用的。
场景2:使用高级的通用Web应用程序框架
第二种选择是使用完整的Web应用程序框架。相比于企业框架,这些框架提供的API通常更高级,它们还提供了内置的模型-视图-控制器(model-view-controller,MVC)解决方案,可极大地提高开发人员的效率。
使用这些框架时,开发人员的选择通常受到限制,因为它们只支持为数不多的几个库和工具包。然而,它们支持添加插件来提供其他选择。换而言之,使用这些框架是以放弃一些选择空间来换取更短的开发周期。有些框架要求应用程序运行在JVM应用程序服务器中,而有些提供了自己的HTTP服务器。
在这种框架中,Apache Struts一度非常流行,但现在最流行的可能是Play。
场景3:使用微服务框架
另一种选择是使用现代微服务框架来创建应用程序。这些框架提供了内置的HTTP服务器,可用于运行应用程序,但没有提供其他任何现成的工具和库。在这种情况下,更容易根据需要混合使用不同的库和工具包。
为了采用现代微服务架构,通常将应用程序分成多个独立的Web服务,但这些框架并不要求你必须这样做。
最常用的微服务框架包括Vert.x和Spark Java,其中后者并非是用于Apache Spark大数据平台的。
