译者 | 布加迪
编写 嵌入式Java 应用程序的开发人员有一大堆框架及其他工具可供选择。本文介绍了当今用于 嵌入式 开发的几种最佳 Java 框架。
Java的创造者对这种语言的愿景是“编写一次,随处运行”,他们在嵌入式领域取得的成功再明显不过了。只需编写Java程序的一个版本即可任意运行几乎一模一样的 二进制 文件,这对于为小型设备和隐藏计算机创建软件的团队来说有很大的吸引力。在许多情况下,这些开发人员对将在最终交付产品中运行的 CPU 了解不多,他们也不需要了解太多。
从长远来看,Java可在任何地方运行的灵活性还有助于产品团队,因为第二代、第三代或第四代产品可能在不同的芯片上运行。软件通常可以改动,几乎不需要编写额外的代码。
如今,许多Java框架被用于创建嵌入式Java应用程序。一些是用于多种机器的通用工具。它们通常是创建新应用程序的团队眼里的最佳选择。
其他框架是为特定设备或设备系列开发的。这可能包括编程基础和支持运行应用程序的设备或其他产品的功能。这种嵌入式Java框架最常见的例子可能是安卓,开发人员用它来为安卓机手机、 Chromebook 及电视等其他设备创建应用程序。
下面列举了八种出色的嵌入式Java框架。每一种都利用了Java平台的稳定性和广度以及面向小型设备和隐藏计算机的第三方库。这些框架对传统的Java技术和方法稍加改动,以便在嵌入式市场上运行得更快、更轻盈。
安卓
安卓可能是最知名的Java嵌入式框架。它最初是 谷歌 为了与 苹果 竞争而开发的手机创建应用程序的基础。许多原始代码库都是开源的,现在许多其他类型的设备(不仅仅是手机)都支持安卓应用程序。Chromebook中使用的谷歌ChromeOS就是一个例子。众多小设备将安卓应用程序引入到了客厅的大平面屏幕上。
编写安卓应用程序是覆盖所有这些设备的简单方法。它还允许设备创建者向第三方开发人员开放产品。
一些开发人员只使用基本的安卓库,这对于许多程序来说绰绰有余。其他人使用位于安卓之上的框架。一些最受欢迎的框架是 IO nic、Flutter和Framework7。共同的特点让开发人员可以针对iOS等其他平台重新改造设计。比如说,Flutter针对六个不同的平台。
Java嵌入式框架
Java嵌入式框架使开发人员更容易编写与嵌入式系统中常见的接口对话的高级Java代码。流行的框架有 Raspberry Pi 和Orange Pi。使用这种框架,你无需掌握与SPI、I2C、Serial、 GPIO 或One Wire等硬件接口通信所需的低级编程。框架的开发人员已经为你处理了大部分任务。
Java嵌入式框架分为几大模块。主模块直接连接到控制板卡的Linux OS层。它简化了使用纯Java连接到操作系统层上的许多任务。这些 板卡 上常见的主要硬件部件也有驱动程序。
Oracle Event Processing
嵌入式设备的工作之一是捕获数据。比说,工厂车间依靠嵌入式机器来跟踪生产并观察异常情况。Oracle Event Processing框架是Oracle事件驱动服务器的轻量级版本,它使设备能够捕获事件、过滤事件,并根据需要传递事件。部分配置语法借鉴了 SQL ,因而比较容易上手。该框架的事件处理模型还可以深挖事件流,以寻找数据中的关联及其他模式。
Jersey
如果工作需要对嵌入式设备进行编程以响应充分利用 REST 的事件,Jersey是个不错的选择。通过扩展 JAX-RS 工具包,它对进进出出的JSON数据包进行了优化。架构师之所以喜欢这款解决方案,是由于它可能是与设备自动通信的最佳方式之一。
Jersey提供了几项额外的功能,包括“分块处理”响应的能力。这意味着存储数据,然后以一大块的形式发送数据。分块对于并不总是连接到互联网的设备特别有用。它还有助于减轻负责与许多设备通信的任何中央服务器上的负担。
Vert. x
许多人将 Vert.x 视为构建功能齐全的Web应用程序的框架。好就好在,它被分解成模块,你不必使用所有模块。Vert.x的核心包含用于编写与世界和机器交互的服务的大部分重要代码。任何创建基本工具的人都依赖Vert.x框架的网络和文件系统协议来设置处理进出请求的流。
一些Vert.x模块可能是嵌入式任务的理想选择。比如说, OpenAPI 库和API服务库执行支持API的许多工作。GraphQL库包含支持GraphQL调用所必要的例程。这些库主要致力于构建Web应用程序和Web服务,但它们也可用于处理更简单的通信。
Dropwizard
如果目标是构建一个简单、强大且充分利用REST的Web服务,许多Java开发人员会转向Dropwizard。它还是嵌入式应用程序的出色选择。你可以使用Web服务API来控制和配置设备,其他设备可以通过其API访问该服务。人类可以通过带有一点JavaScript的静态HTML页面来控制服务。
Dropwizard分为许多较小的模块,可以根据你需要的功能添加或排除这些模块。 核心 模型和数据库模块适用于基本任务。与服务交互的人可以使用表单或视图模块。身份验证通常是个好主意,Dropwizard的身份验证模块支持基本协议和OAuth2议。
Apache Mina
任何需要强大网络层的应用程序都可以使用Apache Mina,安全可靠地处理一些不同的NDP(邻居发现协议)或 TCP 连接。该代码构建在新的IO类( Java NIO ) 之上,因此开发人员可以以更抽象的方式处理进出的数据。它的代码主要是事件驱动的,因此开发人员无需关注网络接口。
Java Card
一些 嵌入式处理器 裹以额外的安全层,以帮助处理敏感数据,比如金融交易的细节。Oracle的Java Card支持在防篡改芯片等安全飞地(enclave)内运行的多个应用程序。这些CPU通常速度较慢且内存较少,Java Card的框架经过精简,可以在资源较少的情况下顺畅运行。
总结
Java Web框架怎么样?
虽然本文重点介绍了为嵌入式机器设计的框架,但实际上越来越多的开发人员在为嵌入式设备创建Web应用程序。小设备可能功能较弱,但它们通常有足够的内存和CPU能力,为少数几个客户端运行 Web服务器 应用程序。一个不适合开放互联网上十亿用户的应用程序可以在 嵌入式系统 中顺畅运行。
这常常是很好的解决方案,因为它让用户可以借助Web应用程序连接到设备。开发人员可以利用基本网站的所有标准功能。
许多流行的Web应用程序框架在小型机器上运行得非常好。这一方面归因于竭力缩小和简化 Java Web 应用程序的服务器端。Spring Boot、Vert.x和 Vaadin (另见Hilla)等更新颖的轻量级框架都是可靠的选择。一些嵌入式开发人员甚至可以使用更旧更笨重的框架,比如 Spring 、Struts或JavaServer Faces。
所有这些框架都可以追溯到服务器功能不那么强大的年代。它们适用于一个用户需要与软件交互,而嵌入式设备功能比较强大的场景。
将标准Java用于嵌入式应用程序
一些开发人员不需要使用嵌入式框架,因为他们从标准Java版本获得了所需的库和功能。Java Micro Edition(JME)有多个版本,一些是专门为嵌入式系统设计的。它们提供了重要的Java库,比如用于身份验证的Auth库以及用于解析和编写消息的 JSON 库。在一些情况下,这可能足够了。
面对更庞大、更强大板卡的开发人员甚至可以将Java标准版用于小型设备上的嵌入式应用程序。 Oracle Java SE Embedded是针对嵌入式环境调整的Java标准版本。
Oracle通过提供标准二进制文件来支持许多不同类型的设备。比如说,Raspberry Pi及其他一些小型嵌入式系统是预构建的。Oracle还支持重要的细分市场,比如电话和电视。
对于基本的嵌入式Java开发项目而言,Oracle的标准下载版可以提供你需要的一切。