Java将每半年发布一个版本

Oracle近日宣布,他们将Java的发布频率改为每六个月一次。

JCP执行委员会在八月份的会议上提到了这一说法,随后,Oracle发言人Donald Smith在他的博客中确认了这一消息。该决定将在Java 9正式发布之后开始实行,也就是说,Java的下一个发布日期是2018年初。

除了发布周期,Oracle还宣布了在Java的构建和发布方式方面所发生的主要变化。Oracle将把OpenJDK的二进制包作为面向开发者的主要版本,取代之前的Oracle JDK。

OpenJDK将采用GPLv2许可(包括“类路径例外”)免费发行,移除了之前在Oracle JDK上存在的一些限制。Oracle JDK仍然会继续存在,但需要与Oracle签订协议才能获得Oracle提供的长期支持。

Java首席架构师Mark Reinhold说,为了避免出现像Java 8和Java 9那样的延期情况,所有决定实行新的发布周期。

Java当前的发布周期为两年一次,Java 9因为模块化系统(Jigsaw)问题一再延期,已经比预期晚了18个月。之前,Java 8也因为安全问题延期了8个月左右。Java 9的GA版本将在9月21号发布。

新的发布周期严格遵循时间点,将在每年的3月份和9月份发布,相应的版本号为18.3、18.9、19.3等。与现在的发布周期不同,新的发布计划不会为了等待某个主要特性完成而延期。如果一个特性还没有完成,它就不会被合并到发布用的代码仓库里。如果错过了一个版本,就要等待下一次发布。

新的发布周期旨在避免未完成的里程碑特性(比如Java 8的Lambda或Java 9的模块化系统)造成发布延期,让其他一些有用的特性也无法与开发者见面。

除了新的发布周期,Oracle将会继续每个季度发布更新版本,时间分别为1月份、4月份、7月份和10月份。也就是说,在下一个大版本发布之前,当前版本都会有两个更新版本。更新版本只包含安全问题修复或回归错误的修复。

Reinhold说:

开发者希望加快速度,这样他们就能够尽快地在生产环境中使用新的特性。

对于没有必要快速升级Java版本的企业和组织来说,Oracle建议他们签订每三年一次的长期支持(Long Term Support,LTS)协议。他们因此可以获得由Oracle提供的至少三年的支持,还有可能更长时间,这要取决于市场的反应。

Oracle建议第一个LTS版本为“18.9”,不过这需要与其他的OpenJDK贡献者讨论过后才能最终确定。Java 8被作为一个特别的LTS版本,支持日期截止到2025年。

Smith说:

OpenJDK是开发者了解和使用Java SE平台最主要的渠道,而Oracle JDK继续作为Oracle收费用户的LTS版本。

伦敦Java社区的负责人Martijn Verburg也发表了他对新发布周期的看法:

新的Java发布周期对于Java生态系统来说是一件好事情。Java 9的Jigsaw和孵化模块问题促成了这一局面的发生。

Oracle确实面临着发布方面的巨大挑战,不过OpenJDK社区拥有足够的知识来帮助一起解决挑战。

我希望看到中间会有所突破,不过对常规的发布周期仍然很期待。其他实现者可以更早地访问到规范的草案,这样他们就可以更早、更经常地发布版本。

Oracle的Java发布速度经常受到诟病,Java被广大的企业组织所采用,并已成为大量开源平台和语言的基础,而这样的发布速度让Java处于很尴尬的境地。新的Java发布周期恰好满足了广大用户的期望,不过这仍然需要等待Java开发者和Oracle用户的反馈。

查看英文原文:Java to Move to 6-Monthly Release Cadence

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/09/Java6Month?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0

Apache OpenWebBeansJSR 365 依赖注入(CDI 2.0)的一种实现,最近发布Meecrowave 微服务器的服务器 1.0 为 Java Persistence API(JPA)、Java Transaction API(JTA) 和 OAuth2 提供了内置支持,不再像 Java EE 那样需要完整的容器。

Meecrowave 基于一些现有的 Apache 项目之上构建,包括Tomcat(servlet)、OpenWebBeans(CDI),Johnzon(JSON-P 和 JSON-B)以及 CFX(JAX-RS)。

Meecrowave 最初于 2017 年 1 月发布,可用于微服务和独立应用。正如他们的博客中所定义的:

Meecrowave 可以通过 Maven 插件启动(为了易于开发),或以编程方式作为嵌入式服务器,作为应用程序与业务代码捆绑在一起,也可以作为启动可移植的 WAR 或 JAR 应用程序的执行者。

Meecrowave 由以下组件组成:

核心组件定义了一系列配置命令行界面(CLI)选项。还可以通过实现 Cli.Options 接口并使用 @CliOption 注释来定义自定义 CLI 选项,如下文所示。

Maven 和 Gradle 组件提供与核心配置和 CLI 选项对应的属性,并允许更改默认值。

入门

以下 JAX-RS 示例演示如何开始使用 Meecrowave 。

Defaults 类为示例应用程序定义了 fisrtNamelastName。请注意使用名为 app-default-name 的选项来扩展 CLI 以及相应的描述。

public class Defaults implements Cli.Options {
   @CliOption(name="app-default-name", description="The default first and last names for the app.")
   private String firstName="Michael";
   private String lastName="Redlich";
   public String getFirstName() {
       return firstName;
       }
   public String getLastName() {
       return lastName;
       }
   }

DefaultsProducer 类注入了 Meecrowave 的 Builder 类的实例,用于启动 Meecrowave 。通过 getExtension() 方法来获取 Defaults 类中的 @CliOption 注释中定义的名称和描述。

@Dependent
public class DefaultsProducer {
   @Inject
   private Meecrowave.Builder builder;
   @Produces
   @ApplicationScoped
   public Defaults defaults() {
       return builder.getExtension(Defaults.class);
       }
   }

SimpleApplication 类定义了主应用程序路径,redlich

@Dependent
@ApplicationPath("redlich")
public class SimpleApplication extends Application {
   }

SimpleEndpoint 类定义了端点、meecrowave、URL查询参数、firstNamelastName,以及一个内部类,Hello,用于为名称建模的 Java bean。

@Path("meecrowave")
@ApplicationScoped
public class SimpleEndpoint {
   @Inject
   private Defaults defaults;
   @GET
   @Produces(MediaType.APPLICATION_JSON)
   public Hello sayFullName(@QueryParam("firstName") final String firstName,@QueryParam("lastName") final String lastName) {
       return new Hello(ofNullable(firstName).orElse(defaults.getFirstName()),ofNullable(lastName).orElse(defaults.getLastName()));
       }
   public static class Hello {
       private String firstName;
       private String lastName;
       public Hello() {
           }
       private Hello(final String firstName,final String lastName) {
           setFirstName(firstName);
           setLastName(lastName);
           }
       public String getFirstName() {
           return firstName;
           }
       public void setFirstName(final String firstName) {
           this.firstName = firstName;
           }
       public String getLastName() {
           return lastName;
           }
       public void setLastName(final String lastName) {
           this.lastName = lastName;
           }
       }
   }

编译并运行 Maven:

mvn clean package meecrowave:run

服务器运行后,完整的 URL 由主应用程序路径和端点组成,其可在浏览器中输入:

http://localhost:8080/redlich/meecrowave

Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0

注意显示 “Michael” 和 “Redlich” 的默认值。 URL 查询参数可用于更改在 firstNamelastName 中定义的默认值。以下是通过 URL 只更改 firstName 的示例:

http://localhost:8080/redlich/meecrowave?firstName=Rowena

Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0

下一个示例演示如何通过 URL 同时更改 firstNamelastName

http://localhost:8080/redlich/meecrowave?firstName=Barry&lastName=Burd

Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0

可以在 GitHub 上找到完整的示例应用程序。

Meecrowave 也有同伴项目:

  • Apache DeltaSpike(配置、异常处理、高级 CDI)
  • Apache Sirona(监控)

新的 CDI 2.0 规范的支持越来越受关注,Apache 最近发布了旨在使用新 CDI 2.0 规范的 OpenWebBeans 2.0.0

查看英文原文:Apache OpenWebBeans Releases Meecrowave Server Version 1.0 for Java EE-Based Microservices


感谢冬雨对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/09/apache-releases-meecrowave-1-0?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Java API for RESTful Web Services 2.1发布

Java API for RESTful Web Services JAX-RS 2.1于本周发布。据Oracle技术小组首席成员及JSR规范牵头人Santiago Pericas-Geertsen介绍,JAX-RS 2.1中包括对服务器发送事件(SSE,Server-Sent Event)和JSON-B的支持,并改进了对JSON-P的支持。该API给出了对客户端API的响应式扩展,内建了对Java 8 CompletionStage的支持,以及对RxJava等其它响应式API的扩展点。

参考JAX-RS 2.1规范,这次发布版本的目标包括用于POJO的注解(Annotation)以及可灵活使用的API,这些API提供了对通用HTTP使用模式和WebDAVAtom Publishing Protocol等应用的高层支持,支持多种HTTP实体内容类型、Servlet容器和JAX-WS提供者,并将提供Web资源类中对Java EE特性和组件的支持。

在InfoQ对Pericas-Geertsen的采访中,他详细介绍了SSE:

SSE资源中注入了一种称为SseEventSink的特定类型,提供文本流和事件流。SSE客户使用SseEventSource从连接中读取事件。

该机制使用了长连接和广播,提供的性能要比轮询和资源密集短连接更优。

下面的代码段展示了SSE的用法:

服务器端:

@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void getMessageQueue(@Context Sse sse, @Context SseEventSink eventSink) {
    // 一旦客户订购事件流,就激活资源方法。
    // 这意味着事件更像是从不同的场景中发出,例如线程、事件处理器等。
    // 资源方法通常实现为存储eventSink实例,应用逻辑将在事件应被发送到客户时检索事件。
    // 发送事件:
    eventSink.send(sse.newEvent("event1"));
}

客户端:

WebTarget target = ClientBuilder.newClient().target("server-sent-events");
SseEventSource eventSource = SseEventSource.target(target).build();
// EventSource#register(Consumer)
// 经注册的事件处理器将打印出所接收到的消息。
eventSource.register(System.out::println);
// 向事件流订阅。
eventSource.open();

Pericas-Geertsen补充了一下几点:

  • JAX-RS 2.1完全向后兼容前期版本。

  • 新特性很好地集成了现有的JAX-RS概念。例如,仅需在客户调用中注入一个方法调用,就可以将处理方式由同步转向响应式。

  • SSE依赖基于流HTTP的连接,是现有API的自然扩展。

鉴于该API广泛地使用了注解机制和Lambda表达式,因此它支持Java SE 8及以后版本所开发的应用。

查看英文原文: Java API for RESTful Web Services 2.1 Released

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/JAX-RS-2.1-released?utm_source=news_about_java&utm_medium=link&utm_campaign=java

IntelliJ IDEA 2017.2发布:更智能,更利落,更快速

JetBrains最近发布了其Java IDE旗舰产品IntelliJ IDEA的季度版本2017.2。根据Trisha Gee在博客帖子中给出的发行说明,该版本做了不少可用性上的改进,并给出了一些新类别的警告,包括创建了空的Collection或是字符串、数字超出了数组的范围等。它还改进了对空值的分析功能。

链式自动完成功能是该版本中最具创新性的特性。这是一种代码自动完成功能,可以根据在各个函数在项目中的使用频次,识别随后可能使用的函数调用,并给出建议。注意该特性只适用于Java语言,并且必须使用该IDE自身的编译器,而非Gradle或Maven的编译器。

IntelliJ IDEA 2017.2发布:更智能,更利落,更快速

针对Java 9的改进包括了模块图(Module Diagrams)以及诸如使用Set.of(items)代替集合构建等重构特性。此外,IDEA 2017.2还升级了对Kotlin(1.1.4)、Groovy(2.5.0)、Scala(在SBT中调试)、JavaScript(参数提示)、TypeScript(代码排定特性)和CSS(添加了模块支持)的支持。

在架构方面,该版本在“Run/Debug”工具窗口中添加了运行仪表盘(Run Dashboard)和执行器端点(Actuator Endpoints)。开发人员可以在IntelliJ IDEA博客上了解对Spring Boot的更多改进。

IntelliJ IDEA 2017.2发布:更智能,更利落,更快速

对于偏好Scala的开发人员,IDEA现在支持Play Framework 2.6。UI开发人员可享用Angular Material上的改进、更佳的Webpack代码辅助及Mocha测试代码覆盖。

在性能上的改进主要围绕着索引开展。IDEA的索引会拖慢开发,尤其是项目很大时。使用实验性的“非加载模块”(Unloaded Modules)特性,开发人员可以指定项目中的活跃工作模块,这样在加载项目时就可不索引或扫描的那些非加载模块,节省了内存和CPU资源。现在开发人员还可以暂停索引过程,并通过指定模式排除文件。

如需了解更多的新特性,可访问2017.2版的“What's New”页面。在IntelliJ IDEA博客上,详细地介绍了2017.2.12017.2.2中的增量更新情况。

查看英文原文: IntelliJ IDEA 2017.2: Smarter, Neater, and Faster

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/intellij-idea-2017.2?utm_source=news_about_java&utm_medium=link&utm_campaign=java

关于Oracle欲放手Java EE,Red Hat有话要说

近日,Oracle在官博上宣称,在妥善“安置”好Java EE 8之后,会将Java EE推向更加广大的开源社区,为Java EE寻求更开放、更敏捷、更灵活的发展道路

Java EE在Oracle的“监护”下一路走来,发展得也算不错,只是Oracle认为相较其他开源社区做得还远远不够。为了获得长足的发展,Oracle认为加大开放力度才是王道。在宣布消息后,各大开源社区纷纷做出积极的响应。包括Apache软件基金会和Eclipse基金会在内的各大开源社区都表达了希望成为这个接力棒传承者的强烈愿望。而作为世界最大开源公司的Red Hat又是如何看待这件事情的?

8月21号,Red Hat在官博上发文,表达了对Oracle此次决定的极度认同。他们在官博右上角显眼的位置写下了这句话:

Red Hat期待与Oracle以及广大的Java和Eclipse MicroProfile社区展开合作,一起推动Java EE向前发展。

Red Hat一直是“开源之路(open source way)”的领路人和实践者。他们认为,将Java EE推向广大的开源社区具有积极的意义,不管是对Java EE社区、客户和最终用户来说都是有好处的。此举将会加快Java EE的发展速度,吸引更多的开发力量参与进来,同时也能完善开源监管制度。对于生产就绪系统的设计和实现来说,可衡量的标准是非常关键的因素,而这也正是客户想要的东西。

开放Java EE能够给多方带来好处,而对于Java EE本身来说会有哪些促进作用?

  • Red Hat一直崇尚的开源文化会为Java EE注入新鲜的活力。
  • 给社区带来更多的发展机遇。
  • 更加宽松的许可协议,可以吸引更多的贡献者,实现更多的特性。
  • 更快、更灵活的演化。
  • Java EE的最终用户,也就是那些开发者,他们可以更快地使用Java EE相关的技术进行开发。
  • 由社区驱动的监管、管理、发行和反馈。

对于客户和开发者来说,他们能够从中获得如下的好处。

  • 从社区合作和市场需求中演化而来的Java EE新特性。
  • 可以将Java EE新特性更快地交付给客户和开发者。
  • 可以持续地使用Java EE技术开发现代架构和应用程序。
  • 不需要开发者重新学习额外的框架,从而节约了开发成本。

综合上述的优点来看,它们主要体现出了“快速”、“灵活”、“可持续”这几个特点。

Red Hat对Oracle此举的支持绝不仅仅表现在口头上。事实上,Red Hat一直以来都在为Java EE的发展不遗余力地做着贡献(最早可以追溯到J2EE 1.3),包括他们开发的Java EE应用服务器JBoss Enterprise Application Platform。Red Hat也一再重申会支持Java EE的开发工作,相信开放Java EE、把Java EE推向不依赖单个厂商的模式对于整个社区来说是无往不利的。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/Oracle-Java-EE-Red-Hat?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Oracle欲放手Java EE,谁有望接手?

近日,Oracle在其官方博客上宣称,随着Java EE 8的可喜进展,Oracle接下来在考虑如何让Java EE更开放、更加贴近开源社区。言下之意,Oracle要让出Java EE的主导权,希望开源社区有更多的力量共同促进Java EE的发展。

Java EE 8的规范工作已接近尾声,参考实现也预计会在今夏末交付。一直以来,Oracle不遗余力地引领Java EE,让它成为业界的标杆,而如今是时候重新思考如何让它变得“更加敏捷,能够更及时地响应业界的技术需求”。

Oracle在博客中说道:

Java EE已经取得巨大的成功,各种实现占据了强有力的市场份额,各种技术被广泛采用,拥有着一个庞大的框架和工具生态系统,无数个应用程序正在给企业和个人带来价值……尽管Java EE已经处于开源模式,并由Java EE社区在主导开发,但整个流程仍然不够敏捷和灵活,或者说不够开放,如果跟其他的开源社区相比,还有很大差距。我们希望做得更好。

Oracle认为,将Java EE技术向更广大的社区开放会是个正确的决定,因为这样可以“让流程更加敏捷,实现更灵活的许可,并改变监管制度”。Oracle计划从开发者社区、许可证持有者以及一些开源基金中挑选候选继任者,尽管Oracle并未做出最后的决定,不过Apache软件基金会和Eclipse基金会似乎更有可能成为继任者。早前,Oracle将OpenOffice和NetBeans IDE贡献给了Apache,将Hudson集成服务器贡献给了Eclipse基金会。虽然不能据此认定Oracle对这两个开源基金会偏爱有加,但也不能排除这种可能。

Eclipse基金会的执行董事Mike Milinkovich说:

我们相信,将Java EE交给与产商无关的开源基金会对于平台和社区来说都是一件好事。如果我们有幸成为继任者,我们将竭诚为整个社区和平台提供最好的服务。

作为Eclipse MicroProfile社区成员的Red Hat对Oracle此举也是赞赏有加。Red Hat高级产品主管Rich Sharples说:

Red Hat希望能够与Oracle和广大的Java EE社区展开进一步合作,让Oracle的这次倡议与MicroProfile的初衷相契合。

不过,虽说Oracle想让出Java EE的主导权,但这并非意味着Oracle就会从此对Java EE不理不睬,相反,Oracle仍然会参与促进Java EE技术演化的工作。

我们相信,一个更加开放、不依赖所谓的平台主导者的单个厂商的流程将会促进更好的创新,这对整个社区来说才是最有益的。

Java的另一个版本SE早已通过OpenJDK实行开源,IBM和Red Hat也参与了Java SE的开发工作,不过Oracle仍然在主导着这个项目。所以说,虽然Oracle即将卸下Java EE的重担,但其手中仍然掌握着Java SE的大权。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/Oracle-Java-EE-who-take-over?utm_source=news_about_java&utm_medium=link&utm_campaign=java

Java依旧排名第一,然而变化几何?

2017年8月的TIOBE编程语言排行榜显示Java在流行程度上是世界上排名第一的编程语言。然而,纵观榜上前20名的编程语言,大多数编程语言都呈下降的趋势。因此,开发者们该何去何从?TIOBE显示,有几种新的编程语言填补了这些空缺并且获得了程序员们的青睐。

Java的流行指数依旧是排行榜上第二名有力竞争者C语言的两倍,但是这两种编程语言较去年的受欢迎程度都有显著的下降。榜上前20名中的另外12种编程语言也有所下降,然而前20名中剩余的6种编程语言(Visual Basic、.NET、R、Go、MATLAB、Scratch和Dart)增长比率的总和也才不过1.34%,远低于Java一门编程语言6.05%的下降比率。

在TIOBE上我们看到了大家对一批新兴语言的兴趣高涨,尤其是Crystal、Kotlin、Conjure、Hack和Julia。它们在整体比例中的份额很小(都低于1%),但是它们增长的速度足以引起大家的注意。Ruby的兄弟语言Crystal在一个月内从第60位跃升至第32位。Crystal的倡导者Santiago Palladino发推特说,他并不感到惊讶,现在越来越多的公司将Crystal应用于他们的生产环境中

Jetbrains的Kotlin JVM语言兴起的一个因素可能是今年五月份Google对其作为Android的开发语言进行了采用和宣传。Google趋势搜索显示了在那段时间前后Kotlin的激增。Spring框架在一月份也宣称支持Kotlin。

Jetbrains的Hadi Hariri同意了在这件事上Google对Kotlin的影响,但是他还表示说,Kotlin在Google的消息公布之前就在持续稳定地上升。他告诉InfoQ说:

我们假定Kotlin在TIOBE上指数的峰值与Google I/O的公告有关。抛开这些不谈,我们也看到了Kotlin从一年以前发布以来的采用量一直在增加,并且从1.0版本到1.1版本(今年二月份发布的)GitHub上Kotlin项目的代码量增加了8倍。

在我们看到了Kotlin在TIOBE排行榜上排名的一些相关性的同时,Hadi最终强调说:“Kotlin采用量的持续增长才是更重要的。”

每月发布的TIOBE编程社区排行(TIOBE Programming Community Index,这是给出的官方名称)反映了编程语言的相对受欢迎的程度。它使用从主要搜索引擎中收集到的数据,利用全世界范围内工程师使用的数量、课程数量和第三方供应商的数量来进行排名。这个月发布的版本包含对过去12个月趋势的额外分析。被包含在内的编程语言必须是图灵完备的。

查看英文原文:Java Still Number One, but What’s Taking Over?


感谢冬雨对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/Java-Still-One-Tiobe?utm_source=news_about_java&utm_medium=link&utm_campaign=java

使用Spring Cloud Function框架进行面向函数的编程

Spring Cloud Function是来自Pivotal的Spring团队的新项目,它致力于促进函数作为主要的开发单元。该项目提供了一个通用的模型,用于在各种平台上部署基于函数的软件,包括像Amazon AWS Lambda这样的FaaS(函数即服务,function as a service)平台。

与其他的serverless模式类似,该项目致力于将函数变成开发人员所使用的主要理念。这个项目第二个重要的元素就是将业务逻辑从部署profile中解耦出来。尽管业务逻辑以函数的方式实现,但是相同的代码可以通过一个部署profile将函数暴露为RESTful服务、流处理应用(比如Spring Cloud Data Flow)或有限的(finite)任务。这意味着相同的单个函数可以部署为独立的应用,也可以部署到FaaS平台上。到目前为止,团队已经提供了针对AWS LambdaApache OpenWhisk的适配器,而对于像Google Cloud Functions和Azure Functions这样的serverless平台,只要它们提供对Java的支持,该项目就承诺会支持。

AWS Lambda这样的平台凭借整洁的抽象和明显的成本优势,对很多开发人员都非常具有吸引力,但是有个重要的顾虑,尤其是对企业级用户来说更是如此,那就是因为在源码中包含了框架特定的代码就会导致锁定到该厂商上面。

就像serverless专家Mike Roberts在Martin Fowler的站点上所描述的:

通过依赖于环境,[serverless FaaS系统]能够明显减少运维成本和复杂性,但代价就是厂商依赖以及(此时)尚不成熟的支持服务。

Spring Cloud Function能够改善这种状况,它在交付管道(pipeline)的打包阶段引入了部署平台依赖。这意味着,开发人员可以以隔离的状态实现函数(包括创建单元测试),只需关心逻辑以及函数的输入输出参数。然后,函数会基于这些依赖进行打包,这些依赖就能让函数运行到目标平台上。

Spring Cloud Function项目的主管Mark Fisher这样告诉InfoQ:

在serverless领域,我们希望提升Java开发人员的体验,毕竟可移植性和一致性是很大的挑战。

这个项目的核心是推动基于函数的编程模型,而不是Spring之前更为大家所熟悉的POJO模型。已经涉足serverless领域的人可能熟悉这种模型,在这种模型中,开发人员不用关心底层基础设施或框架,只需将关注点放到业务逻辑的实现上即可,而不是样板式的代码或其他“plumbing”代码。借助Spring Cloud Function,业务逻辑会使用java.util.function包中所定义的核心接口:FunctionConsumerSupplier的实现进行开发。

在这个非常简单的例子中,我们可以创建一个实现Function接口的类:

import java.util.function.Function;
 public class LengthCounter implements Function {
      @Override 
      public Integer apply(String name) {
          return new Integer(name.length());
      }
  }
然后,它的魔力会通过@FunctionScan注解所启用的类路径扫描发挥出来:
@FunctionScan
@SpringBootApplication
public class ExampleSpringFunctionApplication {
...

除此之外,函数还可以在类中声明,这里要通过添加@Bean注解实现:

@Bean
public Function lowercase() {
       return flux -> flux.map(value -> value.toLowerCase());
}

如果采用这种方式的话,就不需要使用@FunctionScan注解了。

函数会打包为Jar文件,这个文件会被必要的配置以及适配器包装起来,在包装的过程中就带上了目标部署平台的部署profile。

Mark Fisher告诉我们:

除了serverless以外,我们还希望提升函数作为开发单元的简洁性,以及跨各种部署平台的可移植性。

开发人员专注于业务函数的创建,可以使用Spring Boot生态系统所提供的工具、过程和辅助设施(例如自动化测试、自动配置、依赖注入以及系统指标),这些他们是非常熟悉的,而底层的传输细节、基础设施和部署框架已经抽象了出来。

这个项目还处于初期阶段,但是Spring的人员承诺会有更多的举措,比如与Fission和其他基于Kubernetes的serverless平台的集成,另外,与新版本Spring Cloud Data Flow的集成也会更加紧密。

查看英文原文Function-Oriented Programming with Spring Cloud Function Framework

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/Spring-Cloud-Function-Framework?utm_source=news_about_java&utm_medium=link&utm_campaign=java

JetBrains当选JCP执行委员会委员

在最近的特别选举中,JetBrains入选JCB执行委员会,填补Ericsson和TOTVS空出来的席位。JetBrains开发者和技术布道者Trishar GeeAnna Kozlova,将作为执行委员会的JetBrains代表。JetBrains将完成剩余的两年轮值期的工作,直到2018年结束。
 
JetBrains不能在JSR376原始投票中投票,因为他们在执行委员会的任期是从2017年5月15日开始的。但是他们能够在复议投票中投票,这有助于这一提案的通过。
 
Gee接受InfoQ采访,讲述了JetBrains这一里程碑事件和他们计划完成的目标、表达了对近期的JSR376投票的看法以及未来的开发计划等

 
InfoQ:为什么这个执行委员会的席位对JetBrains来说很重要?

Trisha Gee:这感觉非常棒,不仅仅是因为可以目睹Java的变化,更因为我们自己就可以影响Java的发展。多亏了包括EC的用户组在内的JCP成员,尤其是oracle,他们发现JCP需要具有比以往更加透明和开放的流程,而且着力推动使之成为现实。但是能检查规范并且给专家组做出反馈是一回事,能够通过投票的方式影响规范的发展又是另外一回事。如你在JSR376进展中看到的一样,如果执行委员会关注一个JSR中的某些问题,那么这些问题就需要在议案完成之前得到解决。但是JetBrains不仅仅想把重心向我们自己倾斜,当最终用户对这些Java规范有疑问时,我们更希望成为一个可以倾听他们心声的EC代表。

 
InfoQ:JetBrains是如何入围执行委员会候选人的?

Trisha Gee:EC有三种席位,即批准席位,标准席位,联合席位。作为Java大管家,由Oracle确定批准席位候选人资格,最后他们决定由ARM和JetBrains接替空出的席位。你可以找个Oracle的代表问问他们为什么选择JetBrains,我个人认为原因不外乎以下几点:JetBrains之前已经涉足了JCP,我们已经是专家组成员之一,贡献了不少的JSR;JetBrains不止是为Java和JVM开发者制作工具,也开发我们自己的JVM语言(Kotlin),我们对Java语言和Java平台的发展有着浓厚的兴趣;我们拥有一个和Java使用者沟通的双工通道,用户告诉我们他们对平台和工具的需求,我们则和Java社区不断沟通这些产自社区的技术的使用方法,这让我们能够传授使用者们关于JCP和能促使Java演进过程的知识;最后,我自己则在作为伦敦Java社区成员时就已经是一名EC代表,所以我清楚整体流程,社区也已经对我有所了解了。

 
InfoQ:JetBrains不能在2017年4月8日初始JSR376投票中投票。如果你们能在那时投票,你们将如何基于JSR376状态进行投票呢,原因是什么

Trisha Gee:我们能接受我们那时不能投票的事实,虽然这让人很沮丧。从我个人来说,我会投“同意”票,这是因为从一个Java开发者的角度来说,我们很希望Java9能尽快发布。我自己也在新项目中使用新的Java平台系统(JPMS),并且还在把之前的模块迁移到JPMS上。去年一年我目睹了Java的多项改进,开发者能够更明确的使用模块化、封装、关注点分离等技术并从中获益。JPMS不完美,有瑕疵,但我还是倾向于投“同意”票。

JetBrains中的其他人指出我的“赶快发布”的方法,是让某些环节很快被打通的主因。像JPMS影响力这么大的事件,不仅仅要需要精巧的设计和思考,同时也需要能够被社区所接受,只有这样才能达到最初的目标。考虑到我们在JetBrains没有使用JPMS(虽然我们在Intellij IDEA中对其有支持),我们对其在使用上还没有足够的经验,所以还无法判断它是否符合预期。我想我们也可能会投弃权票,这意味着我们不会阻碍事件的进展,但是我们时刻保持着对JSR的关注,尤其是对现有库、框架以及工具的影响。

InfoQ:你们将在2018年结束执行委员会的任期,任期结束后你们有何打算?

Trisha Gee:我希望我们可以再次当选。我们的目标是给EC带来价值,这样我们不仅仅可以获得批准席位,也可以再次当选执行委员会委员。

InfoQ:在任期内,你们希望达成什么目标?

Trisha Gee:我们的目标是协助建立对全世界Java开发者都有价值的规范,助力Java语言以一种让开发者更高效的方式演进。我们希望通过判断一个JSR能否有助于开发者完成特定任务的方式来评判其优劣。

当然,作为一个IDE供应商,为开发者提供符合Java规范的库和框架是我们的职责,如果我们做不到这一点,开发者使用起来就会非常困难。我们也从用户那里得到了很多反馈,例如他们希望Java可以帮助他们解决日常工作中的痛点(可以阅读我的这篇关于JCP选举公告的博客)。这让我们认清楚了开发任务的优先级,并着力推动我们认为重要的项目。

我很希望看到JCP中更多的开发者参与进来,伦敦Java社区这样的用户组就在这方面起了表率作用。但是有些开发者可能不知道有可以使用JSROpenJDK这回事,我们希望能够接触到他们,他们可以通过阅读我们的博客、关注我们的Twitter和新闻来了解Java在开发社区中的进展,而且他们也可以参与到其中,作为个体为Java的发展做出贡献。

InfoQ:JetBrains正在酝酿些什么,尤其是IntelliJ IDEA?

Trisha Gee:最近我们在为最新版的IntelliJ IDEA加班加点,计划发布2017.2版本。让我最高兴的是新版本针对Java9有很多更新,尤其是其中有些特性还是我提出的!除了IntelliJ IDEA,在Kotlin上我们也有诸多计划:

  • 支持Java 9。
  • 增强Java的交互操作能力,使诸多场景(包括在Spring和Android)中的使用更加便捷。
  • Gradle Script Kotlin(新的Kotlin Gradle DSL)具有更好的IDE支持。

我们正在优化Kotlin协程工具和库的支持,包括一些很方便的调试器特性。关于未来,Kotlin侧重于寻找和Valhalla并行的价值点。

InfoQ:你在JetBrains工作多少年了?目前在公司的主要职责是什么?

Trisha Gee:我在JetBrains工作了两年半。我是一个Java倡导者,主要投入在IntelliJ IDEA(JVM/polyglot IDE)以及Upsource(代码检查工具)上。作为一个面向开发人员的倡导者,我的工作不是使用和售卖我们的工具,而是帮助开发者更加高效的完成工作,而如果他们在工作中使用的是IntelliJ IDEA,那就太棒了!但我其实更着重于帮助开发者“升级”,比如讨论Java 8的常用技巧或者给开发者展示Java 9的新特性等。

 
InfoQ:成为了JetBrains在执行委员会的代表,这对你目前的岗位有哪些影响?

Trisha Gee:这需要投入更多!但是其实委员会的代表工作和我目前的工作有很多交叉。例如,我需要站在Java演进的最前沿,这样我才能知道我的工作材料(演讲稿、博客、录屏以及每月的Java新闻稿) 是新鲜的和有相关性的,最好有很多先于开发者当前工作内容的话题,这些都会让今年Java9的发布备受关注。在执行委员会工作,确保我可以知晓Java的最新发展,当然不止Java这个语言本身(例如,最近的Jigsaw投票),还包括整个生态(例如Java EE)。所以作为EC的代表,并不会产生非常多额外的工作内容。具体工作的形式包括参与EC成员会议、研究当前的JSR,搞清楚怎么投票等,但是这些事情和我把最新的Java咨询带给开发者的初衷十分吻合。

但这些并非只有我一个人在做,在Java生态中不可能在所有领域都成为专家。在JetBrains内部,我们拥有一个具有不同领域背景,负责不同任务,具有不同经历的工作组,我们每个人都搜集我们擅长领域的JSR信息。这样的配备让我们能更好的服务于Java平台上的开发者。

 
InfoQ:IntelliJ非常成功,像Eclipse和NetBeans这些功能强大的工具都是免费的,这就让IntelliJ的发展更加困难。你们成功的秘密是什么呢?

Trisha Gee:对于很多Java开发人员来说,IntelliJ依然是免费的,这非常重要。在LMAX工作时,我自己用的就是社区版,该免费版仍然提供很多杀手级特性,例如重构、导航以及代码分析等。Ultimate这个付费版呢,则额外支持Java EE开发、Spring、UML图表以及多语种编程等。正因如此,常常是企业付费使用而不是个人,路子往往是这样:企业客户看到他们的开发者使用免费版可以更高效的工作,所以他们就会很乐意付费购买额外特性来支持企业发展。

在LMAX,我自己在和高级用户切磋后,从Eclipse转到了IntelliJ IDEA。之前我同时使用这两个IDE(职业生涯早期我也使用过Netbeans),对这两个IDE没有特殊偏好,因为所有IDE都符合我写代码的习惯。但是当我看到IntelliJ的重构工具的演示后,发现这款IDE可以在不发生编译错误的情况下重构我的代码,我被这个特性迷住了。其他IDE也有这项功能,但是从我个人与Eclipse和IntelliJ的高级用户共事的经历来看,IntelliJ IDEA可以做的更多,而且更加省事。工作中我和很多开发者交流时,发现他们有着和我类似的感受:当他们发现IntelliJ IDEA让工作更高效时,当他们发现IntelliJ IDEA是如何让他们立于不败之地时,他们就再也转不回其他IDE了。


感谢张卫滨对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/08/jetbrains-elected-to-jcp?utm_source=news_about_java&utm_medium=link&utm_campaign=java

从Java到Spring为何独得青睐Spring Summit 2017不可不知的那些事儿

作为最受欢迎的编程语言之一,Java诞生这二十多年以来拥有着数量众多的铁杆粉丝。虽然新的编程语言层出不穷,但是很多人对Java的钟爱却丝毫未变。而在Java为数众多的框架中,Spring框架独得很多人的青睐。

为了解读Spring框架广受青睐的原因,Spring技术的拥有者、云原生概念的提出者Pivotal,携手极客邦科技于8月26日在北京举办中国首届SpringSummit 2017,邀请Spring生态圈的技术大咖、技术框架核心贡献者、云原生领域奠基者和微服务实践派嘉宾,详细解读Spring技术的创新和实践,也会剖析Spring技术的优势和短板。

从目前SpringSummit 2017邀请到的嘉宾来看,真的是大神级人物辈出。InfoQ将对其中部分嘉宾进行采访,也了解他们眼中的Pivotal、Spring是什么样。此外,也让他们提前剧透在Spring Summit 2017要分享的精彩内容。 

PivotalSpring:开源和商业并不矛盾

平安壹钱包高级架构师丁雪丰在接受InfoQ采访时提及了他眼中的Spring进化史以及Pivotal与Spring的渊源。在他看来,商业的力量在Spring的成功方面是不可或缺的,开源和商业并不矛盾,两者可以相辅相成。

说起 Spring 就不得不提 Rod Johnson,Spring 诞生于他的那本《Expert One-on-One J2EE Designand Development 》,而他的另一本《Expert One-on-One J2EEDevelopment without EJB》真正让 Spring 红透半边天。

Spring 最早诞生在 2004 年, 伴随Spring版本的不断迭代,逐步诞生Spring Data、SpringBatch、Spring Integration 等子项目,将很多功能都从 Spring Framework 中移到子项目中。现在在Spring官网上各种子项目不下 20 个,近期最热门的当属 Spring Boot 和 Spring Cloud。

在Spring被广泛接受后,Rod Johnsonz成立SpringSource公司专门从事相关研发和商业支持工作,后来VMWare重金收购SpringSource,在EMC和VMWare整合后,把很多很不错的项目放到一起,也就有了现在的Pivotal。开源和商业并不矛盾,两者可以相辅相成。

Pivotal美国Spring团队:豪华阵容分享Spring干货

在此次SpringSummit 2017上,来自Pivotal美国Spring 团队的近10位技术大神组成豪华阵容,从目前剧透的演讲主题来看,颇有看头。

从Java到Spring为何独得青睐Spring Summit 2017不可不知的那些事儿 

Spring开发人员技术布道师Josh Long大家可能都不陌生,他的分享聚焦在热点话题微服务上。对于开发人员和运营人员来说,为了速度而提速是非常冒险的行为,微服务会带来架构复杂性问题,但还很少有人为此做好准备。在Spring Summit 2017上,Josh Long将带领大家了解 Ticketmaster、阿里巴巴和 Netflix 等高绩效组织如何通过 Spring Boot 和 Spring Cloud 来迅速解决这一复杂性问题。 

MadhuraBhave是Spring团队的SecuritySenior Engineer,他将深入挖掘 Spring Boot 的内在潜力。Spring Boot 最强大的功能之一就是自动配置功能。这一功能是“约定优于配置”方法的关键所在,可为 Java 开发人员带来巨大的工作效率提升。但它真的是魔术吗?Madhura Bhave不这样认为,他将在Spring Summit 2017上揭开 Spring Boot 的神秘面纱。

大多数部署DevOps 的人对 DevOps 本身并没有多少实质性的认识,只知道它是一个“更好的捕鼠夹,能多多少少与‘文化’沾边”而已。Michael Coté,TechnicalMarketer将带来的分享是,通过那些实践 DevOps 的组织的失败和成功案例,从实践经验的角度为与会者提供在组织中实施 DevOps 的建议。 

从Java到Spring为何独得青睐Spring Summit 2017不可不知的那些事儿

聚焦本土:如何解开企业数字化转型这道考题?

除了众多Pivotal美国的Spring大咖之外,Spring Summit 2017必然会围绕中国本土实际情况来设置话题,为此Pivotal邀请了很多中国客户和中国社区的开发者进行分享。

阿里全球速卖通高级技术专家许晓斌分享内容包括:如何集成 Spring Boot 和阿里技术生态; 开发 Spring Boot Starter的一些常见模式 ;如何扩展 Spring Cloud Config ;Spring Boot Endpoints 如何知道我们架构,提升运维效率。作为一家快速增长的跨境电商,AliExpress 依靠微服务架构和 Spring Boot 来保持自身的研发效率和稳定性,有数百基于 Spring Boot 开发运行的应用,开发了大量的 Spring BootStarter。

当我们把SpringBoot和Spring Cloud运用到了企业内部框架之后,还有哪些事情是我们需要考虑的?要在现有环境中构建一个好的系统,框架还能做些什么。平安壹钱包高级架构师丁雪丰分享的话题包括:在一个成熟的环境中,如何推广新框架?如何方便地新建一个系统?如何优雅地进行多系统之间的集成测试? 除了技术相关的需求,还要考虑些什么?  

华为在构建自己的微服务框架的过程中充分借鉴了Spring 以及 SpringCloud的优秀思想,并结合自己的业务需要对部分模块进行改造提炼出了自己的微服务框架。

华为技术专家姜宁将从构建微服务应用过程中遇到的常见问题入手,阐述华为对微服务框架以及Spring Cloud的理解,最后结合华为云化微服务的业务特性,介绍华为微服务框架是如何结合Spring Cloud来构建微服务应用的。

更多精彩 来现场一探究竟

以上只介绍了此次Spring Summit 2017嘉宾阵容的一小部分,除了Pivotal大中华区总经理刘伟光以及中国区众多技术专家精彩演讲和亮相外,来自招商银行、福特汽车等传统行业的客户将与互联网行业客户一起,从真实的案例出发,来介绍他们的切实经验甚至踩过的坑,这些才是最宝贵的分享。而会议期间的圆桌论坛、夜场交流,初衷也是汇聚社区力量,获得客户助力。

现在登录Spring Summit 2017官网(www.pivotal-china.com),可以第一时间了解大会日程和嘉宾介绍,即刻报名大会还将享有折扣门票。

时间:8 月 26 日

地点: 北京·新云南皇冠假日酒店

主办方:Pivotal、极客邦科技

该文章由WP-AutoPost插件自动采集发布

原文地址:http://www.infoq.com/cn/news/2017/07/Java-Spring-Summit-2017?utm_source=news_about_java&utm_medium=link&utm_campaign=java