nats.java
nats.java copied to clipboard
NUID generate same consumers names for native compiled executable
Proposed change
Reflect in DOCS that io.nats.client.NUID should be initialized at runtime as well:
--initialize-at-run-time=io.nats.client.NUID
Use case
Native compiled executables.
Contribution
No response
@Andro999b Are you sure, because it depends on RandomUtils, which is already identified in the readme. Maybe it's a Quarkus specific thing?
- Is it the are static things in the NUID class that are problematic?
- Would just saying initialize at runtime for the NUID cover RandomUtils since it's a dependency?
- Have you verified the consumer names are identical? It could be that they are very similar and may only differ in the last character.
@scottf I'm pretty sure about this. I have updated my previous reproducer so you can check it: https://github.com/Andro999b/nats-java-native-build-reproducer
Don't know if this Quarkus specific or not. But NUID have static global instance that will be initialized at build time by default (This can be checked in GraalVM class initilization report target/native-build-1.0.0-SNAPSHOT-native-image-source-jar/reports). Call to the RandomUtils(initialized at runtime) does not matter here because GraalVM does inline methods during compilation.
@Andro999b @YunaBraska Would it be sufficient to just note about NUID, since it depends on RandomUtils which depends on SecureRandom, or do you have to identify all 3? So this:
* `--initialize-at-run-time=io.nats.client.NUID`.
or this:
* `--initialize-at-run-time=java.security.SecureRandom`.
* `--initialize-at-run-time=io.nats.client.support.RandomUtils`
* `--initialize-at-run-time=io.nats.client.NUID`.
And if it's all 3, is there an order that matters?
@scottf We are using this setting currently to allow native build:
--initialize-at-run-time=io.nats.client.support.RandomUtil
--initialize-at-run-time=io.nats.client.NUID
--initialize-at-run-time=java.security.SecureRandom
as i recall you need to specify all of them (order does not matter)
Fixed in this PR https://github.com/nats-io/nats.java/pull/1350