
Java生态系统的开源项目非常庞大和多样化,几乎可以满足任何需求。以下是七个开源Java项目,涵盖了从全栈应用程序开发到微服务、Wasm和JVM替代方案的各种内容。很容易错过其中一些伟大的项目。
▌Vaadin’s Hilla
Hilla是一个全栈框架,结合了基于Java的后端和JavaScript前端的特性。它支持React和Lit这两种响应式前端框架。使用Hilla,您可以通过简单的命令来快速构建全栈项目:npx @vaadin/cli init –hilla foundry-hilla。这个命令是基于NPM的,并将生成一个符合标准Maven布局的项目,其中包含一个使用Vite构建的前端目录。所有的准备工作都已完成,只需运行./mvnw脚本即可启动项目。
Hilla 强制执行类型在两个应用程序部分之间,这意味着您的IDE可以检测并传播 Java API 和消耗它的 TypeScript 前端之间的更改。在此框架中,自动完成和重构都可以正常运作。这种功能在全TypeScript世界中的感觉类似于 tRPC。
Hilla还通过JPA(基于Hibernate)成功集成了一些常见的SQL数据库,比如MySQL和PostgreSQL。
Hilla似乎类似于jHipster,但更独具见解。这表明Hilla在将技术整合在一起方面可能不太灵活,但它为用户提供了更流畅的体验。Hilla得到了很好的维护和文档支持。如果您希望使用Java构建全栈应用程序,并且对React或Lit作为前端感兴趣,那么Hilla是一个值得考虑的优秀框架。
▌jHipster
jHipster是一个非常灵活的全栈框架,它使用Java作为API中间件,可以将多种不同的技术统一到一个协同堆栈中。它支持多种响应式前端和各种SQL和NoSQL数据存储,让开发人员能够根据自己的需求进行选择。
jHipster与Hilla类似,首先通过NPM包jhipster-generator工具生成应用程序。生成器将引导您完成一个问卷调查,让您对其功能有一个很好的了解。
jHipster是一个强大的框架,它为您提供了选择单页面应用程序、微服务架构或网关的灵活性,让您了解该框架的范围。选择单页面应用程序后,您可以使用Spring WebFlux将其转换为响应式风格的应用程序。接下来,您可以从不同的身份验证样式中进行选择,例如JWT或Oauth 2。然后,您可以从多个数据存储选项中进行选择,如SQL、MongoDB和Cassandra,其次是第二级应用程序缓存,如Ehcache、Memcached或Redis。
jHipster生成器可以进一步集成其他技术,比如Elasticsearch用于搜索引擎、Spring Websocket用于WebSockets、Apache Kafka作为异步消息代理,还可以使用OpenAPI-generator进行API-first开发。此外,您还可以根据需要在几个前端框架中进行选择,并生成管理UI以及几个主题。
jHipster不仅支持国际化和测试功能,还同时兼容Maven和Gradle构建工具。
这一工具非常强大,不仅能够生成领域模型、数据结构,还能生成相应的用户界面。jHipster非常适合用于构建各种类型的Java应用程序。
▌GraalVM
GraalVM项目是在2018年3月开始的,旨在提供更广泛的虚拟机实现。GraalVM能够实现JVM的全部功能,甚至更多:它支持多种编程语言,可以将其输出到不同的执行环境。此外,它还包含几种编译器样式,包括JIT(即时)编译器,可提升性能。
GraalVM支持运行多种编程语言,包括C、C++、Rust、Swift等,以及处理Java、Scala、Kotlin和Groovy等字节码语言。此外,它还可以支持JavaScript、Python、Ruby和R语言。未来,我们或许可以看到GraalVM支持Zig语言。
这表明我们可以享受使用JVM编写一次代码,然后在不同地方运行的便利,适用于多种语言。举例来说,GraalVM可以接受使用GCC编译成LLVM字节码的C程序,并使用lli命令来运行它。另外,GraalVM也可以利用clang直接将C代码编译成可执行文件。GraalVM可以为许多(但不是所有)语言和平台生成独立的可执行版本。
GraalVM还支持许多目标二进制文件,比如Wasm、Linux变体、macOS、Windows、iOS和Android。针对许多目标,它支持无需安装GraalVM即可运行的本机映像。另外,它还允许开发人员选择执行模式,比如JIT编译、AOT编译和解释,以微调性能配置文件。
GraalVM得到了广泛的维护和详尽的文档支持,并拥有一个充满活力的社区。这个项目十分引人注目,逐渐成为一种通用语言工具。你可以访问GraalVM项目主页以获得更多信息。
▌Micronaut
Micronaut是一种新的Java开发方法,旨在针对现代云和无服务器环境进行优化。它提供了丰富的功能,包括用于快速启动、构建、执行和测试集成了各种技术的项目的命令行工具。最重要的是,Micronaut是围绕启用AOT的控制反转(IOC)框架设计的,这意味着即使处理大型代码库时,它也能快速启动。
除此之外,Micronaut还具备面向微服务的特性,例如服务发现、跟踪和容器化部署的能力,这使其成为现代Java开发中经过深思熟虑且备受关注的选择。
Micronaut提供了一个基于Web的项目设计工具,使用该工具可以深入了解可以集成到Micronaut核心的工具范围。 这个工具类似于Spring Initializr或jHipster的在线生成器,但又有着自己独特的方式。 在Micronaut的核心是反应式的,支持例如RxJava和Reactor这样的反应式实现,其他所有内容都建立在这个中心支柱之上。此外,Micronaut还内置了自己的反应式HTTP客户端。
Micronaut中的每个节点都是一个反应式组件,可以组合成更大的微服务架构,使用像Consul或Kubernetes这样的中央服务代理。
Micronaut是一个令人兴奋的选择,它为在基于Java的云和无服务器环境中工作的开发人员提供了一种简单采用最佳实践的方式。类似于Spring一样,Micronaut也是一站式框架,但它更加专注于具体的实现细节。
▌MicroStream
在Java的面向对象持久性领域,MicroStream可能代表了一个概念上非常精炼的进化。它能够以原样接受您的运行时对象图,并允许将其以面向对象编程语义持久化到各种底层数据存储中,这为开发人员带来了极大的便利。
MicroStream框架使您能够将注意力集中在对象和属性的设计上,而框架负责大部分数据的保存和恢复工作。作为开发人员,您仍需考虑元关注点,如获取策略和持久性边界,但这些定义非常简单,并且大部分情况下不会对应用程序代码造成干扰。应用程序代码的工作方式与不考虑持久性时一样。
MicroStream中包含根的概念,它定义了持久化树的根。一个应用程序可以拥有多个根,具体可参考表1。
MicroStream提供了保存和恢复数据的功能。
ini复制代码// Saving
EmbeddedStorageManager manager=EmbeddedStorage.start();
manager.setroot(myObject);
manager.storeRoot();
//Restoring
EmbeddedStorageManager storageEngine=EmbeddedStorage.start();
myObject=(MyClass) storageEngine.root();
MicroStream是Java中一种富有创意的新型面向对象持久化方法,对于任何新项目来说都是值得关注的。
▌TeaVM
TeaVM使得将Java编译为Wasm(WebAssembly)成为可能,这是一项具有前沿意义的技术。除了支持将Java字节码转换为JavaScript外,TeaVM还能够将Java编译为Wasm,这意味着可以在Web应用程序中使用浏览器内部的Java代码和库。这使得开发者能够更广泛地利用Java语言及其相关资源,从而扩展了Web应用程序的可能性。
TeaVM的工作原理是先将代码编译成低级中间表示形式,然后进行进一步的优化并将其转换为WebAssembly指令。生成的代码非常高效,可以在任何支持WebAssembly的现代浏览器中运行。
TeaVM的一大优势在于它对流行的Java框架(如Spring和Hibernate)提供支持。开发人员可以利用这些框架来构建复杂的全栈Web应用程序,然后将代码编译为Wasm,以便进行Web部署。
TeaVM仍然是一个新兴的项目,但许多开发者已经开始在日常工作中使用它,并不断推送修复和改进到开源存储库。从当前的情况来看,TeaVM似乎是从Java到Wasm的最佳转换路径。
总体而言,TeaVM是一个功能强大且灵活的工具,可用于在Java中开发Web应用程序,并为在浏览器和其他Wasm环境中使用Java提供了一个引人注目的解决方案。
▌Apache Flink
Flink自2011年问世以来,已经发展成为一流的事件处理框架。许多著名公司,比如Airbnb和Netflix,都在实时处理中采用它,并且它在一个相对易于管理的包中提供了许多强大的功能。
Apache Flink以分布式和容器友好的形式融合了容错和状态管理,可实现自动缩放以应对动态负载。
尽管在Kubernetes中使用Docker来运行Flink是一种常见方式,但Flink也可以利用诸如Apache Beam这样的框架,在AWS Lambda、Azure Functions和Google Cloud Functions等无服务器基础设施上运行。这种部署方式带来了只在处理期间支付使用的计算资源的好处,并且使得扩展变得更加轻松和高效。
Flink内部拥有许多功能,但基本的操作却非常易于理解。比如,在下表中,Flink可以监视端口9999上的套接字,并对接收到的文本中的单词进行计算,然后将数据输出到控制台。
在使用Flink进行简单文本处理时,可以利用Flink提供的API对文本数据进行处理和分析。可以进行词频统计、文本过滤、词语匹配等操作,以及对文本数据进行实时流处理或批处理。Flink提供了丰富的操作符和函数,能够有效地处理大规模文本数据,并支持高效的并行计算。
vbnet复制代码DataStream<String> text=env.socketTextStream("localhost",9999);
DataStream<Tuple2<String,Integer>> wordCounts=text
.flatMap(newFlatMapFunction<String,Tuple2<String,Integer>>(){
publicvoid flatMap(String value,Collector<Tuple2<String,Integer>>out){
for(String word : value.split(" ")){
out.collect(newTuple2<String,Integer>(word,1));
}
}
})
.keyBy(0)
.sum(1);
wordCounts.print();
Flink以函数式风格为特色,能够以可扩展且具有容错特性的方式将功能扩展到云基础设施中。总的来说,Flink是一个令人印象深刻的项目,特别擅长处理实时事件。
作者:Matthew Tyson
请订阅公众号“云原生数据库”获取更多技术干货。
squids.cn 是一家基于公共云基础资源的企业,提供云上的关系型数据库服务(RDS),云备份,云迁移等功能,同时也提供 SQL 窗口门户企业功能。
协助企业快速建立云端数据库融合生态。

如若转载,请注明出处:https://www.gooyie.com/66352.html