BT

您是否属于早期采用者或者创新人士?InfoQ正在努力为您设计更多新功能。了解更多

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

| 作者 Michael Redlich 关注 5 他的粉丝 ,译者 刘志勇 关注 0 他的粉丝 发布于 2017年9月5日. 估计阅读时间: 1 分钟 | 硅谷人工智能、机器学习、互联网金融、未来移动技术架构 ,尽在QCon上海2017

Apache OpenWebBeansJSR 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 也有同伴项目:

  • Apache DeltaSpike(配置、异常处理、高级 CDI)
  • Apache Sirona(监控)

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT