Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
221 commits
Select commit Hold shift + click to select a range
46c58dc
* Improved property source resolution and logged conflicts
vnandwana Oct 23, 2025
ee3ac64
* Added ImmutableSystemProperties to properties collector.
vnandwana Oct 30, 2025
bd22b4c
Fixed property resolution order
vnandwana Nov 1, 2025
ead5cc0
* Refactored to use a single source of truth for getProperties() and …
vnandwana Nov 10, 2025
d8c818c
* Fixed formatting.
vnandwana Nov 10, 2025
9a01ede
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
fa9f1a1
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
d1c3952
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
3f4e1b9
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
7e83585
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
b0d2bb7
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
8ea6ac0
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
8f6a331
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
5978433
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
bafb8cc
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
c01f9b9
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
bb4880a
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
4915d8b
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
2882a42
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
f18b152
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
c11fffd
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
e2be3d0
Added debug msg to TestJNDIManager
vnandwana Nov 11, 2025
93c47bc
Added debug msg to TestJNDIManager
vnandwana Nov 12, 2025
2ee01ca
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
018dc71
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
9c44f4d
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
c183c52
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
a925359
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
14eb31c
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
9e0ea19
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
0a0b97c
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
0db4282
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
27fc165
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
ae25748
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
b0be847
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
0a6ca64
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
cf319fa
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
e0d1802
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
56d94fe
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
db71c2f
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
e60b361
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
ce931fa
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
69c7215
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
108f6a4
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
c22ffb0
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
f42460f
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
581287d
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
1071149
Added debug msg to TestJNDIManager
vnandwana Nov 13, 2025
7c05424
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
1ef3714
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
28173b1
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
cafe6b1
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
3f73f39
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
9766bb3
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
e5795dc
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
e9188eb
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
19b7b82
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
5539ed1
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
5139670
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
68cf3e0
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
a2b9f5a
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
4c5c822
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
e1ea5db
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
fbdb1f3
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
b3f2a99
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
7def7a0
Added debug msg to TestJNDIManager
vnandwana Nov 14, 2025
c268230
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
c40d6bc
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
9f4aa5b
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
a14905e
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
5016d28
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
be18c25
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
6044257
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
d079ba3
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
86f520e
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
545f7b0
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
924a7dd
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
a97a84a
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
1c27ae7
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
4224050
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
4f6810a
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
bc9fb79
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
0a975fa
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
808412d
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
9ee05ac
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
38141da
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
e313368
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
b3673a5
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
f96298a
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
2c284d0
Added debug msg to TestJNDIManager
vnandwana Nov 15, 2025
0cbd440
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
f869ab3
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
f6d331b
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
c63ae3c
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
5a5ef83
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
39c5747
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
aaad0f5
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
43d1ac5
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
673ba75
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
c7fbd8c
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
d064ebb
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
d9a2305
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
fa7d119
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
97b9d75
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
a485083
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
4aa0a3a
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
2452b06
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
7f5fc6f
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
355a592
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
ead9592
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
f9fc4df
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
c029894
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
95e93a1
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
ac788cb
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
85fd536
Added debug msg to TestJNDIManager
vnandwana Nov 16, 2025
e95acdc
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
c51d1b2
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
da05592
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
a9348e0
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
cdebbd4
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
cffb3f1
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
270a861
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
e30e3bb
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
ee3e49b
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
c736333
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
0040f67
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
03ac48f
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
0e8325f
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
cdeeb04
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
7cec617
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
964e974
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
cf7ed11
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
39f898f
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
a0c2229
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
a2135c9
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
e463c79
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
1810a92
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
78782dd
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
26ebbd3
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
c180a2c
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
69dbae4
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
2a92e43
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
ed02018
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
13d9f3a
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
15ce4ab
Added debug msg to TestJNDIManager
vnandwana Nov 17, 2025
432a7bb
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
07a348f
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
12447e4
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
82588ff
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
99a951d
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
28bac6f
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
52712e9
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
4c47d5a
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
4e33b79
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
a03c200
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
d9d94f3
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
5da9473
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
2030dd8
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
85aaf74
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
9e870f3
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
1b9f4ec
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
442f92d
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
a5ff5cf
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
5929fee
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
a2fed64
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
199649b
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
0b35f26
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
9b079af
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
5ae240b
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
4ea4b3c
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
8f1b1f0
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
7391c3b
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
eea3b26
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
3ad9ac7
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
ab942bd
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
a5a0c47
Added debug msg to TestJNDIManager
vnandwana Nov 18, 2025
288d082
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
e68570b
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
79764de
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
c1fca26
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
ad0e0d9
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
84b7cd8
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
16d1252
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
32b74cf
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
932c95a
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
247cb19
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
c4a16a7
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
ddcc5ae
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
03bc544
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
734af93
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
03c895d
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
b8dc052
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
d6a147e
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
2c96bae
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
347d73d
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
c273fff
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
2333ba0
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
c3e106f
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
fba1d2b
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
0ae51c8
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
61d6b29
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
3312d91
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
b674f5a
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
728e98e
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
ffc8307
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
0d3bc6c
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
69f0289
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
4561974
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
a2974c2
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
3e93c18
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
e62e6ab
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
86f8547
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
bc524cd
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
3f324a8
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
6745ef8
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
f2473a8
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
f35d24e
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
8446069
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
42cff09
Added debug msg to TestJNDIManager
vnandwana Nov 19, 2025
faad389
Added debug msg to TestJNDIManager
vnandwana Nov 20, 2025
49e4578
Added debug msg to TestJNDIManager
vnandwana Nov 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ on:

jobs:
ci:
uses: killbill/gh-actions-shared/.github/workflows/ci.yml@main
uses: vnandwana/gh-actions-shared/.github/workflows/ci.yml@test
1 change: 1 addition & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,28 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class PropertiesWithSourceCollector {

private volatile List<PropertyWithSource> properties = new ArrayList<>();
private final Object lock = new Object();

public void addProperties(String source, Map<String, String> props) {
public void addProperties(final String source, final Map<String, String> props) {
synchronized (lock) {
List<PropertyWithSource> newList = new ArrayList<>(properties);
props.forEach((key, value) ->
newList.add(new PropertyWithSource(source, key, value)));
this.properties = Collections.unmodifiableList(newList);
final List<PropertyWithSource> updatedProperties = new ArrayList<>(properties);

final Set<String> keysToAdd = props.keySet();
updatedProperties.removeIf(property -> property.getSource().equals(source) && keysToAdd.contains(property.getKey()));

props.forEach((key, value) -> {
if (value != null) {
updatedProperties.add(new PropertyWithSource(source, key, value));
}
});

this.properties = Collections.unmodifiableList(updatedProperties);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* Copyright 2020-2025 Equinix, Inc
* Copyright 2014-2025 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/

package org.killbill.billing.platform.config;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

/**
* Registry to capture and expose runtime configuration values.
*/
public class RuntimeConfigRegistry {

private static final Map<String, Map<String, String>> RUNTIME_CONFIGS_BY_SOURCE = new ConcurrentHashMap<>();

public static void put(final String key, final Object value) {
putWithSource("RuntimeConfiguration", key, value);
}

public static void putWithSource(final String configSource, final String key, final Object value) {
if (value == null) {
return;
}

RUNTIME_CONFIGS_BY_SOURCE
.computeIfAbsent(configSource, k -> new ConcurrentHashMap<>())
.put(key, value.toString());
}

public static void putAllWithSource(final String configSource, final Map<String, ?> values) {
if (values == null || values.isEmpty()) {
return;
}

/* RUNTIME_CONFIGS_BY_SOURCE
.computeIfAbsent(configSource, k -> new ConcurrentHashMap<>())
.putAll(values.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue() == null ? "" : e.getValue().toString())));*/

final Map<String, String> nonNullValues = values.entrySet()
.stream()
.filter(e -> e.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().toString()));

if (!nonNullValues.isEmpty()) {
RUNTIME_CONFIGS_BY_SOURCE
.computeIfAbsent(configSource, k -> new ConcurrentHashMap<>())
.putAll(nonNullValues);
}
}

public static String get(final String key) {
for (final Map<String, String> sourceMap : RUNTIME_CONFIGS_BY_SOURCE.values()) {
final String value = sourceMap.get(key);
if (value != null) {
return value;
}
}

return "";
}

public static Map<String, String> getBySource(final String source) {
return Collections.unmodifiableMap(RUNTIME_CONFIGS_BY_SOURCE.getOrDefault(source, Map.of()));
}

public static Map<String, String> getAll() {
final Map<String, String> allConfigs = new LinkedHashMap<>();
RUNTIME_CONFIGS_BY_SOURCE.values().forEach(allConfigs::putAll);

return Collections.unmodifiableMap(allConfigs);
}

public static Map<String, Map<String, String>> getAllBySource() {
return Collections.unmodifiableMap(RUNTIME_CONFIGS_BY_SOURCE);
}

public static void clear() {
RUNTIME_CONFIGS_BY_SOURCE.clear();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.naming.spi.NamingManager;

import org.killbill.commons.utils.Preconditions;
import org.slf4j.Logger;
Expand Down Expand Up @@ -92,7 +93,17 @@ public Object lookup(final String name) {

try {
context = getContext();
return context.lookup(name);
final Object obj = context.lookup(name);

if (obj instanceof Reference) {
try {
return NamingManager.getObjectInstance(obj, null, null, null);
} catch (final Exception e) {
logger.warn("Error dereferencing " + name, e);
}
}

return obj;
} catch (final NamingException e) {
logger.warn("Error looking up " + name, e);
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
Expand Down Expand Up @@ -55,6 +59,101 @@ public void setup() {
System.clearProperty(ENCRYPTED_PROPERTY_2);
}

@Test
public void testGetPropertiesBySourceContainsExpectedSources() throws URISyntaxException, IOException {
final Map<String, String> runtimeConfig = new HashMap<>();
runtimeConfig.put("org.killbill.dao.user", "root");

final OSGIConfigProperties configSource = new DefaultKillbillConfigSource(null, runtimeConfig) {
@Override
protected Map<String, String> getEnvironmentVariables() {
final Map<String, String> mockEnv = new HashMap<>();
mockEnv.put(ENVIRONMENT_VARIABLE_PREFIX + "org_killbill_dao_user", "root");
return mockEnv;
}
};

final Map<String, Map<String, String>> propsBySource = configSource.getPropertiesBySource();

Assert.assertTrue(propsBySource.containsKey("ImmutableSystemProperties"));
Assert.assertTrue(propsBySource.containsKey("EnvironmentVariables"));
Assert.assertTrue(propsBySource.containsKey("RuntimeConfiguration"));
Assert.assertTrue(propsBySource.containsKey("KillBillDefaults"));
}

@Test(groups = "fast")
public void testGetPropertiesAndGetPropertiesBySourceAreInSync() throws URISyntaxException, IOException {
// RuntimeConfiguration
System.setProperty("org.killbill.dao.user", "root");
System.setProperty("org.killbill.dao.password", "password");

// KillBillDefaults
final Map<String, String> killbillDefaultConfig = new HashMap<>();
killbillDefaultConfig.put("org.killbill.server.shutdownDelay", "3s");
killbillDefaultConfig.put("org.killbill.billing.osgi.dao.logLevel", "INFO");

// ImmutableSystemProperties
killbillDefaultConfig.put("user.timezone", "GMT");

// EnvironmentVariables
final OSGIConfigProperties configSource = new DefaultKillbillConfigSource(null, killbillDefaultConfig) {
@Override
protected Map<String, String> getEnvironmentVariables() {
final Map<String, String> mockEnv = new HashMap<>();
mockEnv.put(ENVIRONMENT_VARIABLE_PREFIX + "org_killbill_dao_healthCheckConnectionTimeout", "11s");
return mockEnv;
}
};

final Properties mergedProperties = configSource.getProperties();
final Map<String, Map<String, String>> propertiesBySource = configSource.getPropertiesBySource();

final Map<String, String> allProperties = new HashMap<>();
propertiesBySource.forEach((source, props) -> allProperties.putAll(props));

for (final String key : mergedProperties.stringPropertyNames()) {
final String valueFromFlat = mergedProperties.getProperty(key);
final String valueFromSource = allProperties.get(key);

Assert.assertNotNull(valueFromSource);
Assert.assertEquals(valueFromFlat, valueFromSource);
}

// Verify that no property appears in multiple sources
final Map<String, Integer> propertyCount = new HashMap<>();
propertiesBySource.forEach((source, props) -> {
props.keySet().forEach(key -> propertyCount.put(key, propertyCount.getOrDefault(key, 0) + 1));
});

propertyCount.forEach((key, count) -> {
Assert.assertEquals(count.intValue(), 1);
});

Assert.assertEquals(mergedProperties.size(), allProperties.size());
}

@Test
public void testConflictResolutionPriority() throws Exception {
// RuntimeConfiguration
System.setProperty("org.killbill.test", "lowValue");

final DefaultKillbillConfigSource testSource = new DefaultKillbillConfigSource((String) null) {
@Override
protected Map<String, String> getEnvironmentVariables() {
final Map<String, String> mockEnv = new HashMap<>();
mockEnv.put(ENVIRONMENT_VARIABLE_PREFIX + "org_killbill_test", "highValue");
return mockEnv;
}
};

testSource.setProperty("org.killbill.test", "lowValue");

final Properties properties = testSource.getProperties();

final String effectiveValue = properties.getProperty("org.killbill.test");
Assert.assertEquals(effectiveValue, "highValue");
}

@Test(groups = "fast")
public void testGetProperties() throws URISyntaxException, IOException {
final Map<String, String> configuration = new HashMap<>();
Expand All @@ -70,21 +169,66 @@ public void testGetProperties() throws URISyntaxException, IOException {

@Test(groups = "fast")
public void testGetPropertiesBySource() throws URISyntaxException, IOException {
final Map<String, String> configuration = new HashMap<>();
configuration.put("org.killbill.dao.user", "root");
configuration.put("org.killbill.dao.password", "password");

final OSGIConfigProperties configSource = new DefaultKillbillConfigSource(null, configuration);
// RuntimeConfiguration
System.setProperty("org.killbill.dao.user", "root");
System.setProperty("org.killbill.dao.password", "password");

// KillBillDefaults
final Map<String, String> killbillDefaultConfig = new HashMap<>();
killbillDefaultConfig.put("org.killbill.server.shutdownDelay", "3s");
killbillDefaultConfig.put("org.killbill.billing.osgi.dao.logLevel", "INFO");

// ImmutableSystemProperties
killbillDefaultConfig.put("user.timezone", "GMT");

// EnvironmentVariables
final OSGIConfigProperties configSource = new DefaultKillbillConfigSource(null, killbillDefaultConfig) {
@Override
protected Map<String, String> getEnvironmentVariables() {
final Map<String, String> mockEnv = new HashMap<>();
mockEnv.put(ENVIRONMENT_VARIABLE_PREFIX + "org_killbill_dao_healthCheckConnectionTimeout", "11s");
mockEnv.put(ENVIRONMENT_VARIABLE_PREFIX + "org_killbill_billing_osgi_dao_maxActive", "99");

return mockEnv;
}
};

final Map<String, Map<String, String>> propsBySource = configSource.getPropertiesBySource();

Assert.assertNotNull(propsBySource);
Assert.assertFalse(propsBySource.isEmpty());

final Map<String, String> defaultProps = propsBySource.get("ExtraDefaultProperties");
Assert.assertNotNull(defaultProps);
Assert.assertEquals(defaultProps.get("org.killbill.dao.user"), "root");
Assert.assertEquals(defaultProps.get("org.killbill.dao.password"), "password");
Assert.assertTrue(propsBySource.containsKey("ImmutableSystemProperties"));

final Map<String, String> immutableProps = propsBySource.get("ImmutableSystemProperties");
Assert.assertEquals(immutableProps.get("user.timezone"), "GMT");

Assert.assertTrue(propsBySource.containsKey("EnvironmentVariables"));

final Map<String, String> environmentVariables = propsBySource.get("EnvironmentVariables");
Assert.assertEquals(environmentVariables.get("org.killbill.dao.healthCheckConnectionTimeout"), "11s");
Assert.assertEquals(environmentVariables.get("org.killbill.billing.osgi.dao.maxActive"), "99");

Assert.assertTrue(propsBySource.containsKey("RuntimeConfiguration"));

final Map<String, String> runtimeConfig = propsBySource.get("RuntimeConfiguration");
Assert.assertEquals(runtimeConfig.get("org.killbill.dao.user"), "root");
Assert.assertEquals(runtimeConfig.get("org.killbill.dao.password"), "password");

Assert.assertTrue(propsBySource.containsKey("KillBillDefaults"));

final Map<String, String> killBillDefaults = propsBySource.get("KillBillDefaults");
Assert.assertEquals(killBillDefaults.get("org.killbill.server.shutdownDelay"), "3s");
Assert.assertEquals(killBillDefaults.get("org.killbill.billing.osgi.dao.logLevel"), "INFO");

final List<String> actualSourceOrder = new ArrayList<>(propsBySource.keySet());

final List<String> expectedPrecedenceOrder = Arrays.asList("ImmutableSystemProperties",
"EnvironmentVariables",
"RuntimeConfiguration",
"KillBillDefaults");

Assert.assertEquals(actualSourceOrder, expectedPrecedenceOrder);
}

@Test(groups = "fast")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public TestKillbillConfigSource(@Nullable final String file, @Nullable final Cla

// Set default System Properties before creating the instance of DBTestingHelper. Whereas MySQL loads its
// driver at startup, h2 loads it statically and we need System Properties set at that point
populateDefaultProperties();
populateDefaultProperties(extraDefaults);

if (dbTestingHelperKlass != null) {
final PlatformDBTestingHelper dbTestingHelper = (PlatformDBTestingHelper) dbTestingHelperKlass.getDeclaredMethod("get").invoke(null);
Expand All @@ -71,7 +71,8 @@ public TestKillbillConfigSource(@Nullable final String file, @Nullable final Cla

this.extraDefaults = extraDefaults;
// extraDefaults changed, need to reload defaults
populateDefaultProperties();
populateDefaultProperties(extraDefaults);
rebuildCache();
}

@Override
Expand Down
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
</issueManagement>
<properties>
<check.fail-spotbugs>true</check.fail-spotbugs>
<check.skip-dependency>true</check.skip-dependency>
<!-- Bug with maven-deploy-plugin -->
<deploy.deploy-at-end>false</deploy.deploy-at-end>
<maven.javadoc.failOnError>false</maven.javadoc.failOnError>
Expand Down
Loading