Skip to content

pip-services3-java/pip-services3-commons-java

Repository files navigation

Pip.Services Logo
Portable Abstractions and Patterns for Java

This module is a part of the Pip.Services polyglot microservices toolkit. It provides a set of basic patterns used in microservices or backend services. Also the module implemenets a reasonably thin abstraction layer over most fundamental functions across all languages supported by the toolkit to facilitate symmetric implementation.

The module contains the following packages:

  • Commands - Commanding and Eventing patterns
  • Config - configuration framework
  • Convert - portable soft value converters
  • Data - data value objects and random value generators
  • Errors - portable application errors
  • Random - random data generators
  • Refer - component referencing framework
  • Reflect - portable reflection helpers
  • Run - execution framework
  • Validate - data validators

Quick links:

Use

Go to the pom.xml file in Maven project and add dependencies::

<dependency>
  <groupId>org.pipservices3</groupId>
  <artifactId>pip-services3-commons</artifactId>
  <version>3.1.0</version>
</dependency>

Then you are ready to start using the Pip.Services patterns to augment your backend code.

For instance, here is how you can implement a component, that receives configuration, get assigned references, can be opened and closed using the patterns from this module.

package org.pipservices3.commons;

import org.pipservices3.commons.config.ConfigParams;
import org.pipservices3.commons.config.IConfigurable;
import org.pipservices3.commons.errors.ApplicationException;
import org.pipservices3.commons.errors.ConfigException;
import org.pipservices3.commons.refer.IReferenceable;
import org.pipservices3.commons.refer.IReferences;
import org.pipservices3.commons.refer.ReferenceException;
import org.pipservices3.commons.run.IOpenable;

public class MyComponentA implements IConfigurable, IReferenceable, IOpenable {

    private String _param1 = "ABC";
    private int _param2 = 123;
    private MyComponentB _anotherComponent;
    private boolean _opened = true;

    @Override
    public void configure(ConfigParams config) throws ConfigException {
        this._param1 = config.getAsStringWithDefault("param1", this._param1);
        this._param2 = config.getAsIntegerWithDefault("param2", this._param2);
    }

    @Override
    public void setReferences(IReferences references) throws ReferenceException, ConfigException {
        this._anotherComponent = refs.getOneRequired<MyComponentB>(
                new Descriptor("myservice", "mycomponent-b", "*", "*", "1.0")
        );
    }

    @Override
    public boolean isOpen() {
        return this._opened;
    }

    @Override
    public void open(String correlationId) throws ApplicationException {
        this._opened = true;
        System.out.println("MyComponentA has been opened.");
    }

    @Override
    public void close(String correlationId) throws ApplicationException {
        this._opened = true;
        System.out.println("MyComponentA has been closed.");
    }
}

Then here is how the component can be used in the code

import org.pipservices3.commons.config.ConfigParams;
import org.pipservices3.commons.errors.ApplicationException;
import org.pipservices3.commons.errors.ConfigException;
import org.pipservices3.commons.refer.Descriptor;
import org.pipservices3.commons.refer.References;

public class MainClass {
    public static void main(String[] args) throws ApplicationException {
        MyComponentA myComponentA = new MyComponentA();

        // Configure the component
        myComponentA.configure(ConfigParams.fromTuples(
                "param1", "XYZ",
                "param2", 987
        ));

        // Set references to the component
        myComponentA.setReferences(References.fromTuples(
                new Descriptor("myservice", "mycomponent-b", "default", "default", "1.0"),
                myComponentB
        ));

        // Open the component
        myComponentA.open("123");
        System.out.println("MyComponentA has been opened.");
    }
}

Develop

For development you shall install the following prerequisites:

  • Java SE Development Kit 8+
  • Eclipse Java Photon or another IDE of your choice
  • Docker
  • Apache Maven

Build the project:

mvn install

Run automated tests:

mvn test

Generate API documentation:

./docgen.ps1

Before committing changes run dockerized build and test as:

./build.ps1
./test.ps1
./clear.ps1

Contacts

The initial implementation is done by Sergey Seroukhov. Pip.Services team is looking for volunteers to take ownership over Java implementation in the project.

About

Common patterns for Pip.Services in Java

Resources

License

Stars

Watchers

Forks

Packages

No packages published