面向嵌入式開發(fā)的八個(gè)Java框架,你知道幾個(gè)?
譯文譯者 | 布加迪
審校 | 墨色
編寫嵌入式Java應(yīng)用程序的開發(fā)人員有一大堆框架及其他工具可供選擇。本文介紹了當(dāng)今用于嵌入式開發(fā)的幾種最佳Java框架。
Java的創(chuàng)造者對(duì)這種語言的愿景是“編寫一次,隨處運(yùn)行”,他們在嵌入式領(lǐng)域取得的成功再明顯不過了。只需編寫Java程序的一個(gè)版本即可任意運(yùn)行幾乎一模一樣的二進(jìn)制文件,這對(duì)于為小型設(shè)備和隱藏計(jì)算機(jī)創(chuàng)建軟件的團(tuán)隊(duì)來說有很大的吸引力。在許多情況下,這些開發(fā)人員對(duì)將在最終交付產(chǎn)品中運(yùn)行的CPU了解不多,他們也不需要了解太多。
從長遠(yuǎn)來看,Java可在任何地方運(yùn)行的靈活性還有助于產(chǎn)品團(tuán)隊(duì),因?yàn)榈诙⒌谌虻谒拇a(chǎn)品可能在不同的芯片上運(yùn)行。軟件通常可以改動(dòng),幾乎不需要編寫額外的代碼。
如今,許多Java框架被用于創(chuàng)建嵌入式Java應(yīng)用程序。一些是用于多種機(jī)器的通用工具。它們通常是創(chuàng)建新應(yīng)用程序的團(tuán)隊(duì)眼里的最佳選擇。
其他框架是為特定設(shè)備或設(shè)備系列開發(fā)的。這可能包括編程基礎(chǔ)和支持運(yùn)行應(yīng)用程序的設(shè)備或其他產(chǎn)品的功能。這種嵌入式Java框架最常見的例子可能是安卓,開發(fā)人員用它來為安卓機(jī)手機(jī)、Chromebook及電視等其他設(shè)備創(chuàng)建應(yīng)用程序。
下面列舉了八種出色的嵌入式Java框架。每一種都利用了Java平臺(tái)的穩(wěn)定性和廣度以及面向小型設(shè)備和隱藏計(jì)算機(jī)的第三方庫。這些框架對(duì)傳統(tǒng)的Java技術(shù)和方法稍加改動(dòng),以便在嵌入式市場上運(yùn)行得更快、更輕盈。
安卓
安卓可能是最知名的Java嵌入式框架。它最初是谷歌為了與蘋果競爭而開發(fā)的手機(jī)創(chuàng)建應(yīng)用程序的基礎(chǔ)。許多原始代碼庫都是開源的,現(xiàn)在許多其他類型的設(shè)備(不僅僅是手機(jī))都支持安卓應(yīng)用程序。Chromebook中使用的谷歌ChromeOS就是一個(gè)例子。眾多小設(shè)備將安卓應(yīng)用程序引入到了客廳的大平面屏幕上。
編寫安卓應(yīng)用程序是覆蓋所有這些設(shè)備的簡單方法。它還允許設(shè)備創(chuàng)建者向第三方開發(fā)人員開放產(chǎn)品。
一些開發(fā)人員只使用基本的安卓庫,這對(duì)于許多程序來說綽綽有余。其他人使用位于安卓之上的框架。一些最受歡迎的框架是Ionic、Flutter和Framework7。共同的特點(diǎn)讓開發(fā)人員可以針對(duì)iOS等其他平臺(tái)重新改造設(shè)計(jì)。比如說,F(xiàn)lutter針對(duì)六個(gè)不同的平臺(tái)。
Java嵌入式框架
Java嵌入式框架使開發(fā)人員更容易編寫與嵌入式系統(tǒng)中常見的接口對(duì)話的高級(jí)Java代碼。流行的框架有Raspberry Pi和Orange Pi。使用這種框架,你無需掌握與SPI、I2C、Serial、GPIO或One Wire等硬件接口通信所需的低級(jí)編程。框架的開發(fā)人員已經(jīng)為你處理了大部分任務(wù)。
Java嵌入式框架分為幾大模塊。主模塊直接連接到控制板卡的Linux OS層。它簡化了使用純Java連接到操作系統(tǒng)層上的許多任務(wù)。這些板卡上常見的主要硬件部件也有驅(qū)動(dòng)程序。
Oracle Event Processing
嵌入式設(shè)備的工作之一是捕獲數(shù)據(jù)。比說,工廠車間依靠嵌入式機(jī)器來跟蹤生產(chǎn)并觀察異常情況。Oracle Event Processing框架是Oracle事件驅(qū)動(dòng)服務(wù)器的輕量級(jí)版本,它使設(shè)備能夠捕獲事件、過濾事件,并根據(jù)需要傳遞事件。部分配置語法借鑒了SQL,因而比較容易上手。該框架的事件處理模型還可以深挖事件流,以尋找數(shù)據(jù)中的關(guān)聯(lián)及其他模式。
Jersey
如果工作需要對(duì)嵌入式設(shè)備進(jìn)行編程以響應(yīng)充分利用REST的事件,Jersey是個(gè)不錯(cuò)的選擇。通過擴(kuò)展JAX-RS工具包,它對(duì)進(jìn)進(jìn)出出的JSON數(shù)據(jù)包進(jìn)行了優(yōu)化。架構(gòu)師之所以喜歡這款解決方案,是由于它可能是與設(shè)備自動(dòng)通信的最佳方式之一。
Jersey提供了幾項(xiàng)額外的功能,包括“分塊處理”響應(yīng)的能力。這意味著存儲(chǔ)數(shù)據(jù),然后以一大塊的形式發(fā)送數(shù)據(jù)。分塊對(duì)于并不總是連接到互聯(lián)網(wǎng)的設(shè)備特別有用。它還有助于減輕負(fù)責(zé)與許多設(shè)備通信的任何中央服務(wù)器上的負(fù)擔(dān)。
Vert. x
許多人將Vert.x視為構(gòu)建功能齊全的Web應(yīng)用程序的框架。好就好在,它被分解成模塊,你不必使用所有模塊。Vert.x的核心包含用于編寫與世界和機(jī)器交互的服務(wù)的大部分重要代碼。任何創(chuàng)建基本工具的人都依賴Vert.x框架的網(wǎng)絡(luò)和文件系統(tǒng)協(xié)議來設(shè)置處理進(jìn)出請(qǐng)求的流。
一些Vert.x模塊可能是嵌入式任務(wù)的理想選擇。比如說,OpenAPI庫和API服務(wù)庫執(zhí)行支持API的許多工作。GraphQL庫包含支持GraphQL調(diào)用所必要的例程。這些庫主要致力于構(gòu)建Web應(yīng)用程序和Web服務(wù),但它們也可用于處理更簡單的通信。
Dropwizard
如果目標(biāo)是構(gòu)建一個(gè)簡單、強(qiáng)大且充分利用REST的Web服務(wù),許多Java開發(fā)人員會(huì)轉(zhuǎn)向Dropwizard。它還是嵌入式應(yīng)用程序的出色選擇。你可以使用Web服務(wù)API來控制和配置設(shè)備,其他設(shè)備可以通過其API訪問該服務(wù)。人類可以通過帶有一點(diǎn)JavaScript的靜態(tài)HTML頁面來控制服務(wù)。
Dropwizard分為許多較小的模塊,可以根據(jù)你需要的功能添加或排除這些模塊。核心模型和數(shù)據(jù)庫模塊適用于基本任務(wù)。與服務(wù)交互的人可以使用表單或視圖模塊。身份驗(yàn)證通常是個(gè)好主意,Dropwizard的身份驗(yàn)證模塊支持基本協(xié)議和OAuth2議。
Apache Mina
任何需要強(qiáng)大網(wǎng)絡(luò)層的應(yīng)用程序都可以使用Apache Mina,安全可靠地處理一些不同的NDP(鄰居發(fā)現(xiàn)協(xié)議)或TCP連接。該代碼構(gòu)建在新的IO類(Java NIO) 之上,因此開發(fā)人員可以以更抽象的方式處理進(jìn)出的數(shù)據(jù)。它的代碼主要是事件驅(qū)動(dòng)的,因此開發(fā)人員無需關(guān)注網(wǎng)絡(luò)接口。
Java Card
一些嵌入式處理器裹以額外的安全層,以幫助處理敏感數(shù)據(jù),比如金融交易的細(xì)節(jié)。Oracle的Java Card支持在防篡改芯片等安全飛地(enclave)內(nèi)運(yùn)行的多個(gè)應(yīng)用程序。這些CPU通常速度較慢且內(nèi)存較少,Java Card的框架經(jīng)過精簡,可以在資源較少的情況下順暢運(yùn)行。
總結(jié)
Java Web框架怎么樣?
雖然本文重點(diǎn)介紹了為嵌入式機(jī)器設(shè)計(jì)的框架,但實(shí)際上越來越多的開發(fā)人員在為嵌入式設(shè)備創(chuàng)建Web應(yīng)用程序。小設(shè)備可能功能較弱,但它們通常有足夠的內(nèi)存和CPU能力,為少數(shù)幾個(gè)客戶端運(yùn)行Web服務(wù)器應(yīng)用程序。一個(gè)不適合開放互聯(lián)網(wǎng)上十億用戶的應(yīng)用程序可以在嵌入式系統(tǒng)中順暢運(yùn)行。
這常常是很好的解決方案,因?yàn)樗層脩艨梢越柚鶺eb應(yīng)用程序連接到設(shè)備。開發(fā)人員可以利用基本網(wǎng)站的所有標(biāo)準(zhǔn)功能。
許多流行的Web應(yīng)用程序框架在小型機(jī)器上運(yùn)行得非常好。這一方面歸因于竭力縮小和簡化Java Web應(yīng)用程序的服務(wù)器端。Spring Boot、Vert.x和Vaadin(另見Hilla)等更新穎的輕量級(jí)框架都是可靠的選擇。一些嵌入式開發(fā)人員甚至可以使用更舊更笨重的框架,比如Spring、Struts或JavaServer Faces。
所有這些框架都可以追溯到服務(wù)器功能不那么強(qiáng)大的年代。它們適用于一個(gè)用戶需要與軟件交互,而嵌入式設(shè)備功能比較強(qiáng)大的場景。
將標(biāo)準(zhǔn)Java用于嵌入式應(yīng)用程序
一些開發(fā)人員不需要使用嵌入式框架,因?yàn)樗麄儚臉?biāo)準(zhǔn)Java版本獲得了所需的庫和功能。Java Micro Edition(JME)有多個(gè)版本,一些是專門為嵌入式系統(tǒng)設(shè)計(jì)的。它們提供了重要的Java庫,比如用于身份驗(yàn)證的Auth庫以及用于解析和編寫消息的JSON庫。在一些情況下,這可能足夠了。
面對(duì)更龐大、更強(qiáng)大板卡的開發(fā)人員甚至可以將Java標(biāo)準(zhǔn)版用于小型設(shè)備上的嵌入式應(yīng)用程序。Oracle Java SE Embedded是針對(duì)嵌入式環(huán)境調(diào)整的Java標(biāo)準(zhǔn)版本。
Oracle通過提供標(biāo)準(zhǔn)二進(jìn)制文件來支持許多不同類型的設(shè)備。比如說,Raspberry Pi及其他一些小型嵌入式系統(tǒng)是預(yù)構(gòu)建的。Oracle還支持重要的細(xì)分市場,比如電話和電視。
對(duì)于基本的嵌入式Java開發(fā)項(xiàng)目而言,Oracle的標(biāo)準(zhǔn)下載版可以提供你需要的一切。
原文鏈接:
??https://www.infoworld.com/article/3669317/8-java-frameworks-for-embedded-development.html??