| :jbake-type: page |
| :jbake-status: published |
| |
| = Apache Tamaya - Extension: Remote Configuration |
| |
| toc::[] |
| |
| |
| [[Remote]] |
| == Tamaya Remote Configuration (Extension Module) |
| |
| Tamaya _Remote_ is an extension module. Refer to the link:../extensions.html[extensions documentation] for further details. |
| |
| |
| === What functionality this module provides ? |
| |
| Tamaya _Remote_ provides support for reading configuration from remote resources. It provides |
| out-of-the-box support for reading scoped configuration from a Tamaya configuration server as |
| provided with the Tamaya _server_ module . |
| |
| |
| === Compatibility |
| |
| The module is based on Java 7, so it will not run on Java 7 and beyond. |
| |
| |
| === Installation |
| |
| To use remote support you only must add the corresponding dependency to your module: |
| |
| [source, xml, subs=attributes+] |
| ----------------------------------------------- |
| <dependency> |
| <groupId>org.apache.tamaya.ext</groupId> |
| <artifactId>tamaya-remote</artifactId> |
| <version>{tamaya_version}</version> |
| </dependency> |
| ----------------------------------------------- |
| |
| |
| === Reading Remote configuration from a Tamaya Configuration Server |
| |
| The remote module allows reading JSON formatted configuration as provided by the Tamaya _server_ extension . The JSON |
| format used looks as follows: |
| |
| [source, 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" |
| } |
| ----------------------------------------------- |
| |
| Basically there are no constraints about they keys provided. By default Tamaya uses keys prefixed with |
| +'_'+ to identify meta-data entries, but this is not a required precondition. |
| |
| Finally such a remote configuration can be easily integrated by inheriting from the provided base |
| class. Hereby a default ordinal must be defined and the +protected Collection<URL> getAccessURLs()+ |
| method must be implemented to define the URL from where the configuration should be accessible. Hereby |
| multiple URLs can be provided, which are accesed in order as provided by the collection's iterator. The |
| first accessible URL determines the configuration read. |
| |
| [source, java] |
| ----------------------------------------------- |
| public class RemotePropertySource extends BaseRemotePropertySource{ |
| |
| @Override |
| protected Collection<URL> getAccessURLs() { |
| try { |
| String configServerUrl = System.getenv("CONFIG_SERVER"); |
| if(configServerUrl==null){ |
| configServerUrl = System.getProperty("configServer"); |
| } |
| if(configServerUrl==null){ |
| configServerUrl = "http://localhost:8888/config?scope=CLIENT&scopeId={clientId}&format=application/json"; |
| } |
| System.out.println("Reading config from " + configServerUrl.replace("{clientId}", Client.getClientId())); |
| return Arrays.asList(new URL[]{new URL(configServerUrl.replace("{clientId}", Client.getClientId()))}); |
| } catch (MalformedURLException e) { |
| Logger.getLogger(getClass().getName()).log(Level.WARNING, "Failed to configure remote config location,", e); |
| return Collections.emptySet(); |
| } |
| } |
| |
| } |
| ----------------------------------------------- |