Hi,
We made a huge progress at the meeting and finished discussing technical goals. I went through all meeting minutes and created a summary. Before making it official I would like all committers to review it to make sure that I didn’t forget
anything.
Jakarta Config technical goals
-
Programmatic API allowing configuring and using configurations at runtime
-
Annotations based API allowing compile time configuration
-
Meta-config
-
Ability to configure everything programmatically and in an externalized way.
-
It’s a nice-to-have feature.
-
Support for converters
-
In future we will evaluate switch to using Converters specifications when it’s defined
-
Objects mapping must be supported
-
We need to think more about the technical solution
-
We may restrict mappings to interfaces only
-
We must respect java visibility rules (don’t allow writing to private fields)
-
CDI integration
-
CDI integration must be provided but it should be optional. There must be the ability to use Config API without hard dependency on CDI.
-
Allow empty strings and null as values
-
It must be allowed to use both empty strings and nulls as config values
-
There must be an ability to delete a key in a higher level configuration source
-
Jakarta Config must be designed for adoption by other Jakarta EE/MicroProfile specifications including CDI
-
Support for different configuration profiles (dev, test, prod, etc.)
-
Config sources SPI - layered config sources
-
Agreed this SPI is needed
-
We will decide whether to provide parsers to support different format of properties (yaml, properties, json, etc)
-
Support of mutable and immutable configuration sources. It also includes support of configuration sources with unknown/undefined number of properties
-
Mutable configuration sources have some performance drawbacks and complexities
-
We may support only immutable configuration in version 1.0 or we design a model allowing dealing with mutable configuration minimizing (eliminating) drawbacks
-
Support for flat and hierarchical configuration sources
-
Both flat and hierarchical configuration sources must be supported. Rules for converting between tree and flat structures must be defined by the spec.
-
We haven’t decided what representation should be used as a “native” structure of configuration.
-
Provide built-in config source types such as yaml, json, properties
-
Variable replacements, config expressions
-
OSGi
-
Only in manifest, no annotations, etc.
Thanks,
Dmitry
|