原文
html
进入2016年时间还不是很长,让咱们回顾下去年年末的一个预言。去年12月,来自C2B2的Steve Millidge 预测 ,2016年将会成为Java EE微服务年。在必定程度上,这是基于 Steve在JavaOne上的演讲 ,他在演讲中详细地讨论了这个主题。此外,Steve仍是 Payara 的联合创始人,Payara的目标用户也是对微服务感兴趣的Java EE开发人员。Steve还认为,SOA和微服务之间的差异很小,这种观点咱们之前据说而且报道过。他在视频中指出:java
“微服务与SOA没什么不一样。它仍是关于SOA”。服务器
固然,如今还存在争论,由于他的背景和当前的工做重心,Steve可能会发现本身很难保持客观的态度。不过,早在2014年,微服务还处于起步阶段,Adam Bien就描述了 理想的Java EE微服务 :架构
[...]理想的Java EE微服务是一个单[实体控制边界]组件,在一个WAR包中,部署在单台服务器/域中。在这种状况下,开发人员能够单独地发布和从新部署单个组件(又称微服务)。WAR包之间不可能直接调用方法,所以,WAR包将不得不使用好比JAX-RS来彼此通讯。oracle
咱们在去年年末就微服务、DevOps和Java EE相关内容采访了Markus Eisele,他详细论述了本身为何认为 Java EE将会在微服务生态圈的发展中扮演重要的角色 。还有一些其余使用Java EE编写微服务的方法,包括 TomEE 和 WildFly 。 KumuluzEE是JavaOne 2015 Duke选择奖的其中一个 获奖者 ,该框架是一个Java EE微服务框架。该框架的联合建立者Matjaz Juric解释说:java-ee
KumuluzEE是第一个使用标准Java API的微服务框架。微服务架构的重点是将应用程序开发成服务并将这些服务单独部署;没有一个框架提供自动化部署和配置,是不可能使用Java EE实现真正的微服务架构的。框架
让咱们看一些人们如何看待微服务和Java EE的其余例子,这会很是有趣,由于有些人严格来说并不属于传统的Java EE领域。例如,早在2014年,Alex Soto就论述了为何 Java EE和RxJava 是一个很棒的方案。不过,并非每一个人都承认使用Java EE能使开发人员采用微服务。正如 Rick Hightower 所说的那样:分布式
若是你将一个WAR文件部署到一个Java EE容器,那么你极可能不是在作微服务开发。若是你在一个容器或EAR文件中包含超过一个WAR文件,那么你确定不是在作微服务开发。若是你将服务部署为AMI或Docker容器,并且你的微服务有一个main方法,那么你多是在编写微服务。ide
并且,Rick也不认为微服务与SOA相同:微服务
事实上,它们在许多方面是彻底相反的。例如,SOA每每采用WSDL,后者是一种很是严格的、强类型的服务端点定义方式。WSDL和XML模式中全部的未知量都来自XML。
固然,咱们已经屡次讨论过,SOA和Web Service经常没有关系。不过,Rick及其余一些人确信,Java EE太过臃肿或者说笨拙,以其为基础构建微服务并不合适。 Jeppe Cramon 认为,Java EE之因此是一个糟糕的基础还有更为根本的缘由:
若是咱们将两路(同步)通讯与小/微服务结合使用,并根据好比“1个类=1个服务”的原则,那么咱们实际上回到了使用Corba、J2EE和分布式对象的20世纪90年代。遗憾的是,新生代的开发人员没有使用分布式对象的经验,所以也就没有认识到这个主意多么糟糕,他们正试图重复历史,只是此次使用了新技术,好比用HTTP取代了RMI或IIOP。
若是微服务和SOA密切相关,那么可能会有一种观点,就是微服务能够像SOA那样采用一种技术无关的方式。你认为呢?2016年会成为Java EE微服务年吗?若是有的话,Java EE会在微服务中扮演什么角色?