Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Karaf Configuration as a Groovy File

DZone's Guide to

Karaf Configuration as a Groovy File

Override Apache Karaf's configuration defaults by bringing Groovy onto the stage. Here's the straightforward process of letting Groovy handle your properties with Karaf.

· Java Zone ·
Free Resource

Verify, standardize, and correct the Big 4 + more– name, email, phone and global addresses – try our Data Quality APIs now at Melissa Developer Portal!

By default, Apache Karaf keeps configuration for bundles in the etc directory as flat properties files. We can override the configuration for the storing mechanism by providing our own implementation of the org.apache.felix.cm.PersistenceManager interface and use a much more readable format for bundle properties, e.g. Groovy config.

Turning Off Built-In Karaf Persistence

As we can read in the Karaf documentation:

Apache Karaf persists configuration using own persistence manager in case of when available persistence managers do not support that.

We will use our custom implementation of persistence, so Karaf persistence is not needed. We can turn it off by setting the variable storage to an empty value:

$ cat etc/org.apache.karaf.config.cfg
storage=


This option has been available since version 4.1.3 when this issue was resolved.

Registering a Custom Persistence Manager

First, we have to create and register an OSGi service implementing org.apache.felix.cm.PersistenceManager. If we build and install the bundle with such a service while Karaf is running (e.g. by putting a JAR in the deploy directory), then we should have at least two PersistenceManager services registered:

karaf@root()> ls org.apache.felix.cm.PersistenceManager
[org.apache.felix.cm.PersistenceManager]
----------------------------------------
 service.bundleid = 7
 service.description = Platform Filesystem Persistence Manager
 service.id = 14
 service.pid = org.apache.felix.cm.file.FilePersistenceManager
 service.ranking = -2147483648
 service.scope = singleton
 service.vendor = Apache Software Foundation
Provided by :
 Apache Felix Configuration Admin Service (7)
Used by:
 Apache Felix Configuration Admin Service (7)

[org.apache.felix.cm.PersistenceManager]
----------------------------------------
 osgi.service.blueprint.compname = groovyConfigPersistenceManager
 service.bundleid = 56
 service.id = 117
 service.pid = com.github.alien11689.osgi.util.groovyconfig.impl.GroovyConfigPersistenceManager
 service.ranking = 100
 service.scope = bundle
Provided by :
 groovy-config (56)
Used by:
 Apache Felix Configuration Admin Service (7)


Loaded configurations will be cached by the configuration admin. We can use an org.apache.felix.cm.NotCachablePersistenceManager interface if we want to implement a custom caching strategy.

Creating a New Properties File

Let's create a new properties file in Groovy, e.g:

$ cat etc/com.github.alien11689.test1.groovy
a = '7'
b {
    c {
        d = 1
        e = 2
    }
    z = 9
}
x.y.z='test'


If we search for properties with the pid com.github.alien11689.test1, Karaf will find these.

karaf@root()> config:list '(service.pid=com.github.alien11689.test1)'
----------------------------------------------------------------
Pid:            com.github.alien11689.test1
BundleLocation: null
Properties:
   a = 7
   b.c.d = 1
   b.c.e = 2
   b.z = 9
   service.pid = com.github.alien11689.test1
   x.y.z = test


If we make any changes to the file, they won't be mapped to properties because there are no file watchers defined for it.

We could manage such properties using Karaf commands instead.

Managing Configuration via Karaf Commands

We can define a new pid using Karaf commands:

karaf@root()> config:property-set -p com.github.alien11689.test2 f.a 6
karaf@root()> config:property-set -p com.github.alien11689.test2 f.b 'test'


Since our PersistenceManager has a higher service.ranking (100 > -2147483648), the new pid will be stored as a Groovy file:

$ cat etc/com.github.alien11689.test2.groovy
f {
    b='test'
    a='6'
}


We can also change/remove properties or remove the whole configuration pid using Karaf commands, and it will all be mapped to Groovy configuration files.

Sources

Sources are available on GitHub.

Developers! Quickly and easily gain access to the tools and information you need! Explore, test and combine our data quality APIs at Melissa Developer Portal – home to tools that save time and boost revenue. 

Topics:
karaf ,osgi ,configuration ,groovy ,java ,tutorial

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}