写点什么

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

  • 2017 年 9 月 04 日
  • 本文字数:2063 字

    阅读完需:约 7 分钟

Apache OpenWebBeans , JSR 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 类为示例应用程序定义了 fisrtName 和 lastName。请注意使用名为 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 查询参数、firstName 和 lastName,以及一个内部类,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

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

复制代码
http://localhost:8080/redlich/meecrowave?firstName=Rowena

下一个示例演示如何通过 URL 同时更改 firstName 和 lastName:

复制代码
http://localhost:8080/redlich/meecrowave?firstName=Barry&lastName=Burd

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

Meecrowave 也有同伴项目:

新的 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 )关注我们。

2017 年 9 月 04 日 19:001761
用户头像

发布了 352 篇内容, 共 140.0 次阅读, 收获喜欢 898 次。

关注

评论

发布
暂无评论
发现更多内容

Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答

程序员小富

Java 编程 程序员 分布式 nacos

今天,「浪潮云说」直播间开讲啦!

浪潮云

云计算

为什么nginx主机的io使用率会100%?

BUG侦探

nginx proxy_buffering docker镜像

并发王者课-铂金7:整齐划一-CountDownLatch如何协调多线程的开始和结束

MetaThoughts

Java 多线程 并发

iOS不行?还是个人能力有限?

祈

ios 程序员 IT 编程之路

iOS开发 · iOS音视频开发 - ARKit 教学:如何搭配SceneKit来建立一个简单的ARKit Demo

iOSer

ios ios开发 ARKit iOSAR.

数字经济时代,国家与国家的核心竞争力就是算力

CECBC

DDD笔记

topsion

免费分享学习Java框架Netty的优秀图书

Java入门到架构

Java 书籍推荐

聊聊数据仓库中维度表设计的二三事

云祁

数据仓库 维度建模 7月日更

Java开发从二面被拒到收割阿里架构offer,我花了一年时间,复盘成功经历!

Java架构追梦

Java 阿里巴巴 架构 offer 成长笔记

并发王者课-铂金6:青出于蓝-Condition如何把等待与通知玩出新花样

MetaThoughts

Java 多线程 并发

并发王者课-铂金8:峡谷幽会-看CyclicBarrier如何跨越重峦叠嶂

MetaThoughts

Java 并发 多线

Rust从0到1-Cargo-安装来自Crates.io的程序

山

rust cargo install

论文解读丨文档结构分析

华为云开发者社区

模型 文档 文档结构分析 分割 文档结构

CDH安装搭建(一)

大数据技术指南

CDH 7月日更

从结构体、内存池初始化到申请释放,详细解读鸿蒙轻内核的动态内存管理

华为云开发者社区

鸿蒙

CloudQuery 使用教程 No.4 数据查询(下)

CloudQuery社区

云 dba 数据库管理工具 国产数据库 运维开发

一文讲懂Hive高可用、HiveServer2高可用及Metastore高可用

白程序员的自习室

数据仓库 7月日更 HiveServer2高可用 Metastore高可用 Hive高可用

系统故障防不胜防?不存在的,让大佬来给你上一课!

数列科技

高可用 测试 全链路压测 测试工具 生产环境全链路压测

《持之以恒的从事运动》二

Changing Lin

从零实现一个 k-v 存储引擎

roseduan

存储 Go 语言 KV存储引擎 存储系统

阿里P8耗时半年总结的Java核心面试知识,助我轻松拿下蚂蚁offer

Java 程序员 面试 java编程 java技术宅

数字化转型提升太平洋保险风险治理能力

数据湖洞见

大数据

不愧是阿里内部“SpringCloudAlibaba学习笔记”竟然在GitHub霸榜月余

Java 编程 架构 微服务

Flink 的底层API

五分钟学大数据

flink 7月日更

云图说 | 华为云医疗智能体智联大健康:AI医学影像

华为云开发者社区

AI 医学影像 医疗智能体 华为云医疗智能体 大健康

Serverless 崛起背后的五大挑战

Serverless Devs

Serverless

合肥智慧社区平台建设解决方案,平安小区建设

13823153121

涨薪50%,从小厂逆袭,坐上美团L8技术专家(面经+心得)

Java 编程 程序员 面试

阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践

JackJiang

flutter 即时通讯 IM

Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0_Java_Michael Redlich_InfoQ精选文章