io.thorntail:config-api

Thorntail: Parent

License

License

AL2
Categories

Categories

config Application Layer Libs Configuration
GroupId

GroupId

io.thorntail
ArtifactId

ArtifactId

config-api
Last Version

Last Version

2.7.0
Release Date

Release Date

Type

Type

jar
Description

Description

Thorntail: Parent
Project Organization

Project Organization

JBoss by Red Hat
Source Code Management

Source Code Management

https://github.com/wildfly-swarm/wildfly-config-api

Download config-api

How to add to project

<!-- https://jarcasting.com/artifacts/io.thorntail/config-api/ -->
<dependency>
    <groupId>io.thorntail</groupId>
    <artifactId>config-api</artifactId>
    <version>2.7.0</version>
</dependency>
// https://jarcasting.com/artifacts/io.thorntail/config-api/
implementation 'io.thorntail:config-api:2.7.0'
// https://jarcasting.com/artifacts/io.thorntail/config-api/
implementation ("io.thorntail:config-api:2.7.0")
'io.thorntail:config-api:jar:2.7.0'
<dependency org="io.thorntail" name="config-api" rev="2.7.0">
  <artifact name="config-api" type="jar" />
</dependency>
@Grapes(
@Grab(group='io.thorntail', module='config-api', version='2.7.0')
)
libraryDependencies += "io.thorntail" % "config-api" % "2.7.0"
[io.thorntail/config-api "2.7.0"]

Dependencies

compile (2)

Group / Artifact Type Version
io.thorntail : config-api-runtime jar 2.7.0
org.wildfly.common : wildfly-common jar

provided (1)

Group / Artifact Type Version
org.wildfly.core : wildfly-controller jar

test (2)

Group / Artifact Type Version
junit : junit jar 4.12
io.thorntail : config-api-generator jar 2.7.0

Project Modules

There are no modules declared in this project.

WildFly Configuration API

This projects breaks down into three parts:

  • API Generator (generator module)
  • Generated WildFly configuration API (api module)
  • Runtime dependencies for both the generator and api modules.

The generator module provides facilities to create a Java API which represents the Wildfly management model (or parts of it).

The configuration API contains the object model created by the generator. Client such as WildFly Swarm may use this generated API to configure a running instance of WildFly via a fluent Java API.

The Javadocs for the generated API can be found at: http://wildfly-swarm.github.io/wildfly-config-api/

Generating the API

The API is created from the Wildfly management model as part of the maven build. It requires an active Wildfly instance to access the meta data and execute the integration tests.

  1. Start a stock Wildfly 10 distribution in standalone full ha mode ./bin/standalone.sh -server-config=standalone-full-ha.xml
  2. Update the *-config.json to reflect your setup
  3. Perform a regular maven build mvn clean install

If all goes well, you be able to access the generated sources at api/target/generated-sources.

Working with the config API

Maven dependencies

Clients typically depend on the API library itself, as well as the runtime library to marshal between Java configuration instances and the JBoss DMR ModelNode instances.

<dependency>
	<groupId>org.wildfly</groupId>
	<artifactId>api</artifactId>
	<version>...</version>
</dependency>
<dependency>
	<groupId>org.wildfly</groupId>
	<artifactId>runtime</artifactId>
	<version>...</version>
</dependency>

API usage

Java to DMR

To generate DMR from Java simply instantiate the object model and run it through the EntityAdapter<T>:

DataSource dataSource = ...;
EntityAdapter<DataSource> entityAdapter = new EntityAdapter<>(DataSource.class);
ModelNode modelNode = entityAdapter.fromEntity(dataSource);

DMR to Java

Creating object instances work in a similar way, by using the EntityAdapter<T>:

ModelNode payload = ...;
EntityAdapter<DataSource> entityAdapter = new EntityAdapter<>(DataSource.class);
DataSource dataSource = entityAdapter.fromDMR(payload);

Expressions

Expression replace actual values in the configuration model and will be resolved at runtime. To set an expression for an attribute through the java API, you'd simply put and expression for a given java property name:

 DataSource dataSource = ...;

 dataSource.put("userName", "${database.user.name:defaultName}");
 dataSource.password("...");

This will resolve the database.user.name property at runtime and fallback to the value "defaultName" if the expression cannot be resolved.

Changesets

Modification to the java objects can be captured in changesets. The EntityAdapter turns these changes into a series of write-attribute operations (composite op).

DataSource dataSource = ...;

// setup capture 
Map<String, Object> changeset = new HashMap<>();
dataSource.addPropertyChangeListener(evt -> {
	changeset.put(evt.getPropertyName(), evt.getNewValue());
});

// modify beans
dataSource.userName("...");
dataSource.password("...");

EntityAdapter<DataSource> entityAdapter = new EntityAdapter<>(DataSource.class);
ModelNode operation = entityAdapter.fromChangeset(changeset, "ds-name");

The IntegrationTestCase.java contains more examples.

Status and limitations

This is pretty much work in it's early stages. Use cases covered by the test cases seem to work, but we didn't test plenty of scenarios.

But the project as it is should give you an idea where the config-lib is heading and what it might be used for.

Contributions

Feel free to create ticket right here on github, fork the code and send pull request or join us on the Wildfly IRC channels and mailing lists.

io.thorntail

WildFly Swarm

WildFly deconstructed

Versions

Version
2.7.0
1.9.0
1.8.1
1.8.0
1.7.0
1.6.1
1.6.0
1.5.3
1.5.2
1.4.0