2017-11-25

Tamaya Configuration Server (Extension Module)

Tamaya Server is an extension module. Refer to the extensions documentation for further details.

What functionality this module provides ?

The Tamaya Server module provides support for providing scoped configuration using a http server serving JSON formatted configuration properties.

Compatibility

The module is based on Java 7, so it will not run on Java 7 and beyond.

Installation

To benefit from configuration server support you only must add the corresponding dependency to your module:

<dependency>
  <groupId>org.apache.tamaya.ext</groupId>
  <artifactId>tamaya-server</artifactId>
  <version>{tamaya_version}</version>
</dependency>

Providing configuration using the Tamaya Built-in Configuration Server

The most simple way for providing configuration is to start the internal server:

// using context path: '/', port 8085
org.apache.tamaya.server.Server.start();

// optionally pass the root context path and/or port:
// org.apache.tamaya.server.Server.start(8088);
// org.apache.tamaya.server.Server.start("/appconf", 7787);

This will start a simple server instance that serves the following URL patterns:

  • GET ${CONTEXT}/config provides access to the full configuration tree.

  • GET ${CONTEXT}/config/filtered/${path} let you filter the configuration returned using regular expression (comma separated). E.g. ${CONTEXT}/config/filtered/java,sun will return all configuration entries starting with java and sun.

Additionally the server module has the following options implemented, which can be passed as additional, optional parameters:

  • format allows to define the target format. By default the ACCEPT header of the http request is checked, but this setting can be explicitly controlled by passing this parameter explicitly. The value is the expected MIME type to be returned. By default the service supports the following types:

    • text/html

    • text/plain

    • application/xml

    • application/json

Using the Configuration Servlets

You can also register a servlet, e.g. as follows;

<servlet>
  <servlet-name>config-servlet</servlet-name>
  <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
  <init-params>
    <init-param key="javax.ws.rs.Application">org.apache.tamaya.server.Server$ResourceLoader</init-param>
  </init-params>
</servlet>

Formatting used by Default

The server module formats the configuration returned by default in the following variants:

Formatting for text/json
{
  "java.vendor.url": "http://java.oracle.com/",
  "java.vendor.url.bug": "http://bugreport.sun.com/bugreport/",
  "java.vm.info": "mixed mode",
  "java.vm.name": "Java HotSpot(TM) 64-Bit Server VM",
  "java.vm.specification.name": "Java Virtual Machine Specification",
  "java.vm.specification.vendor": "Oracle Corporation",
  "java.vm.specification.version": "1.8",
  "java.vm.vendor": "Oracle Corporation",
  "java.vm.version": "25.45-b02",
  "sun.arch.data.model": "64",
  "sun.boot.class.path": "C:\apps\jdk18\jre\lib\resources.jar;C:\apps\jdk18\jre\lib\rt.jar;C:\apps\jdk18\jre\lib\sunrsasign.jar;C:\apps\jdk18\jre\lib\jsse.jar;C:\apps\jdk18\jre\lib\jce.jar;C:\apps\jdk18\jre\lib\charsets.jar;C:\apps\jdk18\jre\lib\jfr.jar;C:\apps\jdk18\jre\classes",
  "sun.boot.library.path": "C:\apps\jdk18\jre\bin",
  "sun.cpu.endian": "little",
  "sun.cpu.isalist": "amd64",
  "sun.desktop": "windows",
  "sun.io.unicode.encoding": "UnicodeLittle",
  "sun.java.command": "com.intellij.rt.execution.application.AppMain org.apache.tamaya.examples.remote.server.Start",
  "sun.java.launcher": "SUN_STANDARD",
  "sun.jnu.encoding": "Cp1252",
  "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers",
  "sun.os.patch.level": "",
  "_class": "org.apache.tamaya.functions.FilteredConfiguration",
  "_info.filter": "java.v,sun",
  "_info.format": "application/json",
  "_info.timestamp": "1441463200571",
  "_timestamp": "1441463200571",
  "_type": "Configuration"
}
Formatting for application/xml
<configuration>
  <entry key="java.vendor.url">http://java.oracle.com/</entry>
  <entry key="java.vendor.url.bug">http://bugreport.sun.com/bugreport/</entry>
  <entry key="java.vm.info">mixed mode</entry>
  <entry key="java.vm.name">Java HotSpot(TM) 64-Bit Server VM</entry>
  <entry key="java.vm.specification.name">Java Virtual Machine Specification</entry>
  <entry key="java.vm.specification.vendor">Oracle Corporation</entry>
  <entry key="java.vm.specification.version">1.8</entry>
  <entry key="java.vm.vendor">Oracle Corporation</entry>
  <entry key="java.vm.version">25.45-b02</entry>
  <entry key="sun.arch.data.model">64</entry>
  <entry key="sun.boot.class.path">C:\apps\jdk18\jre\lib\resources.jar;C:\apps\jdk18\jre\lib\rt.jar;C:\apps\jdk18\jre\lib\sunrsasign.jar;C:\apps\jdk18\jre\lib\jsse.jar;C:\apps\jdk18\jre\lib\jce.jar;C:\apps\jdk18\jre\lib\charsets.jar;C:\apps\jdk18\jre\lib\jfr.jar;C:\apps\jdk18\jre\classes</entry>
  <entry key="sun.boot.library.path">C:\apps\jdk18\jre\bin</entry>
  <entry key="sun.cpu.endian">little</entry>
  <entry key="sun.cpu.isalist">amd64</entry>
  <entry key="sun.desktop">windows</entry>
  <entry key="sun.io.unicode.encoding">UnicodeLittle</entry>
  <entry key="sun.java.command">com.intellij.rt.execution.application.AppMain org.apache.tamaya.examples.remote.server.Start</entry>
  <entry key="sun.java.launcher">SUN_STANDARD</entry>
  <entry key="sun.jnu.encoding">Cp1252</entry>
  <entry key="sun.management.compiler">HotSpot 64-Bit Tiered Compilers</entry>
  <entry key="sun.os.patch.level"></entry>
  <entry key="_class">org.apache.tamaya.functions.FilteredConfiguration</entry>
  <entry key="_info.filter">java.v,sun</entry>
  <entry key="_info.format">application/xml</entry>
  <entry key="_info.timestamp">1441463383687</entry>
  <entry key="_timestamp">1441463383687</entry>
  <entry key="_type">Configuration</entry>
</configuration>
Formatting for text/plain
Configuration:
  java.vendor.url: http://java.oracle.com/,
  java.vendor.url.bug: http://bugreport.sun.com/bugreport/,
  java.vm.info: mixed mode,
  java.vm.name: Java HotSpot(TM) 64-Bit Server VM,
  java.vm.specification.name: Java Virtual Machine Specification,
  java.vm.specification.vendor: Oracle Corporation,
  java.vm.specification.version: 1.8,
  java.vm.vendor: Oracle Corporation,
  java.vm.version: 25.45-b02,
  sun.arch.data.model: 64,
  sun.boot.class.path: C:\apps\jdk18\jre\lib\resources.jar;C:\apps\jdk18\jre\lib\rt.jar;C:\apps\jdk18\jre\lib\sunrsasign.jar;C:\apps\jdk18\jre\lib\jsse.jar;C:\apps\jdk18\jre\lib\jce.jar;C:\apps\jdk18\jre\lib\charsets.jar;C:\apps\jdk18\jre\lib\jfr.jar;C:\apps\jdk18\jre\classes,
  sun.boot.library.path: C:\apps\jdk18\jre\bin,
  sun.cpu.endian: little,
  sun.cpu.isalist: amd64,
  sun.desktop: windows,
  sun.io.unicode.encoding: UnicodeLittle,
  sun.java.command: com.intellij.rt.execution.application.AppMain org.apache.tamaya.examples.remote.server.Start,
  sun.java.launcher: SUN_STANDARD,
  sun.jnu.encoding: Cp1252,
  sun.management.compiler: HotSpot 64-Bit Tiered Compilers,
  sun.os.patch.level: ,
  _class: org.apache.tamaya.functions.FilteredConfiguration,
  _info.filter: java.v,sun,
  _info.format: text/plain,
  _info.timestamp: 1441463082020,
  _timestamp: 1441463082021,
  _type: Configuration
Formatting for application/html
<html>
<head><title>System Configuration</title></head>
<body>
<h1>Sysem Configuration</h1>
<p>This view shows the system configuration of devbox-win at Sat Sep 05 16:30:59 CEST 2015.</p><pre>
Configuration:
  java.vendor.url: http://java.oracle.com/,
  java.vendor.url.bug: http://bugreport.sun.com/bugreport/,
  java.vm.info: mixed mode,
  java.vm.name: Java HotSpot(TM) 64-Bit Server VM,
  java.vm.specification.name: Java Virtual Machine Specification,
  java.vm.specification.vendor: Oracle Corporation,
  java.vm.specification.version: 1.8,
  java.vm.vendor: Oracle Corporation,
  java.vm.version: 25.45-b02,
  sun.arch.data.model: 64,
  sun.boot.class.path: C:\apps\jdk18\jre\lib\resources.jar;C:\apps\jdk18\jre\lib\rt.jar;C:\apps\jdk18\jre\lib\sunrsasign.jar;C:\apps\jdk18\jre\lib\jsse.jar;C:\apps\jdk18\jre\lib\jce.jar;C:\apps\jdk18\jre\lib\charsets.jar;C:\apps\jdk18\jre\lib\jfr.jar;C:\apps\jdk18\jre\classes,
  sun.boot.library.path: C:\apps\jdk18\jre\bin,
  sun.cpu.endian: little,
  sun.cpu.isalist: amd64,
  sun.desktop: windows,
  sun.io.unicode.encoding: UnicodeLittle,
  sun.java.command: com.intellij.rt.execution.application.AppMain org.apache.tamaya.examples.remote.server.Start,
  sun.java.launcher: SUN_STANDARD,
  sun.jnu.encoding: Cp1252,
  sun.management.compiler: HotSpot 64-Bit Tiered Compilers,
  sun.os.patch.level: ,
  _class: org.apache.tamaya.functions.FilteredConfiguration,
  _info.filter: java.v,sun,
  _info.format: text/html,
  _info.timestamp: 1441463459653,
  _timestamp: 1441463459654,
  _type: Configuration
</pre>
</body>
</html>