Get rid of the boilerplate code in properties based configuration.

Related tags

Database owner
Overview

OWNER

OWNER, an API to ease Java property files usage.

Build Status Coverage Status security status stability status Built with Maven

INTRODUCTION

The goal of OWNER API is to minimize the code required to handle application configuration through Java properties files.

Full documentation available on project website.

BASIC USAGE

The approach used by OWNER APIs, is to define a Java interface associated to a properties file.

Suppose your properties file is defined as ServerConfig.properties:

port=80
hostname=foobar.com
maxThreads=100

To access this property you need to define a convenient Java interface in ServerConfig.java:

public interface ServerConfig extends Config {
    int port();
    String hostname();
    int maxThreads();
}

We'll call this interface the Properties Mapping Interface or just Mapping Interface since its goal is to map Properties into a an easy to use piece of code.

Then, you can use it from inside your code:

public class MyApp {
    public static void main(String[] args) {
        ServerConfig cfg = ConfigFactory.create(ServerConfig.class);
        System.out.println("Server " + cfg.hostname() + ":" + cfg.port() +
                           " will run " + cfg.maxThreads());
    }
}

But this is just the tip of the iceberg.

Continue reading here: Basic usage.

DOWNLOAD

Public Releases can be downloaded from GitHub Releases page or Maven Central Repository.

DOCUMENTATION

Make sure to have a look at the documentation on project website to learn how flexible and powerful OWNER is, and why you may need it!

Chinese documentation is provided by Yunfeng Cheng via a GitHub independent project at this address.

LICENSE

OWNER is released under the BSD license. See LICENSE file included for the details.

Comments
  • Add a method to detect which properties were changed in a reload

    Add a method to detect which properties were changed in a reload

    The HotReload is super cool :) however I think that generally it would be nice to know which properties has changed so that you can re-configure only the affected services, It can be embedded into the ReloadEvent, or it could be possible have a helper method (like I have in my code now) that is able to do a "diff" in the properties for me.

    enhancement high priority 
    opened by bbossola 26
  • Question: PropertiesManager

    Question: PropertiesManager

    First, I'd like to say that this is likely more of a problem with gradle than it is owner, but since this is an issue that's likely to crop up for many projects wishing to utilize this lib I thought I'd post it anyway, and perhaps someone else will do some additional digging. So... I'm having problems using owner in a project because it seems not all of the beans get transitively added to the apk that I am building. The setup is of a multi-module type in android studio, because the android and java plugins for gradle don't quite get along, and the owner code resides in a pure java library.

      java.lang.NoClassDefFoundError: java.beans.PropertyEditorManager
            at org.aeonbits.owner.Converters$4.tryConvert(Converters.java:147)
            at org.aeonbits.owner.Converters.doConvert(Converters.java:227)
            at org.aeonbits.owner.Converters.convert(Converters.java:222)
            at org.aeonbits.owner.PropertiesInvocationHandler.resolveProperty(PropertiesInvocationHandler.java:83)
            at org.aeonbits.owner.PropertiesInvocationHandler.invoke(PropertiesInvocationHandler.java:54)
            at $Proxy2.local_server_url(Native Method)
            at se.springworks.api.client.M2HClient.<init>(M2HClient.java:40)
            at se.springworks.apiexample.androidexampleapp.ExampleActivity.onCreate(ExampleActivity.java:18)
            at android.app.Activity.performCreate(Activity.java:5426)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
            at android.app.ActivityThread.access$900(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
    

    The module that contains owner directly is free from this issue. What are your recommendations?

    Also created a Stack Overflow q for this type of problem:

    http://stackoverflow.com/questions/22988376/missing-runtime-dependencies-with-owner-gradle-for-android

    If you feel this is completely removed from what you're trying to do here, don't hesitate to close the issue. : )

    bug enhancement question high priority 
    opened by Coinhunter 24
  • Added a ByteSizeConverter

    Added a ByteSizeConverter

    Here is a suggestion for a ByteSizeConverter for what was requested in #155.

    I've added this to the owner-extras module as this is not a part of core functionality.

    The code should be Java5 compatible and includes a unit test.

    I also did a little refactoring by introducing a ConverterUtil class to avoid duplicating code in the DurationConverter and ByteSizeConverter classes. I added that to the owner core module so that both owner-extras and owner-java8 modules would have access to it. That code is Java5 compliant so that should be fine.

    opened by StFS 17
  • Add support for YAML and JSON loaders

    Add support for YAML and JSON loaders

    Given that a properties file is not nearly as convenient to edit as a YAML or JSON file, support to load configuration in these formats would definitely be a good thing.

    In my case, it would make the choice of owner to manage application settings a no-brainer.

    enhancement 
    opened by lcodes 12
  • Respect default environment properties

    Respect default environment properties

    Consider the following case:

    # config.properties
    server.host=http://localhost
    server.port=80
    qa.server.host=http://example.com
    
    // Config.java
    public interface Config extends org.aeonbits.owner.Config {
        @DefaultValue("qa")
        String env();
        String host();
        int port();
    }
    
    // Main.java
    public static void main(String[] args) {
        Config config = getConfig();
        System.out.println("---> env: " + config.env());
        System.out.println("---> host: " + config.host());
        System.out.println("---> port: " + config.port());
    }
    

    Expected:

    [java] ---> env: qa
    [java] ---> host: http://example.com
    [java] ---> port: 80
    

    Actual:

    [java] ---> env: qa
    [java] ---> host: http://example.com
    [java] Exception in thread "main" java.lang.NullPointerException
    [java]         at com.sun.proxy.$Proxy6.port(Unknown Source)
    [java]         at Main.main(Unknown Source)
    [java] Java Result: 1
    
    opened by spr1ng 11
  • Fix issue with string replace methods removing backslashes

    Fix issue with string replace methods removing backslashes

    Java string replace methods don't properly handle backslashes in the replacement string. See http://stackoverflow.com/questions/9575116/forward-slash-in-java-regex

    Suggestion as of that SO page is to replace backslash with double backslash ("" with "\") in the replacement string prior to replacing.

    I ran into this because user.home on windows machines is something like C:\Users\NiXXeD, and several of the tests failed for me on a clean repo. I updated the affected tests to reproduce the issue prior to making changes.

    opened by NiXXeD 11
  • [Bug] Calling a value is not thread safe (return another value)

    [Bug] Calling a value is not thread safe (return another value)

    I noticed that when calling values ​​from different threads, it can returns values ​​from other methods. The wrong method is invoked somehow. Bug reproduced on version 1.0.11 I tried 1.0.8 - 1.0.10 and all ok.

    src/test/resources/config.properties

    firstName=Pasha
    lastName=Bairov
    

    import org.aeonbits.owner.Config;
    
    @Config.Sources({"file:src/test/resources/config.properties"})
    public interface MyConfig extends Config {
    
        @Key("firstName")
        String firstName();
    
        @Key("lastName")
        String lastName();
    }
    

    public static void main(String[] args) {
            MyConfig cfg = ConfigFactory.create(MyConfig.class);
    
    
            new Thread(() -> {
                for (int i = 0; i < 1000; i++) {
                    String name = cfg.firstName();
    
                    if (!name.equals("Pasha")) {
                        System.out.println("name " + name);
                    }
                }
            }).start();
    
            new Thread(() -> {
                for (int i = 0; i < 1000; i++) {
                    cfg.lastName();
                }
            }).start();
        }
    

    I executed it 1000 times and here it stdout:

    name Bairov
    name Bairov
    name Bairov
    name Bairov
    name Bairov
    

    I can provide any necessary information for debugging.

    opened by Amerousful 10
  • Created config dynamic MBean interface

    Created config dynamic MBean interface

    Hi Luigi,

    please have a look on those changes. It adds a new Interface JMXBean (maybe change to according naming pattern) which allows to dynamicly register a config class to a running mbean service (necessary methods added to PropertiesManager).

    I was not sure if further checking for Accessible, Mutable and Reloadable is necessary in PropertiesManager (so I guess Mbean now could write on mutable config object).

    Maybe take a look at the changes and revise if necessary. I would find a jmx accessibele config very useful. MBeans are accessible in jvm through jconsole.

    Thanks for your time!

    Regards, Robin

    opened by robinmeiss 10
  • UTF-8 encoding properties

    UTF-8 encoding properties

    Hi Iviggiano, I'm very interested in your amaizing project OWNER. But now i have a problem with correctly loading properties. I need load properties with czech diacritic (like as áčďéěíňóřšťůúýž) in UTF-8 format. Properties of file names.properties are set on UTF-8 like as my Ecliplse project, but OWNER still load String čďéěíňóřÅ.

    Can u help me ?

    Thank u very much

    bug enhancement high priority 
    opened by suplik10 10
  • Enable passing sources explicitly

    Enable passing sources explicitly

    Sometimes it may be desirable to determine source location at runtime, and pass them to ConfigFactory explicitly (e.g. if we want to find config files relative to the jar file's directory http://stackoverflow.com/questions/2837263/how-do-i-get-the-directory-that-the-currently-executing-jar-file-is-in).

    enhancement high priority 
    opened by alexeyr 10
  • Property loaders should not load all properties but only mapped ones

    Property loaders should not load all properties but only mapped ones

    Owner seems to load all properties from a given source regardless whether these properties are mapped by appropriate interface or not. Especially when using system properties or system environment as source, this behaviour causes a lot of head ache when trying to process the overall set of effective properties using the property traversing methods provided by Accessible interface.

    Maybe, my use case is somewhat special as I need to hand over the effective properties for a given configuration to another Java process. As long as my code does not explicitly filter out unwanted properties - such as user.dir, java.vendor.name etc. - I cannot use system properties as source for mapping interface.

    Please let me know if you need any further information. And mille grazie for this awesome library!

    opened by h-arlt 9
  • Incompatibility between @Spy annotation and java.util.Properties in OpenJDK17

    Incompatibility between @Spy annotation and java.util.Properties in OpenJDK17

    Hello,

    I am the Debian maintainer of owner. In Debian unstable with OpenJDK 17.0.5 and mockito 2.23.0, I get

    [ERROR] testListPrintStream(org.aeonbits.owner.PropertiesInvocationHandlerTest) Time elapsed: 0.542 s <<< ERROR! java.lang.NullPointerException: Cannot invoke "java.util.concurrent.ConcurrentHashMap.putAll(java.util.Map)" because "this.map" is null at org.aeonbits.owner.PropertiesInvocationHandlerTest.before(PropertiesInvocationHandlerTest.java:46)

    [ERROR] testListPrintWriter(org.aeonbits.owner.PropertiesInvocationHandlerTest) Time elapsed: 0.002 s <<< ERROR! java.lang.NullPointerException: Cannot invoke "java.util.concurrent.ConcurrentHashMap.putAll(java.util.Map)" because "this.map" is null at org.aeonbits.owner.PropertiesInvocationHandlerTest.before(PropertiesInvocationHandlerTest.java:46)

    Interestingly, it seems there is an issue with properties in the before method being declared with the @Spy annotation. Indeed, changing slightly the test file to the enclosed one (see lines 31, 32, 46, 47) causes an error on line 46 but not on line 47. PropertiesInvocationHandlerTest.java.txt

    Honestly I cannot explain what causes this, but if you can then I am interested in knowing.

    Bye, Pierre

    opened by pgrt 0
  • Add support for nested keys

    Add support for nested keys

    Current solution does not allow nesting keys in variable expansion for the @Key annnotation. Let us assume the following scenario:

        @Key("environment")
        @DefaultValue("global")
        String env();
    
        @Key("environments.${environment}.webdriver.url")
        String webDriverUrl();
    
        @Key("environments.${environment}.browser")
        @DefaultValue("chrome")
        String usedBrowser();
    

    I want to have a property based on the selected browser property which is already based on the selected environment property. I am trying to access the property in the following ways:

        @Key("environments.${environment}.webdriver.${usedBrowser}.switches")
        String webDriverOptions();
    
        @Key("environments.${environment}.webdriver.${environments.${environment}.browser}.switches")
        String webDriverOptions();
    

    but neither solution is working. This pull request adds ability to nest variable expansion inside @Key annotiation.

    opened by Tomkowski 1
  • [SECURITY] Fix Temporary File Information Disclosure Vulnerability

    [SECURITY] Fix Temporary File Information Disclosure Vulnerability

    Security Vulnerability Fix

    This pull request fixes a Temporary File Information Disclosure Vulnerability, which existed in this project.

    Preamble

    The system temporary directory is shared between all users on most unix-like systems (not MacOS, or Windows). Thus, code interacting with the system temporary directory must be careful about file interactions in this directory, and must ensure that the correct file posix permissions are set.

    This PR was generated because a call to File.createTempFile(..) was detected in this repository in a way that makes this project vulnerable to local information disclosure. With the default uname configuration, File.createTempFile(..) creates a file with the permissions -rw-r--r--. This means that any other user on the system can read the contents of this file.

    Impact

    Information in this file is visible to other local users, allowing a malicious actor co-resident on the same machine to view potentially sensitive files.

    Other Examples

    The Fix

    The fix has been to convert the logic above to use the following API that was introduced in Java 1.7.

    File tmpDir = Files.createTempFile("temp dir").toFile();
    

    The API both creates the file securely, ie. with a random, non-conflicting name, with file permissions that only allow the currently executing user to read or write the contents of this file. By default, Files.createTempFile("temp dir") will create a file with the permissions -rw-------, which only allows the user that created the file to view/write the file contents.

    :arrow_right: Vulnerability Disclosure :arrow_left:

    :wave: Vulnerability disclosure is a super important part of the vulnerability handling process and should not be skipped! This may be completely new to you, and that's okay, I'm here to assist!

    First question, do we need to perform vulnerability disclosure? It depends!

    1. Is the vulnerable code only in tests or example code? No disclosure required!
    2. Is the vulnerable code in code shipped to your end users? Vulnerability disclosure is probably required!

    Vulnerability Disclosure How-To

    You have a few options options to perform vulnerability disclosure. However, I'd like to suggest the following 2 options:

    1. Request a CVE number from GitHub by creating a repository-level GitHub Security Advisory. This has the advantage that, if you provide sufficient information, GitHub will automatically generate Dependabot alerts for your downstream consumers, resolving this vulnerability more quickly.
    2. Reach out to the team at Snyk to assist with CVE issuance. They can be reached at the Snyk's Disclosure Email.

    Detecting this and Future Vulnerabilities

    This vulnerability was automatically detected by GitHub's CodeQL using this CodeQL Query.

    You can automatically detect future vulnerabilities like this by enabling the free (for open-source) GitHub Action.

    I'm not an employee of GitHub, I'm simply an open-source security researcher.

    Source

    This contribution was automatically generated with an OpenRewrite refactoring recipe, which was lovingly hand crafted to bring this security fix to your repository.

    The source code that generated this PR can be found here: SecureTempFileCreation

    Opting-Out

    If you'd like to opt-out of future automated security vulnerability fixes like this, please consider adding a file called .github/GH-ROBOTS.txt to your repository with the line:

    User-agent: JLLeitschuh/security-research
    Disallow: *
    

    This bot will respect the ROBOTS.txt format for future contributions.

    Alternatively, if this project is no longer actively maintained, consider archiving the repository.

    CLA Requirements

    This section is only relevant if your project requires contributors to sign a Contributor License Agreement (CLA) for external contributions.

    It is unlikely that I'll be able to directly sign CLAs. However, all contributed commits are already automatically signed-off.

    The meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see https://developercertificate.org/ for more information).

    - Git Commit Signoff documentation

    If signing your organization's CLA is a strict-requirement for merging this contribution, please feel free to close this PR.

    Sponsorship & Support

    This contribution is sponsored by HUMAN Security Inc. and the new Dan Kaminsky Fellowship, a fellowship created to celebrate Dan's memory and legacy by funding open-source work that makes the world a better (and more secure) place.

    This PR was generated by Moderne, a free-for-open source SaaS offering that uses format-preserving AST transformations to fix bugs, standardize code style, apply best practices, migrate library versions, and fix common security vulnerabilities at scale.

    Tracking

    All PR's generated as part of this fix are tracked here: https://github.com/JLLeitschuh/security-research/issues/18

    opened by JLLeitschuh 1
  • Confusing documentation for ByteSizeConverter

    Confusing documentation for ByteSizeConverter

    The section on Type Conversion says "The suffixes supported by ByteSizeConverter are:"...

    • kilobyte, kilobytes, k, ki, kib
    • kibibyte, kibibytes, kb

    which would be clearer if grouped as

    • kibibyte, kibibytes, k, ki, kib
    • kilobyte, kilobytes, kb

    so that all of the options that multiply by 1024 or 1000 would be grouped on separate lines respectively. The same goes for all of the similar larger groupings.

    opened by VirgilSmith 0
  • [Snyk] Security upgrade org.apache.curator:curator-framework from 2.13.0 to 5.4.0

    [Snyk] Security upgrade org.apache.curator:curator-framework from 2.13.0 to 5.4.0

    Snyk has created this PR to fix one or more vulnerable packages in the `maven` dependencies of this project.

    Changes included in this PR

    • Changes to the following files to upgrade the vulnerable dependencies to a fixed version:
      • owner-extras/pom.xml

    Vulnerabilities that will be fixed

    With an upgrade:

    Severity | Priority Score (*) | Issue | Upgrade | Breaking Change | Exploit Maturity :-------------------------:|-------------------------|:-------------------------|:-------------------------|:-------------------------|:------------------------- low severity | 486/1000
    Why? Proof of Concept exploit, Has a fix available, CVSS 3.3 | Information Disclosure
    SNYK-JAVA-COMGOOGLEGUAVA-1015415 | org.apache.curator:curator-framework:
    2.13.0 -> 5.4.0
    | Yes | Proof of Concept

    (*) Note that the real score may have changed since the PR was raised.

    Check the changes in this PR to ensure they won't cause issues with your project.


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.

    For more information: 🧐 View latest project report

    🛠 Adjust project settings

    📚 Read more about Snyk's upgrade and patch logic


    Learn how to fix vulnerabilities with free interactive lessons:

    🦉 Learn about vulnerability in an interactive lesson of Snyk Learn.

    opened by snyk-bot 0
Releases(owner-1.0.12)
  • owner-1.0.12(Jun 7, 2020)

  • owner-1.0.11(Jun 7, 2020)

    OWNER v1.0.11 contains following enhancements and bug fixes.

    Please note that this version does have a concurrency bug #268, #266. Please upgrade to v1.0.12.

    Enhancements

    • #234: Allowing to format Key value by method arguments as with DefaultValue.
    • #255: Solves the thread contention problem reported on Issue #254; Note this has partially been rolled backed in 1.0.12 due to bugs #268 and #266.
    • 64a7c07: Updated dependencies to work with Java 11 LTS.

    Site Enhancements

    • #247: Documentation for system:properties and system:env.
    • Fixed Sonar and Travis; but still it looks that Coveralls has issue to lik source files, I have to look into it.
    • #274: Documentation for system:properties and system:env, Update importing-properties.md.
    • #246: Fixed doc typos & errors and improved readability.
    • #242: FAQ broken link.
    • #224: Adding some documentation for bug #184 (Maps with null values cause an unclear exception).
    • Fixed Javadocs.
    • Updated documentation.

    Bugs fixes

    • 2479d47: decryption not working when used in combination with variable substitution
    • 0b2d209: removed [double check locking] anti pattern.
    • #227: Fixes properties issue in loading file URLs.
    • #239: Allow property values to contain a '%' character without being a format string.
    • #203, #241: ConcurrentModificationException on creating Config.
    • #226, #227: Empty system variables for file paths in @Sources cause URISyntaxException failures. Fixes properties issue in loading file URLs.
    Source code(tar.gz)
    Source code(zip)
  • owner-1.0.10(Mar 1, 2018)

    After long time (more than 2 years now), and many people asking for a new release, here we are. And here my apologies for the delay.

    As you may know, I had serious health problems that kept me away from coding. Now my health is getting better, but I feel much slower in coding and using awesome tools like IntelliJ IDEA; in the meantime, my open source license has expired, so I hope the guys from JetBrains will be so nice to renew it :).

    Also, I always found the maven release process being cumbersome so that also kept me away from the effort. Now I took some time to simply it a little bit, and I kept some note for the future.

    In this release, a huge amount of work has been conducted by contributors, and I mostly did housekeeping with refactoring, code review, enforcing quality standards, asking for documentation and tests, and integrating the great ideas coming from the users' community.

    I took back the project recently to upgrade it to have Java 9 support, and simplify release deployment, and only now that I am writing this release note, I realize how many things have been added and was waiting to be released.

    Documentation is very important; I hadn't had the chance to keep all in sync, so many things here need to be documented. If you think you can help, feel free to help: this website is a sub-project owner-site, and uses Markdown language, which is very handy and quick to learn; the structure is quite easy to follow. Jekyll is used as site generator, which is written in Ruby and can be tricky for a Java dev like me, but it works awesomely with github. So feel free to help there too.
    There is also an ant script which allows you to launch Jekyll and live-preview the end result of your edits.

    I don't feel very comfortable in making promises, but I'd really like to give back life to this project and, for the future, avoid such a long wait for a release.

    Please notice that at the moment I am not professionally working, I closed my consultancy company years back, and in this moment I am writing from a nice Coworking Space "ImpactHub" here in Torino.
    So, let me quickly say that donations are very welcome.
    Or if you want, you can hire me for some custom development on OWNER, training, or to help implementing your projects.
    This would definitely help keeping OWNER alive.

    Credits to ALL the contributors of OWNER, and to the end-users of this neat library.
    To you all it goes my gratitude for this release.

    Thank you!

    --Luigi.


    RELEASE NOTES

    OWNER v1.0.10 contains following enhancements and bug fixes.

    Enhancements

    • Added Java 9 support, dropped Java 6 support. All code and tests are running and built with Java 9, so you can use OWNER with the latest Java version. It was not trivial. If you want to use some specific feature like default methods in interfaces introduced in Java8, you still need to add owner-java8 dependency. I know... I didn't want to create a new sub-module for Java 9 and every newer versions, if it's not necessary.
    • Updated all dependencies (testing, and optional) and Maven plugins, in order to have it working with Java 9.
    • Added list() method to ConfigCache. ConfigCache is a great way to centralise configuration for various parts of an application. This commit adds a list() method to the ConfigCache class, which lists the keys for all configurations present in the cache. This allows the entire application configuration to be inspected (e.g. for debugging) without the need for storing cache keys elsewhere. Thanks @kevin-canadian, who also was so nice to update the documentation on the website.
    • Added @EncryptedValue and @DecryptorClass annotations to allow hiding passwords stored in configuration properties. See #49, thanks @rrialq for the implementation and the awesome documentation.
    • Added a Java 8 duration converter class: DurationConverter.class in owner-java8-extras.jar . Thanks @StFS.
    • Added system properties and enviroment variable as sources: example @Sources({"system:properties", "system:env"}). See #110. Thanks @gintau for the implementation and @kevin-canadian for the idea.
    • Added ByteSizeConverter and DurationConverter classes in owner-java8-extras jar, see #155. Thanks @StFS, also for providing the necessary documentation and unit tests.
    • Added the ability to register default converters for types and classes defined by users. See #184. Thanks @StFS.
    • Added inheritance support for @Sources, @LoadPolicy and @HotReload.
      Sources defined for all extended interfaces will be merged. LoadPolicy and HotReload can be inherited and override by the extended interface. Thanks chengmingwang.

    Bugs fixes

    • Replaced fixBackslashForRegex with better implementation. Thanks @kiefinger.
    • Have ConfigFactory throw an exception on imported Maps having either null keys or null values. See #185, #184. Thanks @StFS.
    • Accept file URI containing spaces. Updated the uri processing to allow loading files that contain spaces in their paths. See #134. Thanks @icirellik.
    • Maps with null values cause an unclear exception. See #184. Thanks @StFS.
    • Set tar long file mode to posix in maven assembly plugin to avoid build errors. Thanks gdenning.

    Site Enhancements

    Downloadable artifacts are published on GitHub and on Maven Central Repository.

    Source code(tar.gz)
    Source code(zip)
    owner-assembly-1.0.10.tar.bz2(1.76 MB)
    owner-assembly-1.0.10.tar.gz(2.28 MB)
    owner-assembly-1.0.10.zip(2.55 MB)
  • owner-parent-1.0.9(Jul 22, 2015)

    v1.0.9 contains following enhancements and bug fixes.

    Enhancements

    • Added fill(java.util.Map) method to the Accessible interface.
    • Added pre-processing feature. See #120, thanks @a1730 for the feedback.

    Site Enhancements

    • None.

    Bugs fixes

    • Config.Sources with ~ doesn't create a valid URI on Windows. See #123, thanks @outofrange for spotting this bug.

    Downloadable artifacts are published on GitHub and on Maven Central Repository.

    Source code(tar.gz)
    Source code(zip)
    owner-assembly-1.0.9-bin.tar.bz2(464.03 KB)
    owner-assembly-1.0.9-bin.tar.gz(488.63 KB)
    owner-assembly-1.0.9-bin.zip(676.21 KB)
  • owner-parent-1.0.8(Jul 22, 2015)

    Release 1.0.7 failed deployment in Maven Central Repository

    Some required pom was skipped, and if you try to use it as dependency in your project, it may raise some maven error or other issues. So here the hotfix: 1.0.8 is out!

    v1.0.8 contains following enhancements and bug fixes.

    Enhancements

    • Fixed the javadocs included in the tarballs/zips released.

    Site Enhancements

    • None.

    Bugs fixes

    • No owner-parent pom in Maven Central Repository. See #121, thanks @rajatvig for quickly spotting the issue.

    Downloadable artifacts are published on GitHub and on Maven Central Repository.

    Source code(tar.gz)
    Source code(zip)
    owner-assembly-1.0.8-bin.tar.bz2(449.44 KB)
    owner-assembly-1.0.8-bin.tar.gz(474.27 KB)
    owner-assembly-1.0.8-bin.zip(655.62 KB)
  • owner-parent-1.0.7(Mar 30, 2015)

    Release 1.0.7 failed deployment in Maven Central Repository

    Some required pom was skipped, and if you try to use it as dependency in your project, it may raise some maven error or other issues. So, avoid using 1.0.7 and jump to 1.0.8!

    v1.0.7 contains following enhancements and bug fixes.

    Enhancements

    Site Enhancements

    • None.

    Bugs fixes

    • Fixed packaging: the owner-extras.jar was missing required classes. See #114. Thanks @ksaritek for the patience.

    Downloadable artifacts are published on GitHub and on Maven Central Repository.

    Source code(tar.gz)
    Source code(zip)
    owner-assembly-1.0.7-bin.tar.bz2(443.84 KB)
    owner-assembly-1.0.7-bin.tar.gz(469.22 KB)
    owner-assembly-1.0.7-bin.zip(698.24 KB)
  • owner-1.0.6(Nov 19, 2014)

    v1.0.6 contains following enhancements and bug fixes.

    Enhancements

    • Added basic support for ZooKeeper #81. Thanks @ksaritek.
    • Added Java 8 Support (default and static methods on interfaces). See #94.
    • Added OSGi support. See #101.

    Site Enhancements

    • Fixed documentation errors. See #88, #89, #92. Thanks @hemus2121.
    • Minor changes in build.xml (ant publishing script to gh-pages)

    Bugs fixes

    • Use of default value for for properties using the Key Expansion mechanism #84.

    Downloadable artifacts are published on GitHub and on Maven Central Repository.

    Source code(tar.gz)
    Source code(zip)
    owner-1.0.6-bin.tar.bz2(733.91 KB)
    owner-1.0.6-bin.tar.gz(990.46 KB)
    owner-1.0.6-bin.zip(1.95 MB)
  • owner-1.0.5.1(May 28, 2014)

    v1.0.5.1 contains following enhancements and bug fixes.

    Enhancements

    • Java8 fixes, so now it is officially supported.
    • Added UTF-8 Support for properties files. (See #77 and #78, thanks @SvetaNesterenko )
    • Added [ConfigCache (Singleton)]({{ site.url }}/docs/singleton/) feature. (See #64)
    • Improved support for Android. Somebody wants to verify/help with this? (See #75)
    • Implemented variable expansion for @Key annotation. (See #63)
    • Restructured maven project to allow sub-modules.

    Site Enhancements

    • Dyndns dropped free service, so updated links for Sonar, from sheldon.dyndns.tv -> dev.aeonbits.org
    • Documentation website minor style/layout, updates and improvements.
    • Added SlideShare presentation in home page.
    • Added Coveralls. (See #59)

    Bugs fixes

    • Code cleanup, removed warnings.
    • Fixed compatibility issue on exception raised by Java7 and Java6. (See #71)
    Source code(tar.gz)
    Source code(zip)
    owner-1.0.5.1-bin.tar.bz2(356.78 KB)
    owner-1.0.5.1-bin.tar.gz(372.83 KB)
    owner-1.0.5.1-bin.zip(541.40 KB)
  • owner-1.0.5(May 28, 2014)

    v1.0.5 contains following enhancements and bug fixes.

    Enhancements

    • Support for XML. OWNER is now able to load not only from properties files, but also from XML files. The XML can follow the Java XML Properties format, or can be freely defined by the user.
      (See more in the documentation: XML support and see #5).
    • Added method registerLoader() to ConfigFactory, so the user can define new loaders for more file formats.
      (See #55).
    • Support for classpath: URLs in HotReload. Also it works with the default files associated to the mapping interface, when @Sources is not specified.
    • Added method Set<String> propertyNames() in the Accessible interface.
      (See #46).
    • Added Event support for property changes and reload. Both the events can now be transactional: the listener can be notified by an event before and after a property change or a reload takes place. The listener can check what is changed and eventually rollback the reload or property change operation.
      (See more in the documentation: Event support and see #47).
    • Added non-static ConfigFactory, so one can create independent instances of OWNER Factory objects.
      (See #43).
    • Added implementation on hashCode() and equals().
    • Added serialization capability to OWNER Config objects, so now they can be transferred through the network or transformed to byte streams.
      (See #54).
    • Allow @ConverterClass annotation to override default converters (i.e. primitive types, etc).
    • The interfaces Reloadable, Mutable and Accessible now extend from Config, so you don't need anymore to extend directly from Config. For instance, your interface can now extend just from Mutable to generate an object which is also a valid Config object that can be instantiated by the ConfigFactory:

      config-hierarchy

    Site Enhancements

    • Website sources reorganized: moved from gh-pages branch to master, with publish ant scripts build.xml.
    • Added news section, with release announcements and blog posts.

    Bugs fixes

    • Fixed bugs on tests that were making the build failing on Windows systems.
    • Fixed bug #51, variables expansion, and path expansion not working properly with string containing the backslash characters '\'.
      Thanks NiXXeD.
    • Fixed bug #42, regarding the incompatibility of the OWNER library with the Google App Engine security restrictions.
    Source code(tar.gz)
    Source code(zip)
    owner-1.0.5-bin.tar.bz2(328.50 KB)
    owner-1.0.5-bin.tar.gz(343.50 KB)
    owner-1.0.5-bin.zip(492.64 KB)
  • owner-1.0.4.1(May 28, 2014)

  • owner-1.0.4(May 28, 2014)

    v1.0.4 contains some key enhancements and bug fixes.

    Enhancements

    • New @ConverterClass annotation. See [The @ConverterClass annotation]({{ site.url }}/docs/type-conversion/#toc_1), #38.
    • Hot reload for file based sources. See [Automatic "hot reload"]({{ site.url }}/docs/reload/#toc_1), #15.
    • toString() method can be invoked on the Config object to get some useful text for debugging. See [The toString() method]({{ site.url }}/docs/debugging/#toc_0), #33.
    • Added Mutable interface for the methods giving write access to the underlying properties structure: setProperty, removeProperty, clear. See [The Mutable interface]({{ site.url }}/docs/accessible-mutable/#toc_0), #31.
    • Added Accessible interface for the list() methods used to aid debugging, and other methods giving read access to the underlying properties structure. See [The Accessible interface]({{ site.url }}/docs/accessible-mutable/#toc_1).
    • Added the reload() method that can be exposed implementing the interface Reloadable. See [Programmatic reload]({{ site.url }}/docs/reload/#toc_0).
    • Fist class Java Arrays and Collections support in type conversion. Thanks ffbit. See [Arrays and Collections]({{ site.url }}/docs/type-conversion/#toc_0), #21, #22 and #24.
    • Implemented @DisableFeature annotation to provide the possibility to disable variable expansion and parametrized formatting. See [Disabling Features]({{ site.url }}/docs/disabling-features/), #20.

    Site Enhancements

    • New website for documentation.
    • Added sonar to keep high attention on code quality.
    • Added Travis CI to the project to track changes and run tests on different JDK versions.
    • Website code snippets now have syntax highlighting. Thanks ming13.

    Bugs fixes

    • Fixed bug #40 about tilde expansion.
    • Fixed bug #17 Substitution and format not working as expected when used together.
    Source code(tar.gz)
    Source code(zip)
    owner-1.0.4-bin.tar.bz2(236.71 KB)
    owner-1.0.4-bin.tar.gz(247.68 KB)
    owner-1.0.4-bin.zip(355.99 KB)
  • owner-1.0.3.1(May 28, 2014)

  • owner-1.0.3(May 28, 2014)

  • owner-1.0.2(May 28, 2014)

    v1.0.2 contains some key enhancements and bug fixes:

    • Changed package name from owner to org.aeonbits.owner. Sorry to break backward compatibility, but this has been necessary in order to publish the artifact on Maven Central Repository.
    • Custom & special return types.
    • Properties variables expansion.
    • Added possibility to specify Properties to import with the method ConfigFactory.create().
    • Added list() methods to aide debugging. User can specify these methods in his properties mapping interfaces.
    • Improved the documentation (this big file that you are reading), and Javadocs.

    See what's new and what's new part 2 articles (most of them applies to 1.0.3 and 1.0.2 as well) for more information on this release.

    Source code(tar.gz)
    Source code(zip)
    owner-1.0.2-bin.tar.bz2(121.93 KB)
    owner-1.0.2-bin.tar.gz(124.35 KB)
    owner-1.0.2-bin.zip(165.17 KB)
  • owner-1.0.1(May 28, 2014)

  • owner-1.0(May 28, 2014)

Owner
Matteo Baccan
Passionate developer, dad the rest of the day
Matteo Baccan
Java code generator for calling PL/SQL.

OBridge OBridge provides a simple Java source code generator for calling Oracle PL/SQL package procedures. Supported input, output parameters and retu

Ferenc Karsany 21 Oct 7, 2022
MixStack lets you connects Flutter smoothly with Native pages, supports things like Multiple Tab Embeded Flutter View, Dynamic tab changing, and more. You can enjoy a smooth transition from legacy native code to Flutter with it.

中文 README MixStack MixStack lets you connects Flutter smoothly with Native pages, supports things like Multiple Tab Embeded Flutter View, Dynamic tab

Yuewen Engineering 80 Dec 19, 2022
requery - modern SQL based query & persistence for Java / Kotlin / Android

A light but powerful object mapping and SQL generator for Java/Kotlin/Android with RxJava and Java 8 support. Easily map to or create databases, perfo

requery 3.1k Jan 5, 2023
A Java library designed to make making decisions based on the current operating system easier.

Java OS Independence ...or JOSI for short, is a simple and lightweight Java library designed to make making decisions based on the current operating s

null 38 Dec 30, 2022
A tool based on mysql-connector to simplify the use of databases, tables & columns

Description A tool based on mysql-connector to simplify the use of databases, tables & columns. This tool automatically creates the databases & tables

nz 6 Nov 17, 2022
The Chronix Server implementation that is based on Apache Solr.

Chronix Server The Chronix Server is an implementation of the Chronix API that stores time series in Apache Solr. Chronix uses several techniques to o

Chronix 262 Jul 3, 2022
Time Series Metrics Engine based on Cassandra

Hawkular Metrics, a storage engine for metric data About Hawkular Metrics is the metric data storage engine part of Hawkular community. It relies on A

Hawkular 230 Dec 9, 2022
Student Result Management System - This is a CLI based software where the Software is capable of maintaining and generating Student's Result at the end of a semester after the teacher's have provided the respective marks.

Student Result Management System This is a CLI based software where the Software is capable of maintaining and generating Student's Result at the end

Abir Bhattacharya 3 Aug 27, 2022
Apache Ant is a Java-based build tool.

Apache Ant What is it? ----------- Ant is a Java based build tool. In theory it is kind of like "make" without makes wrinkles and with

The Apache Software Foundation 355 Dec 22, 2022
Get rid of the boilerplate code in properties based configuration.

OWNER OWNER, an API to ease Java property files usage. INTRODUCTION The goal of OWNER API is to minimize the code required to handle application confi

Matteo Baccan 874 Dec 31, 2022
A boilerplate project designed to work as a template for new microservices and help you get in touch with various useful concepts.

Microservice Reference Project This project is inspired by the idea to quickly create a production ready project with all the required infrastructure

Innovation & Tech 4 Dec 17, 2022
KickAss Configuration. An annotation-based configuration system for Java and Kotlin

KAConf 2016-2020 Mario Macías KickAss Configuration v0.9.0 is an Annotation-based configuration system inspired in the wonderful Spring Boot. Its stro

Mario Macías 53 Nov 21, 2022
Boilerplate code for hello world java score and deploy it on testnet.

Java SCORE Examples This repository contains template of a java SCORE and instructions on how to deploy a simple java score. How to Run 1. Build the p

null 1 Feb 1, 2022
This plugin disables commands specified in the configuration and prevents granting the "OP" authority to people not authorized in the plugin configuration.

Ares This plugin disables commands specified in the configuration and prevents granting the "OP" authority to people not authorized in the plugin conf

ᴠᴀʟᴇɴᴛɪɴ ᴢʜᴇʟᴇᴠ 6 Aug 30, 2022
Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.

English | 中文 Apollo - A reliable configuration management system Apollo is a reliable configuration management system. It can centrally manage the con

Apollo 27.6k Jan 5, 2023
A Spring Boot Camel boilerplate that aims to consume events from Apache Kafka, process it and send to a PostgreSQL database.

SPRING-BOOT CAMEL BOILERPLATE This is a Spring-Boot Camel Application model that you can use as a reference to study or even to use in your company. I

Bruno Delgado 45 Apr 4, 2022
Spring Domain Driven Design Boilerplate

Spring Domain Driven Design Boilerplate This project describes some product operations such as create and get, also covered by Domain Driven Design on

Dolap.com Development Team 40 Dec 29, 2022
React Native Typescript Boilerplate

React Native TypeScript Boilerplate Included Packages react-native-rename react-native-dotenv Instructions Basic instructions To start the development

Frans Slabbekoorn 5 Nov 27, 2021