写点什么

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 类为示例应用程序定义了 fisrtNamelastName。请注意使用名为 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 查询参数、firstNamelastName,以及一个内部类,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 查询参数可用于更改在 firstNamelastName 中定义的默认值。以下是通过 URL 只更改 firstName 的示例:

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

下一个示例演示如何通过 URL 同时更改 firstNamelastName

复制代码
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精选文章