首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IBM CTO对于Java语言未来发展的一些看法(上)

2 月份,IBM 在 Java 领域的 CTO John Duimovich 先生参加了一次座谈会,会中他和与会人员一起讨论了 Java 这门编程语言除了版本升级(Java 9、Java 10)之外的动向,并且分享了 IBM 的一些研究内容。读完这篇文章后,我觉得有必要针对他提出的各点进行深入讨论,也想谈谈自己对于 Java9 的理解。

Duimovich 先生列举的内容主要包括以下几点:

1、Oracle 公司决定将 Java EE 的管理权移交至 Eclipse Foundation;

2、Kotlin、Scala 等语言会尽快被纳入到 Java EE;

3、对于容器应用而言,VM 的启动时间太长了,IBM 进行了优化;

4、JIT 编译器独立作为服务,从 JVM 里移除出去。

本文,我想就 Duimovich 先生提及的 Java EE、函数式语言、VM 启动时间优化、JIT 编译器改变、Java 新版本设计思路等谈谈自己的理解。

关于 JavaEE

我们先来聊聊 Java EE 移交这个事的看法,对于一般开发者而言,由于 Eclipse Foundation 组织更加贴近于开发人员,所以移交至 Eclipse Foundation 很有可能起正面作用,这一变化有可能会加速新特性的开发节奏,也会有利于响应用户需求,毕竟民间组织没有那么官僚,在 Spring 生态系统的强大冲击下,捐赠给更具活力的组织运营,也许是 Java EE 的一线生机吧。

之前聊聊架构也有聊过这个话题,这里不再赘述。

Duimovich 先生认为企业级 Java 可能在 IoT 应用场景下会有施展空间。毕竟,相对于 Web 而言,IoT 还是蓝海市场。

之前阮一峰在其微博上发过一张图,我想也可以看出这几年 Web 的发展趋势。可以说,大概从 2012 年开始,全球的网站数量已经停止增长了。

函数式语言

Scala、Kotlin 这些函数式语言会优于 Java 的原因可能有四点:

开发和部署时间较短;

整体代码行数少;

第三方依赖库少;

内置的异步线程和无阻塞 IO。

回到主题,Kotlin 会和 Java EE 完全整合,这是因为 Kotlin 和 Java 语言的集成很好,而对于如何与 Java EE 集成,我们来看一个示例。

示例程序由 EJB、JAX-RS 资源、测试程序、Gradle 脚本所组成。首先构建一个无状态会话 bean,仅包含一个“sayHello”方法,返回一个字符串,代码如下所示:

@Stateless

class HelloBean {

fun sayHello(caller: String) = "Hello, $caller"

}

接下来构建 JAX-RS 源,类 HelloResource 有一个属性 helloBean,这种方式使用了 CDI 特性完成构造器注入,用于获取针对 HelloBean EJB 的应用。JAX-RS 资源定义了一个单独方法响应 HTTP 的 GET 请求。

@Path("/hello")

class HelloResource @Inject constructor(val helloBean: HelloBean) {

@GET

@Path("/")

fun get(@PathParam("caller") caller: String) = helloBean.sayHello(caller)

}

接下来是在 Arquillian 测试平台上集成 EJB 进行测试的代码,通过 @Test 注解在应用程序服务上运行测试用例。

@RunWith(Arquillian::class)

class HelloBeanIntegrationTests {

@Inject

lateinit var helloBean: HelloBean

@Test

fun sayHello_whenInvokedWithDuke_thenReturnsHelloDuke() {

// Given

val caller = "Duke"

// When

val message = helloBean.sayHello(caller)

// Then

assertEquals("Hello, Duke", message)

}

}

JAX-RS 资源的客户端代码如下所示,这个测试是一个 Arquillian 客户端测试,通过

@RunAsClient 注解强制执行测试方法。

@RunWith(Arquillian::class)

class HelloResourceIntegrationTests {

@ArquillianResource

lateinit var url: URI

@Test @RunAsClient

fun get_whenInvokedWithDuke_thenReturnsHelloDuke() {

// Given

val caller = "Duke"

// When

val message = ClientBuilder.newClient().target(url)

.path("/api/hello/$caller")

.request()

.get(String::class.java)

// Then

assertEquals("Hello, Duke", message)

}

}

最后是编写 Gradle 脚本,这样我们就可以通过 Gradle 的“kotlin”插件完成 Kotlin 源代码的编译。以下代码仅是部分代码,确保可以在 Arquillian 平台上运行测试。

test {

environment 'JBOSS_HOME', rootProject.wildflyHome

systemProperty 'java.util.logging.manager', 'org.jboss.logmanager.LogManager'

}

task unzipWildFlyAppServer(type: Copy) {

from zipTree(configurations.install.singleFile)

into file("$/unpacked/dist")

tasks.test.dependsOn unzipWildFlyAppServer

}

发个小广告!!!走过路过,不要错过!新书来啦!!!

注:本公众号与当当店铺并无从属关系,仅为大家提供一个便捷购物地址。若有所冲突,纯属巧合,立删。

麦克叔叔每晚十点说

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180406B1A7J000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券