Giter Site home page Giter Site logo

aws-samples / amazon-qldb-dmv-sample-java Goto Github PK

View Code? Open in Web Editor NEW
26.0 13.0 24.0 476 KB

A DMV based example application which demonstrates best-practices for using QLDB & the QLDB Driver for Java.

Home Page: https://aws.amazon.com/qldb/

License: MIT No Attribution

Java 100.00%
amazon-qldb sample

amazon-qldb-dmv-sample-java's Introduction

Amazon QLDB Java DMV Sample App

license AWS Provider

The samples in this project demonstrate several uses of Amazon QLDB.

For our tutorial, see Java and Amazon QLDB.

Requirements

Basic Configuration

See Accessing Amazon QLDB for information on connecting to AWS.

See Setting Region page for more information on using the AWS SDK for Java. You will need to set a region before running the sample code.

Java 8 and Gradle

The examples are written in Java 8 using the Gradle build tool. Java 8 must be installed to build the examples, however the Gradle wrapper is bundled in the project and does not need to be installed. Please see the link below for more detail to install Java 8 and information on Gradle:

Running the Sample code

The sample code creates a ledger with tables and indexes, and inserts some documents into those tables, among other things. Each of the examples in this project can be run in the following way:

Windows:

gradlew run -Dtutorial=CreateLedger

Unix:

./gradlew run -Dtutorial=CreateLedger

The above example will build the CreateLedger class with the necessary dependencies and create a ledger named: vehicle-registration. You may run other examples after creating a ledger.

Samples

Below is a list of the sample applications included in this repository with the recommended order of execution.

Setting up the test ledger

  • CreateLedger
  • ListLedgers
  • DescribeLedger
  • ConnectToLedger
  • CreateTable
  • CreateIndex
  • ConnectToLedger: Run it again to see the created tables.
  • InsertDocument
  • ScanTable

Transaction management, PartiQL queries examples and History

  • AddSecondaryOwner
  • DeregisterDriversLicense
  • FindVehicles
  • RegisterDriversLicense
  • RenewDriversLicense
  • TransferVehicleOwnership
  • DeregisterDriversLicense
  • QueryHistory
  • InsertIonTypes

Exporting data

  • ExportJournal

  • ListJournalExports

  • DescribeJournalExport

    Note: To execute this test, you need to pass the ExportId that will be in the output of ListJournalExports. You can execute the test like this:

    ./gradlew run -Dtutorial=DescribeJournalExport --args="<Export Id obtained from the output of ListJournalExports>"	

Verifying data

  • GetRevision
  • GetDigest
  • GetBlock
  • ValidateQldbHashChain

Other Ledger management operations

  • TagResource
  • DeletionProtection
  • DeleteLedger

Documentation

Javadoc is used for documentation. You can generate HTML locally with the following:

mvn site

It will generate the Javadoc for public members (defined in ) using the given stylesheet (defined in ), and with an help page (default value for nohelp is true).

mvn javadoc:javadoc

It will generate the Javadoc for private members (defined in ) using the stylesheet (defined in ), and with no help page (defined in ).

Please see Javadoc usage.

Security

See CONTRIBUTING for more information.

License

This library is licensed under the Apache 2.0 license.

amazon-qldb-dmv-sample-java's People

Contributors

allimn avatar amzn-paunort avatar battesonb avatar butleragrant avatar byronlin13 avatar danieledwardknudsen avatar dependabot[bot] avatar dominitio avatar guyilin-amazon avatar jpeddicord avatar justing-bq avatar othonrsanchez avatar plasmaintec avatar saumehta9 avatar simonz-bq avatar yohanmartin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

amazon-qldb-dmv-sample-java's Issues

Unused methods in ListJournalExports

Nothing major, but in the ListJournalExports file, there are two methods that are unused:

  • public static List<JournalS3ExportDescription> listExports(final String name, final String nextToken)
  • public static List<JournalS3ExportDescription> listExports()

I can submit a quick PR that removes these unused methods to remove the noise from the code as there are three overloaded listExports methods.

C

Unused return value of listExports method in ListJournalExports

In ListJournalExports there three overloaded listExports functions, issue #7 addresses removing the 2 unused ones.

This issue will focus more on removing the need to return a value from the one used listExports function.

I suggest just replacing the return List<JournalS3ExportDescription> with void and keeping the printing of the exports within the listExports method.

Can do in a quick PR if agreed to address.

C

Block transactionInfo hash is not contained in the QLDB block entries hash list when calling ValidateQldbHashChain

When I try to execute a full hash chain validation on all the blocks in a ledger using the ValidateQldbHashChain class in the amazon-qldb-dmv-sample-java 2.0 tutorial I get the error: Block transactionInfo hash is not contained in the QLDB block entries hash list.

I believe this is not supposed to be possible as the journal export to S3 is not tampered with in any way.

I've tried this using my local Eclipse environment and also using Cloud9 environment

Would love to hear from you regarding this issue.

Error in `ValidateQldbHashChain` operation after upgrades `jackson-dataformat-ion` to 2.13.1

compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-ion', version: '2.12.6'

If the jackson-dataformat-ion dependency is upgraded to version 2.13.1 from current version 2.12.6, it will throw exception when performing ValidateQldbHashChain operation. It might because some changes in 2.13.1 version are not backward-compatible. We should not upgrade the jackson-dataformat-ion dependency until a new working version is released in the future.

Full stack trace when performing ValidateQldbHashChain operation with jackson-dataformat-ion 2.13.1

2022-02-22 12:50:39.057 ERROR --- [           main] s.a.q.t.ValidateQldbHashChain            : Unable to perform hash chain verification.
java.lang.IllegalStateException: com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `software.amazon.qldb.tutorial.qldb.QldbRevision`, problem: 0
Exception in thread "main"  at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: software.amazon.qldb.tutorial.qldb.JournalBlock["revisions"]->java.util.ArrayList[0])
java.lang.IllegalStateException: com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `software.amazon.qldb.tutorial.qldb.QldbRevision`, problem: 0
        at software.amazon.qldb.tutorial.JournalS3ExportReader.getJournalBlocks(JournalS3ExportReader.java:177)
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: software.amazon.qldb.tutorial.qldb.JournalBlock["revisions"]->java.util.ArrayList[0])
        at software.amazon.qldb.tutorial.JournalS3ExportReader.readExport(JournalS3ExportReader.java:119)
        at software.amazon.qldb.tutorial.JournalS3ExportReader.getJournalBlocks(JournalS3ExportReader.java:177)
        at software.amazon.qldb.tutorial.ValidateQldbHashChain.main(ValidateQldbHashChain.java:112)
        at software.amazon.qldb.tutorial.JournalS3ExportReader.readExport(JournalS3ExportReader.java:119)
Caused by: com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `software.amazon.qldb.tutorial.qldb.QldbRevision`, problem: 0
        at software.amazon.qldb.tutorial.ValidateQldbHashChain.main(ValidateQldbHashChain.java:112)
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: software.amazon.qldb.tutorial.qldb.JournalBlock["revisions"]->java.util.ArrayList[0])
Caused by: com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `software.amazon.qldb.tutorial.qldb.QldbRevision`, problem: 0
        at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
 at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: software.amazon.qldb.tutorial.qldb.JournalBlock["revisions"]->java.util.ArrayList[0])
        at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:2047)
        at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
        at com.fasterxml.jackson.databind.DeserializationContext.handleInstantiationProblem(DeserializationContext.java:1400)
        at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:2047)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapInstantiationProblem(BeanDeserializerBase.java:1866)
        at com.fasterxml.jackson.databind.DeserializationContext.handleInstantiationProblem(DeserializationContext.java:1400)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:520)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:351)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapInstantiationProblem(BeanDeserializerBase.java:1866)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:520)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
        at com.fasterxm at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:351)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:355)
l.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:355)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
        at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
        at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:563)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:563)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:438)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:438)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:351)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:351)
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:184)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
        at com.fasterxml.jackson.dataformat.ion.IonObjectMapper.readValue(IonObjectMapper.java:328)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
        at software.amazon.qldb.tutorial.JournalS3ExportReader.getJournalBlocks(JournalS3ExportReader.java:175)
        at com.fasterxml.jackson.dataformat.ion.IonObjectMapper.readValue(IonObjectMapper.java:328)
        ... 2 more
        at software.amazon.qldb.tutorial.JournalS3ExportReader.getJournalBlocks(JournalS3ExportReader.java:175)
Caused by: java.lang.IndexOutOfBoundsException: 0
        ... 2 more
        at com.amazon.ion.impl.lite.IonContainerLite.get_child(IonContainerLite.java:663)
Caused by: java.lang.IndexOutOfBoundsException: 0
        at com.amazon.ion.impl.lite.IonContainerLite.get(IonContainerLite.java:151)
        at com.amazon.ion.impl.lite.IonContainerLite.get_child(IonContainerLite.java:663)
        at com.fasterxml.jackson.dataformat.ion.IonParser.getIonValue(IonParser.java:424)
        at com.amazon.ion.impl.lite.IonContainerLite.get(IonContainerLite.java:151)
        at com.fasterxml.jackson.dataformat.ion.IonParser.getEmbeddedObject(IonParser.java:448)
        at com.fasterxml.jackson.dataformat.ion.IonParser.getIonVal     at com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueDeserializer.getNullValue(IonValueDeserializer.java:61)
ue(IonParser.java:424)
        at com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueDeserializer.getNullValue(IonValueDeserializer.java:32)
        at com.fasterxml.jackson.dataformat.ion.IonParser.getEmbeddedObject(IonParser.java:448)
        at com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueDeserializer.getNullValue(IonValueDeserializer.java:61)
        at com.fas      at com.fasterxml.jackson.dataformat.ion.ionvalue.IonValueDeserializer.getNullValue(IonValueDeserializer.java:32)
terxml.jackson.databind.JsonDeserializer.getAbsentValue(JsonDeserializer.java:350)
        at com.fasterxml.jackson.databind.JsonDeserializer.getAbsentValue(JsonDeserializer.java:350)
        at com.fasterxml.jackson.databind.deser.impl.PropertyValueBuffer._findMissing(PropertyValueBuffer.java:203)
        at com.fasterxml.jackson.databind.deser.impl.PropertyValueBuffer._findMissing(PropertyValueBuffer.java:203)
        at com.fasterxml.jackson.databind.deser.impl.PropertyValueBuffer.getParameters(PropertyValueBuffer.java:158)
        at com.fasterxml.jackson.databind.deser.impl.PropertyValueBuffer.getParameters(PropertyValueBuffer.java:158)
        at com.fasterxml.jackson.databind.deser.ValueInstantiator.createFromObjectWith(ValueInstantiator.java:288)
        at com.fasterxml.jackson.databind.deser.ValueInstantiator.createFromObjectWith(ValueInstantiator.java:288)
        at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.build(PropertyBasedCreator.java:202)
        at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.build(PropertyBasedCreator.java:202)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:518)
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:518)
        ... 18 more
        ... 18 more

> Task :run FAILED

FAILURE: Build failed with an exception.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.