|
16 | 16 | import java.io.IOException; |
17 | 17 | import java.io.InputStream; |
18 | 18 | import java.util.Properties; |
| 19 | +import java.util.concurrent.atomic.AtomicReference; |
19 | 20 |
|
20 | 21 | public final class Version { |
21 | 22 |
|
22 | | - private static String sdkVersion = null; |
| 23 | + private static volatile AtomicReference<String> sdkVersion = new AtomicReference<>(); |
23 | 24 |
|
24 | 25 | /** |
25 | 26 | * Retrieves sdk version from resources. |
26 | 27 | * |
27 | 28 | * @return String version of sdk. |
28 | 29 | */ |
29 | 30 | public static String getSdkVersion() { |
| 31 | + var version = sdkVersion.get(); |
30 | 32 |
|
31 | | - if (sdkVersion != null) { |
32 | | - return sdkVersion; |
| 33 | + if ((version != null) && !version.isBlank()) { |
| 34 | + return version; |
33 | 35 | } |
34 | 36 |
|
35 | | - try (InputStream input = Version.class.getResourceAsStream("/sdk_version.properties");) { |
| 37 | + try (InputStream input = Version.class.getResourceAsStream("/sdk_version.properties")) { |
36 | 38 | Properties properties = new Properties(); |
37 | 39 | properties.load(input); |
38 | | - sdkVersion = "dapr-sdk-java/v" + properties.getProperty("sdk_version", "unknown"); |
| 40 | + var v = properties.getProperty("sdk_version", null); |
| 41 | + if (v == null) { |
| 42 | + throw new IllegalStateException("Did not find sdk_version property!"); |
| 43 | + } |
| 44 | + |
| 45 | + if (v.isBlank()) { |
| 46 | + throw new IllegalStateException("Property sdk_version cannot be blank."); |
| 47 | + } |
| 48 | + |
| 49 | + version = "dapr-sdk-java/v" + v; |
| 50 | + sdkVersion.set(version); |
39 | 51 | } catch (IOException e) { |
40 | | - sdkVersion = "unknown"; |
| 52 | + throw new IllegalStateException("Could not load sdk_version property!", e); |
41 | 53 | } |
42 | 54 |
|
43 | | - return sdkVersion; |
| 55 | + return version; |
44 | 56 | } |
45 | 57 |
|
46 | 58 | } |
0 commit comments