This part of the documentation website is obsolete. Please see the new Solution Hub.

Global ID Generator

Author XAP Version Last Updated Reference Download
Shay Hassidim 7.1 Jan 2011


When writing objects into the space, you may need to generate a global unique ID for your space objects. The ID will be used later to fetch the object based on its ID via the readById/readByIds methods, or associate it with another object by placing the object ID as a field value within another object.

GigaSpaces generates a unique global ID when writing new objects using its built-in internal ID generator utility used when enabling the auto-generate ID property. Still, you may want to have your own custom global unique ID generator.


You can download the custom Unique Global ID Generator source code used with this example.

The following example includes a custom global unique ID generator PU and a client side utility. The Unique Global ID Generator features the following:

  • Spring based configured.
  • Store the last generated ID within a space object (IdCounterEntry).
  • Provides range of IDs to a client application. This avoids the need to perform read and update space operations with each generated ID.
  • Provides a numeric ID.
  • Support persisting the IdCounterEntry object within a database. This allows the IdCounterEntry object to be loaded from a database in case the Unique Global ID Generator PU is fully re-started.
  • Once a Unique Global ID Generator is deployed, a IdObjectInitializer is created and generates the IdCounterEntry object within the Unique Global ID Generator space. Only one IdCounterEntry will be created.


Using the ID Generator

To use the ID Generator you should:

  1. Deploy the ID Generator PU using the pu.xml below. You should deploy it using one partition and a backup.
  2. With your application, inject a SpaceBasedIdGenerator Bean. You should have it with every application instance.
  3. With your client application call the following when you need a unique global ID:
SpaceBasedIdGenerator idGenerator;
Integer myNextID = idGenerator.generateId();

The SpaceBasedIdGenerator using Spring Transactions to update the IdCounterEntry object.

The ID Generator Components

The following should be used to enable the ID Generator:

This is ID Generator pu.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""

    <os-core:annotation-support />
    <context:component-scan base-package="com.gigaspaces.idgenerator.pu" />
    <os-core:embedded-space id="IDGeneratoSpace" name="IDGeneratorSpace" />
    <os-core:local-tx-manager id="transactionManager" space="IDGeneratoSpace" />
    <tx:annotation-driven transaction-manager="transactionManager"   />
    <os-core:giga-space id="gigaSpace" space="IDGeneratoSpace" tx-manager="transactionManager"   />

<!-- ========================================================================================================== -->

    <bean id="IdObjectInitializer" class="com.gigaspaces.idgenerator.pu.IdObjectInitializer">
        <property name="initialValue" value="100" />
        <property name="idRange" value="1000" />

    <os-sla:sla number-of-instances="1" max-instances-per-vm="1">


The following should be added to your PU pu.xml used to deploy the client application:

<context:component-scan base-package="com.gigaspaces.idgenerator.client" />

<os-core:space-proxy id="IDGeneratoSpace" name="IDGeneratorSpace" />
<os-core:local-tx-manager id="IDGeneratortransactionManager" space="IDGeneratoSpace" />
<tx:annotation-driven transaction-manager="IDGeneratortransactionManager"   />
<os-core:giga-space id="IDGeneratogigaSpace" space="IDGeneratoSpace" tx-manager="IDGeneratortransactionManager"   />
<tx:annotation-driven transaction-manager="IDGeneratortransactionManager"/>
<bean id="idGenerator" class="com.gigaspaces.idgenerator.client.SpaceBasedIdGenerator"/>