Java EE的未来
http://www.infoq.com/cn/articles/enterprise-Java-opinion
作为InfoQ下一年编辑关注点审核工作的一部分,我们挑选了Java作为深入探讨的主题。我们借用了Geoffrey Moore在他的经典书籍《跨越鸿沟》里的所描述的模型,这个模型贴切地概括了技术的生命周期,它包含五个阶段:创新者(Innovators)、早期采用者(Early Adopters)、早期大众(Early Majority)、后期大众(Late Majority)和落后者(Laggards)。Moore的模型在早期采用者和早期大众两个阶段之间引入了一个大缺口,早期采用者是真正愿意冒着风险使用新技术的人,而早期大众在确认新技术能够提升生产效率之前是不会采取行动的。
从下图可以看出Java技术的整体趋势:

我们可以看到,JavaSE仍然保持着它的健康度,它仍然是一个被广泛使用的企业计算编程语言。java9有望在今年夏天发布,届时将带来Jigsaw和JShell REPL。而Java 10的开发工作已经在进行当中。我们相信Java仍然是构建大规模企业应用的一个很好的选择,最起码现在人们不希望Java走出生产环境。
说到基于JVM的编程语言,不得不提到Scala和Clojure。不过从scala的受欢迎程度来看,它的采用率或许已经达到了最顶峰。而在Java 8推出Lambda功能时,Scala的受欢迎程度有轻微的下降。我们认为Scala还未能跨越Moore模型里的“鸿沟”,所以它仍然处在早期采用者阶段。我们不认为它会达到大众阶段。
Clojure一如既往的好,作为Python的有力竞争者,面向数据的特性让它处在一个很有利的位置上,不过它不像是一门会被广泛采用的语言。
作为Java之外的选择,Groovy仍然是很受欢迎的脚本语言,同时,JetBrain的Kotlin似乎在Android开发方面为自己找到了一个稳固的位置,不过这两门语言都无法动摇Java的统治地位。
可以说,Java SE形势一片大好,但对于Java EE来说却不是如此。我们在考虑要不要把java ee放入“落后者”这一类,不过最近的一些迹象表明,它应该可以被放在后期大众里,这要归功于Java EE底层的那些技术。jClarity的联合创始人Ben Evans,同时也是InfoQ的编辑,他说:
我不得不说,Java EE是一个正在消褪的品牌,不过它的底层核心技术让情况看上去没有那么糟糕。
另一位编辑Chris Swan,同时也是CSC的CTO,他说:
Java EE有一些重要的规范,它们很有用。EJB作为Java EE的心脏,它把Java应用服务器推向了企业。spring去掉了EJB的复杂性,“EE”变成了“在Java应用服务器上运行Spring”的代名词。传统的应用服务器市场(由几个大厂商所统治)正在被PaaS所代替(因为你不需要整套臃肿的应用服务器就能运行Spring应用),而企业对服务器厂商的“绑架”行为深感厌恶,同时PaaS提供商提供了更具竞争力的运营能力,从而加剧了这种情况的发生。
InfoQ之前报道过Gartner对技术走势的研究,Gartner在这方面比我们做得更为深入,而最近Gartner再次发表其观点,认为“Java EE和其它三层架构的框架,比如ASP.NET”正在走向衰退:
数字信息业务要求应用平台提供新的特性和能力,而Java EE没能赶上这趟班车。
负责应用基础设施现代化的领导者们应该想办法应对Java EE的衰退问题。
到2019年,只有不到35%的新应用会被部署在Java EE应用服务器上。
不到35%,也就是差不多三分之一,不过我们认为尽管Java EE应用服务器还会存在,但只会被用于运行遗留的系统。
不过对于Java来说,还是有一些好消息的。一些强有力的框架为构建微服务提供了更多的选择,Pivotal在这方面一路领先,它为微服务提供了一整个技术栈。Spring Boot内嵌了Tomcat、Jetty或Undertow,可以方便快速地用它来构建独立运行的Spring应用。Spring Cloud由美国的Netflix和中国的阿里巴巴共同支持,为Spring Boot加入了很多强大的云组件,比如服务发现、外部配置、回路断路器和负载均衡。Pivotal Cloud Foundry、IBM的Bluemix和SAP的HANA为此提供了商业支持。
除此之外,还有很多其他的可选方案。其中有三个值得关注,它们分别是Lightbend的Lagom、Eclipse Vert.x和Ratpack,其中Lagom是基于Play和Akka的。而Akka所使用的actor模型也非常有意思。
我们注意到,Oracle曾经声称要在今年的Java EE 8里将Java EE带入云端,并具备基本的微服务能力,不过oracle并未透露更多相关细节。Java EE 9有望在2019发布,不知道在未来的这一两年,Java世界能否发生一些不一样的变化。
MicroProfile.io最近加入了Eclipse Foundation,广大的Java EE社区把工作转向了MicroProfile.io。
以上观点并不代表我们将对Java EE开发失去兴趣,或者说它将会消失。我们只是认为,对于构建现代化的系统,我们总是会有更好的选择。
Java EE的未来的更多相关文章
- InfoQ观察:Java EE的未来
原创 2017-03-06 Charles Humble 聊聊架构 作者|Charles Humble编辑|薛命灯 作为InfoQ下一年编辑关注点审核工作的一部分,我们挑选了Java作为深入探讨的主题 ...
- Oracle居然把Java EE的未来押在Rest API上了
然而Lehman并不赞同Rahman对Java EE 9的说法,所以他重申Oracle暂时专注于Java EE 8."我们正在倾全力推出EE 8,现在这是我们主要的关注点," ...
- Java EE中的容器和注入分析,历史与未来
Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...
- 影响Java EE性能的十大问题(转)
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题 ...
- java EE中的hello1.java及Annotation(注解)
一.Annotation(注解) 注解(Annotation)很重要,未来的开发模式都需要注解,注解是java.lang.annotation包,Annotation是从java5引入的,它提供一些不 ...
- Java EE开发技术课程
新的学期开始了,j2e已经上了两节课,接下来就是对该课程的一些作业以及相关的认识: 一.课程目标: Java EE是java的企业级应用,所以在我看来在学习这门课程之前肯定要对java有一个具体的认识 ...
- Java EE企业应用发展
新形式下的企业应用特点企业应用系统从封闭走向开放,由局域网转到互联网,随着涉众面的极大扩展,新的企业应用要求多浏览器支持,国际化支持,全球业务的互联互通.企业需求提升.除了功能性需求,客户对于安全,性 ...
- Java EE之会话
1.需要会话的原因 所有HTTP服务器技术都普遍采用HTTP会话的概念,并且Java EE也在规范中添加了对会话的支持. 维持状态 会话用于维持请求和请求之间的状态.HTTP请求自身是完全无状态的.从 ...
- java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明
文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...
随机推荐
- JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算
JAVA之旅(二十三)--System,RunTime,Date,Calendar,Math的数学运算 map实在是太难写了,整理得我都晕都转向了,以后看来需要开一个专题来讲这个了,现在我们来时来学习 ...
- Mybatis执行CachingExecutor(六)
前面几篇博客我们介绍了Excutor及抽象类BaseExecutor和实现类SimpleExecutor.BatchExecutor和ReuseExecutor: 博客列表: Mybatis执行Exe ...
- Activity, Service,Task, Process and Thread之间的关系
Activity, Service,Task, Process and Thread之间到底是什么关系呢? 首先我们来看下Task的定义,Google是这样定义Task的:a task is what ...
- 03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台
1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Ora ...
- Socket编程实践(2) --Socket编程导引
什么是Socket? Socket可以看成是用户进程与内核网络协议栈的接口(编程接口, 如下图所示), 其不仅可以用于本机进程间通信,可以用于网络上不同主机的进程间通信, 甚至还可以用于异构系统之间的 ...
- javascript之DOM编程增加附件
在开始这个案例之前,需要学习一下有关于根据子关系节点获取标签的几个方法.罗列如下 /*通过关系(父子关系.兄弟关系)找标签.parentNode 获取当前元素的父节点.childNodes 获取当前元 ...
- 安卓TV开发(十) 智能电视开发之在线视频直播
转载注明出处:http://blog.csdn.net/sk719887916/article/details/46582987 从<安卓TV开发(八) 移动智能终端多媒体之在线加载网页视频源& ...
- JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想
JAVA之旅(三)--数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组 1.概念 数组就是同一种类型数据的集合,就是一个容器 数组的好 ...
- Android BLE与终端通信(五)——Google API BLE4.0低功耗蓝牙文档解读之案例初探
Android BLE与终端通信(五)--Google API BLE4.0低功耗蓝牙文档解读之案例初探 算下来很久没有写BLE的博文了,上家的技术都快忘记了,所以赶紧读了一遍Google的API顺便 ...
- 如何反编译APK?
1.概述 一些商业的app都包含很多精美的图片还有一些比较好的配置文件,以前某师兄就说过apk把后缀改为zip,然后解压一下就可以获得很多图片资源,但是这时候你打开一下解压出来的xml资源全是乱码.通 ...