///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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.
///////////////////////////////////////////////////////////////

[[library-uid, UID Library]]
= UID =

[devstatus]
--------------
source=libraries/uid/dev-status.xml
--------------

This library provides Services to easily generate unique identifiers and sequences of numbers.

include::../../build/docs/buildinfo/artifact.txt[]

== Unique Identifiers ==

Assembly is done using the provided Assembler:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/polygene/library/uid/DocumentationSupport.java
tag=uuid-assembly
----

Usage is quite simple:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/polygene/library/uid/DocumentationSupport.java
tag=uuid-usage
----



== Sequencing ==

Sequencing is used to automatically generate a sequence of numbers.

The algorithm is that `currentSequenceValue` is the number that was last returned in a `newSequenceValue` call, and will
initially be zero. Persisting Sequencing services defines "initially" as the first run ever, as subsequent starts may
retrieve the `currentSequenceValue` from an EntityStore.


=== Transient Sequences ===

Assembly is done using the provided Assembler:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/polygene/library/uid/DocumentationSupport.java
tag=seq-assembly
----

Usage is quite simple:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/polygene/library/uid/DocumentationSupport.java
tag=seq-usage
----

=== Persisted Sequences ===

Assembly is done using the provided Assembler:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/polygene/library/uid/DocumentationSupport.java
tag=perseq-assembly
----

Usage is quite simple:

[snippet,java]
----
source=libraries/uid/src/test/java/org/apache/polygene/library/uid/DocumentationSupport.java
tag=seq-usage
----

