AMAZON QLDB

Deprecated — Amazon QLDB was retired by AWS in July 2025.

This post remains for historical reference and may contain outdated APIs/links. Consider alternatives for auditability and immutability (e.g., Amazon Aurora with audit logging, DynamoDB + Streams/event sourcing, OpenSearch for tamper‑evident logs, or third‑party ledger databases).

Choose based on your consistency, verification, and operational requirements.

What was Amazon QLDB?

Amazon Quantum Ledger Database (QLDB) was a fully managed ledger database that provided:

Common use cases included systems of record and audit trails for financial transactions, supply chain events, and other domains requiring data integrity and change history.

Key concepts:


AMAZON QLDB

Code Snippet

sudo yum -u update
sudo yum -y install java-1.8.0-openjdk-dev
sudo yum -y install java-1.8.0-openjdk-devel
udo update-alternatives --config javac

java -version
javac -version

curl -s "https://get.sdkman.io" | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install gradle

gradle -version

Gradle stuff

mkdir lab2cd lab2

gradle init --type java-application

build.gradle

dependencies {    
    // This dependency is used by the application.    
    implementation 'com.google.guava:guava:29.0-jre'    
    // Use JUnit test framework    
    testImplementation 'junit:junit:4.13'    
    compile group: 'com.amazon.ion', name: 'ion-java', version: '1.6.1'    
    compile group: 'software.amazon.qldb', name: 'amazon-qldb-driver-java', version: '2.0.0-rc.1'    
    compile group: 'com.amazonaws', name: 'aws-java-sdk-qldb', version: '1.11.785'
}

mavenCentral()

Application.java

package lab2;

public class App {
    public static void main(String[] args) {        
         System.out.println("Let's play with Ion!");    
    }
}

The code

package lab2;

import java.util.Iterator;

import com.amazon.ion.*;
import com.amazon.ion.system.*;
import com.amazon.ion.util.*;
import software.amazon.awssdk.services.qldbsession.*;
import software.amazon.awssdk.services.qldbsession.model.OccConflictException;
import software.amazon.qldb.*;
import software.amazon.qldb.exceptions.TransactionAbortedException;
 
public class SlowUpdate {
    public static void main(String[] args) throws Exception {
        QldbSessionClientBuilder sessionClientBuilder = QldbSessionClient.builder();
        //RetryPolicy retryPolicy = RetryPolicy.builder().maxRetries(3).build();
        RetryPolicy retryPolicy = RetryPolicy.none();
        QldbDriver driver = QldbDriver.builder()
                .ledger("ion-lab")
                .sessionClientBuilder(sessionClientBuilder)
                .transactionRetryPolicy(retryPolicy)
                .build();
         try {
         driver.execute(txn -> { 
             Result result = txn.execute("SELECT * FROM myTable");
             Iterator<IonValue> iterator = result.iterator();
             while (iterator.hasNext()) {
                 IonValue ionValue = iterator.next();
                 System.out.println(ionValue);
             }
            });
         } catch (TransactionAbortedException e) {
             System.out.println("Transaction aborted: " + e.getMessage());
         } catch (OccConflictException e) {
             System.out.println("Occ conflict: " + e.getMessage());
         }
    }
}

References