{"id":17114592,"url":"https://github.com/nithanim/quarkus-dynamodb-enhanced","last_synced_at":"2025-10-23T19:08:11.890Z","repository":{"id":40572978,"uuid":"386437839","full_name":"Nithanim/quarkus-dynamodb-enhanced","owner":"Nithanim","description":"Quarkus extension that makes the aws dynamodb enhanced client compatible with quarkus and native-image.","archived":false,"fork":false,"pushed_at":"2022-09-11T16:00:15.000Z","size":53,"stargazers_count":12,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-26T21:11:19.459Z","etag":null,"topics":["aws-dynamodb","aws-sdk-java-v2","dynamodb","java","quarkus"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nithanim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-07-15T22:16:41.000Z","updated_at":"2024-11-13T09:35:58.000Z","dependencies_parsed_at":"2022-07-14T03:40:41.722Z","dependency_job_id":null,"html_url":"https://github.com/Nithanim/quarkus-dynamodb-enhanced","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nithanim%2Fquarkus-dynamodb-enhanced","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nithanim%2Fquarkus-dynamodb-enhanced/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nithanim%2Fquarkus-dynamodb-enhanced/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nithanim%2Fquarkus-dynamodb-enhanced/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nithanim","download_url":"https://codeload.github.com/Nithanim/quarkus-dynamodb-enhanced/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248661721,"owners_count":21141451,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws-dynamodb","aws-sdk-java-v2","dynamodb","java","quarkus"],"created_at":"2024-10-14T17:19:25.789Z","updated_at":"2025-10-23T19:08:06.858Z","avatar_url":"https://github.com/Nithanim.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a quarkus extension that attempts to make the dynamodb enhanced library compatible with native image (and quarkus).\n\nIf you do not have quarkus, you can just strip all the quarkus stuff out.\nPretty much just use the classes in the \"runtime\" module.\n\nThis extension specifically fixes the following problems:\n* `ClassDefNotFoundError` when running tests (with quarkus)\n* GraalVM Native-image runtime/reflection issues\n\nThe fix for quarkus-tests uses the same workaround as for the native-image.\nThere is no other way (from my point of view) for native-image (except full support for dynamically generated lambdas).\nBut for jvm mode it has a slight performance-hit in contrast to the lambdas.\n\nA detection is in place such that the fix for tests is only applied when in \"test\"-profile.\nFor normal builds (like prod) this fix is not applied so you keep the full `LambdaMetafactory` performance.\n\nEverything should just work out-of-the box ❤️\n\nNote: The workaround for tests can be removed when https://github.com/aws/aws-sdk-java-v2/issues/2604 is fixed.\n\n## What does it do technically\n\nIn short, the AWS SDK tries to create and load lambdas at runtime but since the native-image is pre-compiled, this is not possible.\n\nInstead, the predecessor, MethodHandles are used instead which are fully supported.\n\nThere is also an additional bugfix for quarkus in there that deals with multiple classloaders when running tests. Although this is a separate issue, the same fix described above conveniently fixed this too.\n\nAs a bonus, since the `DynamoDbBean`s are accessed by reflection, they are automatically registered for this purpose in the GraalVM native-image generation.\nThis means that you do not need to add `@RegisterForReflection` to all your beans.\n\nIf want to know even more about the technical side, feel free to dive into the code.\nYou can find extensive information in the javadoc (and of course the code itself)!\n\n## Can I use it in production?\n\nProbably. You certainly have to decide for yourself if you want to take the risk. See the disclaimer in the license!\n\nI just researched and spent weeks trying to fix all problems because I needed it for work. (However, there is no association! I did that in my free time!)\n\nWe deployed it in production and has been running happily since!\n\n## Usage\n\n### pom.xml\n\nTo use this extension, just import it as a normal dependency:\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eme.nithanim.quarkus\u003c/groupId\u003e\n    \u003cartifactId\u003equarkus-amazon-dynamodb-enhanced\u003c/artifactId\u003e\n    \u003cversion\u003e1.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\nNote:\nFor Quarkus below version 2.6 (which introduced Quarkiverse) use version `1.0.1`.\n\nNote/Warning:\nThis extension is built against a specific quarkus version (see pom.xml properties).\nSince you are probably using the quarkus version bom in your project like so:\n```xml\n\u003cdependencyManagement\u003e\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eio.quarkus.platform\u003c/groupId\u003e\n            \u003cartifactId\u003equarkus-bom\u003c/artifactId\u003e\n            \u003cversion\u003e${quarkus.platform.version}\u003c/version\u003e\n            \u003ctype\u003epom\u003c/type\u003e\n            \u003cscope\u003eimport\u003c/scope\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eio.quarkus.platform\u003c/groupId\u003e\n        \u003cartifactId\u003equarkus-amazon-services-bom\u003c/artifactId\u003e\n        \u003cversion\u003e${quarkus.platform.version}\u003c/version\u003e\n        \u003ctype\u003epom\u003c/type\u003e\n        \u003cscope\u003eimport\u003c/scope\u003e\n    \u003c/dependency\u003e\n\u003c/dependencyManagement\u003e\n```\nthe versions defined there take precedence over the ones defined in this extension.\n\nIn any case, you can always exclude the dependencies and add them to your project directly (like every other quarkus dependency you have added).\nIt might look something like this:\n```xml\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eme.nithanim.quarkus\u003c/groupId\u003e\n        \u003cartifactId\u003equarkus-amazon-dynamodb-enhanced\u003c/artifactId\u003e\n        \u003cversion\u003e1.0.1\u003c/version\u003e\n        \u003cexclusions\u003e\n            \u003cexclusion\u003e\n                \u003cgroupId\u003eio.quarkus\u003c/groupId\u003e\n                \u003cartifactId\u003equarkus-arc\u003c/artifactId\u003e\n            \u003c/exclusion\u003e\n            \u003cexclusion\u003e\n                \u003cgroupId\u003eio.quarkus\u003c/groupId\u003e\n                \u003cartifactId\u003equarkus-amazon-dynamodb\u003c/artifactId\u003e\n            \u003c/exclusion\u003e\n            \u003cexclusion\u003e\n                \u003cgroupId\u003esoftware.amazon.awssdk\u003c/groupId\u003e\n                \u003cartifactId\u003edynamodb-enhanced\u003c/artifactId\u003e\n            \u003c/exclusion\u003e\n        \u003c/exclusions\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eio.quarkus\u003c/groupId\u003e\n        \u003cartifactId\u003equarkus-amazon-dynamodb\u003c/artifactId\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003esoftware.amazon.awssdk\u003c/groupId\u003e\n        \u003cartifactId\u003edynamodb-enhanced\u003c/artifactId\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\nThen maven will pull the versions that are defined via your quarkus import.\n\n### Config\n\nCurrently, there is only a single config property for `application.properties:\n```properties\nquarkus.dynamodb-enhanced.jvm-transformation=true\n```\nIt controls whether the fix for the ClassLoader problems for tests should be applied.\nIt is there just in case that there are any problems with the detection of the current build environment.\nIF there are problems you can set it specifically for prod to `false` to not give up any speed at runtime.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnithanim%2Fquarkus-dynamodb-enhanced","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnithanim%2Fquarkus-dynamodb-enhanced","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnithanim%2Fquarkus-dynamodb-enhanced/lists"}