Giter VIP home page Giter VIP logo

stacks-java-core-messaging's Introduction

Stacks core-messaging module

Module Overview

This module provides basic functionality to handle event management in an application. It contains the base class for ApplicationEvent instances as showcased in the Stacks workflow with CQRS and Events as well as base classes to construct publishers and listeners. There is also a decorated publisher class that also initialises a listener.

Module Structure

In the following diagram, you can see all the relevant files of this module. Be aware, pulling from the repository will have some extra files that are not relevant to the logic but required to build and deploy.

Project structure

java
\_.mvn
: |_settings.xml
|_archetype.properties
|_pom.xml
\_src
: \_main
:   \_java
:    \_com.amido.stacks.core.messaging
:     \_event
:      |_ApplicationEvent.java
:     \_listen
:      |_ApplicationEventListener.java
:      |_DefaultEventListeener.java
:     \_publish
:      |_ApplicationEventPublisher.java
:      |_ApplicationEventPublisherWithListener.java
:      |_DefaultEventPublisher.java

How to use

There are four ways to integrate this module into your project:

Use it as a dependency

Maven

In the dependencies section of your application's pom.xml add:

<dependency>
    <groupId>com.amido.stacks.modules</groupId>
    <artifactId>stacks-core-messaging</artifactId>
    <version>1.0.0</version>
</dependency>

Then you can do a ./mvnw clean compile to fetch it; after that, you can use it like any other dependency.

./mvnw clean compile

Others

Use it as you'd use any dependency in your build tool.

Localized solution using Maven Archetypes

If you wish to customise the module and use your organisation's namespaces instead of Amido's. You can create a Maven archetype. Archetype is Maven's tool for scaffolding and offers lots of extra functionality. We suggest spending some time looking into them. We use Archetype to create a template and enable you to adopt this module under your organisation's namespace. To use the deployed archetypes:

  1. Make and move to a new folder

  2. Then run

    mvn archetype:generate \
        -DarchetypeGroupId='com.amido.stacks.modules' \
        -DarchetypeArtifactId='stacks-core-messaging-archetype' \
        -DarchetypeVersion='<archetype version>' \
        -DgroupId='<your-group-id>' \
        -DartifactId='<your-artifact-id>' \
        -Dversion='<your-version>' \
        -Dpackage='<package-name>'
    • <your-group-id> is a placeholder for your group ID
    • <your-artifact-id> is a placeholder for your artefact ID
    • <your-version> is a placeholder for your version
    • <package-name> is a placeholder for the root package name and structure. It should start with your groupdId and continue with the name of the root package.

    For example, using -DgroupId=com.test and -Dpackage=com.test.stacks will instruct Maven to place the code in src/main/java/com/test/stacks and update all the relevant references accordingly (i.e. imports)

  3. Go to the pom.xml file of the project you'll be using this module in and add it as a dependency

Example: Using -DgroupId=com.test and -Dpackage=com.test.stacks will instruct Maven to place the code in src/main/java/com/test/stacks and update all the relevant references accordingly (i.e. imports)

If you previously had used this module under different namespace (i.e. the default com.amido.stacks.core-messaging):

Maven ONLY updates the imports for the module you generated. Any references in other projects will remain to the previous namespace.

You will need to

  • Update them manually
  • Re-create the relevant import statements to use the new-made module instead
  • If you plan to use this with Amido Stacks, include your namespace in the @ComponentScan annotation of the Application class.

Building the module locally from this repository

To build the module locally:

  1. Clone this repo
  2. Navigate to the java folder
  3. run ./mvnw clean install to install the module locally.
  4. Add it as any other dependency

Creating an Archetype from this repository

If you wish to customise the module and use your organisation's namespaces instead of Amido's. You can create a Maven archetype. Archetype is Maven's tool for scaffolding and offers lots of extra functionality. We suggest spending some time looking into them. We use Archetype to create a template and enable you to adopt this module under your organisation's namespace. To use the deployed archetypes: To build, install and use the archetype follow these steps:

  1. Clone this repo

  2. Navigate to the <directory you cloned the project into>/java in the terminal

  3. Then issue the following Maven commands, using the included wrapper:

    1. Create the archetype from the existing code

      ./mvnw archetype:create-from-project -DpropertyFile='./archetype.properties'
    2. Navigate to the folder it was created in

      cd target/generated-sources/archetype
    3. Install the archetype locally

      ..\..\..\mvnw install
  4. Make and navigate to a directory in which you'd like to create the localized project, ideally outside this project's root folder

  5. To create the project, use the command below:

    <path-to-mvn-executable>/mvnw archetype:generate \
        -DarchetypeGroupId='com.amido' \
        -DarchetypeArtifactId='stacks-core-messaging' \
        -DarchetypeVersion='1.0.0-SNAPSHOT' \
        -DgroupId='<your-group-id>' \
        -DartifactId='<your-artifact-id>' \
        -Dversion='<your-version>' \
        -Dpackage='<package-name>'`
    1. <your-group-id> is a placeholder for your group ID
    2. <your-artifact-id> is a placeholder for your artefact ID
    3. <your-version> is a placeholder for your version
    4. <package-name> is a placeholder for the root package name and structure. It should start with your groupdId and continue with the name of the root package.

    For example, using -DgroupId=com.test and -Dpackage=com.test.stacks will instruct Maven to place the code in src/main/java/com/test/stacks and update all the relevant references accordingly (i.e. imports)

  6. Go to the pom.xml file of the project you'll be using this module in and add it as a dependency

Example: Using -DgroupId=com.test and -Dpackage=com.test.stacks will instruct Maven to place the code in src/main/java/com/test/stacks and update all the relevant references accordingly (i.e. imports)

If you previously had used this module under different namespace (i.e. the default com.amido.stacks.core-messaging):

Maven ONLY updates the imports for the module you generated. Any references in other projects will remain to the previous namespace.

You will need to

  • Update them manually
  • Re-create the relevant import statements to use the new-made module instead
  • If you plan to use this with Amido Stacks, include your namespace in the @ComponentScan annotation of the Application class.

stacks-java-core-messaging's People

Contributors

guillermogutierrez avatar johnsall avatar elvenspellmaker avatar radoslaw-orlowski avatar iamsamd avatar

Watchers

Simon Evans avatar Richard Slater avatar  avatar Andy Hale avatar Rob Selway avatar  avatar  avatar Lee Saxby avatar  avatar Andrew Waite 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.