X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.uuid%2Fsrc%2Forg%2Fargeo%2Fapi%2Fuuid%2FConcurrentUuidFactory.java;h=130a90a84bfb49be449539bd939fc2cc696bd742;hb=55d88fba80cec198a0f11ba7545e19878c51fc5e;hp=15245b2932f50074f374b8156b06d696ee77cf8a;hpb=593a4eabb76b74cd382ecf3f181d57abe0d643f9;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.uuid/src/org/argeo/api/uuid/ConcurrentUuidFactory.java b/org.argeo.api.uuid/src/org/argeo/api/uuid/ConcurrentUuidFactory.java index 15245b293..130a90a84 100644 --- a/org.argeo.api.uuid/src/org/argeo/api/uuid/ConcurrentUuidFactory.java +++ b/org.argeo.api.uuid/src/org/argeo/api/uuid/ConcurrentUuidFactory.java @@ -1,9 +1,5 @@ package org.argeo.api.uuid; -import static java.lang.System.Logger.Level.DEBUG; -import static java.lang.System.Logger.Level.WARNING; - -import java.lang.System.Logger; import java.security.DrbgParameters; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; @@ -14,22 +10,27 @@ import java.util.UUID; * A configurable implementation of an {@link AsyncUuidFactory}, which can be * used as a base class for more optimised implementations. * - * @see https://datatracker.ietf.org/doc/html/rfc4122 + * @see "https://datatracker.ietf.org/doc/html/rfc4122" */ public class ConcurrentUuidFactory extends AbstractAsyncUuidFactory implements TypedUuidFactory { - private final static Logger logger = System.getLogger(ConcurrentUuidFactory.class.getName()); +// private final static Logger logger = System.getLogger(ConcurrentUuidFactory.class.getName()); + + public ConcurrentUuidFactory(long initialClockRange, byte[] nodeId) { + this(initialClockRange, nodeId, 0); + } - public ConcurrentUuidFactory(byte[] nodeId) { - this(nodeId, 0); + /** With a random node id. */ + public ConcurrentUuidFactory(long initialClockRange) { + this(initialClockRange, NodeIdSupplier.randomNodeId()); } - public ConcurrentUuidFactory(byte[] nodeId, int offset) { + public ConcurrentUuidFactory(long initialClockRange, byte[] nodeId, int offset) { Objects.requireNonNull(nodeId); if (offset + 6 > nodeId.length) throw new IllegalArgumentException("Offset too big: " + offset); byte[] defaultNodeId = toNodeIdBytes(nodeId, offset); long nodeIdBase = NodeIdSupplier.toNodeIdBase(defaultNodeId); - setNodeIdSupplier(() -> nodeIdBase); + setNodeIdSupplier(() -> nodeIdBase, initialClockRange); } /** @@ -67,12 +68,14 @@ public class ConcurrentUuidFactory extends AbstractAsyncUuidFactory implements T DrbgParameters.instantiation(256, DrbgParameters.Capability.PR_AND_RESEED, "UUID".getBytes())); } catch (NoSuchAlgorithmException e) { try { - logger.log(DEBUG, "DRBG secure random not found, using strong"); +// logger.log(DEBUG, "DRBG secure random not found, using strong"); secureRandom = SecureRandom.getInstanceStrong(); } catch (NoSuchAlgorithmException e1) { - logger.log(WARNING, "No strong secure random was found, using default"); +// logger.log(WARNING, "No strong secure random was found, using default"); secureRandom = new SecureRandom(); } + } catch (java.lang.NoClassDefFoundError e) {// Android + secureRandom = new SecureRandom(); } return secureRandom; }