li.moskito:inkstand

A lightweight infrastructure for standalone rest based microservices. Based on the idea and basic implementation by John Ament, https://github.com/johnament/hammock. Inkstand consists of a CDI container (Weld), a WebServer/Servlet Container (Undertow) and Jax-RS implementation and webapp (RestEasy). It provides auto resource and provider discovery and base support for JCR-based persistence.

License

License

GroupId

GroupId

li.moskito
ArtifactId

ArtifactId

inkstand
Last Version

Last Version

0.1.0
Release Date

Release Date

Type

Type

pom
Description

Description

li.moskito:inkstand
A lightweight infrastructure for standalone rest based microservices. Based on the idea and basic implementation by John Ament, https://github.com/johnament/hammock. Inkstand consists of a CDI container (Weld), a WebServer/Servlet Container (Undertow) and Jax-RS implementation and webapp (RestEasy). It provides auto resource and provider discovery and base support for JCR-based persistence.
Project URL

Project URL

https://github.com/moskitoli/inkstand/wiki
Source Code Management

Source Code Management

https://github.com/moskitoli/inkstand

Download inkstand

Filename Size
inkstand-0.1.0.pom 16 KB
Browse

How to add to project

<!-- https://jarcasting.com/artifacts/li.moskito/inkstand/ -->
<dependency>
    <groupId>li.moskito</groupId>
    <artifactId>inkstand</artifactId>
    <version>0.1.0</version>
    <type>pom</type>
</dependency>
// https://jarcasting.com/artifacts/li.moskito/inkstand/
implementation 'li.moskito:inkstand:0.1.0'
// https://jarcasting.com/artifacts/li.moskito/inkstand/
implementation ("li.moskito:inkstand:0.1.0")
'li.moskito:inkstand:pom:0.1.0'
<dependency org="li.moskito" name="inkstand" rev="0.1.0">
  <artifact name="inkstand" type="pom" />
</dependency>
@Grapes(
@Grab(group='li.moskito', module='inkstand', version='0.1.0')
)
libraryDependencies += "li.moskito" % "inkstand" % "0.1.0"
[li.moskito/inkstand "0.1.0"]

Dependencies

compile (4)

Group / Artifact Type Version
org.slf4j : slf4j-api jar 1.7.6
org.apache.logging.log4j : log4j-slf4j-impl jar 2.0-rc1
org.apache.logging.log4j : log4j-api jar 2.0-rc1
org.apache.logging.log4j : log4j-core jar 2.0-rc1

provided (1)

Group / Artifact Type Version
org.jacoco : jacoco-maven-plugin jar 0.7.2.201409121644

test (2)

Group / Artifact Type Version
junit : junit jar 4.11
org.mockito : mockito-all jar 1.9.5

Project Modules

  • inkstand-core
  • inkstand-jcr
  • inkstand-jcr-jackrabbit
  • inkstand-http-undertow
  • inkstand-deployments
  • inkstand-ms

Build Status

Inkstand

Inkstand, a lightweight integration of RestEasy, Undertow, and Weld, based on Hammock by John Ament.

In comparison to the original hammock project, Inkstand provides the following features:

  • default configuration, overridable with properties or JVM parameters
  • separation of webserver and application configuration
  • automatic Resource and Provider discovery per default
  • exchangeable / injectable HTTP container
  • exchangeable Resteasy deployment (CDI extension)
  • injectable JCR support (Jackrabbit 2)
  • global alternative support (CDI extension)
  • NO support for management resources

Configuration

Beyond Hammock, Inkstand provides a default configuration for the HTTP server (localhost:80) which can easily be overriden - either by providing JVM parameters -Dinkstand.http.port= -Dinkstand.http.listenaddress= or by providing a properties file by implementing org.apache.deltaspike.core.api.config.PropertyFileConfig containing the very same parameters. Alternatively, the parameters can be set by implementing the WebServerConfiguration interface.

Resources and Providers

Per default, inkstand scans the classpath for Path resources an Providers which are automatically published as REST services. The default contextRoot can be overridden by defining the property inkstand.rest.contextRoot (see above) or by implementing and injecting an implementation of ApplicationConfiguration.

HTTP Container and Rest Implementation

Inkstand allows to replace the http container (default: undertow) by providing an Alternative an the Rest implementation (default: Resteasy without security).

JCR support

For application integration, Inkstand provides injectable access to a Jackrabbit based JCR repository (OAK is planned).

Global Alternatives

One of the more important feature is the CDI Extention GlobalAlternativeSelector. The selector allows to define an alternative class or stereotype in an application jar's beans.xml, which are injectable as alternative in other bean deployment archive as long as they are annotation with @Priority. The default CDI 1.1 spec only supports the @Priority annotation, but does not allow to select a global alternative in a beans.xml. The feature was required for JCR Repository providers to be injected in REST service JARs, that are defined in another jar than the actual application. Example:

  • jar1: inkstand-jcr-jackrabbit (@Produces Repository)
  • jar2: my-rest-services (@Inject Repository)
  • jar3: standalone (depends: inkstand, inkstand-jcr-jackrabbit, my-rest-services, defines global alternative in beans.xml)

Versions

Version
0.1.0
0.0.2
0.0.1