Fork me on GitHub
#graalvm
<
2020-01-24
>
Ashwin Bhaskar04:01:50

Has anyone been able to successfully generate native image using graalvm for a clojure app that uses postgres? I am using postgres -

[org.postgresql/postgresql "42.2.5"]
On running the agent for native image generation I get this huge list of error. Attaching a file.

mikeb02:01:20

Perhaps, try this other postgres driver, I'd be curious to know if it compiles with native-client. https://github.com/impossibl/pgjdbc-ng

Ashwin Bhaskar03:01:55

@U0524F6MV I removed

[org.postgresql/postgresql "42.2.5"]
and added
[com.impossibl.pgjdbc-ng/pgjdbc-ng "0.8.3"]
But I get an exception
Execution error (ClassNotFoundException) at jdk.internal.loader.BuiltinClassLoader/loadClass (BuiltinClassLoader.java:583).
org.postgresql.ds.PGSimpleDataSource

borkdude07:01:40

@ashwinbhskr There is an issue in the postgres jdbc repo here: https://github.com/pgjdbc/pgjdbc/issues/1189

David Pham07:01:09

I know not entirely related to GraalVM, but the logo for Babashka is funny: it is written ba-bash-ka, and if you remove bash, it yields baka, which sounds like the Japanese word for โ€œstupidโ€ xD

๐Ÿ˜‚ 4
Eamonn Sullivan09:01:40

So, just fyi (following up on the question above on Graalvm, native-image and the clj-http lib), it looks like I do need the bells and whistles of clj-http and clj-http-lite isn't enough. Client SSL certificate authentication seems to be either a bell or whistle. I still have a useful Clojure program that does what I want -- I was just hoping to make this util an easily distributable binary image. I'll try to find another util to try this out on.

lvh18:01:03

I put it in my Clojure survey comments box, maybe I wasn't the only one ๐Ÿ˜›

๐Ÿ‘ 4
borkdude19:01:55

I totally forgot mentioning GraalVM in the survey. I'll pay more attention next year

sogaiu19:01:45

darn it i forgot too :(

borkdude19:01:51

@alexmiller :

(def o (Object.))
(def mut (int-array 1))

(defmacro do-parallel [n]
  (let [fut-bindings
        (for [i (range n)
              sym [(symbol (str "fut_" i))
                   `(future (locking o (aset mut 0 (inc (long (aget mut 0))))))]]
          sym)
        fut-names (vec (take-nth 2 fut-bindings))]
    `(let [~@fut-bindings] ;; start all futures
       (doseq [f# ~fut-names] ;; wait for all futures
         @f#))))

(time (dotimes [_ 10000] (do-parallel 100)))

;; (println (aget mut 0))  ;; for checking correctness
(removed f argument and fixed unquote-splice for fut-bindings)

Alex Miller (Clojure team)19:01:00

does this change anything I care about?

borkdude19:01:28

yeah, it was [@fut-bindings] which wasn't correct

borkdude19:01:37

(in the issue)

borkdude19:01:07

it should be [~@fut-bindings]

Alex Miller (Clojure team)19:01:30

ah, I think this is the jira editor messing with stuff

borkdude19:01:43

ok. yeah, I've had that before. one minor point is that do-parallel had an f arg which is now not used anymore, but that's just cosmetic