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;
* 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);
}
+ /** With a random node id. */
+ public ConcurrentUuidFactory(long initialClockRange) {
+ this(initialClockRange, NodeIdSupplier.randomNodeId());
+ }
+
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);
+ byte[] defaultNodeId = NodeIdSupplier.toNodeIdBytes(nodeId, offset);
long nodeIdBase = NodeIdSupplier.toNodeIdBase(defaultNodeId);
setNodeIdSupplier(() -> nodeIdBase, initialClockRange);
}
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;
}