BT

Your opinion matters! Please fill in the InfoQ Survey!

Apache OpenWebBeans Releases Meecrowave Server Version 1.0 for Java EE-Based Microservices

| by Michael Redlich Follow 6 Followers on Aug 30, 2017. Estimated reading time: 3 minutes |

A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.

Apache OpenWebBeans, an implementation of JSR 365 dependency injection (CDI 2.0), recently released version 1.0 of their Meecrowave microservices server that provides built-in support for the Java Persistence API (JPA), the Java Transaction API (JTA), and OAuth2 without requiring a full container such as Java EE.

Meecrowave is built on top of some existing Apache projects, including Tomcat (servlets), OpenWebBeans (CDI), Johnzon (JSON-P and JSON-B), and CFX (JAX-RS).

Meecrowave, initially released in January 2017, may be used for microservices and standalone applications. As defined in their blog:

Meecrowave can be either started via a maven plugin (for ease of development), or programmatically as an embedded server, bundled as an application with your business code or as a runner to start up a portable WAR or JAR applications.

Meecrowave is comprised of the following components:

The core component defines a range of configuration and command line interface (CLI) options. Custom CLI options may also be defined by implementing the Cli.Options interface and using the @CliOption annotation as shown below.

The Maven and Gradle components provide the properties that correspond with the core configuration and CLI options, and allow for changes to the default values.

Getting Started

The following JAX-RS example demonstrates how to get started with Meecrowave.

The Defaults class defines a default first and last name for the example application. Note the use of extending the CLI with an option named app-default-name along with its corresponding description.

    
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;
       }
   }
    

The DefaultsProducer class injects an instance of Meecrowave’s Builder class for initiating Meecrowave. The getExtension() method captures the name and description defined in the @CliOption annotation from the Defaults class.

    
@Dependent
public class DefaultsProducer {
   @Inject
   private Meecrowave.Builder builder;

   @Produces
   @ApplicationScoped
   public Defaults defaults() {
       return builder.getExtension(Defaults.class);
       }
   }
    

The SimpleApplication class defines the main application path, redlich:

    
@Dependent
@ApplicationPath("redlich")
public class SimpleApplication extends Application {
   }
    

The SimpleEndpoint class defines the endpoint, meecrowave, URL query parameters, firstName and lastName, and an inner class, Hello, a Java bean used to model a first and last name.

    
@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;
           }
       }
   }
    

Compile and run with Maven:

    
mvn clean package meecrowave:run
    

Once the server is running, the complete URL is comprised of the main application path and endpoint that may be entered in the browser:

    
http://localhost:8080/redlich/meecrowave
    

Note the default values of “Michael” and “Redlich” are displayed. URL query parameters may be used to change the default values defined in firstName and lastName. The following example changes only the first name via the URL:

    
http://localhost:8080/redlich/meecrowave?firstName=Rowena
    

This next example demonstrates how to change both first and last names via the URL:

    
http://localhost:8080/redlich/meecrowave?firstName=Barry&lastName=Burd
    

The entire sample application can be found on GitHub.

Meecrowave also has companion projects:

  • Apache DeltaSpike (configuration, exception handling, advanced CDI)
  • Apache Sirona (monitoring)

Support for the new CDI 2.0 specification is gaining traction, and Apache recently released OpenWebBeans 2.0.0 that was designed to work with the new CDI 2.0 specification.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and don't miss out on content that matters to you

BT