Giter Site home page Giter Site logo

java-template's Introduction

AsyncAPI Java Generator

Overview

This template generates Java application code based from an AsyncAPI document.

Implementations are provided for the following protocols:

Technical requirements

Supported protocols

  • ibmmq
    • This is implemented using the JMS API with the correct jars, in this case ibmmq was chosen. The use of JMS allows allows the template to be extensible to other providers by providing the correct jars at the Maven stage.
  • kafka
    • This is implemented using the official client library from the Apache Kafka project.

How to use the template

This template must be used with the AsyncAPI Generator. You can find all available options here.

CLI

# Install the AsyncAPI Generator
npm install -g @asyncapi/generator

# Run generation
ag https://ibm.biz/mq-asyncapi-yml-sample @asyncapi/java-template -o output -p server=production

Template Tutorial

For complete instructions on generating the Java and subsequently using it to send messages, please see the relevant tutorial:

Template configuration

You can configure this template by passing different parameters in the Generator CLI: -p PARAM1_NAME=PARAM1_VALUE -p PARAM2_NAME=PARAM2_VALUE

Name Description Required Default
server Server must be defined in yaml and selected when using the generator Yes -
user User for the server to generate code for. This can also be provided as an environment variable (see below) No app
password Password for the server to generate code for. This can also be provided as an environment variable (see below) No passw0rd
package Java package name for generated code No com.asyncapi
mqTopicPrefix MQ topic prefix. Used for ibmmq protocols. Default will work with dev MQ instance No dev//
asyncapiFileDir Custom output location of the AsyncAPI file that you provided as an input No The root of the output directory

Environment variables

Credentials can be provided as environment variables if preferred. If set, these credentials will override those set with the template parameters.

Name Description
APP_USER Overrides user template parameter
APP_PASSWORD Overrides password template parameter

All credentials are stored in env.json in the output directory, so they can be updated at any time without needing to run the generator or recompile the Java.

Development

The most straightforward command to use this template is:

ag https://ibm.biz/mq-asyncapi-yml-sample @asyncapi/java-template -o output -p server=production

For local development, you need different variations of this command. First of all, you need to know about three important CLI flags:

  • --debug enables the debug mode in Nunjucks engine what makes filters debugging simpler.
  • --watch-template enables a watcher of changes that you make in the template. It regenerates your template whenever it detects a change.
  • --install enforces reinstallation of the template.

There are two ways you can work on template development:

  • Use global Generator and template from your local sources:
    # assumption is that you run this command from the root of your template
    ag https://ibm.biz/mq-asyncapi-yml-sample @asyncapi/java-template -o output -p server=production
  • Use Generator from sources and template also from local sources. This approach enables more debugging options with awesome console.log in the Generator sources or even the Parser located in node_modules of the Generator:
    # assumption is that you run this command from the root of your template
    # assumption is that generator sources are cloned on the same level as the template
    ../generator/cli.js https://ibm.biz/mq-asyncapi-yml-sample @asyncapi/java-template -o output -p server=production

Key Files

As a developer, you may want to make changes to how the generator operates. This non-exhaustive list aims to show the files you will likely need to change most.

Generator Code

Path Description
template/index.js Entry point for the application
components/Common.js Common/helper functions used across the generator
utils/* Contains all filters
components/* Contains reusable components

Generated Code

Note: Files in the output directory are generated using the ag command, detailed in the above section.

Path Description
output/env.json Used for setting environmental variables such as username and password
output/com/asyncapi/PubSubBase.java The base used for generated publishers and subscribers

Container Information

To run the generated Java project in a Docker container, use the commands as below:

  1. Build the image

     docker build -t [PACKAGE_NAME]:[VERSION] .
    
  2. Run the image in detached mode

     docker run -d [PACKAGE_NAME]:[VERSION]
    

For further information including network setup, please see the tutorial.

Future Enhancements

  • General enhancements
    • Add support for multiple messages per channel (ofMany)
    • Support for MQTT
    • Support for other protocols
  • ibmmq protocol enhancements
    • Add support for TLS connections
    • Add support for more JMS Types alongside JMS Text
    • Offer Java event listener support for consumers

Contributors ✨

Thanks goes to these wonderful people (emoji key):


Dan Raper

💻 📖

Tom Jefferson

💻 📖

Lewis Relph

💻 📖 ⚠️

Kieran Murphy

💻 📖 ⚠️

Akshaya Gurlhosur

📖 ⚠️

Dale Lane

💻 📖

This project follows the all-contributors specification. Contributions of any kind welcome!

java-template's People

Contributors

asyncapi-bot avatar codingtenshi avatar dalelane avatar dan-r avatar inspire99 avatar jefflufc avatar kieranm1999 avatar lewis-relph avatar ppatierno avatar xerxesdgreat avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.