This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-05-03
Channels
- # aleph (7)
- # announcements (6)
- # babashka (34)
- # beginners (5)
- # calva (1)
- # cider (3)
- # clerk (11)
- # clj-http (1)
- # clj-kondo (35)
- # clojars (6)
- # clojure (114)
- # clojure-australia (1)
- # clojure-brasil (2)
- # clojure-europe (73)
- # clojure-hamburg (3)
- # clojure-nl (1)
- # clojure-norway (27)
- # clojure-uk (4)
- # events (3)
- # graalvm (13)
- # gratitude (4)
- # helix (17)
- # hoplon (1)
- # hyperfiddle (65)
- # instaparse (4)
- # jobs-discuss (6)
- # lsp (2)
- # meander (2)
- # rdf (4)
- # re-frame (51)
- # reitit (28)
- # releases (1)
- # sci (20)
- # shadow-cljs (9)
- # tools-deps (4)
- # xtdb (44)
Hello there, I have something that I hope isn't an XY problem relating to holy-lambda, native image, and an aws lambda:thread:
I'm trying to call dynamodb from a native image lambda, and I've gone through faraday (which includes deprecated joda.time and commons-logging which caused issues I couldn't / didn't want to get into) and https://github.com/igrishaev/dynamodb which gave a similar error to one I'm about to paste from the cognitect-aws libraries :
I've added an agent payload for holy-lambda to invoke dynamodb and the agent gives this error (but succeeds) when generating the configs :
Exception in agent-context: #error {
:cause No implementation of method: :-invoke of protocol: #'cognitect.aws.client.protocol/Client found for class: nil
:via
[{:type java.lang.IllegalArgumentException
:message No implementation of method: :-invoke of protocol: #'cognitect.aws.client.protocol/Client found for class: nil
:at [clojure.core$_cache_protocol_fn invokeStatic core_deftype.clj 583]}]
:trace
[[clojure.core$_cache_protocol_fn invokeStatic core_deftype.clj 583]
[cognitect.aws.client.protocol$fn__10680$G__10636__10687 invoke protocol.clj 7]
[cognitect.aws.client.api$invoke invokeStatic api.clj 130]
[bmcgavin.birthday.db.dynamodb$fn__13282 invokeStatic dynamodb.clj 112]
[bmcgavin.birthday.db.dynamodb$fn__13282 invoke dynamodb.clj 112]
[bmcgavin.birthday.db.dynamodb__init load nil 112]
[bmcgavin.birthday.db.dynamodb__init <clinit> nil -1]
[java.lang.Class forName0 Class.java -2]
[java.lang.Class forName Class.java 398]
[clojure.lang.RT classForName RT.java 2212]
[clojure.lang.RT classForName RT.java 2221]
[clojure.lang.RT loadClassForName RT.java 2240]
[clojure.lang.RT load RT.java 449]
[clojure.lang.RT load RT.java 424]
[clojure.core$load$fn__6856 invoke core.clj 6115]
[clojure.core$load invokeStatic core.clj 6114]
[clojure.core$load doInvoke core.clj 6098]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.core$load_one invokeStatic core.clj 5897]
[clojure.core$load_one invoke core.clj 5892]
[clojure.core$load_lib$fn__6796 invoke core.clj 5937]
[clojure.core$load_lib invokeStatic core.clj 5936]
[clojure.core$load_lib doInvoke core.clj 5917]
[clojure.lang.RestFn applyTo RestFn.java 142]
[clojure.core$apply invokeStatic core.clj 669]
[clojure.core$load_libs invokeStatic core.clj 5974]
[clojure.core$load_libs doInvoke core.clj 5958]
[clojure.lang.RestFn applyTo RestFn.java 137]
[clojure.core$apply invokeStatic core.clj 669]
[clojure.core$require invokeStatic core.clj 5996]
[bmcgavin.birthday.db$loading__6737__auto____13264 invoke db.clj 1]
[bmcgavin.birthday.db__init load nil 1]
[bmcgavin.birthday.db__init <clinit> nil -1]
[java.lang.Class forName0 Class.java -2]
[java.lang.Class forName Class.java 398]
[clojure.lang.RT classForName RT.java 2212]
[clojure.lang.RT classForName RT.java 2221]
[clojure.lang.RT loadClassForName RT.java 2240]
[clojure.lang.RT load RT.java 449]
[clojure.lang.RT load RT.java 424]
[clojure.core$load$fn__6856 invoke core.clj 6115]
[clojure.core$load invokeStatic core.clj 6114]
[clojure.core$load doInvoke core.clj 6098]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.core$load_one invokeStatic core.clj 5897]
[clojure.core$load_one invoke core.clj 5892]
[clojure.core$load_lib$fn__6796 invoke core.clj 5937]
[clojure.core$load_lib invokeStatic core.clj 5936]
[clojure.core$load_lib doInvoke core.clj 5917]
[clojure.lang.RestFn applyTo RestFn.java 142]
[clojure.core$apply invokeStatic core.clj 669]
[clojure.core$load_libs invokeStatic core.clj 5974]
[clojure.core$load_libs doInvoke core.clj 5958]
[clojure.lang.RestFn applyTo RestFn.java 137]
[clojure.core$apply invokeStatic core.clj 669]
[clojure.core$require invokeStatic core.clj 5996]
[bmcgavin.birthday.api$loading__6737__auto____3 invoke api.clj 1]
[bmcgavin.birthday.api__init load nil 1]
[bmcgavin.birthday.api__init <clinit> nil -1]
[java.lang.Class forName0 Class.java -2]
[java.lang.Class forName Class.java 398]
[clojure.lang.RT classForName RT.java 2212]
[clojure.lang.RT classForName RT.java 2221]
[clojure.lang.RT loadClassForName RT.java 2240]
[clojure.lang.RT load RT.java 449]
[clojure.lang.RT load RT.java 424]
[clojure.core$load$fn__6856 invoke core.clj 6115]
[clojure.core$load invokeStatic core.clj 6114]
[clojure.core$load doInvoke core.clj 6098]
[clojure.lang.RestFn invoke RestFn.java 408]
[clojure.lang.Var invoke Var.java 384]
[clojure.lang.Util loadWithClass Util.java 251]
[bmcgavin.birthday.api <clinit> nil -1]]}
The error I had with the other dynamodb library was very similar ('no implementation of method for protocol) but about mask
and at runtime.
Oh sorry. This is agent throwing an error. If this throws in agent it means it’s in regular Java process. It’s not directly connected to GraalVM.
Hi! I didn't understand the agent for holy lambda and I think I needed to use that to pre-fetch the masking protocol. No problem with the library itself.
Asking because I've been using that lib with native image in the cloud, and it works
btw, there is another lightweight framework for a binary lambda what you can find useful: https://github.com/igrishaev/lambda